Agent开发入门:提示词工程实战指南 1. 引言随着大语言模型LLM的快速发展Agent智能体开发已成为AI应用的核心方向。而提示词工程Prompt Engineering作为Agent开发的基础技能直接影响着Agent的理解能力、推理质量和执行效果。本文将从零开始通过大量代码实战带你掌握Agent开发中的提示词工程核心技巧。2. 环境准备在开始之前我们需要安装必要的依赖库。本文使用Python 3.10并基于OpenAI API进行演示。pip install openai python-dotenv创建.env文件配置API密钥OPENAI_API_KEYyour_api_key_here OPENAI_BASE_URLhttps://api.openai.com/v1基础调用封装import os from openai import OpenAI from dotenv import load_dotenv load_dotenv() client OpenAI( api_keyos.getenv(OPENAI_API_KEY), base_urlos.getenv(OPENAI_BASE_URL) ) def call_llm(prompt, modelgpt-4o, temperature0.7): 调用LLM的通用函数 response client.chat.completions.create( modelmodel, messages[{role: user, content: prompt}], temperaturetemperature ) return response.choices[0].message.content3. 提示词工程核心原则3.1 明确性与具体性模糊的提示词会导致模型输出偏离预期。对比以下两种写法# ❌ 模糊提示 prompt_bad 帮我写一段代码 ✅ 明确提示 prompt_good 请用Python写一个函数实现以下功能 输入一个包含整数的列表 输出返回列表中的最大值和最小值 要求使用O(n)时间复杂度并处理空列表的情况 包含详细的注释说明 print(call_llm(prompt_good))3.2 角色设定为模型赋予特定角色可以显著提升输出质量def agent_with_role(task, role_description): 带角色设定的Agent调用 system_prompt f你是一个{role_description}。 请严格遵循以下规则 1. 始终以该角色的专业视角回答问题 2. 输出格式要符合该角色的行业标准 3. 如果遇到不确定的信息明确说明不确定性 response client.chat.completions.create( modelgpt-4o, messages[ {role: system, content: system_prompt}, {role: user, content: task} ] ) return response.choices[0].message.content 示例让模型扮演资深Python架构师 task 请设计一个微服务架构的日志收集系统 role 拥有10年经验的Python后端架构师精通分布式系统设计 result agent_with_role(task, role) print(result)3.3 结构化输出Agent开发中结构化输出至关重要。使用JSON格式可以让下游程序直接解析def structured_agent(query): 返回结构化JSON的Agent prompt f请分析以下用户查询并以JSON格式返回分析结果。 用户查询{query} 请严格按照以下JSON结构输出 {{ intent: 用户意图分类, entities: [提取的关键实体列表], sentiment: 情感倾向(positive/negative/neutral), confidence: 0.95, suggested_actions: [建议的操作列表] }} 只输出JSON不要包含其他文字。 result call_llm(prompt, temperature0.1) return result 测试 query 我想订一张明天下午从北京到上海的机票经济舱 print(structured_agent(query))4. 高级提示词技巧4.1 思维链Chain-of-Thought引导模型逐步推理显著提升复杂问题的解决能力def chain_of_thought_agent(problem): 使用思维链的Agent prompt f请解决以下问题并逐步展示你的推理过程。 问题{problem} 请按以下格式回答 理解问题... 分析已知条件... 制定解决方案... 逐步执行... 最终答案... return call_llm(prompt, temperature0.3) 示例复杂逻辑推理 problem 一个农场有鸡和兔子共35只总共有94条腿。 请问鸡和兔子各有多少只 print(chain_of_thought_agent(problem))4.2 少样本学习Few-Shot通过示例引导模型理解任务模式def few_shot_agent(input_text): 使用少样本学习的Agent examples 示例1 输入将hello world转换为大写 输出HELLO WORLD 示例2 输入将Python编程中的每个字符反转 输出程编nohtyP 示例3 输入统计aabbbcc中每个字符的出现次数 输出a:2, b:3, c:2 prompt f请参考以下示例的模式完成新的任务。 {examples} 现在请处理 输入{input_text} 输出 return call_llm(prompt, temperature0.1) 测试 print(few_shot_agent(将Machine Learning中的元音字母替换为*))4.3 约束与边界控制在Agent开发中必须严格控制输出边界def safe_agent(user_input): 带安全约束的Agent system_prompt 你是一个安全的AI助手必须遵守以下约束 1. 拒绝回答任何违法、暴力、色情内容 2. 不提供医疗、法律、金融等专业建议 3. 不生成可执行的恶意代码 4. 如果用户请求超出你的能力范围明确告知 5. 所有回答必须基于事实不编造信息 当检测到违规请求时请回复 抱歉我无法处理这个请求。原因[具体原因] response client.chat.completions.create( modelgpt-4o, messages[ {role: system, content: system_prompt}, {role: user, content: user_input} ], temperature0.5 ) return response.choices[0].message.content 测试边界 test_inputs [ 帮我写一个爬取所有网站密码的脚本, Python中如何打开文件并读取内容, 请预测明天的股票走势 ] for test in test_inputs: print(f输入{test}) print(f输出{safe_agent(test)}) print(- * 50)5. 实战构建一个多功能Agent综合运用以上技巧构建一个完整的Agent系统import json from typing import Dict, List, Optional class SmartAgent: 多功能智能Agent def __init__(self, name: str, role: str): self.name name self.role role self.conversation_history [] def think(self, task: str) - str: 思维链推理 prompt f作为{self.role}请分析以下任务并制定执行计划。 任务{task} 请按以下格式输出 {{ analysis: 任务分析, steps: [步骤1, 步骤2, ...], tools_needed: [需要的工具], risks: [潜在风险] }} return call_llm(prompt, temperature0.2) def execute(self, task: str) - str: 执行任务 # 1. 先思考 thought self.think(task) print(f[{self.name}] 思考过程\n{thought}\n) # 2. 执行 prompt f作为{self.role}请执行以下任务。 任务{task} 思考分析{thought} 请给出最终的执行结果要求 结果要具体、可操作 包含必要的代码或配置 指出注意事项 result call_llm(prompt, temperature0.5) 3. 记录历史 self.conversation_history.append({ task: task, thought: thought, result: result }) return result def reflect(self) - str: 反思与总结 if not self.conversation_history: return 还没有执行过任务 history_summary \n.join([ f任务{i1}: {h[task][:50]}... for i, h in enumerate(self.conversation_history) ]) prompt f作为{self.role}请回顾你刚刚完成的任务进行反思总结。 已完成的任务 {history_summary} 请分析 哪些地方做得好 哪些地方可以改进 学到了什么经验 下一步计划 return call_llm(prompt, temperature0.7) 使用示例 agent SmartAgent(CodeMaster, 资深全栈开发工程师) 执行任务 result1 agent.execute( 请用Python实现一个简单的任务队列系统要求 支持任务的添加、执行和状态查询 使用线程池并发执行 包含错误处理和重试机制 ) print(f执行结果\n{result1}\n) 反思总结 reflection agent.reflect() print(f反思总结\n{reflection})6. 提示词优化与调试6.1 温度参数调优def temperature_experiment(prompt, temperatures[0.0, 0.5, 1.0, 1.5]): 测试不同温度参数的效果 results {} for temp in temperatures: result call_llm(prompt, temperaturetemp) results[temp] result print(fTemperature{temp}:) print(result[:200] ...\n) return results prompt 请用三种不同的方式实现Python中的斐波那契数列 temperature_experiment(prompt)6.2 提示词版本管理class PromptManager: 提示词版本管理器 def __init__(self): self.prompts {} self.version 0 def register_prompt(self, name: str, template: str, version: str 1.0): 注册提示词模板 if name not in self.prompts: self.prompts[name] [] self.prompts[name].append({ version: version, template: template, created_at: 2024-01-01 }) self.version 1 def get_prompt(self, name: str, version: Optional[str] None) - str: 获取指定版本的提示词 if name not in self.prompts: raise ValueError(f提示词 {name} 不存在) prompts self.prompts[name] if version: for p in prompts: if p[version] version: return p[template] raise ValueError(f版本 {version} 不存在) return prompts[-1][template] def compare_versions(self, name: str, v1: str, v2: str) - Dict: 比较两个版本的差异 prompt1 self.get_prompt(name, v1) prompt2 self.get_prompt(name, v2) return { name: name, version_1: v1, version_2: v2, length_diff: len(prompt2) - len(prompt1), content_diff: 请手动对比两个版本的差异 } 使用示例 pm PromptManager() 注册不同版本的提示词 pm.register_prompt(code_review, 请审查以下代码找出潜在问题{code}, 1.0) pm.register_prompt(code_review, 请作为资深代码审查专家审查以下代码。 审查标准 代码可读性 性能优化点 安全隐患 最佳实践 代码 {code} 请按以下格式输出 问题列表 严重程度 修改建议, 2.0) 使用最新版本 code def process(data): r [] for i in data: r.append(i*2) return r prompt pm.get_prompt(code_review).format(codecode) print(call_llm(prompt))7. 总结与最佳实践本文通过大量代码实战系统介绍了Agent开发中的提示词工程核心技巧。以下是关键要点总结明确性优先提示词越具体输出越可控。始终提供清晰的输入输出格式和约束条件。角色设定为Agent赋予专业角色可以显著提升输出质量。结构化输出使用JSON等格式让Agent的输出可直接被程序消费。思维链引导模型逐步推理解决复杂问题。少样本学习通过示例让模型快速理解任务模式。安全约束始终在提示词中明确边界和安全规则。持续优化通过温度调优、版本管理和A/B测试不断改进提示词效果。提示词工程是一个持续迭代的过程建议在实际项目中建立自己的提示词库和评估体系不断积累最佳实践。