AI Agent开发实战:从ai-agent-book源码起步,手把手搭建你的第一个智能体
为什么从这本书开始?
昨天我们介绍了李博杰的《深入理解AI Agent》开源首日即获1734星。今天,我们就从这本书的配套源码出发,手把手带你搭建一个真正能用的AI Agent——不只是”Hello World”,而是一个能执行多步搜索、提取信息、生成摘要的研究助手Agent。

环境准备
在开始之前,确保你的环境满足以下条件:
# Python 3.10+
python --version
# 安装核心依赖
pip install openai langchain langchain-community duckduckgo-search python-dotenv
# 克隆ai-agent-book源码(获取配套示例)
git clone https://github.com/bojieli/ai-agent-book.git
cd ai-agent-book/code/chapter-03第一步:理解Agent的核心循环
任何AI Agent都遵循同一个基本循环——感知→思考→行动→观察。我们可以用一段伪代码来理解:
while task_not_complete:
context = gather_observations() # 感知:收集环境和工具返回的信息
thought = llm.reason(context) # 思考:LLM决定下一步做什么
action = parse_action(thought) # 解析:从LLM输出中提取具体行动
result = execute_tool(action) # 行动:调用工具(搜索/计算/查询)
memory.append(result) # 观察:把结果存入记忆这个循环是所有Agent框架的基石。接下来我们用LangChain实现一个具体版本。
第二步:创建你的第一个研究助手Agent
将以下代码保存为 `research_agent.py`:
import os
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import Tool
from langchain_community.tools import DuckDuckGoSearchRun
from langchain.prompts import PromptTemplate
# 1. 初始化LLM
llm = ChatOpenAI(
model="gpt-4o",
temperature=0.3,
api_key=os.getenv("OPENAI_API_KEY")
)
# 2. 定义工具集
search = DuckDuckGoSearchRun()
tools = [
Tool(
name="WebSearch",
func=search.run,
description="搜索互联网获取最新信息。输入自然语言查询。"
),
]
# 3. 构建ReAct提示模板
prompt = PromptTemplate.from_template("""
你是一个研究助手Agent。使用以下工具完成任务:
工具列表:
{tools}
使用格式:
Question: 用户的问题
Thought: 我应该做什么
Action: 工具名称
Action Input: 工具输入
Observation: 工具返回的结果
... (重复 Thought/Action/Action Input/Observation)
Thought: 我现在知道最终答案了
Final Answer: 用中文回答用户的最终问题
开始!
Question: {input}
Thought: {agent_scratchpad}
""")
# 4. 创建Agent
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
max_iterations=5,
handle_parsing_errors=True
)
# 5. 运行
result = agent_executor.invoke({
"input": "请搜索2026年7月AI领域的重大新闻,并总结三个最重要的趋势。"
})
print(f"\n最终结果:\n{result['output']}")第三步:运行并观察Agent的思考过程
export OPENAI_API_KEY="your-key-here"
python research_agent.py你应该会看到类似这样的输出:
> Entering new AgentExecutor chain...
Thought: 用户想知道2026年7月的AI重大新闻,我需要搜索。
Action: WebSearch
Action Input: 2026年7月 artificial intelligence major news
Observation: [搜索结果...]
Thought: 从结果中我看到了几个关键事件...
Final Answer: 2026年7月AI领域的三大趋势...**关键洞察:** Agent的”verbose”模式让你能**看到LLM的每一步推理**——这是调试Agent行为最有效的方式。如果Agent在第3步就走偏了,你可以精确调整提示词或工具描述。
第四步:给你的Agent添加记忆
基础Agent有一个致命缺陷:每次对话都是失忆的。下面添加对话记忆:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(
memory_key="chat_history",
return_messages=True
)
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
memory=memory, # 添加记忆
verbose=True,
max_iterations=5
)
# 多轮对话测试
agent_executor.invoke({"input": "搜索OpenAI最近的新闻"})
agent_executor.invoke({"input": "基于刚才的搜索结果,分析对行业的影响"})现在Agent能记住之前搜到了什么,第二次对话不需要重复搜索。
第五步:生产环境避坑指南
在实验中跑通的Agent,到了生产环境往往原形毕露。三个最常见的坑:
坑一:工具调用死循环。 Agent有时会反复调用同一个工具而不推进任务。解决方案:设置`max_iterations=5`,超过则强制输出当前最佳答案。
坑二:API成本爆炸。 一个复杂的Agent任务可能消耗$0.5-2的API费用。监控每个任务的token消耗,对大任务设置预算上限。
坑三:幻觉放大。 LLM本身就有幻觉,Agent的多步推理会放大这个错误——第一步的小偏差到第五步可能变成完全错误的方向。关键防御:在关键决策步骤之后加入验证环节。
从ai-agent-book的源码出发,我们只用不到100行Python代码就构建了一个可用的研究助手Agent。真实场景下,你可以替换搜索工具为内部知识库查询、添加数据分析工具、接入邮件系统——Agent的能力上限取决于你给它的工具和你的想象力。
进阶玩法:让Agent调用自定义API
当你熟练掌握了基础Agent的构建后,下一步是接入你自己的业务系统。假设你有一个内部知识库API,想让Agent能搜索其中的文档:
import requests
from langchain.tools import Tool
def search_internal_kb(query: str) -> str:
"""搜索内部知识库"""
response = requests.post(
"https://your-api.example.com/kb/search",
json={"query": query, "top_k": 5},
headers={"Authorization": f"Bearer {os.getenv('KB_API_KEY')}"}
)
results = response.json()
return "\n\n".join([f"- {r['title']}: {r['snippet']}" for r in results])
# 将自定义工具加入Agent的工具集
kb_tool = Tool(
name="InternalKB",
func=search_internal_kb,
description="搜索公司内部知识库。当用户询问公司内部文档、产品规格、技术规范时使用。"
)
tools.append(kb_tool)这样,你的Agent就能同时搜索互联网和内部知识库,在两种信息来源之间自由切换。
常见踩坑与解决方案
在实际项目中,新手最容易遇到的三个问题及对应解法:
问题一:Agent”答非所问”。 根源往往是工具描述不够精确。如果你的搜索工具描述写的是”搜索信息”,Agent可能用它来搜索任何东西,包括计算题。正确做法是明确边界——”用于搜索互联网上的实时信息,不应用于数学计算或代码执行”。
问题二:API费用失控。 一个简单的测试对话消耗$0.3看似不多,但如果你的Agent在生产环境中每天处理1000次对话,日成本就可能达到$300。解决思路:(a) 给高频任务加缓存;(b) 用更便宜的小模型做简单判断;(c) 设置每用户每日token预算上限。
问题三:Agent的安全边界。 当你的Agent能执行Shell命令、调用数据库、发送邮件时,一个prompt注入攻击就可能造成灾难。防御原则:(a) 所有高风险操作加人工确认;(b) 限制Agent的文件系统访问范围;(c) 所有API调用走网关进行审计和限流。
以上这些进阶技巧,在ai-agent-book的第四章和第七章有更系统的阐述。从开源书籍的理论到实战代码的验证,再到生产环境的打磨——这是成为AI Agent工程师的最短路径。
🔥 关注LC智趣厅,获取更多AI开发的硬核实战教程。
— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn
