提示工程架构师的Agentic AI学习指南:从案例到实践
提示工程架构师的Agentic AI学习指南:从案例拆解到系统实践
一、引言:从“被动执行”到“主动解决”——提示工程的下一个里程碑
你是否遇到过这样的场景?
- 写了一个完美的单轮提示,能回答“巴黎的天气怎么样”,但面对“帮我规划巴黎3天行程,预算2000欧元”这样的复杂问题,就变得手足无措;
- 用大模型做数据分析时,它要么遗漏关键步骤(比如没调用数据库获取最新数据),要么反复调用工具(比如明明已经拿到数据还在重复查询);
- 想让AI自主完成“写论文→找参考文献→修改草稿”的流程,但不知道怎么让它“学会思考”下一步该做什么。
这些问题的核心,在于传统提示工程是“单轮指令执行”,而复杂任务需要“多轮自适应决策”。这就是Agentic AI要解决的问题——让AI像人类一样,能自主思考、主动调用工具、持续优化策略,完成复杂的目标。
本文要做什么?
本文将从提示工程架构师的视角,拆解Agentic AI的核心逻辑,通过真实案例(比如数据分析Agent、旅游规划Agent)讲解如何设计Agent的“思考流程”“工具调用规则”“反馈机制”,最后手把手教你用LangChain搭建一个可复用的Agentic系统。
你能学到什么?
- 掌握Agentic AI的核心组件(思考-工具-反馈循环);
- 学会用“思考链提示”“工具调用提示”“反思提示”设计Agent的决策逻辑;
- 能独立搭建一个简单的Agentic系统(比如自动论文总结Agent);
- 理解提示工程架构师的核心工作:让AI从“执行指令”变成“解决问题”。
二、准备工作:你需要具备这些基础
1. 技术栈/知识要求
- Python基础:能读懂简单的Python代码(比如函数、类);
- 提示工程基础:了解零样本、少样本提示,知道如何用自然语言引导大模型;
- 大模型API经验:用过OpenAI API、Anthropic API等,知道如何调用大模型;
- Agent框架认知:听说过LangChain、AutoGPT、BabyAGI等框架(不需要深入,但要有概念)。
2. 环境/工具准备
- Python环境:Python 3.8及以上(推荐用Anaconda创建虚拟环境);
- Agent框架:安装LangChain(
pip install langchain)——本文用LangChain做案例; - 大模型API密钥:比如OpenAI的API key(需要注册OpenAI账号,获取API key);
- 工具依赖:根据需要安装工具包,比如
requests(调用API)、python-dotenv(管理环境变量)。
三、核心内容:从案例到实践,成为Agentic AI提示工程架构师
(一)第一步:理解Agentic AI的核心——“思考-工具-反馈”循环
在讲具体实践前,必须先搞懂Agentic AI的核心逻辑。Agentic AI不是一个“黑盒子”,而是由三个核心组件组成的循环系统:
| 组件 | 作用 | 例子 |
|---|---|---|
| 思考模块 | 决定“下一步该做什么”(比如“我需要获取用户的预算信息”) | 用大模型生成“思考过程”:“用户问三亚行程,我需要先知道他们的兴趣和预算” |
| 工具模块 | 执行具体任务(比如调用API获取数据、用Python做计算) | 调用Google Search获取“三亚热门景点”,调用Excel工具分析“销售额数据” |
| 反馈模块 | 根据工具返回结果调整策略(比如“刚才的景点列表不符合用户预算,需要重新筛选”) | 用大模型分析工具返回的“三亚酒店价格”,决定“换一批更便宜的酒店” |
关键区别:传统提示是“输入→输出”的单轮流程,而Agentic是“输入→思考→工具→反馈→输出”的多轮自适应流程。
比如,一个“旅游规划Agent”的循环流程:
- 用户输入:“帮我规划三亚3天行程,预算2000元/人”;
- 思考模块:“我需要知道用户的兴趣(比如喜欢海边还是景点)、出行时间(比如是否旺季)”;
- 工具模块:调用“用户问卷工具”(比如用自然语言问用户“你喜欢海边活动还是人文景点?”);
- 反馈模块:收到用户回复“喜欢海边”,调整策略“优先推荐三亚湾、亚龙湾的海边项目”;
- 循环:继续调用“景点查询工具”获取海边景点信息,再调用“酒店预订工具”获取预算内的海边酒店,最后生成行程。
(二)第二步:拆解真实案例——“数据分析Agent”的提示设计
为了让大家更直观,我们以**“数据分析Agent”为例,拆解提示工程架构师的核心工作**:如何设计每个模块的提示,让Agent能自主完成“从问题到结论”的流程。
1. 案例背景
用户问题:“分析上月销售额下降15%的原因”;
Agent目标:自主调用工具(比如数据库、Excel、统计模型),分析下降原因,生成报告。
2. 思考模块的提示设计
作用:让Agent学会“规划步骤”,比如“我需要哪些数据?”“下一步该做什么?”
提示模板(用OpenAI的GPT-4为例):
你是一个数据分析Agent,需要解决用户的问题:“{user_question}”。请按照以下步骤思考:
1. 明确问题:用户的问题核心是什么?需要解决什么问题?
2. 数据需求:解决这个问题需要哪些数据?(比如销售额数据、用户行为数据、市场推广数据)
3. 工具选择:需要调用哪些工具来获取这些数据?(比如数据库查询工具、Excel导入工具)
4. 下一步行动:你现在需要做什么?(比如“调用数据库查询工具获取上月销售额数据”)
请用自然语言写出你的思考过程,不需要执行任何操作。
为什么这么设计?
- 用“步骤引导”让Agent学会结构化思考,避免混乱;
- 用“问题+数据+工具+行动”的框架,让Agent的思考更有针对性;
- 留空“下一步行动”,让Agent能自主决定下一步做什么。
思考模块的输出示例:
1. 明确问题:用户想知道上月销售额下降15%的原因,需要找到导致下降的关键因素。
2. 数据需求:需要上月的销售额数据(按产品、地区、渠道划分)、用户购买行为数据(比如转化率、复购率)、市场推广数据(比如广告投入、流量来源)。
3. 工具选择:需要调用数据库查询工具获取销售额数据,调用用户行为分析工具获取用户行为数据,调用市场推广工具获取广告投入数据。
4. 下一步行动:调用数据库查询工具,获取上月按产品划分的销售额数据。
3. 工具模块的提示设计
作用:让Agent学会“正确调用工具”,比如“如何传递参数?”“如何处理工具返回的结果?”
提示模板(以“数据库查询工具”为例):
你需要调用数据库查询工具来获取数据。请按照以下格式生成工具调用指令:
<|FunctionCallBegin|>[{"name":"query_database","parameters":{"sql":"SELECT * FROM sales WHERE month='2023-10' AND category='electronics'","limit":100}}]<|FunctionCallEnd|>
说明:
- name:工具名称(必须是“query_database”);
- parameters:工具参数,其中“sql”是查询语句,“limit”是返回结果的数量;
- 请严格按照格式生成,不要添加任何额外内容。
为什么这么设计?
- 用“严格格式”(比如<|FunctionCallBegin|>和<|FunctionCallEnd|>)让Agent能正确调用工具,避免解析错误;
- 用“参数说明”让Agent知道如何传递正确的参数,比如“sql”语句需要符合数据库语法;
- 用“例子”让Agent更直观地理解如何使用工具。
工具模块的输出示例(Agent生成的工具调用指令):
<|FunctionCallBegin|>[{"name":"query_database","parameters":{"sql":"SELECT product_id, sales_amount, sales_date FROM sales WHERE month='2023-10'","limit":1000}}]<|FunctionCallEnd|>
4. 反馈模块的提示设计
作用:让Agent学会“分析结果”,比如“这个数据能解决问题吗?”“需要调整策略吗?”
提示模板:
你已经调用了工具,获取了以下结果:{tool_result}。请按照以下步骤分析:
1. 结果评估:这个结果是否满足你的数据需求?(比如“是否获取了上月的销售额数据?”)
2. 问题解决:这个结果能帮助你解决用户的问题吗?(比如“销售额数据是否能说明下降的原因?”)
3. 下一步行动:如果结果满足需求,下一步该做什么?(比如“调用统计模型工具分析数据”);如果不满足,需要调整什么?(比如“重新调用数据库查询工具,获取更多维度的数据”)
请用自然语言写出你的分析过程。
为什么这么设计?
- 用“结果评估+问题解决+下一步行动”的框架,让Agent学会反思;
- 用“是否满足需求”的问题,让Agent能自我检查,避免无效工具调用;
- 用“下一步行动”的引导,让Agent能持续优化策略。
反馈模块的输出示例(假设工具返回了“上月销售额数据按产品划分”):
1. 结果评估:满足数据需求,获取了上月按产品划分的销售额数据。
2. 问题解决:能帮助解决问题,因为可以通过产品维度分析哪些产品的销售额下降最多。
3. 下一步行动:调用统计模型工具,分析各产品销售额下降的相关性(比如“是否与价格上涨有关?”)。
(三)第三步:实践——用LangChain搭建“旅游规划Agent”
现在,我们用LangChain(一个流行的Agent框架),手把手教你搭建一个**“旅游规划Agent”**,让它能自主完成“接收问题→思考→调用工具→生成行程”的流程。
1. 步骤1:安装依赖
首先,安装需要的包:
pip install langchain openai python-dotenv
langchain:Agent框架,简化Agent的开发;openai:调用OpenAI的API;python-dotenv:管理环境变量(比如存储API key)。
2. 步骤2:配置环境变量
创建一个.env文件,存储你的OpenAI API key:
OPENAI_API_KEY=your_openai_api_key
然后,在Python代码中加载环境变量:
from dotenv import load_dotenv
load_dotenv() # 加载.env文件中的环境变量
3. 步骤3:定义工具
Agent需要调用工具来完成任务,比如“查询景点”“查询酒店”。我们用LangChain的Tool类来定义工具:
from langchain.tools import Tool
from langchain.utilities import GoogleSearchAPIWrapper # 假设用Google搜索获取景点信息
# 定义“景点查询工具”
search = GoogleSearchAPIWrapper()
景点查询工具 = Tool(
name="景点查询",
func=search.run,
description="用于查询旅游景点信息,比如“三亚热门景点”"
)
# 定义“酒店查询工具”(假设用一个模拟函数)
def 酒店查询(地点: str, 预算: int) -> str:
"""模拟酒店查询工具,返回预算内的酒店列表"""
return f"在{地点},预算{预算}元/晚的酒店有:三亚湾宾馆(180元/晚)、亚龙湾酒店(200元/晚)"
酒店查询工具 = Tool(
name="酒店查询",
func=酒店查询,
description="用于查询指定地点、预算内的酒店列表,参数:地点(str)、预算(int)"
)
# 整合工具列表
tools = [景点查询工具, 酒店查询工具]
为什么这么设计?
- 用
Tool类封装工具,让Agent能统一调用; - 用
description字段说明工具的用途和参数,让Agent知道“什么时候该用这个工具”; - 用模拟函数(比如
酒店查询)简化示例,实际可以替换成真实的API调用。
4. 步骤4:定义思考模块的提示
用LangChain的PromptTemplate定义思考模块的提示,让Agent学会“规划步骤”:
from langchain.prompts import PromptTemplate
思考提示模板 = PromptTemplate(
input_variables=["user_question", "agent_scratchpad"],
template="""你是一个旅游规划Agent,需要解决用户的问题:“{user_question}”。请按照以下步骤思考:
1. 明确问题:用户的问题核心是什么?需要解决什么问题?
2. 数据需求:解决这个问题需要哪些数据?(比如用户的兴趣、预算、出行时间)
3. 工具选择:需要调用哪些工具来获取这些数据?(比如“景点查询工具”“酒店查询工具”)
4. 下一步行动:你现在需要做什么?(比如“调用景点查询工具获取三亚的热门景点”)
你的思考过程:{agent_scratchpad}(用于记录之前的思考过程)
请用自然语言写出你的思考过程,不需要执行任何操作。如果需要调用工具,请用以下格式:
<|FunctionCallBegin|>[{"name":"工具名称","parameters":{"参数1":"值1","参数2":"值2"}}]<|FunctionCallEnd|>
"""
)
关键说明:
input_variables:需要传入的变量,user_question是用户的问题,agent_scratchpad是Agent的历史思考过程(用于多轮循环);template:用“步骤引导”让Agent学会结构化思考;工具调用格式:用<|FunctionCallBegin|>和<|FunctionCallEnd|>包裹,让Agent能正确生成工具调用指令。
5. 步骤5:初始化Agent
用LangChain的initialize_agent函数初始化Agent,指定工具、思考提示、大模型:
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
# 初始化大模型(用OpenAI的GPT-3.5-turbo)
llm = OpenAI(temperature=0, model_name="gpt-3.5-turbo-instruct")
# 初始化Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, # 用“零样本反应”模式,让Agent学会用工具
verbose=True, # 打印Agent的思考过程
prompt=思考提示模板 # 传入之前定义的思考提示
)
关键参数说明:
AgentType.ZERO_SHOT_REACT_DESCRIPTION:零样本反应模式,让Agent能根据工具的description自主选择工具;verbose=True:打印Agent的思考过程,方便调试;prompt:传入之前定义的思考提示,让Agent按照我们的逻辑思考。
6. 步骤6:测试Agent
现在,测试Agent能否解决用户的问题:“帮我规划三亚3天行程,预算2000元/人”。
user_question = "帮我规划三亚3天行程,预算2000元/人"
result = agent.run(user_question)
print(result)
预期输出(Agent的思考过程+结果):
思考过程:
1. 明确问题:用户需要规划三亚3天的行程,预算2000元/人。
2. 数据需求:需要三亚的热门景点、预算内的酒店列表、行程安排建议。
3. 工具选择:需要调用“景点查询工具”获取三亚的热门景点,调用“酒店查询工具”获取预算内的酒店列表。
4. 下一步行动:调用“景点查询工具”获取三亚的热门景点。
<|FunctionCallBegin|>[{"name":"景点查询","parameters":{"query":"三亚热门景点"}}]<|FunctionCallEnd|>
(工具返回结果:三亚热门景点有:三亚湾、亚龙湾、天涯海角、蜈支洲岛)
思考过程:
现在需要调用“酒店查询工具”获取三亚预算2000元/人的酒店列表。
<|FunctionCallBegin|>[{"name":"酒店查询","parameters":{"地点":"三亚","预算":2000}}]<|FunctionCallEnd|>
(工具返回结果:在三亚,预算2000元/人的酒店有:三亚湾宾馆(180元/晚)、亚龙湾酒店(200元/晚))
思考过程:
现在需要根据景点和酒店信息,生成3天的行程安排。
行程建议:
第一天:三亚湾(海边活动)→ 天涯海角(人文景点)→ 住三亚湾宾馆(180元/晚);
第二天:亚龙湾(沙滩游玩)→ 蜈支洲岛(潜水)→ 住亚龙湾酒店(200元/晚);
第三天:自由活动(比如购物、吃海鲜)→ 返程。
总预算:180+200=380元/人(3天),符合2000元/人的预算。
需要确认用户是否有其他需求,比如是否需要调整行程。
最终结果:
以下是为你规划的三亚3天行程:
...(具体行程)
总预算:约380元/人,符合你的预算要求。请问需要调整吗?
(四)第四步:优化——让Agent更“聪明”的技巧
搭建完基础Agent后,我们可以用一些技巧让它更“聪明”,比如增加记忆机制、优化工具调用逻辑、处理错误情况。
1. 技巧1:增加记忆机制(让Agent有“长期记忆”)
默认情况下,Agent没有记忆,无法记住之前的对话。我们可以用LangChain的ConversationBufferMemory增加记忆:
from langchain.memory import ConversationBufferMemory
# 初始化记忆模块
memory = ConversationBufferMemory(memory_key="agent_scratchpad", return_messages=True)
# 重新初始化Agent,加入记忆模块
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
prompt=思考提示模板,
memory=memory # 加入记忆模块
)
效果:Agent能记住之前的对话,比如用户之前说“喜欢海边”,Agent会在后续行程中优先推荐海边项目。
2. 技巧2:优化工具调用逻辑(减少不必要的调用)
有时候,Agent会反复调用同一个工具,比如“已经获取了景点信息,还在调用景点查询工具”。我们可以用**“工具调用次数限制”或“结果缓存”**来优化:
from langchain.callbacks import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# 限制工具调用次数(最多调用3次)
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
prompt=思考提示模板,
max_iterations=3 # 最多调用3次工具
)
效果:Agent最多调用3次工具,避免无限循环。
3. 技巧3:处理错误情况(比如工具调用失败)
如果工具调用失败(比如API超时),Agent应该能“容错”,比如“重新调用工具”或“提示用户”。我们可以用LangChain的ToolException来处理:
from langchain.tools import ToolException
def 景点查询工具_func(query: str) -> str:
try:
# 模拟API调用失败
raise Exception("景点查询API超时")
except Exception as e:
raise ToolException(f"景点查询失败:{str(e)}")
# 重新定义景点查询工具
景点查询工具 = Tool(
name="景点查询",
func=景点查询工具_func,
description="用于查询旅游景点信息,可能会失败"
)
# 初始化Agent时,加入错误处理
agent = initialize_agent(
tools=[景点查询工具],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
prompt=思考提示模板,
handle_parsing_errors=True # 处理解析错误
)
效果:当工具调用失败时,Agent会提示用户“景点查询失败,请重试”,而不是崩溃。
(五)第三步:进阶——多Agent系统的设计(可选)
如果想让Agent能完成更复杂的任务,比如“举办一场线上会议”,可以设计多Agent系统,让多个Agent协作完成任务。比如:
- 经理Agent:负责分配任务,协调其他Agent;
- 会议策划Agent:负责设计议程;
- 技术支持Agent:负责搭建会议平台;
- 邀请Agent:负责邀请嘉宾。
提示设计示例(经理Agent的提示):
你是经理Agent,需要协调其他Agent完成“举办一场线上会议”的任务。请按照以下步骤思考:
1. 任务分解:将“举办线上会议”分解为哪些子任务?(比如议程设计、平台搭建、嘉宾邀请)
2. Agent分配:将每个子任务分配给对应的Agent(比如“议程设计”分配给会议策划Agent);
3. 进度跟踪:跟踪每个Agent的任务进度,确保按时完成;
4. 结果整合:将各个Agent的结果整合,反馈给用户。
请用自然语言写出你的思考过程,并分配任务给对应的Agent。
效果:经理Agent会分配任务给其他Agent,比如“请会议策划Agent设计会议议程”,其他Agent完成任务后向经理Agent汇报,经理Agent再整合结果反馈给用户。
四、总结:成为Agentic AI提示工程架构师的关键
通过本文的学习,我们掌握了Agentic AI的核心逻辑(“思考-工具-反馈”循环),拆解了真实案例的提示设计,并用LangChain搭建了一个简单的Agentic系统。总结一下,成为Agentic AI提示工程架构师的关键:
- 学会“结构化思考”:用“步骤引导”让Agent的思考更有逻辑,比如“问题→数据→工具→行动”;
- 掌握“工具调用技巧”:用“格式约束”和“参数说明”让Agent能正确调用工具,比如
<|FunctionCallBegin|>; - 培养“反思能力”:用“反馈提示”让Agent能分析结果,调整策略,比如“这个结果能解决问题吗?”;
- 实践“系统设计”:用Agent框架(比如LangChain)搭建可复用的Agent系统,比如“旅游规划Agent”“数据分析Agent”。
五、行动号召:动手实践,成为Agentic AI的先行者
现在,轮到你动手实践了!以下是几个实践项目,你可以尝试做:
- 论文总结Agent:让Agent自动下载论文(用
requests调用arxiv API)、提取核心观点(用大模型)、生成总结(用自然语言); - 代码调试Agent:让Agent自动接收用户的代码问题(比如“我的Python代码报错了”)、分析错误原因(用大模型)、调用工具(比如
Python REPL)调试代码; - 电商客服Agent:让Agent自动处理用户的问题(比如“我的订单还没发货”)、调用工具(比如数据库查询订单状态)、生成回复(用自然语言)。
如果你在实践中遇到问题,欢迎在评论区留言,我们一起讨论!
最后,送给大家一句话:Agentic AI不是“未来的技术”,而是“现在的机会”。作为提示工程架构师,我们需要提前掌握Agentic系统的设计技巧,才能在未来的AI时代占据先机!
作者:[你的名字]
公众号:[你的公众号](分享更多AI技术干货)
GitHub:[你的GitHub](本文代码开源,欢迎star)
更多推荐

所有评论(0)