讯飞星火知识库文档问答Web API的使用(二)

上一篇提到过星火spark大模型,现在有更新到3.0:
给ChuanhuChatGPT 配上讯飞星火spark大模型V2.0(一)

同时又看到有知识库问答的web api,于是就测试了一下。

下一篇是在ChuanhuChatGPT 中单独写一个基于星火知识库的内容。


1 SparkDesk的文档问答

SparkDesk的文档问答模块相关文档与地址:

本篇记录的是通过星火知识库Web API +ChuanhuGPT 的一个实验项目

吐槽一下:

星火文档问答官方开放的代码不咋地,可能没啥人用,拿个半成品就挂官方了?? 讯飞的AI社区官方感觉也不咋运营...

知识库web api整体结构还是简单的,不过跟在线的版本,有一些功能上的阉割:

  • 文档上传
  • 文档总结/摘要
  • 文档问答

知识库API 第一次申请会给1000次额度:

2 代码示例

笔者稍微打包了一下,具体代码放到了我的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

2.1 文档上传+文档总结

官方关于文档总结有两个接口,我就没看懂这俩啥区别。。所以只封装一个进来,与文档上传放在一个类中。

官方文档: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()

其中,注意,

  • 文档上传还是一个个上传比较好,需要记录下fileid,之后对话就是根据这个进行问答;
  • 文档上传可以用URL

2.2 文档对话

这里本来是支持流式输出的,笔者改成了一次性全部输出,是通过global的方式

此时额外学了一下websocket:python中使用websocket调用、获取、保存大模型API

官方文档:ChatDoc

文档对话的参数:

输出参数详情:

若返回 fileRefer 为空,提示 "抱款,在文档中没有找到与提问相关的内容,请尝试换个问题问问吧。"表示提问未匹配到文档内容,可以降低chatExtends.wikiFilterScore以降低匹配阈值,也可以开启chatExtends.sparkWhenWithoutEmbedding用大模型兜底

单轮对话:

复制代码
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

如上进行多轮对话输出

2.3 其他知识库高级功能

星火知识库服务还提供 自定义切分、OCR 识别、文档内容查询、内容相似度检索等功能,如有需要请联系cbg_open_ml@iflytek.com

貌似没理我,暂时没申请到...

相关推荐
dy17177 小时前
element-plus表格默认展开有子的数据
前端·javascript·vue.js
2501_9159184111 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
程序员的世界你不懂11 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技11 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
gnip11 小时前
JavaScript二叉树相关概念
前端
attitude.x12 小时前
PyTorch 动态图的灵活性与实用技巧
前端·人工智能·深度学习
β添砖java12 小时前
CSS3核心技术
前端·css·css3
空山新雨(大队长)13 小时前
HTML第八课:HTML4和HTML5的区别
前端·html·html5
猫头虎-前端技术13 小时前
浏览器兼容性问题全解:CSS 前缀、Grid/Flex 布局兼容方案与跨浏览器调试技巧
前端·css·node.js·bootstrap·ecmascript·css3·媒体