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测试不断改进提示词效果。提示词工程是一个持续迭代的过程建议在实际项目中建立自己的提示词库和评估体系不断积累最佳实践。

相关新闻

如何在Windows/Linux/macOS上构建高性能Switch模拟器:Ryujinx完整技术指南

如何在Windows/Linux/macOS上构建高性能Switch模拟器:Ryujinx完整技术指南

如何在Windows/Linux/macOS上构建高性能Switch模拟器:Ryujinx完整技术指南 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验《塞尔达传说:王国之泪…

2026/11/9 8:43:44 阅读更多 →
JWTDecode.swift错误处理最佳实践:解决常见解码问题

JWTDecode.swift错误处理最佳实践:解决常见解码问题

JWTDecode.swift错误处理最佳实践:解决常见解码问题 【免费下载链接】JWTDecode.swift A JWT decoder for iOS, macOS, tvOS, and watchOS 项目地址: https://gitcode.com/gh_mirrors/jw/JWTDecode.swift JWTDecode.swift是一款专为iOS、macOS、tvOS和watchO…

2026/11/9 8:26:06 阅读更多 →
为什么你需要将 Google Drive 变成本地文件系统?GDriveFS 深度解析

为什么你需要将 Google Drive 变成本地文件系统?GDriveFS 深度解析

为什么你需要将 Google Drive 变成本地文件系统?GDriveFS 深度解析 【免费下载链接】GDriveFS An innovative FUSE wrapper for Google Drive. 项目地址: https://gitcode.com/gh_mirrors/gd/GDriveFS 在云存储普及的今天,Google Drive 已成为许多…

2026/11/10 8:06:58 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