创建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(
            model="gpt-3.5-turbo-0125",
            temperature=0,
            streaming=True,
        )
        self.MEMORY_KEY = "chat_history"
        self.SYSTEMPL = ""  
        self.prompt = ChatPromptTemplate.from_messages(
            [
                ("system", "你是一个助手,协助用户完成任务。"),
                MessagesPlaceholder(variable_name="agent_scratchpad"),
                ("user", "{input}"),
            ]
        )  
        self.memory = ""
        tools = [test]
        agent = create_openai_tools_agent(
            self.chatmodel,
            tools=tools,
            prompt=self.prompt,
        )
        self.agent_executor = AgentExecutor(
            agent=agent,
            tools=tools,
            verbose=True,
        )

    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_DESCRIPTIONCHAT_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(
        name="AddNumbers",
        func=lambda x: add_numbers(*map(int, x.split())),
        description="输入两个整数,返回它们的和"
    )
]

# 创建 LLM
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 创建 Agent
agent = initialize_agent(
    tools=tools,
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 运行
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(model="gpt-4o-mini", temperature=0)

# 创建 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.MessagesPlaceholder 

MessagesPlaceholder 是 LangChain 框架中 ChatPromptTemplate 的一种特殊占位符,用于在提示词模板中动态插入一组已有的消息(通常是多轮对话的历史记录)。它是 Agent 的"草稿纸",记录整个思考→行动→观察的过程。

它的主要作用是:

  • 保留对话上下文:在调用模型时,把之前的聊天记录插入到提示词中。
  • 灵活插入消息列表:不需要提前知道有多少条历史消息。
  • 与多轮对话记忆(Memory)配合:常用于 ConversationBufferMemoryConversationBufferWindowMemory 等。

通俗理解:

你可以把它想象成一个"草稿纸占位符"

  • variable_name="agent_scratchpad" 就像在说:"这里预留一个位置,放 Agent 的草稿纸"

  • 运行时,LangChain 会自动把 Agent 的思考过程、中间步骤、工具调用记录等放到这个位置

实际工作流程:

# 典型的 Agent 提示模板结构
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有用的助手,可以调用工具解决问题。"),
    ("user", "{input}"),  # 用户输入
    ("placeholder", "{agent_scratchpad}"),  #这里就是 MessagesPlaceholder
])

当 Agent 运行时:

  1. 第一轮agent_scratchpad 是空的

  2. 调用工具后:把"思考→调用工具→得到结果"的过程添加到 agent_scratchpad

  3. 下一轮:Agent 可以看到之前的思考过程,决定下一步

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