Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【高级编排】实验室预约流程使用fastgpt推荐的模型(FastAI、月之暗面等LLM)可以正确判断调用哪个工具和接口,使用智谱AI时则报错 #1449

Open
6 of 7 tasks
wuxinyun1993 opened this issue May 11, 2024 · 7 comments
Labels
bug Something isn't working

Comments

@wuxinyun1993
Copy link

wuxinyun1993 commented May 11, 2024

例行检查

  • 我已确认目前没有类似 issue
  • 我已完整查看过项目 README,以及项目文档
  • 我使用了自己的 key,并确认我的 key 是可正常使用的
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

你的版本

  • 公有云版本
  • 私有部署版本, 具体版本号: v4.8-alpha2

问题描述, 日志截图
【高级编排】实验室预约流程使用fastgpt推荐的模型(FastAI、月之暗面等LLM)可以正确判断调用哪个工具和接口,使用智谱AI时则报错
image

复现步骤
实验室预约,工具选择节点模型选择智谱AI,然后测试
预期结果
报错:Cannot read properties of undefined (reading 'value')
相关截图
image

@wuxinyun1993 wuxinyun1993 added the bug Something isn't working label May 11, 2024
@nightzjp
Copy link

config.josn配置文件里面好像有个配置,toolchoice,functioncalltoice。看看设置对没对

@romejiang
Copy link

romejiang commented May 11, 2024

工具调用除了chatgpt以外需要 配置以下参数。

      "toolChoice": false,
      "functionCall": false,
      "defaultConfig": {
          "temperature": 0.5,
        "max_tokens": 2048
      }

我测试过的模型:
Nvidia: meta/llama3-70b-instruct // 工具调用可以

deepseek:
deepseek-chat // 工具调用不行,
deepseek-coder // 工具调用可以,速度快,便宜,推荐

@wuxinyun1993
Copy link
Author

toolchoice,functioncalltoice 改了配置之后虽然不报错了,但是还是没办法调用工具

@JinCheng666
Copy link

"toolChoice": false,
      "functionCall": false,

@romejiang 大佬您好,向您请教一下问题。
我用xinference部署了qwen1.5:72b、llama3:70b,使用oneapi接入了fastgpt,聊天和补全都是没问题的,但工具调用一直失败。用同样的大模型,接入dify(选择xinference模式),是可以用工具调用的。
我看您给出了配置文件的示例,"toolChoice": false, "functionCall": false,
按照官方文档对配置文件的描述,您这样配置,大模型会使用提示词模式。我测试了一下效果很差。
我尝试了这几种配置组合,工具调用都没有成功。
"toolChoice": true, "functionCall": true //one-api报错,bad_response_status_code bad response status code 400 (request id: 2024052522532778097880037127142)
"toolChoice": false, "functionCall": true //工具调用有输出,是纯文本,在胡说。
"toolChoice": false, "functionCall": false//走的提示词模式,效果很差。我贴一下问答记录,我付到最后

请问有什么方法,能正常调用qwen1.5:72b、llama3:70b的工具调用能力?

官方文档对配置的介绍:

"toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持)
"functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式),

提示词模式的报错:

System
调用多种工具,获取站点的实时水情数据,或者获取黄河大型水库实时水情信息,都需使用中文回答。
一、当用户获取站点的实时水情数据时,按以下方式执行:
1.首先检索知识库,根据站点名称,获取站址编码。
2.随后获取当前时间,根据用户输入,确定起始和终止的时间范围。
3.最后调用获取实时雨情数据工具,获取站点的实时雨情信息,当code为200时,表示接口成功调用,在返回的data数据中,ss为水势,6标示涨,5表示落,4表示平;date为时间戳,flow为流量,单位为立方米每秒;level为水位,单位为米。

二、当用户获取黄河大型水库实时水情信息时,按以下方式执行:
1.调用获取黄河大型水库实时水情信息工具,获得期望的信息,其中ennm为水库名称;date为时间戳,inflow为水库入流,单位为立方米每秒;level为水库水位,单位为米;outflow为出库流量,单位为立方米每秒
Human

