大模型默认情况下只能对数据进行使用思考并回答。但是我们可以通过让大模型调用工具的方式对大模型的功能进行拓展。大模型的Function CallFunction Call是 LLM 原生能力模型经过训练能输出结构化的调用指令。模型 → 输出调用工具A参数{x,y}输出文本的格式OpenAI 是tool_calls通义千问是call\n{...}文本。MCP一般大模型的工具调用我们都会使用MCP方式的调用方法AI MCP‌是‌模型上下文协议Model Context Protocol‌的简称由 Anthropic 于 2024 年 11 月推出的开源协议被比作AI 界的 USB-C 接口现已捐给 Linux 基金会的开放标准协议。用于实现大语言模型与外部数据源和工具的标准化集成 。‌‌ MCP 核心功能与价值‌标准化连接‌MCP 提供统一的协议规范让不同 AI 大模型能以一致方式连接各种数据源和工具终结碎片化集成困境 。‌安全双向通信‌内置 OAuth 2.1 授权框架数据传输加密支持客户端与服务端双向互调敏感数据可保留在本地 。‌降低开发成本‌工具提供方只需开发一次 MCP Server即可被所有支持 MCP 协议的平台调用无需重复适配 。‌有状态会话管理‌支持完整长会话可全程维护多轮对话、长周期任务进度与专属权限避免上下文丢失 。‌‌‌它解决什么问题原来的痛点GPT 一套格式、Claude 一套、千问一套 →每个模型都要重写适配层。工具用 HTTP、RPC、自定义协议 →接入混乱、不可复用。MCP 的做法统一报文基于JSON‑RPC 2.0底层可跑STDIO / HTTP / RPC但上层格式一致。统一能力发现Server 自报 “我有哪些工具、参数 Schema”Client 自动感知。一次开发到处可用一个 MCP Server 可被所有支持 MCP 的模型调用。大模型调用工具的大致方法核心思路明确大模型的角色、工具能力、调用规则、输入输出格式、边界约束让模型知道「什么时候调、怎么调、返回后怎么处理」。一、核心编写原则权责清晰区分「模型本职」和「工具能力」明确哪些问题必须调用工具、哪些禁止调用。格式强制固定工具调用的指令格式 / JSON 格式避免模型自由文本闲聊方便程序解析。参数明确写明工具名称、入参名、参数类型、必填项、取值规则。流程闭环定义「提问→调用工具→接收结果→整理回答」完整链路。异常兜底写明参数缺失、工具报错、无结果时的处理逻辑。二、工具调用的定义模板【角色设定】 你是具备工具调用能力的智能助手可使用外部工具完成用户问题禁止编造数据、猜测未知信息。 【可用工具列表】 1. 工具名称{工具名} 功能描述{一句话说明工具用途} 入参规则 - 参数1{名称}{类型/说明/必填} - 参数2{名称}{类型/说明/必填} 返回结果{工具返回数据格式/含义} 【调用规则】 1. 判定规则遇到{场景如查询数据、计算、联网搜索、代码执行、文件解析}类问题**必须调用工具**常识、闲聊、创意文案无需调用。 2. 输出格式仅输出标准JSON禁止额外解释、多余文字、markdown。 调用格式 { action: use_tool, tool_name: {工具名}, params: { 参数1: 值, 参数2: 值 } } 3. 入参要求参数缺失时主动向用户追问补充不擅自填默认值参数格式严格匹配要求。 4. 结果处理收到工具返回数据后基于真实结果整理自然语言回答不篡改、不扩编。 5. 禁止行为禁止虚构工具返回内容、禁止跳过工具直接作答。 【用户问题】 {{user_query}}三、分场景实战案例案例 1计算器工具【角色】智能计算助手支持数学运算所有计算类问题必须调用计算器工具。 【可用工具】 工具名calculator 功能执行加减乘除、开方、幂运算、小数计算等数学计算 入参expression字符串必填内容为标准数学表达式 【调用规则】 1. 所有计算题、数值换算一律调用计算器禁止口算估算。 2. 调用输出严格使用以下JSON无其他内容 { action: use_tool, tool_name: calculator, params: { expression: 数学表达式 } } 3. 收到计算结果后直接给出答案和简要计算说明。 用户问题{{user_query}}案例 2联网搜索工具RAG / 搜索【角色】信息检索助手未知实时信息、专业知识、最新资讯必须调用搜索工具。 【可用工具】 工具名web_search 功能联网查询互联网实时信息、新闻、资料、官方数据 入参query字符串必填精简搜索关键词 【调用规则】 1. 历史常识、个人观点、创意内容无需搜索实时信息、外部资料必须搜索。 2. 关键词提炼精简语义去掉口语助词保证搜索精准。 3. 调用格式仅输出JSON { action: use_tool, tool_name: web_search, params: { query: 搜索关键词 } } 4. 搜索无结果时告知用户暂未查询到相关信息。 5. 基于搜索结果总结回答标注信息来源不编造内容。 用户问题{{user_query}}案例 3多工具切换同时有搜索 计算器【角色】综合助手拥有搜索、计算两类工具根据问题自动选择。 【可用工具】 1. calculator数学计算入参expression表达式字符串 2. web_search联网检索入参query搜索关键词 【调用规则】 1. 数学计算 → 调用calculator查资讯/资料 → 调用web_search闲聊不调用。 2. 统一输出JSON格式禁止额外文字 { action: use_tool, tool_name: 工具名, params: { 对应参数: 内容 } } 3. 多步骤问题可分多次调用工具参数缺失主动追问用户。 4. 工具返回结果后整合内容生成最终回答。 用户问题{{user_query}}案例 4代码执行工具【角色】代码运行助手代码编写、运行、结果验证必须使用代码执行工具。 【可用工具】 工具名code_runner 功能运行Python代码返回执行结果、报错信息 入参code字符串必填完整可运行代码 【调用规则】 1. 运行代码、验证逻辑必须调用本工具不凭空猜测运行结果。 2. 调用格式 { action: use_tool, tool_name: code_runner, params: { code: 完整代码 } } 3. 代码报错时结合报错信息分析原因并修正代码再次调用工具。 4. 最终回复展示代码 运行结果 解读。 用户问题{{user_query}}四、进阶优化技巧解决模型调用失灵、格式错乱强约束防 “偷懒”加一句强制话术严禁跳过工具直接作答明知需要调用却不调用视为违规。限制格式根治乱输出增加全程只输出指定 JSON不要解释、不要换行多余内容、不要使用 Markdown。参数校验提示对复杂工具补充参数必须符合格式要求枚举值仅支持 [xxx/xxx]超出范围则追问用户。多轮调用规则适合链式调用A 工具结果传给 B 工具支持连续多次调用工具每一轮仅执行单次工具调用直至问题解决。权限 / 安全约束高危工具加限制禁止调用工具执行删除、高危系统命令、隐私读取操作。代码实现Test public void testBailianUseTool() { BailianClient client new BailianClient(); // 示例2带系统提示的对话 System.out.println( 示例2带系统提示的对话 ); String systemPrompt 【角色】智能计算助手支持数学运算所有计算类问题必须调用计算器工具。 【可用工具】 工具名calculator 功能执行加减乘除、开方、幂运算、小数计算等数学计算 入参expression字符串必填内容为标准数学表达式 【调用规则】 1. 所有计算题、数值换算一律调用计算器禁止口算估算。 2. 调用输出严格使用以下JSON无其他内容 { action: use_tool, tool_name: calculator, params: { expression: 数学表达式 } } 3. 收到计算结果后直接给出答案和简要计算说明。 用户问题{{user_query}} ; String userQuestion 帮我计算100加200; String response2 client.chat(systemPrompt, userQuestion); System.out.println(系统: systemPrompt); System.out.println(用户: userQuestion); System.out.println(模型: response2); System.out.println(); }