AI Agent 入门 AI Agent LangChain 入门教程 架构设计

AI Agent完整入门指南:从概念到第一个Agent

AIEng Hub
阅读约 25 分钟

引言

AI Agent(智能体)是2024年最热门的AI技术趋势之一。从AutoGPT到LangChain的Agent模块,从OpenAI的Function Calling到Claude的Computer Use,各大厂商都在布局这一领域。

但什么是AI Agent?它与传统的AI应用有什么区别?如何构建一个生产级的Agent系统?本文将系统性地回答这些问题。

什么是AI Agent?

核心定义

AI Agent是一个能够自主感知环境、做出决策并执行动作的智能系统。与传统的大模型应用相比,Agent具有以下特点:

特性传统AI应用AI Agent
交互方式单次请求-响应多轮自主执行
工具使用预定义函数动态选择和调用
记忆能力通常无状态长期记忆维护
规划能力简单流程复杂任务分解
自主性被动响应主动决策

Agent的核心组件

一个完整的AI Agent通常包含以下组件:

┌─────────────────────────────────────────┐
│              AI Agent 架构               │
├─────────────────────────────────────────┤
│                                         │
│  ┌─────────┐    ┌─────────┐    ┌─────┐ │
│  │  规划   │───→│  记忆   │───→│ 工具 │ │
│  │Planning │    │Memory   │    │Tools │ │
│  └────┬────┘    └────┬────┘    └──┬──┘ │
│       │              │            │    │
│       └──────────────┼────────────┘    │
│                      ↓                 │
│              ┌─────────────┐           │
│              │   LLM核心   │           │
│              │   (大脑)    │           │
│              └─────────────┘           │
│                      │                 │
│       ┌──────────────┼────────────┐    │
│       ↓              ↓            ↓    │
│  ┌─────────┐    ┌─────────┐    ┌─────┐ │
│  │环境感知 │    │决策输出 │    │执行  │ │
│  └─────────┘    └─────────┘    └─────┘ │
│                                         │
└─────────────────────────────────────────┘
  1. LLM核心(大脑): 负责理解、推理和决策
  2. 规划(Planning): 将复杂任务分解为可执行的子任务
  3. 记忆(Memory): 存储短期上下文和长期知识
  4. 工具(Tools): 与外部世界交互的接口
  5. 执行(Action): 实际执行决策结果

Agent的类型

按决策方式分类

1. 单步Agent(Simple Agent)

  • 每次只做一个决策
  • 适合简单、明确的任务
  • 实现简单,可控性高

2. 多步Agent(Multi-step Agent)

  • 能够进行多轮思考和执行
  • 适合复杂、需要分解的任务
  • 需要更复杂的规划机制

3. 多Agent系统(Multi-Agent System)

  • 多个Agent协作完成任务
  • 每个Agent负责特定子任务
  • 适合超复杂任务和模拟场景

按架构模式分类

1. ReAct模式

  • Reasoning(推理)+ Acting(执行)交替进行
  • 最流行的Agent架构
  • 代表作:LangChain的Agent

2. Plan-and-Execute模式

  • 先规划,后执行
  • 适合需要长期规划的任务
  • 代表作:Plan-and-Solve

3. Reflection模式

  • 执行后自我反思和改进
  • 能够自我优化
  • 代表作:Reflexion

实战:构建你的第一个Agent

环境准备

# 创建项目目录
mkdir my-first-agent
cd my-first-agent

# 初始化Python项目
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install langchain langchain-openai python-dotenv

# 创建环境变量文件
echo "OPENAI_API_KEY=your-api-key" > .env

基础Agent实现

# agent.py
import os
from dotenv import load_dotenv
from langchain.agents import AgentType, initialize_agent
from langchain_openai import ChatOpenAI
from langchain.tools import Tool
from langchain.utilities import SerpAPIWrapper

# 加载环境变量
load_dotenv()

# 定义工具
search = SerpAPIWrapper()
tools = [
    Tool(
        name="Search",
        func=search.run,
        description="用于搜索实时信息的工具"
    ),
]

# 初始化LLM
llm = ChatOpenAI(
    model="gpt-4",
    temperature=0
)

# 初始化Agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 运行Agent
if __name__ == "__main__":
    result = agent.run("今天北京的天气怎么样?适合穿什么衣服?")
    print(result)

带记忆的Agent

# agent_with_memory.py
from langchain.memory import ConversationBufferMemory
from langchain.agents import initialize_agent
from langchain_openai import ChatOpenAI

