开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 42|回复: 1
收起左侧

[易语言] 求一个deepseek工具调用源码

[复制链接]
结帖率:74% (58/78)
发表于 7 小时前 | 显示全部楼层 |阅读模式   河南省郑州市
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数据 + #引号“}”

计次循环尾 ()
' 假设之前已经拼接到了 "messages": [...] 并以逗号结尾
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数据 + “}”  ' 闭合整个 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)


i支持库列表   支持库注释   
spec特殊功能支持库




回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值

签到天数: 1 天

发表于 1 小时前 | 显示全部楼层   福建省宁德市
OpenAI 格式工具调用完整 POST 结构示例:

POST https://api.openai.com/v1/chat/completions
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

请求体 JSON:
{
  "model": "gpt-4o",
  "messages": [
    {
      "role": "system",
      "content": "你是一个有帮助的助手"
    },
    {
      "role": "user",
      "content": "我的生日是什么时候?"
    }
  ],
  "tools": [
    {
      "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"
            }
          },
          "required": ["keyword"]
        }
      }
    }
  ],
  "tool_choice": "auto",
  "stream": false,
  "temperature": 0.95,
  "top_p": 0.95,
  "max_tokens": 150
}

响应示例:
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1234567890,
  "model": "gpt-4o",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_xxx",
            "type": "function",
            "function": {
              "name": "search_messages",
              "arguments": "{\"keyword\": \"生日\"}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 50,
    "completion_tokens": 20,
    "total_tokens": 70
  }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表