|
|

30精币
如题 求一个带DeepSeek 工具调用(Function Calling)的函数及demo学习学习流程为:用户发送文本(如我的生日啥时候)- deepseek调用工具 get_....... - 客户端接收到函数 查询函数名 参数 - 查询的结果打包到历史记录中 - 再次循环 直到模型不发送函数为止
我遇到的瓶颈为:Function Calling机制理解不熟 一直失败 论坛上找不到带有Function Calling的源码
有4个参数就行 key 聊天记录数组 工具调用json 角色设定
麻烦大佬帮一下 当AI_1返回之后 我如何正确处理 谢谢
search_messages类似子程序直接返回即可
返回(”查询到了“)
#工具调用JSON常量:
[ { "type": "function", "function": { "name": "search_messages", "description": "搜索历史聊天记录,根据关键词、日期范围和数量返回匹配的消息。可用于回忆用户说过的事情、说过的话、提到过的人或事。", "parameters": { "type": "object", "properties": { "keyword": { "type": "string", "description": "要搜索的关键词,例如生日、学校、某次事件" }, "start_date": { "type": "string", "description": "开始日期,格式YYYY-MM-DD HH:MM:SS,为空则不限制开始日期" }, "end_date": { "type": "string", "description": "结束日期,格式YYYY-MM-DD HH:MM:SS,为空则不限制结束日期" }, "limit": { "type": "integer", "description": "最多返回条数,默认10,最大50" }, "mode": { "type": "integer", "description": "搜索模式:0-模糊匹配 1-精确匹配 2-最近N条(此时忽略关键词)" } }, "required": ["keyword"] } } }, { "type": "function", "function": { "name": "get_recent_messages", "description": "获取当前会话最近N条聊天记录,用于理解当前语境,避免失忆。当用户提到“刚刚说的”、“上次说的”等需要结合上下文时,应先调用此工具。", "parameters": { "type": "object", "properties": { "limit": { "type": "integer", "description": "获取最近多少条消息,默认10,最大50" } } } } }]
|
| AI_1 | 文本型 | | |
| 聊天记录 | 文本型 | | | | 角色 | 文本型 | | | | API | 文本型 | | | | 工具定义JSON | 文本型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 协议头 | 文本型 | | | | 返回内容 | 文本型 | | | | json数据 | 文本型 | | | | i | 整数型 | | | | result | 文本型 | | | | 响应状态码 | 整数型 | | | | 分割结果 | 文本型 | | 0 | | 处理后的内容 | 文本型 | | | | 角色名 | 文本型 | | | | 消息内容 | 文本型 | | | | 系统角色内容 | 文本型 | | | | 消息时间 | 文本型 | | |
协议头 = “Content-Type: application/json” + #换行符 协议头 = 协议头 + “Authorization: Bearer ” + API json数据 = “{”json数据 = json数据 + #引号 + “model” + #引号 + “:” + #引号 + “deepseek-chat” + #引号 + “,”json数据 = json数据 + #引号 + “messages” + #引号 + “:[”系统角色内容 = 文本_替换 (角色, , , , #换行符, “\n”)系统角色内容 = 文本_替换 (系统角色内容, , , , “[换行]”, “\n”)json数据 = json数据 + “{”json数据 = json数据 + #引号 + “role” + #引号 + “:” + #引号 + “system” + #引号 + “,”json数据 = json数据 + #引号 + “content” + #引号 + “:” + #引号 + 子文本替换 (系统角色内容, #引号, “\” + #引号, , , 真) + #引号 json数据 = json数据 + “}” 计次循环首 (取数组成员数 (聊天记录 ), i ) 分割结果 = 分割文本 (聊天记录 [i ], “|”, ) 如果真 (取数组成员数 (分割结果 ) ≥ 3 )  角色名 = 分割结果 [1 ]  消息内容 = 分割结果 [2 ]  消息时间 = 分割结果 [3 ]  如果 (角色名 ≠ “AI”)   消息内容 = “[” + 消息时间 + “] ” + 文本_替换 (消息内容, , , , “[换行]”, “\n”, “[动画表情]”, “”)   消息内容 = 文本_替换 (消息内容, , , , “[换行]”, “\n”, “[动画表情]”, “”) json数据 = json数据 + “,{”  json数据 = json数据 + #引号 + “role” + #引号 + “:” + #引号   如果 (角色名 = “AI”)   json数据 = json数据 + “assistant”   json数据 = json数据 + “user” json数据 = json数据 + #引号 + “,”  json数据 = json数据 + #引号 + “content” + #引号 + “:” + #引号   json数据 = json数据 + 子文本替换 (消息内容, #引号, “\” + #引号, , , 真)  json数据 = json数据 + #引号 + “}”  计次循环尾 () json数据 = json数据 + “],” json数据 = json数据 + #引号 + “stream” + #引号 + “:false,”json数据 = json数据 + #引号 + “temperature” + #引号 + “:0.95,”json数据 = json数据 + #引号 + “top_p” + #引号 + “:0.95,”json数据 = json数据 + #引号 + “max_tokens” + #引号 + “:150,”json数据 = json数据 + #引号 + “frequency_penalty” + #引号 + “:2.0,”json数据 = json数据 + #引号 + “presence_penalty” + #引号 + “:1.5” 如果真 (是否为空 (工具定义JSON ) = 假 且 取文本长度 (工具定义JSON ) > 0 ) json数据 = json数据 + “,” + #引号 + “tools” + #引号 + “:” + 工具定义JSON  json数据 = json数据 + “,” + #引号 + “tool_choice” + #引号 + “:” + #引号 + “auto” + #引号 json数据 = json数据 + “}”
返回内容 = 到文本 (编码_Utf8到Ansi_对象 (网页_访问_对象 (“https://api.deepseek.com/v1/chat/completions”, 1, json数据, , , 协议头, , 响应状态码, , , , , , , , , , )) ) 判断 (响应状态码 = 0 ) 返回 (“返回错误”) 判断 (响应状态码 = 400 ) 调试输出 (“请求参数错误,返回内容:” + 返回内容 ) 调试输出 (“发送的JSON:” + json数据 ) 返回 (“请求参数错误”) 判断 (响应状态码 = 401 ) 返回 (“API密钥无效”) 判断 (响应状态码 ≠ 200 ) 返回 (“请求失败,状态码:” + 到文本 (响应状态码 )) 
result = 文本_取出中间文本 (返回内容, “message” + #引号 + “:”, “finish_reason”) 如果真 (result = “”) 返回 (返回内容 ) result = 取文本左边 (result, 倒找文本 (result, “}”, , 假)) 如果真 (取文本右边 (result, 1 ) ≠ “}”) result = result + “}” 返回 (result )
|
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。 友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。 快捷通道:申请荣誉值 →
|