构建高效工具调用Prompt的极简范例

📅 2026/6/16 9:32:32 👤 管理员 👁 次浏览
构建高效工具调用Prompt的极简范例
构造一个能有效引导模型判断是否调用工具的Prompt关键在于清晰定义工具、明确决策规则、严格约束输出格式。下面通过一个最简单的天气查询例子分步拆解。一、核心Prompt结构示例假设我们只有一个工具get_weather获取天气。以下是最简化的Prompt# 定义工具信息通常从工具注册表中动态获取 available_tools [ { name: get_weather, description: 获取指定城市的当前天气情况。输入必须是城市名称。, parameters: { location: { type: string, description: 城市名称例如北京、上海、纽约 } } } ] def build_simple_prompt(user_query: str, tools: list) - str: 构建最简单的工具调用决策Prompt # 1. 角色与能力定义 system_role 你是一个AI助手可以根据问题决定是否调用工具。 # 2. 工具描述关键部分 tools_text 你可以使用的工具如下 for tool in tools: tools_text f- {tool[name]}: {tool[description]} if parameters in tool: params tool[parameters] tools_text f 参数: {list(params.keys())} # 3. 决策规则核心引导 decision_rules 决策规则 1. 当用户询问某个地点的当前天气、温度、气候状况时必须调用get_weather工具。 2. 其他所有问题如问候、闲聊、知识问答都直接回答不要调用工具。 # 4. 输出格式约束强制结构化 output_format 你必须严格按照以下JSON格式回复 如果需要调用工具 {action: call_tool, tool: 工具名, parameters: {参数名: 参数值}} 如果直接回答 {action: direct_answer, content: 你的回答内容} # 5. 组合完整Prompt full_prompt f{system_role} {tools_text} {decision_rules} {output_format} 用户问题{user_query} return full_prompt # 测试不同查询 test_queries [ 北京今天天气怎么样, # 应触发工具调用 你好请介绍一下你自己, # 应直接回答 上海现在多少度, # 应触发工具调用 机器学习是什么 # 应直接回答 ] for query in test_queries: prompt build_simple_prompt(query, available_tools) print(f问题: {query}) print(生成的Prompt前200字符:, prompt[:200] ...) print(- * 50)二、Prompt各部分的详细作用Prompt部分内容示例设计目的关键技巧角色定义你是一个AI助手...设定模型行为边界简洁明确避免歧义工具描述get_weather: 获取指定城市的当前天气让模型知道能做什么1. 名称直观2. 描述具体3. 参数清晰决策规则当用户询问天气...必须调用工具明确调用条件1. 使用“必须”、“不要”等强引导词2. 列举典型场景输出格式{action: call_tool...}强制结构化输出1. 提供完整JSON示例2. 指定键名用户问题北京今天天气怎么样提供查询上下文放在最后清晰分隔三、实际调用与解析流程import json import openai def call_model_with_prompt(prompt: str) - str: 调用大模型获取响应简化示例 # 实际应使用API调用这里模拟返回 test_responses { 北京今天天气怎么样: {action: call_tool, tool: get_weather, parameters: {location: 北京}}, 你好请介绍一下你自己: {action: direct_answer, content: 我是AI助手可以帮你查询天气信息。}, 上海现在多少度: {action: call_tool, tool: get_weather, parameters: {location: 上海}}, 机器学习是什么: {action: direct_answer, content: 机器学习是人工智能的一个分支让计算机从数据中学习规律。} } # 模拟根据问题返回对应响应 for q, resp in test_responses.items(): if q in prompt: # 简化匹配逻辑 return resp return {action: direct_answer, content: 我不确定如何回答这个问题。} def process_user_query(user_query: str): 完整的查询处理流程 # 1. 构建Prompt prompt build_simple_prompt(user_query, available_tools) print(f[Prompt内容]\ {prompt}\ ) # 2. 调用模型 model_response call_model_with_prompt(prompt) print(f[模型原始响应]\ {model_response}\ ) # 3. 解析响应 try: response_data json.loads(model_response) if response_data[action] call_tool: tool_name response_data[tool] parameters response_data[parameters] print(f✅ 模型决定调用工具: {tool_name}) print(f 参数: {parameters}) # 4. 执行工具模拟 if tool_name get_weather: weather f{parameters[location]}的天气晴25℃ # 模拟工具执行 print(f 工具执行结果: {weather}) return weather elif response_data[action] direct_answer: print(f✅ 模型决定直接回答) print(f 回答内容: {response_data[content]}) return response_data[content] except json.JSONDecodeError: print(❌ 模型响应不是有效的JSON格式) return 解析响应时出错 return None # 运行测试 print( * 60) print(测试1: 天气查询) result1 process_user_query(北京今天天气怎么样) print( * 60) print(\ 测试2: 一般问答) result2 process_user_query(机器学习是什么) print( * 60)四、Prompt设计的关键要点工具描述要具体# 不好的描述 ❌ 获取天气好的描述 ✅获取指定城市的当前天气情况包括温度、湿度和天气状况。输入必须是城市名称。2. **决策规则要明确** python # 模糊的规则 ❌ 有时候可以调用工具 # 明确的规则 ✅ 当且仅当用户明确询问当前天气时调用get_weather工具其他情况一律直接回答。输出格式要严格# 宽松的格式 ❌ 用JSON格式回复严格的格式 ✅必须严格按照以下JSON格式回复{action: call_tool, tool: 工具名, parameters: {参数名: 参数值}}或{action: direct_answer, content: 回答内容}4. **提供少量示例Few-shot可提高准确性** python examples 示例 用户北京天气如何 输出{action: call_tool, tool: get_weather, parameters: {location: 北京}} 用户你好吗 输出{action: direct_answer, content: 我很好谢谢} 五、常见问题与优化问题表现优化方法模型不遵循格式返回自然语言而非JSON1. 在Prompt开头强调“必须严格按格式”2. 提供更详细的格式示例误判工具调用不该调用时调用1. 细化决策规则2. 增加负面示例什么情况不调用参数提取错误参数值不正确1. 在工具描述中明确参数格式2. 提供参数示例多工具混淆多个工具时选错1. 清晰区分工具功能2. 按优先级排序工具列表总结构造工具调用Prompt的核心是清晰描述工具能力 明确决策规则 严格输出约束。通过这个最简单的天气查询例子可以看到模型如何根据Prompt的引导将“北京今天天气怎么样”解析为调用get_weather工具并提取location: 北京参数。实际系统中Prompt会更复杂支持多工具、多轮对话等但基本原理相同。参考来源AI的提示词专栏API 文档 Prompt从接口描述生成 SwaggerAI的提示词专栏代码生成 Prompt从自然语言描述到完整函数AI的提示词专栏医学报告 Prompt病例描述、药品说明、医学科普结构化思维助力Prompt创作专业化技术讲解和实践案例Midjourney Prompt的使用基本结构介绍