大模型工具集成四层架构:识别、协议、执行与实现
大模型工具集成四层架构:识别、协议、执行与实现
AI工具的整体调用流程:
用户问题query—>意图识别(AI模型)—>工具调用—>整合结果—输出答案
(流程图由AI生成,介意勿看)
一、意图识别层面
意图识别,就是如何让AI了解和学习有哪些工具可以调用。当AI识别到对应的用户问题时,让其进行决定是否在给出的工具列表中有需要调用的工具,然后输出对应的工具名称和参数。
在分类类型上,我将其主要分为function calling 和非function calling。
其主要区别是当前模型底层是否有工具数据集的训练,并具有原生的工具识别能力。
1. Function Calling
模型根据用户指令,直接匹配预定义函数或工具并生成结构化参数(如JSON),
主要核心: 模型本身具有工具识别的能力,即该模型的训练中有工具数据集的训练。
目前大多数的AI大模型都其具备function calling能力,在工具识别方面,主要以openapi格式进行参数列表的声明,然后通过接口中tools参数将参数列表给到模型,模型输出结构化的工具参数列表。
2. 非Function Calling
代表模型本身不具备工具识别能力,使用方式是将所有的工具声明和输出格式按照给定的设计规则(如XML,JSON等格式)以严格的prompt形式插入到对应的会话中,然后在AI模型输出时通过特定规则(例如正则表达式或json结构)提取工具名称和参数,然后调用。
3. 工具选择
在工具识别流程上,有一个显著的问题就是工具量多与少的问题。
在工具上选择上: 如何让AI正确识别工具并输出对应的工具参数。
对于小型项目或问题简单并且识别的工具量较少时可以直接将其所有的工具名称和声明一起输送到AI模型,但是如果一旦工具量比较多,那么工具的声明和参数就会导致字符过多,而受AI模型上下文的限制,就会使得AI模型无法进行有效的识别并利用工具。
- 工具数量不多,Function Calling方式或直接嵌入Prompt中,
- Function Calling 方式,将工具列表以接口tools参数一起丢给AI模型,AI模型输出对应的工具参数。
- Prompt Engineering 方式,直接在Prompt中声明工具描述和调用方式以及输出参数示例。 需要精确Prompt的设计。然后利用COT或ReAct模版等按照步骤迭代执行
- 工具数量多,基于工具库与RAG结合,检索器。配置一个外部检索器,返回相关的TOP-K的工具,再结合用户问题+工具的描述和参数输出一起给到AI,让AI进行判定。
二、协议接口层面
也就是工具的数据结构的定义和通信。即工具的声明、参数结构以及通信方式和数据传输的划分与定义。
- MCP
- OpenAI Plugin Protocol
- JSON-RPC
- REST API调用
- GraphQL接口调用
- Webhook机制
1. MCP (Model Context Protocol)
定义: MCP是Claude等大模型用于连接外部工具和数据源的开放协议。
简单理解MCP更是Function call 的延伸和范式升级
功能扩展:MCP解决了Function Call的碎片化问题(如跨平台工具复用、动态上下文管理),可视为其“生态化扩展”
架构革新:MCP引入了客户端-服务器模型、权限控制和任务编排等系统级能力,已超越单纯的函数调用范畴。
其在意图识别方面解决了对AI模型原生能力的解耦性,例如,如果一个AI模型不支持function call 能力,那么也可以依然识别和调用工具。比如按照mcp的设计规范将其注册为工具,然后在根据用户的问题调用工具。
一句话总结:大模型通过 FunctionCalling 表达,我要调用什么工具,Agent 遵循指令执行工具的调用,而 MCP 则是提供了一种统一的工具调用规范。
MCP 并不负责决定使用哪个工具,也不进行任务规划或理解用户意图。这些是 Agent 层面的工作。MCP 只是提供了一个统一的工具接口,成为了产业内认可的工具调用标准协议。
特点:
- 基于JSON-RPC 2.0的双向通信协议
- 支持工具调用、资源访问和提示管理
- 客户端-服务器架构,模型作为客户端
应用场景: 构建与Claude等AI模型集成的工具生态系统。
2. OpenAI Plugin Protocol
定义: OpenAI为ChatGPT等模型设计的插件系统协议。
插件开发人员通过编写manifest 文件和 OpenAPI工具描述文件,指定一个或多个开放的 API Endpoint。这些文件定义了插件的功能,允许 ChatGPT读取这些文件,并调用开发人员定义的 API Server。
核心组件:
- Plugin Manifest (插件清单)
- OpenAPI规范描述
- 认证机制
3. JSON-RPC
定义: 基于JSON的轻量级远程过程调用协议。
- REST API调用
定义: 基于HTTP协议的表现层状态转换架构风格。
设计原则:
- 无状态通信
- 统一接口
- 资源标识
- 表现层操作
5. GraphQL接口调用
定义: 数据查询和操作语言,提供灵活的API查询方式。
核心概念:
- Schema定义
- Query查询
- Mutation修改
- Subscription订阅
6. Webhook机制
定义: HTTP回调机制,允许应用程序在特定事件发生时主动通知其他系统。
工作流程:
- 事件触发
- HTTP POST请求发送
- 接收方处理请求
- 返回响应确认
三、执行模式层面
也就是什么时候调用这个工具,如何组织调用序列,即AI模型识别到问题需要的工具,我应该在什么时候调用它并将调用的结果如何与问题、答案、和完整回复进行组织拼接返回给用户。
- ReAct
- Chain of Thought + Tools
- Plan-and-Execute
- Reflexion
- Tree of Thoughts with Tools
1. ReAct(Reasoning + Action)
核心机制
- 动态决策循环:通过“推理(Thought)→ 行动(Action)→ 观察(Observation)”的闭环流程,模型自主判断何时调用工具并整合结果。
- 工具触发条件:当问题涉及实时数据(如天气、股价)、复杂计算(如百分比)或上下文不足时触发工具调用。
执行流程
- 推理阶段:模型生成自然语言思考(如“需要查询北京天气”),判断是否需要工具。
- 行动阶段:输出结构化工具调用指令(如
Action: WeatherAPI({"city": "北京"})
)。 - 观察阶段:工具返回原始数据(如JSON),模型解析为自然语言(如“北京:晴,25℃”)。
- 结果整合:将观察结果与后续推理结合,循环直至生成最终答案。
技术实现
- LangChain示例:通过
ReActAgent
自动管理循环,支持多工具协同(如先查天气→再计算温差)。 - 错误处理:设定最大迭代次数(如
max_iterations=3
)避免无限循环。
2. Chain of Thought + Tools(CoT + Tools)
核心机制
- 分步推理增强:将问题拆解为逻辑链(如“先算小红苹果数→再算小刚苹果数”),在特定步骤插入工具调用。
- 工具调用时机:当步骤依赖外部数据(如实时信息、专业计算)时触发。
执行流程
- 问题拆解:模型生成分步计划(如“1. 查天气;2. 推荐穿搭”)。
- 工具插入:在步骤1调用天气API,步骤2调用服装推荐模型。
- 结果串联:工具结果作为下一步输入(如天气数据→穿搭建议)。
技术实现
- 提示词工程:通过Few-shot示例引导模型生成带工具调用的推理链。
- LangChain SequentialChain:顺序执行步骤,自动传递中间结果。
核心机制
- 预规划与动态调整:先由规划器(Planner)生成完整任务清单,执行器(Executor)按序调用工具,重规划器(Replanner)根据结果调整计划。
- 适用场景:多步骤复杂任务(如旅行规划需协调航班、酒店、景点)。
执行流程
- 规划阶段:LLM生成初始计划(如“1. 查航班;2. 订酒店;3. 排行程”)。
- 执行阶段:依次调用工具,若某步骤失败(如无航班),触发重规划。
- 结果组织:整合所有工具返回数据(如航班时间+酒店地址),生成最终行程表。
技术优势
- 容错性:通过重规划机制处理工具调用失败或数据冲突。
- 可解释性:完整记录计划调整历史,便于调试。
4. Reflexion
核心机制
- 自我反思优化:在工具调用后,模型评估结果质量(如数据是否完整、逻辑是否合理),决定是否重试或调整策略。
- 关键能力:错误检测(如API返回空数据)与动态策略切换(如换用备用工具)。
执行流程
- 初始执行:调用工具获取结果(如查询数据库)。
- 反思阶段:模型判断结果可信度(如“数据是否覆盖所有条件?”)。
- 调整行动:若不可信,生成新查询参数或切换工具(如从通用搜索→专业数据库)。
应用场景
- 高风险领域:医疗诊断中需多次验证工具返回的检测报告。
5. Tree of Thoughts with Tools(ToT + Tools)
核心机制
- 多路径探索:模型并行生成多条推理路径(如“路径A:先查天气;路径B:先查历史数据”),在每条路径中插入工具调用,最终选择最优路径。
- 优势:解决复杂问题的多样性(如商业决策需多数据源对比)。
执行流程
- 树形展开:针对问题生成多个推理分支,每个分支标记需调用的工具。
- 并行调用:同时执行多个工具请求(如天气API、经济数据API)。
- 路径评估:综合工具结果与逻辑连贯性,选择最佳分支生成最终答案。
技术实现
- LangChain扩展:通过
MultiToolAgent
支持并行工具调用与路径评分。
对比总结
模式 | 调用时机 | 结果组织逻辑 | 适用场景 |
---|---|---|---|
ReAct | 动态决策(实时判断需工具) | 循环整合观察与推理 | 实时交互任务(客服) |
CoT + Tools | 预拆解步骤中插入工具 | 线性串联中间结果 | 分步明确的流程(数学解题) |
Plan-and-Execute | 预规划完整工具序列 | 全局调整后统一输出 | 多子系统协作(旅行规划) |
Reflexion | 工具调用后反思 | 选择性重试或切换工具 | 高精度要求(医疗、金融) |
ToT + Tools | 多路径中并行调用工具 | 评估后选择最优路径 | 开放性问题(商业决策) |
技术趋势:
- 融合模式:如ReAct + Reflexion增强鲁棒性,Plan-and-Execute + ToT处理超复杂任务。
- 框架支持:LangChain、AutoGen等已集成多种模式,开发者可灵活组合。
四、底层技术实现
就是在工具调用时如何正确调用工具,是通过server服务器还是通过代码执行还是通过沙盒隔离的形式调用工具。
- Code generation and execution
- Sandboxing and isolation
- Streaming execution
- Parallel tool execution
1. Code Generation and Execution(代码生成与执行)
核心机制
- 动态代码生成
AI模型根据用户需求生成可执行代码(如Python、SQL),通常通过以下方式执行:- 本地代码执行:直接调用解释器(如Python的
exec()
),但需严格限制权限以避免安全风险。 - 远程服务调用:将生成的代码发送至专用服务器执行(如GitHub Copilot的本地推理模式),返回结果。
- 函数封装:通过
Function Calling
将代码逻辑预定义为工具函数,由系统动态调用(如LangChain的PythonTools
)。
- 本地代码执行:直接调用解释器(如Python的
技术实现
- LangChain示例:
风险控制:通过沙箱隔离或静态分析(如Bandit)检测恶意代码。from langchain.tools import PythonTools tools = [PythonTools()] # 允许Agent执行生成的Python代码 agent.run("计算斐波那契数列前10项") # 模型生成代码→工具执行→返回结果
应用场景
- 快速原型开发:生成API集成代码并直接测试。
- 数据分析:动态生成SQL查询,在隔离数据库中执行。
2. Sandboxing and Isolation(沙箱与隔离)
核心机制
- 资源隔离:通过容器化(Docker)或轻量级沙箱(WASM)限制工具调用的资源访问权限,防止系统污染或数据泄露。
- 权限控制:
- 文件系统:仅允许读写临时目录(如Docker的
tmpfs
挂载)。 - 网络:禁用或限制白名单访问(如Riza沙箱的网络隔离策略)。
- 系统调用:过滤危险调用(如
os.system
)。
- 文件系统:仅允许读写临时目录(如Docker的
技术实现
- Pyodide(WASM沙箱):
from pyodide import runPython result = runPython("print(1+1)") # 在浏览器隔离环境中执行代码
- Docker容器:
优势:支持多语言隔离,适合企业级部署。docker run --rm -v /tmp:/workspace --network none python:3.9 script.py
应用场景
- 不可信代码执行:用户提交的代码需在沙箱中运行(如在线编程教育平台)。
- 安全敏感工具:金融数据查询、医疗记录处理等。
3. Streaming Execution(流式执行)
核心机制
- 分块处理:将工具调用结果分块返回(如逐行读取数据库查询结果),减少用户等待时间。
- 实时反馈:通过WebSocket或Server-Sent Events(SSE)推送中间结果(如日志输出)。
技术实现
- LangChain流式输出:
底层依赖:工具需支持生成器模式(如Python的from langchain.callbacks import StreamingStdOutCallbackHandler agent.run("生成长篇报告", callbacks=[StreamingStdOutCallbackHandler()])
yield
)或异步IO。
应用场景
- 长耗时任务:大文件处理、复杂计算(如机器学习模型训练)。
- 交互式调试:实时显示代码执行日志。
4. Parallel Tool Execution(并行工具执行)
核心机制
- 多线程/协程:同时调用多个独立工具(如同时查询天气和交通数据),提升效率。
- 依赖管理:通过DAG(有向无环图)定义工具间依赖关系,动态调度(如Airflow集成)。
技术实现
- LangChain并行调用:
限制:避免资源竞争(如数据库连接池耗尽)。from langchain.agents import Tool from concurrent.futures import ThreadPoolExecutordef parallel_call(tools, inputs):with ThreadPoolExecutor() as executor:results = list(executor.map(lambda t: t.func(**inputs), tools))return results
应用场景
- 多数据源聚合:电商比价(并行查询各平台API)。
- 复杂任务拆分:旅行规划中同时查询航班、酒店、景点。
对比总结
技术 | 实现方式 | 优势 | 挑战 |
---|---|---|---|
Code Generation | 本地/远程代码执行 | 灵活适配复杂逻辑 | 安全风险高 |
Sandboxing | Docker/WASM隔离 | 保障系统安全 | 性能开销较大 |
Streaming | 分块输出+实时推送 | 用户体验好 | 工具需支持流式 |
Parallel Execution | 多线程/DAG调度 | 提升吞吐量 | 依赖管理复杂 |
行业趋势:
- 混合部署:关键工具(如数据库)本地执行,通用工具(如搜索)云端调用。
- 智能调度:AI模型动态选择执行模式(如根据负载决定并行度)。
推荐实践:
- 高安全需求:沙箱隔离 + 静态分析(如Bandit)。
- 高性能场景:并行调用 + 流式返回(如AutoGen的多Agent协作)。
本篇文章仅记录目前所学内容,仅代表个人知识见解,如有不全,勿喷,可交流。