1. LangChain智能体开发实战指南
作为一名长期从事AI应用开发的工程师,我深刻理解在构建智能体系统时面临的挑战。LangChain框架为开发者提供了强大的工具链,使得构建复杂AI应用变得更加高效。本文将分享我在实际项目中积累的LangChain智能体开发经验,从基础工具创建到高级功能实现的全流程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 工具开发与初始化
2.1 基础工具创建实战
在LangChain生态中,工具(Tool)是智能体执行具体任务的基本单元。创建工具时,良好的类型定义和文档描述至关重要。以下是一个加法工具的完整实现示例:
python复制from langchain_core.tools import tool
from pydantic import BaseModel, Field
from typing import Dict, Any
# 定义强类型输入参数模型
class AddInputArgs(BaseModel):
a: int = Field(description="第一个数字", gt=0, example=10)
b: int = Field(description="第二个数字", gt=0, example=5)
# 创建计算工具
@tool(
name="addition_calculator",
description="执行两个正整数的加法运算",
args_schema=AddInputArgs,
return_direct=False
)
def add(a: int, b: int) -> int:
"""执行加法运算并返回结果
Args:
a: 第一个加数,必须为正整数
b: 第二个加数,必须为正整数
Returns:
两数之和
Raises:
ValueError: 当输入参数不满足条件时抛出
"""
if a <= 0 or b <= 0:
raise ValueError("输入参数必须为正整数")
return a + b
关键点解析:
- 使用Pydantic模型定义输入参数,Field的description属性会被LangChain用于自动生成工具说明
- @tool装饰器将普通函数转换为LangChain工具,return_direct控制是否直接返回工具结果
- 添加完整的docstring和参数验证,提升工具的可靠性
2.2 高级数学工具集开发
实际项目中,我们通常需要一组相关工具。下面是扩展的数学工具集实现:
python复制class MathInputArgs(BaseModel):
a: float = Field(..., description="第一个操作数", examples=[10.5])
b: float = Field(..., description="第二个操作数", examples=[2.0])
@tool(description="执行浮点数减法运算: a - b", args_schema=MathInputArgs)
def subtract(a: float, b: float) -> float:
return a - b
@tool(description="执行浮点数乘法运算: a × b", args_schema=MathInputArgs)
def multiply(a: float, b: float) -> float:
return a * b
@tool(description="执行浮点数除法运算: a ÷ b", args_schema=MathInputArgs)
def divide(a: float, b: float) -> float:
if abs(b) < 1e-10: # 更精确的浮点数零值判断
raise ValueError("除数不能为零")
return a / b
def create_math_toolkit() -> list:
"""创建完整的数学工具集"""
return [add, subtract, multiply, divide]
开发经验:
- 统一参数模型(MathInputArgs)确保工具接口一致性
- 浮点数比较使用阈值而非直接==0,避免精度问题
- 工具描述应清晰说明运算顺序(a - b而非b - a)
3. 大模型配置与优化
3.1 生产级模型配置
python复制from langchain_openai import ChatOpenAI
from pydantic import SecretStr
import os
def init_llm(model_name: str = "gpt-3.5-turbo") -> ChatOpenAI:
"""初始化生产环境大模型
Args:
model_name: 模型标识,支持gpt-3.5-turbo/gpt-4等
Returns:
配置好的ChatOpenAI实例
"""
return ChatOpenAI(
model=model_name,
base_url=os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1"),
api_key=SecretStr(os.getenv("OPENAI_API_KEY")),
streaming=True,
temperature=0.3, # 适度创造性
max_tokens=1500,
request_timeout=30, # 超时设置
max_retries=3, # 自动重试
model_kwargs={
"top_p": 0.9,
"frequency_penalty": 0.1
}
)
配置要点:
- 通过环境变量管理敏感信息(api_key)
- 设置合理的超时和重试机制增强鲁棒性
- model_kwargs调整生成参数,平衡创造性和确定性
3.2 多模型路由策略
python复制class ModelRouter:
"""智能模型路由管理器"""
def __init__(self):
self.llms = {
"gpt3.5": init_llm("gpt-3.5-turbo"),
"gpt4": init_llm("gpt-4"),
"claude": self._init_anthropic()
}
def _init_anthropic(self):
try:
from langchain_anthropic import ChatAnthropic
return ChatAnthropic(model="claude-3-sonnet")
except ImportError:
return None
def get_model(self, task_type: str) -> ChatOpenAI:
"""根据任务类型选择最优模型"""
if task_type == "creative":
return self.llms.get("gpt4") or self.llms["gpt3.5"]
elif task_type == "cost-sensitive":
retu
