赞
踩
上一篇提到过星火spark大模型,现在有更新到3.0:
给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0(一)
同时又看到有知识库问答的web api,于是就测试了一下。
下一篇是在ChuanhuChatGPT 中单独写一个基于星火知识库的内容。
SparkDesk的文档问答模块相关文档与地址:
本篇记录的是通过星火知识库Web API +ChuanhuGPT 的一个实验项目
吐槽一下:
星火文档问答官方开放的代码不咋地,可能没啥人用,拿个半成品就挂官方了?? 讯飞的AI社区官方感觉也不咋运营…
知识库web api整体结构还是简单的,不过跟在线的版本,有一些功能上的阉割:
知识库API 第一次申请会给1000次额度:
笔者稍微打包了一下,具体代码放到了我的github:SparkDesk_Document_QA:
Document_upload_summary.py
:文档上传 + 文档总结Document_Q_And_A.py
:文档问答使用前需申请一下api key + 安装依赖:
pip install websocket -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install websocket-client -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install requests_toolbelt -i https://pypi.tuna.tsinghua.edu.cn/simple
官方关于文档总结有两个接口,我就没看懂这俩啥区别。。所以只封装一个进来,与文档上传放在一个类中。
官方文档:ChatDoc
文档上传规范:
上传知识库文档数据,目前支持 doc/docx、pdf、md、txt 格式,单文件大小不超过 20MB,不超过 100W 字符。
文档上传参数含义:
文档上传返回参数详情:
文档总结参数请求:
文档总结输出内容:
本地文档上传示例:
APPId = "xxxx" APISecret = "xxxx" dus = Document_Upload_Summary(APPId, APISecret) # 本地文档上传 files = {'file': open('背影.txt', 'rb')} body = { "url": "", "fileName": "背影.txt", "fileType": "wiki", # 固定值 "needSummary": False, "stepByStep": False, "callbackUrl": "your_callbackUrl", } response = dus.upload_files(files,body) if response.json()['code'] == 0: print(f'请求的文件FIleId:{response.json()["data"]["fileId"]}') # 文档总结 fileid = 'xxxx' response = dus.file_summary(fileid) response.json()
其中,注意,
20231207update:
{'flag': True, 'code': 0,'desc': '成功', 'data': None, 'sid': 'xxx'}
但是同一个txt,星火知识库网页版又可以出总结,感觉接口出现了什么问题:
这里本来是支持流式输出的,笔者改成了一次性全部输出,是通过global的方式
此时额外学了一下websocket:python中使用websocket调用、获取、保存大模型API
官方文档:ChatDoc
文档对话的参数:
输出参数详情:
若返回 fileRefer 为空,提示 "抱款,在文档中没有找到与提问相关的内容,请尝试换个问题问问吧。"表示提问未匹配到文档内容,可以降低chatExtends.wikiFilterScore以降低匹配阈值,也可以开启chatExtends.sparkWhenWithoutEmbedding用大模型兜底
此时这里对于fileRefer是有点问题的,接口文档没有标记 下面列表的6
具体代表的是第六页,还是第6个chunk,如果是第6个chunk,那么第6个,是按什么规矩进行划分,每一个chunk是什么,也是没有表述清晰的:
{'xx1': [6], 'xx2': [0],'xx3': [14]}
单轮对话:
APPId = "xxxx" APISecret = "xxxxxx" doc_qa = Document_Q_And_A(APPId, APISecret) # 单轮对话 body = { 'chatExtends' : { "wikiPromptTpl": "请将以下内容作为已知信息:\n<wikicontent>\n请根据以上内容回答用户的问题。\n问题:<wikiquestion>\n回答:", "wikiFilterScore": 65, "temperature": 0.5, 'sparkWhenWithoutEmbedding':False }, "fileIds": [ "xxxxx" ], "messages": [ { "role": "user", "content": "父亲要走的时候,去买了什么东西?" } ] } recep_mesg = doc_qa.chat(body) doc_qa.embellish_message_func(recep_mesg)
其中,
websocket是把一句话流式,一个片段一个片段的输出,embellish_message_func
就是把这些拼装起来;
body中chatExtends
可以不设置,也有默认;fileIds
是之前上传的field,可以支持多个field
embellish_message_func
输出两类内容:
{'43816997a7a44a299d0bfb7c360c5838': [2, 0, 1]}
多轮对话:
# 多轮对话 body = { "fileIds": [ "xxxxxx" ], "messages": [ { "role": "user", "content": "父亲要走的时候,去买了什么东西?" }, { "role": "user", "content": "如何理赔" }, { "role": "assistant", "content": "您好,根据您提供的信息,理赔操作指引如下:\n\n1. 登录小程序,点击“理赔申请”。\n2. 选择对应保单。\n3. 上传理赔相关资料。\n4. 填写发票总金额。\n5. 填写银行账户,需精确到支行。\n6. 点击“提交”成功后,返回“理赔服务”界面,点选“理赔查询”,查看理赔进度和申请记录。\n7. 如有需要,点击“查看详情”,查看理赔详情和金额。\n\n请注意,如有严重既往症员工还请和HR部门及时报备沟通,如未及时报备,保险公司不承担相关责任。同时,索赔资料不齐全导致延迟赔付等问题也需要注意。" }, { "role": "user", "content": "家属有什么福利" } ] } doc_qa.chat(body) recep_mesg
如上进行多轮对话输出
星火知识库服务还提供 自定义切分、OCR 识别、文档内容查询、内容相似度检索等功能,如有需要请联系cbg_open_ml@iflytek.com
貌似没理我,暂时没申请到…
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。