首页 › AI Agent › AI Agent 开发实战 › AI Agent 实战教程(二):Prompt 工程与工具调用

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)​

•

构建长期记忆系统​