你是一个智能机器人,除了可以回答用户问题外,你还掌握工具的使用能力。有时候,你可以依赖工具的运行结果,来更准确的回答用户。

工具使用了 JSON Schema 的格式声明,其中 toolId 是工具的 description 是工具的描述,parameters 是工具的参数,包括参数的类型和描述,required 是必填参数的列表。

请你根据工具描述,决定回答问题或是使用工具。在完成任务过程中,USER代表用户的输入,TOOL_RESPONSE代表工具运行结果。ASSISTANT 代表你的输出。
你的每次输出都必须以0,1开头,代表是否需要调用工具:
0: 不使用工具,直接回答内容。
1: 使用工具,返回工具调用的参数。

例如:

USER: 你好呀
ANSWER: 0: 你好,有什么可以帮助你的么?
USER: 今天杭州的天气如何
ANSWER: 1: {"toolId":"testToolId",arguments:{"city": "杭州"}}
TOOL_RESPONSE: """
晴天......
"""
ANSWER: 0: 今天杭州是晴天。
USER: 今天杭州的天气适合去哪里玩?
ANSWER: 1: {"toolId":"testToolId2",arguments:{"query": "杭州 天气 去哪里玩"}}
TOOL_RESPONSE: """
晴天. 西湖、灵隐寺、千岛湖……
"""
ANSWER: 0: 今天杭州是晴天,适合去西湖、灵隐寺、千岛湖等地玩。

现在,我们开始吧!下面是你本次可以使用的工具:

"""
[{"toolId":"qFPUK590uyiq","description":"调用“语义检索”和“全文检索”能力,从“知识库”中查找可能与问题相关的参考内容","parameters":{"type":"object","properties":{"userChatInput":{"type":"string","description":"需要检索的内容"}},"required":["userChatInput"]}},{"toolId":"c6MfNozgtABx","description":"获取用户当前时区的时间。","parameters":{"type":"object","properties":{},"required":[]}},{"toolId":"ew9xgB2gk0Vz","description":"获取黄河大型水库实时水情信息","parameters":{"type":"object","properties":{},"required":[]}},{"toolId":"eLXLEqhS013w","description":"获取站点实时水情数据","parameters":{"type":"object","properties":{"hysta":{"type":"string","description":"Hydrometric station ID"},"startDate":{"type":"string","description":"Start date and time for data retrieval"},"endDate":{"type":"string","description":"End date and time for data retrieval"}},"required":["hysta","startDate","endDate"]}}]
"""

下面是正式的对话内容:

USER: 查询黄河大型水库实时水情信息
ANSWER:
1:{"toolId":"ew9xgB2gk0Vz","arguments":{}}
TOOL_RESPONSE: """
{
"result": {
"code": 200,
"data": [
{
"date": 1716595200000,
"ennm": "龙羊峡",
"ennmcd": "BDA00000011",
"inflow": 830,
"level": 2586.65,
"outflow": 1108,
"wq": 190.1
},

@romejiang
Copy link

      "toolChoice": false,
      "functionCall": false,

这个选项非 openai 的接口必须设成false。所以除了openai以外,用其他LLM的API驱动工具调用,必须是“提示词模式”的。

至于效果,你可以调整系统提示词,然后就是换模型。我用的 llama3-70b-instruct 和 deepseek-coder 基本能满足我的要求。

@JinCheng666
Copy link

@romejiang 感谢解答。
非openai,将functionCall设置为true,大模型不调用工具,开始胡说八道。我新提了个issue #1596
我这里纯提示词模式,效果确实不行。。。

@romejiang
Copy link

romejiang commented May 25, 2024

你可以在工具调用的提示词里写:

请不要返回思考或分析的过程,只返回结果。

或者

不要输出 TOOL_RESPONSE。

工具调用的提示词是内置提示词的补充,你可以试着完善它。如果还不行,就换个模型。

还有一点,容易配错,变量需要你设置到api接口里。
1716651447080

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants