-
Notifications
You must be signed in to change notification settings - Fork 29
Description
写demo的同学写到函数调用就截止了,没有写完多轮连续的函数调用,这些bug如果写完连续调用就会发现。
- 构建函数调用结果时候,消息的role要写tool,而不是function,常量类里面没有,很容易弄错
{ "role": "tool", "tool_call_id": "call_9178724168624357523", "content": "{\"results\":\"\\\"userCode\\\\t\\\\n12900097\\\\t\\\\n\\\"\"}" }
ChatMessage toolMessage = new ChatMessage(); //标准sdk里面的ChatMessageRole.Function是bug,不能用 toolMessage.setRole("tool"); toolMessage.setTool_call_id(“toolid”); toolMessage.setContent("tool results"); results.add(toolMessage);
- 拿到tool执行结果,返回给大模型时候,报错:API 调用参数有误,请检查文档。
我对比了下python代码,应该是arguments参数问题:
这个是java 代码序列化的json结果:
[ { "role": "system", "content": "你是用户查询助手“蜗牛”,你的主要工作是根据用户需求查询和分析用户数据。\n\n按照以下指南操作:\n1 分析用户的需求,如果用户需求不明确,则引导用户提供更多细节信息\n2 和用户确认需求后,根据下面数据库schema,生成sql语句,并调用“执行sql”函数获取执行结果\n3 如果sql执行出错,则检查sql语句再重新执行\n4 根据执行结果回答用户问题\n\n限制:\n1.如果用户需求超过提供数据表的内容,则告知用户没有这部分数据,无法获得问题答案\n2.因为上下文限制,sql最多查询30行\n3. 回复要专业、简洁\n\n参考的数据库schema如下:\n用户表 (kerneluser):\nid (VARCHAR(24), PRIMARY KEY) - id\nloginName (VARCHAR(32)) - 登录名\nuserCode (VARCHAR(8)) - 用户编码\nemail (VARCHAR(64)) - 邮件\nbranchId (VARCHAR(24)) - 默认公司\nrealName (VARCHAR(32)) - 真实姓名\nmobileNo (VARCHAR(32)) - 手机\ndepartmentId (VARCHAR(24)) - 部门ID\nroles (VARCHAR(255)) - 所属角色\nauthorities (LONGTEXT) - 权限\nauthorityGroupIds (LONGTEXT) - 权限组\nuserPicture (VARCHAR(255)) - 头像\nenabled (BIT(1)) - 是否可用\nfailedLogins (INT) - 失败登陆次数\nlockedOutUntil (DATETIME) - 锁定时间\nlastAccess (DATETIME) - 最后登录时间\ndeleted (BIT(1))\ndefaultAuthGroupId (VARCHAR(24)) - 默认权限组\ndef1 (VARCHAR(64)) - 备用字段1\ndef2 (VARCHAR(256)) - 备用字段2\nlastPwdUpdateTime (DATETIME) - 上次密码更新时间\n参考信息:\n-当前时间:2024-11-06 09:46:54 WEDNESDAY\n-当前对话ID:web-socket-default_1_672ac680ddcc4b26229629e4\n-当前用户编码:1001,登录名:admin,姓名管理员/Admin,邮箱:admin@antscity.com\n" }, { "role": "user", "content": "查询下陈X的用户编码" }, { "role": "assistant", "tool_calls": [ { "id": "call_9178724168624357523", "type": "function", "function": { "name": "exec_tool_100002", "arguments": { "sql": "SELECT userCode FROM kerneluser WHERE realName = '陈X'" } } } ] }, { "role": "tool", "tool_call_id": "call_9178724168624357523", "content": "{\"results\":\"\\\"userCode\\\\t\\\\n12900097\\\\t\\\\n\\\"\"}" } ]
这个是python序列化后的结果
[ { "role": "user", "content": "\u5e2e\u6211\u67e5\u8be2\u4ece2024\u5e741\u670820\u65e5\uff0c\u4ece\u5317\u4eac\u51fa\u53d1\u524d\u5f80\u4e0a\u6d77\u7684\u822a\u73ed" }, { "content": null, "role": "assistant", "tool_calls": [ { "id": "call_9178720251612799913", "function": { "arguments": "{\"date\":\"2024-01-20\",\"departure\":\"\u5317\u4eac\",\"destination\":\"\u4e0a\u6d77\"}", "name": "get_flight_number" }, "type": "function", "index": 0 } ] }, { "role": "tool", "content": "{\"flight_number\": \"1234\"}", "tool_call_id": "call_9178720251612799913" }, { "content": "\u6839\u636e\u60a8\u7684\u67e5\u8be2\uff0c\u6211\u5df2\u7ecf\u4e3a\u60a8\u627e\u5230\u4e862024\u5e741\u670820\u65e5\u4ece\u5317\u4eac\u51fa\u53d1\u524d\u5f80\u4e0a\u6d77\u7684\u822a\u73ed\u53f7\uff0c\u5b83\u662f1234\u3002", "role": "assistant", "tool_calls": null } ]
应该是arguments参数提交的是json,python版本提交的string。
底层代码没法绕过去,还请尽快修复,谢谢。