AI Agent 实战教程(二):Prompt 工程与工具调用
ReAct Prompt
ReAct 提供了一种更易于人类理解、诊断和控制的决策和推理过程。
它的典型流程如下图所示,可以用一个有趣的循环来描述:
思考(Thought)→行动(Action)→观察(Observation),简称TAC循环。
循环迭代以上流程,如下图:

Prompt设计如下所示:包含了说明解决问题的方法,输入和输出,样例和用户问题
代码块
Python
"""
prompts/chat_prompts.py - ChatPromptTemplate 高级用法
"""from langchain_core.prompts import (
ChatPromptTemplate,
PromptTemplate,
MessagesPlaceholder,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
from langchain_core.messages import HumanMessage, AIMessage, SystemMessage
# ========================# 1. 基础用法:from_template# ========================def basic_prompt():"""最简单的 Prompt 模板"""
prompt = ChatPromptTemplate.from_template("给我讲一个关于{topic}的笑话")# 变量:{topic}# 格式化
messages = prompt.format_messages(topic="程序员")print(messages) # [HumanMessage(content='给我讲一个关于程序员的笑话')]# ========================# 2. 多角色对话:from_messages# ========================def multi_role_prompt():"""定义多角色对话模板"""
prompt = ChatPromptTemplate.from_messages([# 系统消息:设定角色和行为
("system", "你是一个专业的{role},擅长{skill}。"),# 历史消息占位符
MessagesPlaceholder(variable_name="history"),# 用户消息
("human", "{question}"),
])
# 格式化
1.3 Prompt 模板最佳实践
2. OutputParser:结构化输出
2.1 为什么需要 OutputParser
2.2 常用 OutputParser
代码块
Python
"""
parsers/output_parsers.py - LangChain OutputParser 使用
"""from langchain_core.output_parsers import (
StrOutputParser,
JsonOutputParser,
CommaSeparatedListOutputParser,
)
from langchain_core.prompts import ChatPromptTemplate
from pydantic import BaseModel, Field
from models import get_chat_model
# ========================# 1. StrOutputParser:最简单# ========================def str_parser_example():"""字符串输出解析器"""
model = get_chat_model("deepseek")
prompt = ChatPromptTemplate.from_template("讲一个关于{topic}的笑话")
chain = prompt | model | StrOutputParser()
result = chain.invoke({"topic": "程序员"})print(f"类型: {type(result)}") # <class 'str'>print(f"内容: {result}")
3. LangChain Tools:定义工具
3.1 Tool 的核心概念
3.2 定义工具的三种方式
代码块
Go
"""
tools/basic_tools.py - LangChain 工具定义
"""import json
from langchain_core.tools import tool, StructuredTool
from pydantic import BaseModel, Field
# ========================# 方式一:@tool 装饰器(推荐)# ========================@tooldef get_weather(city: str) -> str:"""
查询指定城市的天气信息
Args:
3.3 工具调用流程
4. LangChain Agent:工具调用 Agent
4.1 Agent 类型对比
4.2 构建 OpenAI Tools Agent
代码块
Python
"""
agents/tools_agent.py - 使用 LangChain 构建工具调用 Agent
"""from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.agents.openai_tools.base import create_openai_tools_agent
from tools.basic_tools import get_weather, calculate, search_knowledge
# ========================# 1. 创建工具调用 Agent# ========================def create_tools_agent():"""创建支持 Function Calling 的 Agent"""# 定义工具列表
tools = [get_weather, calculate, search_knowledge]
# 获取模型from models import get_chat_model
5. 构建 ReAct Agent
5.1 ReAct 工作流程
5.2 完整 ReAct Agent 实现
代码块
Python
"""
agents/react_agent.py - 完整的 ReAct Agent 实现
5.3 Agent 执行流程图
6. 小结与下一步
6.1 本篇回顾
6.2 关键收获
PromptTemplate 让 Prompt 管理变得结构化和可复用
OutputParser 让 LLM 输出变得可预测、可解析
@tool 装饰器 让工具定义变得极其简单
AgentExecutor 自动管理 Agent 的执行循环
6.3 下一篇预告
第三篇:记忆与数据库集成 将深入讲解:
•
LangChain Memory 组件
•
ConversationBufferMemory / ConversationSummaryMemory
•
向量数据库集成(ChromaDB)
•
构建长期记忆系统