智能体从0到1,如何亲手搭建一个属于你的“贾维斯”?

31 阅读5分钟

摘要:本文面向开发者,旨在提供一份可落地的 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.

四、关键解析与进阶优化

  1. 提示词工程hwchase17/react 是通用模板。对于特定领域,你需要自定义提示词,在 SystemPrompt 中明确角色、规则和输出格式,这是提升 Agent 表现最有效的手段。
  2. 记忆(Memory) :为 Agent 添加 ConversationBufferMemory,使其能记住对话历史,处理多轮交互。
  3. 工具增强:集成更强大的工具,如 SerpAPI(搜索引擎)、Requests(调用任意API)、PythonREPLTool(执行代码),可大幅扩展 Agent 能力边界。
  4. 错误处理handle_parsing_errors=True 很重要,能防止 LLM 输出格式错误时整个程序崩溃。
  5. 转向生产:考虑使用 LangGraph 来编排更复杂、有状态的工作流,或用 FastAPI 将你的 Agent 封装成 API 服务。

五、总结:从一个点到一个面

通过以上步骤,你已经拥有了一个能感知(搜索论文)、思考(判断相关性)、行动(保存文件)的 最小可行 Agent

下一步的迭代路径非常清晰:

  • 增加工具 → 让它能自动发送邮件通知、或保存到 Notion。
  • 增加记忆 → 让它记住你过去喜欢哪些研究方向。
  • 优化流程 → 用 LangGraph 实现每天定时自动执行。

技术的魅力在于动手实践。尝试用这个模式,将你日常工作中重复、枯燥且需要一点判断力的任务自动化,这就是属于你的“副驾驶”的真正起点。