Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Function Calling 执行流程和历史消息结构

Function Calling 执行流程和历史消息结构

作者头像
拓荒者IT
发布于 2025-03-27 23:59:03
发布于 2025-03-27 23:59:03
20700
代码可运行
举报
运行总次数:0
代码可运行

在 function calling(工具调用)的场景中,传递给大语言模型(LLM)的历史消息需要包含完整的对话上下文,包括用户输入、模型生成的工具调用请求(tool_calls),以及工具执行后的返回结果。以下是详细的格式说明和示例:

核心流程与消息结构

  1. 用户提问 → 2. 模型生成工具调用请求 → 3. 工具执行并返回结果 → 4. 模型根据结果生成最终回答

消息历史需要按顺序包含这些步骤,格式如下:

1. 用户提问(User Message)

  • 用户的问题或请求。
  • 格式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "role": "user",
  "content": "What's the weather in Beijing tomorrow?"
}

2. 模型生成工具调用请求(Assistant Message with tool_calls

  • 模型决定调用工具时,返回一个包含 tool_calls 字段的消息,描述需要调用的工具和参数。
  • 关键字段
    • tool_calls: 工具调用列表,每个调用包含唯一 id、工具名称 name 和参数 arguments
  • 格式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "role": "assistant",
  "content": null,
  "tool_calls": [
    {
      "id": "call_abc123",
      "type": "function",
      "function": {
        "name": "get_weather",
        "arguments": "{\"location\": \"Beijing\", \"date\": \"2023-10-05\"}"
      }
    }
  ]
}

3. 工具执行结果(Tool Message)

  • 将工具执行的结果以 tool 角色的消息返回,需关联对应的 tool_call_id
  • 关键字段
    • tool_call_id: 与 tool_calls 中的 id 对应。
    • content: 工具返回的结果(通常是 JSON 字符串或纯文本)。
  • 格式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "role": "tool",
  "content": "{\"temperature\": 22, \"condition\": \"sunny\"}",
  "tool_call_id": "call_abc123"
}

4. 模型生成最终回答(Assistant Message)

  • 模型根据工具返回的结果生成最终回答。
  • 格式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  "role": "assistant",
  "content": "The weather in Beijing tomorrow will be sunny with 22°C."
}

完整示例对话历史

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 用户提问
  {
    "role": "user",
    "content": "What's the weather in Beijing tomorrow?"
  },
// 模型请求调用工具
  {
    "role": "assistant",
    "content": null,
    "tool_calls": [
      {
        "id": "call_abc123",
        "type": "function",
        "function": {
          "name": "get_weather",
          "arguments": "{\"location\": \"Beijing\", \"date\": \"2023-10-05\"}"
        }
      }
    ]
  },
// 工具返回结果
  {
    "role": "tool",
    "content": "{\"temperature\": 22, \"condition\": \"sunny\"}",
    "tool_call_id": "call_abc123"
  },
// 模型生成最终回答
  {
    "role": "assistant",
    "content": "The weather in Beijing tomorrow will be sunny with 22°C."
  }
]

关键注意事项

  1. 顺序必须严格:消息需按时间顺序排列,确保模型能正确理解上下文。
  2. 关联 tool_call_id:工具的返回结果必须与对应的工具调用请求通过 tool_call_id 匹配。
  3. 工具结果格式:工具返回的结果可以是 JSON 字符串或纯文本,但需与模型预期的输入格式一致。
  4. 支持多工具调用:如果模型同时调用多个工具(如 tool_calls 列表有多个条目),需为每个工具调用单独返回对应的 tool 消息。

通过这种方式,模型能够根据完整的对话历史和工具结果生成准确的回答。

