首页 › AI Agent › AI Agent 开发实战 › AI Agent 全链路搭建教程

AI Agent 全链路搭建教程

Bot 和 Agent 的区别​

传统 ChatBot 的工作方式:​

​

用户提问 → 匹配关键词 → 返回预设答案​

​

Agent 的工作方式:​

​

用户提问 → 思考该做什么 → 调用工具 → 观察结果 → 再思考 → ... → 给出答案​

​

​

飞书文档 - 图片

​

​

✅

核心区别在于 推理与行动的循环(Reasoning + Acting) 。​

​

Agent 的核心工作机制​

​

✅

循环的四个步骤:​

Thought(思考) :分析当前状态,决定下一步该做什么​

Action(行动) :选择一个 Tool 并传入参数执行​

Observation(观察) :获取 Tool 返回的结果​

Loop(循环) :带着新的观察结果回到 Thought,直到得出最终答案​

​

一个真实的 ReAct 执行轨迹:​

​

代码块​

Plain Text

Question: 张三上周买的 iPhone 15 发货了吗?​

Thought: 用户想知道订单发货状态。我需要先查询订单信息。​

Action: query_order(user_name="张三", product="iPhone 15")​

Observation: {"order_id": "ORD-2024-0612-001", "status": "shipped", ​

"carrier": "顺丰", "tracking_no": "SF1234567890"}​

Thought: 订单已发货,快递单号是 SF1234567890。我可以再查一下物流详情。​

Action: query_logistics(tracking_no="SF1234567890")​

Observation: {"current_status": "运输中", "location": "深圳转运中心", ​

"estimated_delivery": "2024-06-14"}​

​

​

从零搭建智能客服 Agent​

Step 1:环境准备​

bash​

​

代码块​

Plain Text

pip install langchain langchain-openai langchain-community​

pip install python-dotenv​

​

Python​

​

代码块​

TOML

# .env​

OPENAI_API_BASE="https://your-api-proxy.com/v1"​

OPENAI_API_KEY="sk-your-key"​

​

Step 2:定义 Tools​

Tool 是 Agent 可调用的外部功能,每个 Tool 需要:名称、描述、输入参数、执行函数。​

​

代码块​

SQL

from langchain.tools import BaseTool, StructuredTool​

from pydantic import BaseModel, Field​

import requests​

from typing import Optional​

# ========== Tool 1: 查询订单 ==========​

class OrderQueryInput(BaseModel):​

user_name: str = Field(description="用户姓名")​

product: Optional[str] = Field(default=None, description="商品名称(可选)")​

​

​

Tool 描述的写法很关键——Agent 靠描述来决定调用哪个 Tool。描述要写清楚:这个工具是做什么的、需要什么参数、返回什么。描述越清晰,Agent 的决策越准确。​

​

​

Step 3:创建 ReAct Agent​

​

​

​

代码块​

TOML

from langchain import hub​

from langchain_openai import ChatOpenAI​

from langchain.agents import create_react_agent, AgentExecutor​

import os​

​

# 加载 LLM​

llm = ChatOpenAI(​

model="gpt-4o-mini", # mini 版足够用,成本低​

temperature=0, # Agent 场景需要确定性​

openai_api_base=os.getenv("OPENAI_API_BASE"),​

​

运行后会看到完整的 ReAct 思考链:​

​

代码块​

Plain Text

> Entering new AgentExecutor chain...​

​

Thought: 用户想知道张三买的 iPhone 是否发货,并查询物流。​

我需要先查询订单信息。​

Action: query_order​

Action Input: {"user_name": "张三", "product": "iPhone"}​

Observation: 订单号: ORD-2024-0612-001, 商品: iPhone 15, 状态: shipped...​

​

Thought: 订单已发货,快递单号是 SF1234567890。我需要查询物流详情。​

Action: query_logistics​

Action Input: {"tracking_no": "SF1234567890"}​

Observation: 快递单号 SF1234567890 最新状态:运输中...​

​

Thought: 我已经获得了所有需要的信息,可以回答用户了。​

Final Answer: 张三,您的 iPhone 15 已于昨日发货...​

​

> Finished chain.​

​

Step 4:添加 Agent Memory(多轮对话能力)​

上面的 Agent 有个问题:每次对话都是独立的,记不住之前的交流。​

​

代码块​

TOML

from langchain.memory import ConversationBufferWindowMemory​

​

​

多轮对话中 Agent 会自动关联上下文。第二轮的"他"能被正确解析为"张三",就是因为 Memory 中保留了上一轮的信息。​

​

​

进阶:自定义复杂工具与错误处理​

4.1 带认证的工具调用​

​

代码块​

Python

import requests​

from typing import Dict​

​

class InternalAPIInput(BaseModel):​

endpoint: str = Field(description="API 端点路径")​

​

4.2 工具调用超时与重试​

​

代码块​

Python

from functools import wraps​

import time​

​

​

4.3 Agent 常见坑与解决方案​

​

​

FAQ​

Q1:ReAct 和 Function Calling 有什么区别?​

​

Function Calling 是模型输出结构化函数调用,由外部执行;ReAct 是在 Function Calling 基础上增加了推理循环(Thought → Action → Observation)。OpenAI 的模型原生支持 Function Calling,LangChain 的 ReAct 是更上层的封装。​

​

Q2:Tool 数量多了 Agent 会混乱吗?​

​

一般 5-10 个 Tool 表现稳定。超过 15 个建议做 Tool Router——先让 Agent 选择大类,再在子类中选择具体 Tool。​

​

Q3:Agent 调用外部 API 安全吗?​

​

需要做好权限控制:Tool 内部做参数校验、API 调用加认证令牌、敏感操作(如转账)需要人工确认。​

​

Q4:可以用国产模型做 Agent 吗?​

​

可以。DeepSeek-V2、Qwen-Max、GLM-4 都支持 Function Calling。效果上 GPT-4o > DeepSeek-V2 > Qwen-Max,但差距在缩小。​

​

Q5:Agent 和 RAG 怎么结合?​

​

RAG 可以作为 Agent 的一个 Tool(search_knowledge_base)。Agent 决定何时查知识库、何时查订单系统、何时直接回答。​

​

​

​

总结​

AI Agent 的核心不是"用了什么框架",而是让大模型具备了自主决策和行动的能力。​

​

✅

ReAct 循环 是 Agent 的灵魂——思考→行动→观察→再思考​

Tool 描述 决定 Agent 的调用准确率——描述要像写给新手教程一样清晰​

Memory 让 Agent 能处理多轮复杂对话——但注意控制长度​

错误处理 不能少——超时、重试、最大迭代次数都是生产必备​

和 RAG 结合 是终极形态——Agent 决定查什么,RAG 提供查的能力​

​

​