网盘下载

我用夸克网盘给你分享了「langchain资料包.zip」,点击链接或复制整段内容,打开「夸克APP」即可获取。

/137b3ZLmW0😕

网盘链接: 点击下载 langchain资料包.zip


AI Agent 入门案例:LangChain 从零搭建智能体

专栏: 实战教程

说明:Agent(智能体)= 能感知 → 思考 → 行动的 AI 程序。本篇用 LangChain 带你从零理解 Agent 原理,并完成一个可运行的入门案例:带工具调用的 ReAct Agent。


一、什么是 Agent?

一句话:

👉 Agent = 让 AI 自动帮你做事情。

对比 普通 LLM Agent
交互模式 你问一句,它答一句 自主规划、多步执行
能力边界 仅文本生成 可调工具、查数据、算数学
典型场景 聊天、写作 智能客服、自动化助手、数据分析

传统大模型不知道实时信息、不会精确计算、无法访问你的数据库。Agent 通过 Tool(工具) 扩展能力,通过 推理循环 决定调用顺序。


二、Agent 核心架构

                    ┌──────────────┐
                    │   用户输入    │
                    └──────┬───────┘
                           ↓
                    ┌──────────────┐
                    │     LLM      │ ← 大脑:理解意图、做决策
                    └──────┬───────┘
                           ↓
              ┌────────────┼────────────┐
              ↓            ↓            ↓
         ┌────────┐  ┌────────┐  ┌────────┐
         │ Tool A │  │ Tool B │  │ Tool C │
         │  搜索   │  │  计算   │  │  时间   │
         └────────┘  └────────┘  └────────┘
                           ↓
                    ┌──────────────┐
                    │  整合结果输出  │
                    └──────────────┘

核心组件:

组件 作用
LLM 理解问题、规划步骤、生成回答
Tools 外部能力(搜索、计算、API 调用)
Agent 决策逻辑:选哪个 Tool、何时停止
AgentExecutor 执行循环,控制最大迭代次数

三、ReAct 模式:最经典的 Agent

ReAct = Reasoning(推理)+ Acting(行动)

Agent 的每一步遵循:

Thought: 用户问了时间和计算,我需要两个工具
Action: get_current_time
Action Input: 
Observation: 2026-07-02 15:30:00

Thought: 现在调用计算器
Action: calculate
Action Input: 100/7
Observation: 14.285714285714286

Thought: 我已经有足够信息了
Final Answer: 现在是 2026-07-02 15:30:00,100 除以 7 约等于 14.29

LangChain 内置 ReAct Prompt(hwchase17/react),开箱即用。


四、入门案例:三工具 Agent

4.1 环境准备

pip install langchain langchain-openai python-dotenv

.env

OPENAI_API_KEY=your-deepseek-key
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

4.2 定义 Tools

Tool 的 docstring 至关重要——Agent 靠它判断何时调用:

from datetime import datetime
from langchain.tools import tool

@tool
def get_current_time() -> str:
    """获取当前日期和时间"""
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")

@tool
def calculate(expression: str) -> str:
    """计算数学表达式,如 '2+3*4' 或 '100/7'"""
    try:
        allowed = set("0123456789+-*/.() ")
        if not all(c in allowed for c in expression):
            return "表达式包含不允许的字符"
        return str(eval(expression))
    except Exception as e:
        return f"计算错误: {e}"

@tool
def search_knowledge(query: str) -> str:
    """搜索知识库,输入关键词"""
    kb = {
        "langchain": "LangChain 是 LLM 应用开发框架,支持 Chain/Agent/RAG",
        "agent": "Agent 是能自主调用工具完成任务的 AI 程序",
        "rag": "RAG 通过检索相关文档增强 LLM 回答质量",
    }
    for key, val in kb.items():
        if key in query.lower():
            return val
    return "未找到相关信息"

4.3 组装 Agent

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub

load_dotenv()

llm = ChatOpenAI(model=os.getenv("MODEL_NAME"), temperature=0)

