摘要:本文面向开发者,旨在提供一份可落地的 AI Agent(智能体)构建教程。我们将摒弃空泛概念,直接使用 LangChain 框架,通过一个 “自动化科研助手” 的完整案例,拆解 Agent 的核心模块(感知、规划、行动、记忆),并附上可运行的代码片段和关键配置要点。
一、核心理念:Agent 即“可编程的自动化流程”
在深入代码之前,请先建立一个正确的认知:一个 Agent 的本质是一个增强了推理和决策能力的自动化脚本。它不再是一条直线,而是一个由 LLM(大语言模型) 作为调度中心的循环工作流。
关键公式:
Agent = LLM(大脑) + Tools(手脚) + Memory(记忆) + Orchestration(编排框架)
你的首要任务不是追求通用人工智能(AGI),而是用这个模式去解决一个具体、可定义的任务。
二、技术选型:为什么是 LangChain?
对于快速原型开发,我们选择 LangChain,原因如下:
- 组件化:提供了
Agent,Tools,Memory,Chains等高层抽象,开箱即用。 - 工具生态丰富:集成数百种工具(搜索引擎、API、数据库等)。
- 多模型支持:轻松切换 OpenAI GPT、Anthropic Claude、国内大模型等后端。
- 社区活跃:遇到问题,容易找到解决方案和最佳实践。
安装基础环境:
bash
pip install langchain langchain-openai langchain-community arxiv
三、实战:构建“Arxiv 论文筛选助手”
目标:Agent 能根据关键词自动获取最新论文,并判断其是否与“大模型高效微调”相关,将相关论文摘要保存到 Markdown 文件。
步骤1:定义工具(Tools)—— Agent 的“手脚”
工具是 Agent 与外界交互的接口。我们先定义两个核心工具:
python
from langchain.tools import Tool
from langchain_community.utilities import ArxivAPIWrapper
import json
# 工具1:Arxiv 搜索工具
arxiv_wrapper = ArxivAPIWrapper(top_k_results=3, doc_content_chars_max=2000)
arxiv_tool = Tool(
name="Arxiv Search",
func=arxiv_wrapper.run,
description="Useful for searching academic papers from Arxiv. Input should be a search query."
)
# 工具2:文件写入工具(示例)
def write_to_markdown(filename: str, content: str):
"""将内容写入 Markdown 文件"""
with open(filename, 'a', encoding='utf-8') as f:
f.write(content + "\n\n---\n")
return f"Successfully wrote to {filename}"
write_tool = Tool(
name="Write to Markdown",
func=lambda params: write_to_markdown(**json.loads(params)), # 注意参数处理
description="Useful for saving results to a markdown file. Input should be a JSON string with 'filename' and 'content' keys."
)
步骤2:构建 Agent 大脑——使用 ReAct 框架
LangChain 提供了多种 Agent 类型,我们使用经典的 ReAct 框架,它让 Agent 能够“思考-行动-观察”循环。
python
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub
from langchain_openai import ChatOpenAI
# 1. 加载一个预置的 ReAct 提示词模板
prompt = hub.pull("hwchase17/react")
# 2. 初始化 LLM(这里以 OpenAI 为例,可替换为其他模型)
llm = ChatOpenAI(model="gpt-4-turbo-preview", temperature=0, openai_api_key="your_key")
# 3. 组合工具列表
tools = [arxiv_tool, write_tool]
# 4. 创建 ReAct Agent
agent = create_react_agent(llm, tools, prompt)
# 5. 创建执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
步骤3:运行并观察 Agent 的思考过程
启动 Agent,给它一个复杂的指令,观察其 ReAct 循环。
python
# 定义一个复杂任务
task = """
请搜索最近关于 'Large Language Model Fine-tuning' 的论文。
从中找出主要讨论 '高效微调'(如LoRA, QLoRA)方法的论文。
将其中一篇你认为最相关的论文的标题、作者和摘要,保存到名为 'relevant_papers.md' 的文件中。
"""
result = agent_executor.invoke({"input": task})
print(result["output"])
开启 verbose=True 后,你将在控制台看到类似下面的 Chain-of-Thought 输出,这是理解 Agent 工作的关键:
text
> Entering new AgentExecutor chain...
我需要找到关于大语言模型高效微调的最新论文。
行动: Arxiv Search
行动输入: Large Language Model Fine-tuning efficient LoRA QLoRA
观察: 返回了3篇论文...
思考: 第一篇的摘要提到了LoRA和内存效率,这很相关。
行动: Write to Markdown
行动输入: {"filename": "relevant_papers.md", "content": "标题: ...\n摘要: ..."}
观察: Successfully wrote to relevant_papers.md
思考: 任务完成。
> Finished chain.
四、关键解析与进阶优化
- 提示词工程:
hwchase17/react是通用模板。对于特定领域,你需要自定义提示词,在SystemPrompt中明确角色、规则和输出格式,这是提升 Agent 表现最有效的手段。 - 记忆(Memory) :为 Agent 添加
ConversationBufferMemory,使其能记住对话历史,处理多轮交互。 - 工具增强:集成更强大的工具,如
SerpAPI(搜索引擎)、Requests(调用任意API)、PythonREPLTool(执行代码),可大幅扩展 Agent 能力边界。 - 错误处理:
handle_parsing_errors=True很重要,能防止 LLM 输出格式错误时整个程序崩溃。 - 转向生产:考虑使用 LangGraph 来编排更复杂、有状态的工作流,或用 FastAPI 将你的 Agent 封装成 API 服务。
五、总结:从一个点到一个面
通过以上步骤,你已经拥有了一个能感知(搜索论文)、思考(判断相关性)、行动(保存文件)的 最小可行 Agent。
下一步的迭代路径非常清晰:
- 增加工具 → 让它能自动发送邮件通知、或保存到 Notion。
- 增加记忆 → 让它记住你过去喜欢哪些研究方向。
- 优化流程 → 用 LangGraph 实现每天定时自动执行。
技术的魅力在于动手实践。尝试用这个模式,将你日常工作中重复、枯燥且需要一点判断力的任务自动化,这就是属于你的“副驾驶”的真正起点。