# 初始化记忆
memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)

# 初始化Agent(带记忆)
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
    memory=memory,
    verbose=True
)

# 多轮对话
if __name__ == "__main__":
    # 第一轮
    result1 = agent.run("我叫张三")
    print(result1)
    
    # 第二轮(Agent应该记得名字)
    result2 = agent.run("我的名字是什么?")
    print(result2)

Agent开发最佳实践

1. 工具设计原则

好的工具应该:

  • 功能单一明确
  • 有清晰的输入输出定义
  • 包含详细的描述文档
  • 有适当的错误处理
# 示例:设计良好的工具
from langchain.tools import StructuredTool
from pydantic import BaseModel, Field

class CalculatorInput(BaseModel):
    expression: str = Field(description="数学表达式,如 '2 + 2'")

def calculator(expression: str) -> str:
    """计算数学表达式的值"""
    try:
        # 安全计算
        allowed_names = {"__builtins__": {}}
        result = eval(expression, allowed_names, {})
        return str(result)
    except Exception as e:
        return f"计算错误: {str(e)}"

calc_tool = StructuredTool.from_function(
    func=calculator,
    name="Calculator",
    description="计算数学表达式,支持 +, -, *, /, ** 等运算",
    args_schema=CalculatorInput,
)

2. 提示工程技巧

系统提示设计:

system_prompt = """你是一个专业的AI助手,擅长使用各种工具解决复杂问题。

工作原则:
1. 先理解用户需求,明确任务目标
2. 分析可用工具,选择最合适的
3. 如果需要,将任务分解为多个步骤
4. 每一步都要验证结果的正确性
5. 最终给出完整、准确的回答

注意事项:
- 如果工具调用失败,尝试其他方法
- 如果信息不足,主动向用户询问
- 保持回答简洁明了,避免冗余
"""

3. 错误处理与重试

from tenacity import retry, stop_after_attempt, wait_exponential

@retry(
    stop=stop_after_attempt(3),
    wait=wait_exponential(multiplier=1, min=4, max=10)
)
def run_agent_with_retry(agent, query):
    try:
        return agent.run(query)
    except Exception as e:
        print(f"执行失败: {e}")
        raise

常见陷阱与解决方案

陷阱1:工具选择错误

问题:Agent选择了不合适的工具,导致任务失败。

解决

  • 优化工具描述
  • 添加工具使用示例
  • 实现工具选择验证

陷阱2:无限循环

问题:Agent陷入循环,不断重复相同的动作。

解决

  • 设置最大迭代次数
  • 添加循环检测机制
  • 实现超时控制
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    max_iterations=5,  # 最大迭代次数
    early_stopping_method="generate",  # 超时后的处理方式
)

陷阱3:上下文溢出

问题:长对话导致token数超限。

解决

  • 使用摘要记忆替代完整记忆
  • 定期清理历史记录
  • 实现滑动窗口记忆

进阶:自定义Agent

使用LangGraph构建复杂Agent

# langgraph_agent.py
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator

class AgentState(TypedDict):
    messages: Annotated[list, operator.add]
    next_step: str

# 定义节点
def should_continue(state):
    messages = state['messages']
    last_message = messages[-1]
    
    # 判断是否需要继续
    if "最终答案" in last_message.content:
        return END
    return "continue"

def call_tool(state):
    # 调用工具的节点
    messages = state['messages']
    # ... 工具调用逻辑
    return {"messages": [tool_result]}

# 构建图
workflow = StateGraph(AgentState)

# 添加节点
workflow.add_node("agent", call_model)
workflow.add_node("tool", call_tool)

# 添加边
workflow.set_entry_point("agent")
workflow.add_conditional_edges(
    "agent",
    should_continue,
    {
        "continue": "tool",
        END: END
    }
)
workflow.add_edge("tool", "agent")

# 编译
app = workflow.compile()

总结

本文系统介绍了AI Agent的核心概念、架构类型和实战开发方法。关键要点:

  1. Agent的本质:自主决策 + 工具使用 + 记忆维护
  2. 主流架构:ReAct、Plan-and-Execute、Reflection
  3. 开发框架:LangChain、AutoGen、LangGraph
  4. 最佳实践:工具设计、提示工程、错误处理

下一步建议:

  • 尝试构建一个简单的Agent解决实际问题
  • 深入学习Multi-Agent系统设计
  • 探索Agent的安全性和可控性

相关资源


本文最后更新于 2024-01-15,如有问题欢迎在社区讨论。