Skip to content

Function Call的两个bug #51

@cfanlu

Description

@cfanlu

写demo的同学写到函数调用就截止了,没有写完多轮连续的函数调用,这些bug如果写完连续调用就会发现。

  1. 构建函数调用结果时候,消息的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);

  1. 拿到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。
底层代码没法绕过去,还请尽快修复,谢谢。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions