在这里插入图片描述

目录

  • 引言:什么是 LangChain Agent?

  • Agent 的核心组件

    • 2.1 LLM 模型(Model)

      • 静态模型选择
      • 动态模型选择
    • 2.2 工具(Tools)

      • 定义工具
      • 工具的错误处理
      • ReAct 回路中的工具调用
    • 2.3 系统提示词(System Prompt)

      • 动态系统提示词
  • Agent 的执行与调用

    • 3.1 AgentExecutor 与调用 Agent
  • Agent 进阶功能

    • 4.1 结构化输出(Structured Output)

      • ToolStrategy 策略
      • ProviderStrategy 策略
    • 4.2 记忆与状态(Memory & State)

      • 通过 Middleware 定义自定义状态
      • 通过 state_schema 定义自定义状态
    • 4.3 流式输出(Streaming)

    • 4.4 中间件机制(Middleware)

  • 自定义 Agent 与工具

    • 5.1 自定义 Agent 模板
    • 5.2 自定义工具开发
  • 企业应用中的实践建议

    • 6.1 多工具协作与选择
    • 6.2 错误处理与可靠性
    • 6.3 部署与监控

引言:什么是 LangChain Agent?

LangChain 的 Agent(智能代理) 是一种结合大型语言模型(LLM)和外部工具的系统,它能够对复杂任务进行推理、规划,并自主决定使用哪些工具来逐步解决问题。相比单纯的 LLM 对话,Agent 更加强大,因为它可以在对话过程中调用外部工具(如搜索引擎、数据库查询、计算器、API 等)来获取或处理信息,从而迭代式地朝着解决方案前进。

Agent 的能力包括:

  • 任务分解与决策:Agent 可以分析用户的请求,推理出解决问题需要的步骤,决定使用何种工具。例如,它可以先调用搜索工具获取信息,再调用计算工具处理数据,逐步解决复杂问题。
  • 循环迭代执行:Agent 遵循“ReAct”模式(Reason + Act),在每一步行动后,根据工具返回的结果(Observation)调整下一步策略,循环“推理 → 行动 → 观察”,直到得到最终答案。
  • 工具调用:通过集成工具,Agent 可以执行 LLM 自身无法直接完成的操作(如计算、查数据库、调用外部API)。LangChain 提供了大量内置工具,也允许开发者注册自定义工具。

LangChain 提供了工厂方法 create_agent 来创建可生产级使用的 Agent。其基于 LangGraph 构建执行图,包含模型节点、工具节点、中间件节点等。Agent 会持续执行,直到模型给出最终结果或达到最大迭代次数。


Agent 的核心组件

LangChain Agent 由多个核心部分组成,包括:LLM 模型、工具(Tools)、执行器、提示词等。

理解这些组件如何协同工作,有助于更好地定制和使用 Agent。


2.1 LLM 模型(Model)

模型是 Agent 的“大脑”。

静态模型选择

最常见的方法是在创建 Agent 时指定固定模型:

agent = create_agent(
    "gpt-5",
    tools=tools_list
)

模型 “gpt-5” 会被推断为对应的提供商模型。

也可以通过模型实例进行更复杂的参数配置:

model = ChatOpenAI(
    model="gpt-5",
    temperature=0.1,
    max_tokens=1000,
    timeout=30,
)
agent = create_agent(model, tools=tools_list)

静态模型适用于已知场景,配置简洁高效。


动态模型选择

在一些高级场景,需要根据对话上下文自动切换模型,例如对话较复杂时改用更强模型。

利用中间件实现动态模型路由:

@wrap_model_call
def dynamic_model_selection(request, handler):
    message_count = len(request.state["messages"])
    if message_count > 10:
        request.model = advanced_model
    else:
        request.model = basic_model
    return handler(request)

注册到 Agent:

agent = create_agent(
    model=basic_model,
    tools=tools_list,
    middleware=[dynamic_model_selection]
)

2.2 工具(Tools)

工具是 Agent 执行任务的重要组成部分。

定义工具

使用装饰器:

@tool
def search(query: str):
    return f"Results for: {query}"

工具应当:

  • 实现单一职责
  • 文档描述清晰

如果 tools=[],Agent 将不具备工具调用能力。


工具的错误处理

借助中间件:

@wrap_tool_call
def handle_tool_errors(request, handler):
    try:
        return handler(request)
    except Exception as e:
        return ToolMessage(
            content=f"工具出错: 请检查输入并重试。({str(e)})",
            tool_call_id=request.tool_call["id"]
        )

注册:

agent = create_agent(
    model="gpt-4o",
    tools=[search, get_weather],
    middleware=[handle_tool_errors]
)

ReAct 回路中的工具调用

ReAct 遵循:

Thought → Action → Observation → Thought → ... → Final Answer

示例流程(无线耳机 + 库存检查):

  1. 用户提问
  2. Agent 推理需要搜索 → Action 调用 search_products
  3. Observation 返回搜索结果
  4. Agent 推理需要查库存 → 调用 check_inventory
  5. Observation 返回库存
  6. Final Answer 输出最终内容

Agent 内部自动完成 ReAct,不需开发者手写循环。


2.3 系统提示词(System Prompt)

通过 system_prompt 参数设置 Agent 的角色和风格:

agent = create_agent(
    model,
    tools,
    system_prompt="You are a helpful assistant."
)

非常适用于企业级业务角色定义(如 IT 支持、客服)。


动态系统提示词

使用 @dynamic_prompt

@dynamic_prompt
def user_role_prompt(request):
    user_role = request.runtime.context.get("user_role", "user")
    ...

调用方式:

agent.invoke(
    {"messages": [...]},
    context={"user_role": "expert"}
)

3. Agent 的执行与调用

3.1 AgentExecutor 与调用 Agent

LangChain 1.0 推荐直接使用:

result = agent.invoke({
    "messages": [{"role": "user", "content": "天气如何?"}]
})

result["messages"][-1] 为最终回答。


4. Agent 进阶功能

4.1 结构化输出(Structured Output)

两种策略:

ToolStrategy(通过虚拟工具实现)

ProviderStrategy(使用模型原生结构化能力)

注意:LangChain 1.0 不再支持直接传 Pydantic 模型,需使用策略包装。


4.2 记忆与状态(Memory & State)

Agent 默认持有 messages 作为短期记忆。

通过 Middleware 定义状态

定义:

class CustomState(AgentState):
    user_preferences: dict

加入中间件后可在调用时传入:

agent.invoke({
    "messages": [...],
    "user_preferences": {...}
})

通过 state_schema 定义状态

agent = create_agent(
    model,
    tools=[...],
    state_schema=CustomState
)

4.3 流式输出(Streaming)

for chunk in agent.stream({...}, stream_mode="values"):
    ...

可实时展示 Agent 的推理步骤。


4.4 中间件机制(Middleware)

用途包括:

  • 输入预处理
  • 输出检查
  • 工具执行包装
  • 动态模型/提示词
  • 审计与监控

5. 自定义 Agent 与工具

5.1 自定义 Agent 模板

包括:

  • ReAct Agent
  • OpenAI Functions Agent
  • OpenAI Tools Agent
  • 自问自答型(Self-Ask)

可自定义 Prompt:

REACT_PROMPT_TEMPLATE = """
Thought: ...
Action: ...
"""

5.2 自定义工具开发

典型企业工具:

  • 数据库查询
  • 内网 API
  • 业务公式计算
  • 文件/知识库读取

注意安全性、审计、输入检验。


6. 企业应用中的实践建议

6.1 多工具协作与选择

  • 设计良好工具描述
  • 工具分类路由
  • 并行调用

6.2 错误处理与可靠性

  • 工具异常处理
  • 输出结构验证
  • 超时与重试
  • 日志与监控

6.3 部署与监控

  • 封装 API 服务
  • 高并发处理
  • 资源管理
  • 实时监控与告警
  • 定期更新工具和提示词
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