历史消息样例(deepseek-v3)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "model": "deepseek-chat",
    "messages": [
        {
            "role": "user",
            "content": "今天是星期几?"
        },
        {
            "role": "assistant",
            "content": "",
            "tool_calls": [
                {
                    "index": 0,
                    "id": "call_0_a762209f-0498-4166-a95c-5b8c5302dcaa",
                    "type": "function",
                    "function": {
                        "name": "get_current_datetime",
                        "arguments": "{}"
                    }
                }
            ]
        },
        {
            "tool_call_id": "call_0_a762209f-0498-4166-a95c-5b8c5302dcaa",
            "role": "tool",
            "content": "2025-03-26 10:16:20 星期三"
        }
    ],
    "stream": false,
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_current_datetime",
                "description": "Get current datetime and day of week"
            }
        }
    ]
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一文带你了解大模型——智能体(Agent)
大语言模型很强大,就像人类的大脑一样拥有思考的能力。如果人类只有大脑,没有四肢,没有工具,是没办法与世界互动的。如果我们能给大模型配备上四肢和工具呢?大模型是不是就会打破次元壁,从数字世界走向现实世界,与现实世界实现梦幻联动呢?
腾讯技术工程官方号
2024/05/29
32.1K2
一文带你了解大模型——智能体(Agent)
OpenAI | Function calling 上手体验
LLM的基本使用方式是 text in -> text out , 输出是 text 。 但是很多时候,我们希望它能以固定的格式输出,以便解析成结构化的数据,传递给后续的处理逻辑。
windealli
2023/11/22
3K1
AI大模型全栈工程师课程笔记 - Function Call
课程学习自 知乎知学堂 https://www.zhihu.com/education/learning
Michael阿明
2023/11/23
1.2K1
聊聊langchain4j的Tools(Function Calling)
本文主要研究一下langchain4j的Tools(Function Calling)
code4it
2025/03/15
3701
聊聊langchain4j的Tools(Function Calling)
实战OpenAI最新开源多智能体框架Swarm
上周五(10 月 11 日),OpenAI 发布了类似 Autogen、Langgraph 和 CrewAI 等多代理系统的 "实验性、教育性 "框架Swarm[1]。所以,Swarm 是一个多智能体框架。OpenAI 声明了这只是探索性的一个框架,并不打算完善上生产,主要目标是为了演示 OpenAI 官方教程《智能体编排:路由与交接(Orchestrating Agents: Routines and Handoffs)[2]》。
AgenticAI
2025/03/18
2330
实战OpenAI最新开源多智能体框架Swarm
元器智能体API调用
“腾讯元器”是基于腾讯混元大模型的一站式智能体制作平台,支持通过下述能力对大模型进行增强:
孟斯特
2024/08/25
1.6K2
元器智能体API调用
快速上手:实现你的第一个 MCP Client
在 MCP Server 开发实战:无缝对接 LLM 和 Elasticsearch 一文中,我们详细介绍了如何利用 MCP Python SDK 编写一个 Elasticsearch MCP 服务器,并通过 Claude Desktop 作为 MCP 客户端进行交互。本文将进一步介绍如何使用 MCP Python SDK 编写一个 MCP 客户端,以便更加灵活地与 MCP 服务器进行通信和集成。本文的完整代码可以在 Github 上找到:https://github.com/cr7258/hands-on-lab/tree/main/ai/claude/mcp/client/elasticsearch-mcp-client-example
Se7en258
2025/05/21
4850
快速上手:实现你的第一个 MCP Client
如何理解 ChatGPT API function calling?
函式呼叫(function calling) 可说是这次ChatGPT API 更新的杀手级更新。所谓函式呼叫,就是让你把外部函式的形状写入ChatGPT API,这样ChatGPT API 就能输出对的格式来呼叫你的函式。让我们透过官方发布的例子来了解:
一个正经的AI
2024/01/22
4610
如何理解 ChatGPT API function calling?
高性能应用服务 HAI - DeepSeek-v3 0324版
本环境预装 DeepSeek-v3 0324版,支持function call,仅支持在高性能应用服务HAI“八卡旗舰型”算力套餐上运行。“八卡旗舰型”算力套餐需开白使用,若有使用需求需提工单进行审核申请。
geru
2025/04/28
1080
深入探讨GPTs和AI Assistant
GPTs 是 OpenAI 在2023年11月发布的新版本,具有可定制性和完成特定任务的强大功能。它提供了一种新的方式来使用ChatGPT,可以让用户根据自己的需求定制化,并与其他用户共享。
腾讯技术工程官方号
2024/01/03
7250
深入探讨GPTs和AI Assistant
大模型缺的脑子,终于在智能体上长好了
智能体是一种通用问题解决器,从软件工程的角度看来,智能体是一种基于大语言模型的,具备规划思考能力、记忆能力、使用工具函数的能力,能自主完成给定任务的计算机程序。
腾讯云开发者
2024/05/28
1.3K0
大模型缺的脑子,终于在智能体上长好了
深入探讨GPTs 和 AI Assistant:技术原理和实践应用
GPTs 是 OpenAI 在2023年11月发布的新版本,具有可定制性和完成特定任务的强大功能。它提供了一种新的方式来使用ChatGPT,可以让用户根据自己的需求定制化,并与其他用户共享。
Don.huang
2023/11/20
5.4K0
OpenAI的多函数调用(Multiple Function Calling)简介
  我在六月份写了一篇关于GPT 函数调用(Function calling) 的博客https://blog.csdn.net/xindoo/article/details/131262670,其中介绍了函数调用的方法,但之前的函数调用,在一轮对话中只能调用一个函数。就在上周,OpenAI在开发者大会上,升级了函数调用的功能,在新的gpt-3.5和gpt-4模型中,可以在单次对话中调用多个函数了,而且在python SDK中也提供了并发函数调用相关的接口,无疑这将大幅减少大语言模型和现实世界之间交互的开发复杂度,接下来就让我用一个具体的示例,带你了解下OpenAI的新特性。   这里假设我需要利用gpt实现一个百度、谷歌、必应三个搜索引擎搜索结果汇总的功能。我现在有以下的几个搜索函数(我们假装已经实现了从分别从百度、谷歌、必应获取搜索结果的逻辑)。
