创建agent需要model、memory、prompt、agent执行器等搭建Agent框架先将其主要功能封装在一个类中。from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder from langchain.agents import create_openai_tools_agent,AgentExecutor,tool import os os.environ[OPENAI_API_KEY] sk-xxxxxxxxxx os.environ[OPENAI_API_BASE] url #代理地址 tool def test(): Test tool return test class Master: def __init__(self): self.chatmodel ChatOpenAI( modelgpt-3.5-turbo-0125, temperature0, streamingTrue, ) self.MEMORY_KEY chat_history self.SYSTEMPL self.prompt ChatPromptTemplate.from_messages( [ (system, 你是一个助手协助用户完成任务。), MessagesPlaceholder(variable_nameagent_scratchpad), (user, {input}), ] ) self.memory tools [test] agent create_openai_tools_agent( self.chatmodel, toolstools, promptself.prompt, ) self.agent_executor AgentExecutor( agentagent, toolstools, verboseTrue, ) def run(self,query): result self.agent_executor.invoke({input: query}) return result随后在chat接口实例化对象运行项目开始测试。app.post(/chat) def chat(query:str): master Master() return master.run(query)在此需要注意1.Agent智能体创建的方法1.initialize_agent作用通用的 Agent 创建入口支持多种AgentType如ZERO_SHOT_REACT_DESCRIPTION、CHAT_CONVERSATIONAL_REACT_DESCRIPTION等。特点封装程度高内部自动生成 prompt通过AgentType枚举选择不同的 agent 行为模式直接返回 AgentExecutor可直接执行设计上更像配置式灵活性较低适用模型任意 LLM包括非 OpenAI示例from langchain.agents import initialize_agent, AgentType from langchain_openai import ChatOpenAI from langchain.tools import Tool # 定义一个简单工具 def add_numbers(a: int, b: int) - int: return a b tools [ Tool( nameAddNumbers, funclambda x: add_numbers(*map(int, x.split())), description输入两个整数返回它们的和 ) ] # 创建 LLM llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 创建 Agent agent initialize_agent( toolstools, llmllm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, verboseTrue ) # 运行 agent.run(请用 AddNumbers 计算 12 和 30 的和)2.create_openai_tools_agent作用专门为OpenAI Functions API即 function calling设计的 Agent 创建方法。特点需要手动传入 prompt自由度极高返回的是Runnable对象可以被链式调用必须配合 AgentExecutor 使用职责分离更清晰专为 OpenAI 的函数/工具调用优化适用模型仅支持 OpenAI function calling 模型示例from langchain.agents import create_openai_tools_agent, tool from langchain_openai import ChatOpenAI from langchain.agents import tool # 定义工具使用 tool 装饰器 tool def multiply_numbers(a: int, b: int) - int: 返回两个整数的乘积 return a * b # 创建 LLM必须是支持 function calling 的模型 llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 创建 Agent agent create_openai_tools_agent(llm, [multiply_numbers]) # 运行 result agent.invoke({input: 请用 multiply_numbers 计算 6 和 7 的乘积}) print(result)LangChain 官方明确建议新项目v0.1.0 使用create_openai_tools_agent这类新函数逐步淘汰initialize_agent。2.MessagesPlaceholderMessagesPlaceholder是LangChain框架中ChatPromptTemplate的一种特殊占位符用于在提示词模板中动态插入一组已有的消息通常是多轮对话的历史记录。它是 Agent 的草稿纸记录整个思考→行动→观察的过程。它的主要作用是保留对话上下文在调用模型时把之前的聊天记录插入到提示词中。灵活插入消息列表不需要提前知道有多少条历史消息。与多轮对话记忆Memory配合常用于ConversationBufferMemory、ConversationBufferWindowMemory等。通俗理解你可以把它想象成一个草稿纸占位符variable_nameagent_scratchpad就像在说这里预留一个位置放 Agent 的草稿纸运行时LangChain 会自动把 Agent 的思考过程、中间步骤、工具调用记录等放到这个位置实际工作流程# 典型的 Agent 提示模板结构 prompt ChatPromptTemplate.from_messages([ (system, 你是一个有用的助手可以调用工具解决问题。), (user, {input}), # 用户输入 (placeholder, {agent_scratchpad}), #这里就是 MessagesPlaceholder ])当 Agent 运行时第一轮agent_scratchpad是空的调用工具后把思考→调用工具→得到结果的过程添加到agent_scratchpad下一轮Agent 可以看到之前的思考过程决定下一步