作者以 LangChain、GPT-4o、Tavily 和 Python REPL 搭建 Agent,拆解模型、记忆、工具与执行循环四个核心组件。文章同时记录实际故障及 API 弃用问题,提醒读者不要直接照搬代码。
理论很清晰,现实却更混乱。老实说,也更有意思。
每个人都在谈论 AI Agent,但真正向你展示如何构建 Agent 的人却寥寥无几。所以,这篇文章会如实讲述我的经历:哪些方法有效、哪些地方出了问题,以及哪些事情让我感到意外。
在你开始复制代码之前,先提醒一句:LangChain 的 Agent API 变化很快,我构建这个项目时使用的一些 API 现在已经弃用了。我会在下文对应位置明确标注,而不是假装这件事没有发生——某种程度上,这正是本文想表达的重点。
在动手构建之前,有必要先准确界定我们究竟要构建什么。一个 AI Agent 需要具备四个要素:
缺少其中任何一个,你构建的都不能算是 Agent,只不过是一个包装得更漂亮的 prompt。
pip install langchain langchain-openai tavily-python python-dotenv
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_experimental.tools import PythonREPLTool
tools = [
TavilySearchResults(max_results=3),
PythonREPLTool()
]
这是自我第一次构建它以来变化最大的部分。下面是我最初使用的代码:
# what I originally used — this pattern is now deprecated
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent
from langchain import hub
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# ReAct = Reason + Act, the classic agent loop pattern
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
注意:create_react_agent 和 AgentExecutor 后来都已被弃用,取而代之的是 langchain.agents 中的 create_agent。其底层概念——模型、Tools,以及封装二者的 Loop——并没有改变,变化的是构造方式。如果你准备从头开始,请在此基础上构建之前,先查看 LangChain 文档中的最新函数签名。自我写下这篇实践指南以来,LangChain 的 API 确实已经变动了两次。
from langchain.agents import AgentExecutor
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True, # see the agent's thinking
max_iterations=10,
handle_parsing_errors=True
)
result = agent_executor.invoke({
"input": """
Research the current state of AI agents in enterprise software.
Find 3 specific companies using them, what they're doing,
and the results. Then write a structured summary.
"""
})
print(result["output"])
下面是通过 verbose=True 直接输出的 Agent 内心独白:
Thought: I need to search for information about AI agents
in enterprise software.
Action: tavily_search
Action Input: "AI agents enterprise software companies"
Observation: [search results...]
Thought: I found information about Klarna and Salesforce.
I need a third, more specific example.
Action: tavily_search
Action Input: "enterprise AI agent deployment results case study"
[continues for 6 more steps...]
Final Answer: [structured, sourced summary]
实时观察整个过程,确实是理解 Agent 与单次 prompt 有何不同的最佳方式。这不是什么魔法,而是一个被呈现出来的 Loop。
糟糕的 prompt:"Research AI agents"
Research AI agents in enterprise software. Find 3 companies,
what they built, specific results they reported, and format
as: Company | Use Case | Result
经验:Agent 和其他任何系统一样,都需要精确的目标。垃圾进,垃圾出——只不过输出的垃圾听起来更聪明而已。
Tavily search 曾因为错误的查询失败两次。我的第一个版本就这么……停下来了。
修复方法:设置 handle_parsing_errors=True,并在 Tool 调用外围添加重试逻辑。Agent 一定会撞墙,因此应该从一开始就做好应对准备,而不是等到生产环境中才发现问题。
早期版本曾陷入循环,把同一个搜索重复执行了十五次。设置 max_iterations=10 是一种简单粗暴的修复方式;真正解决问题的方法,则是改进 prompt engineering,明确告诉 Agent 什么时候应该停止。
Agent 曾信心十足地引用了一项统计数据,而它声称的来源根本不存在。
这是整篇文章中最重要的一条经验:Agent 会以十足的自信产生幻觉。任何重要的信息都必须验证,而且应该直接在 prompt 中加入来源检查要求,而不是只看表面就相信输出结果。
构建了几个 Agent 之后,下面是我的真实看法。
Agent 擅长:
Agent 不擅长:
最后一点尤其需要牢牢记住。一个自信满满却给出错误答案的 Agent,比一个明显失败的 Agent 更危险,因为它自身的输出中没有任何信息会提醒你进行复核。
如果你想进一步探索,不满足于只构建一个研究型 Agent,可以了解以下框架:
当一个 Agent 能够正常运行后,自然而然的下一步就是把几个 Agent 连接起来。下面是一个最精简的研究员与写作者协作团队:
from crewai import Agent, Task, Crew
researcher = Agent(
role="Research Analyst",
goal="Find accurate information about {topic}",
backstory="You're an expert researcher who finds and validates information.",
tools=[search_tool],
verbose=True
)
writer = Agent(
role="Content Writer",
goal="Write clear, engaging content",
backstory="You take research and turn it into compelling, accurate writing.",
verbose=True
)
research_task = Task(
description="Research {topic} thoroughly",
agent=researcher,
expected_output="Detailed research notes with sources"
)
writing_task = Task(
description="Write an article based on the research",
agent=writer,
expected_output="800-word article"
)
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task]
)
result = crew.kickoff(inputs={"topic": "AI agents in production"})
AI Agent 确实存在,也确实很有用。但在某些圈子里,它们也被过度炒作了。真相介于两者之间:
从简单的方案开始:一个 Agent、一个 Tool、一个任务。先让它正常运行,再考虑打造一家由 AI 自主运营的公司。
你正在用 Agent 构建什么?欢迎在评论区分享——我真的很好奇,现阶段大家有哪些实践已经取得了效果。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。