tools = [get_current_time, calculate, search_knowledge]
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)

executor = AgentExecutor(
    agent=agent,
    tools=tools,
    verbose=True,              # 打印 Thought/Action/Observation
    max_iterations=5,          # 防止死循环
    handle_parsing_errors=True,
)

result = executor.invoke({
    "input": "现在几点?100除以7等于多少?另外 LangChain 是什么?"
})
print("\n最终回答:", result["output"])

4.4 运行

cd langchain资料包/04-LangChain常用代码示例/code
python 04_agent_tools.py

五、实战项目中的 Agent

资料包 langchain-rag-agent 项目将 Agent 封装为 HTTP 服务:

POST /api/agent/chat
{ "message": "现在几点?LangChain 是什么?" }

核心代码在 app/agent_service.py

  • 三个 Tool:get_current_time / calculate / search_knowledge
  • AgentService 类封装 Executor,懒加载
  • 通过 FastAPI 对外提供 REST 接口

启动项目:

cd langchain资料包/05-AI项目实战案例源码/langchain-rag-agent
python main.py
# 访问 http://127.0.0.1:8000/docs 测试 /api/agent/chat

六、Agent vs Chain:什么时候用哪个?

场景 推荐方案
固定流程(翻译→总结) Chain
需要根据输入选工具 Agent
知识库问答 RAG Chain
复杂多步 + 工具调度 Agent
多 Agent 协作 LangGraph(进阶)

简单规则:步骤固定用 Chain,步骤动态用 Agent。


七、自定义 Tool 实战

7.1 调用 HTTP API

import requests

@tool
def fetch_weather(city: str) -> str:
    """查询指定城市的天气信息"""
    # 替换为真实 API
    return f"{city}今天晴,25°C,湿度 60%"

7.2 查数据库

@tool
def query_orders(user_id: str) -> str:
    """查询用户的最近订单,输入用户 ID"""
    # 连接数据库查询
    return f"用户 {user_id} 最近 3 笔订单:..."

7.3 Tool 编写规范

规范 说明
docstring 清晰 描述功能 + 参数格式 + 示例
输入校验 过滤非法字符,防止注入
错误处理 返回可读错误信息,不要抛异常
单一职责 一个 Tool 只做一件事
返回字符串 Agent 需要文本形式的 Observation

八、常见问题

Q1:Agent 一直循环不停止?

设置 max_iterations=3~5,检查 Tool 是否返回了有效结果。

Q2:Agent 选错 Tool?

优化 Tool 的 docstring,名称要有语义(calculatetool1 好)。

Q3:Agent 比 Chain 慢很多?

Agent 每步都要 LLM 推理,多轮 Tool 调用 = 多次 API 请求。简单任务优先用 Chain。

Q4:如何给 Agent 加 Memory?

AgentExecutor 外包装 Memory Chain,或使用 LangGraph 管理状态。

Q5:下一步学什么?

  • search_knowledge 换成真实 RAG 检索 → RAG Agent
  • 学习 LangGraph 做多 Agent 协作
  • 阅读同目录《LangChain 项目实战源码》

九、验收清单

序号 任务 通过标准
1 跑通 04_agent_tools.py 终端打印 Thought/Action 链路
2 自定义 1 个 Tool Agent 能正确调用
3 测试复合问题 一次对话调用多个 Tool
4 启动实战项目 Swagger 测试 /api/agent/chat
5 理解 ReAct 格式 能读懂 verbose 输出

资料包下载

Agent 代码示例、实战项目、Prompt 模板均在网盘中:

👉 点击下载 langchain资料包.zip

04-LangChain常用代码示例/code/04_agent_tools.py     ← 本篇入门案例
05-AI项目实战案例源码/langchain-rag-agent/          ← Agent HTTP 服务
03-Prompt工程100+模板合集/                          ← Agent/RAG Prompt

本文配套 langchain资料包 Agent 模块,网盘链接见文首。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