xindoo
2024/08/07
3840
[AI OpenAI-doc] 函数调用 Beta
类似于聊天完成 API,助手 API 支持函数调用。函数调用允许您描述函数给助手 API,并让它智能地返回需要调用的函数及其参数。
从零开始学AI
2024/05/06
3750
[AI OpenAI-doc] 函数调用 Beta
什么你还在自己查阅论文?快用AutoGen自动获取多篇论文并撰写报告
最近需要优化人脸姿态评估模型,往常我需要调研当前业界最新论文,在arxiv上查阅论文,然后到paperwithcode[1]上查看相关算法benchmark上的排名,最后选定论文和模型。今天在deeplearning.ai的课程上看到使用AutoGen自动获取NVIDIA最近一年的股价并撰写一篇股票分析报告的实验,于是突发奇想,我为什么不用AutoGen写一个根据我的需求自动调研最近4年人脸姿态评估论文并撰写一个报告给我呢?这样至少给我节省不少时间,而且最终会给我输出一份中文报告岂不美哉?正所谓Talk is cheap, show me your code,开干!
AgenticAI
2025/03/18
1950
什么你还在自己查阅论文?快用AutoGen自动获取多篇论文并撰写报告
评测腾讯混元大模型,python调用混元生文接口
想丰富腾讯混元python sdk 调用混元大模型的实例。下面介绍python实现混元生文接口ChatCompletions实例。
用户9295575
2024/09/13
5540
机器学习|MCP(Model Context Protocol)实战
MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。 官网的介绍: https://modelcontextprotocol.io/introduction
用户1904552
2025/04/13
7880
机器学习|MCP(Model Context Protocol)实战
26K Star!LLM多智能体AutoGen教程5:函数调用之避免捏造参数
书接上回《26K Star!LLM多智能体AutoGen教程3:我的外包弟弟写代码》,我们使用AutoGen编写一个自动完成代码编写和修改的案例。然而大语言模型生成的代码具有随机性,尤其是比较复杂的功能,或者是非Python类的其他编程的语言时候,尤其是C++,基本上是乱写一通,各种幻觉API。简单的任务已经交给外包小弟了,稍微复杂的功能,还得是我们自己来写。此时,我们就需要LLM的function calling功能。在进入AutoGen的函数调用功能讲解之前,我们先尝试如何使用OpenAI API进行Function calling。
AgenticAI
2025/03/18
1330
26K Star!LLM多智能体AutoGen教程5:函数调用之避免捏造参数
打造企业专属人工智能助理
而在前面介绍React 推理提示的时候讲到了,目前的大语言模型本身不具备任何的执行能力,只具备理解自然语言的能力。
霍格沃兹测试开发Muller老师
2024/08/13
1760
[AI Kimi] Context Caching 正式公测,推动长文本模型降本 90%
Kimi 的上下文缓存(Context Caching)技术,开启了公测。我们一起来看下。
从零开始学AI
2024/07/04
2590
推荐阅读
相关推荐
一文带你了解大模型——智能体(Agent)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验