别再死记硬背LangChain概念了!用1.0的create_agent函数,10行代码搞定你的第一个AI助手
用LangChain 1.0的create_agent函数10行代码构建AI助手实战指南
当你第一次听说LangChain时,可能被那些抽象概念搞得一头雾水——链、智能体、记忆、工具……文档里充斥着各种术语,仿佛在告诉你:“这不是给新手准备的。”但今天,我要告诉你一个秘密:用LangChain 1.0最新推出的create_agent函数,你完全可以在10行代码内构建一个功能完整的AI助手,而不需要理解那些复杂的概念。
想象一下这样的场景:你正在开发一个个人助理应用,希望它能帮你查询天气、管理待办事项,甚至分析数据。传统方法可能需要数百行代码和复杂的架构设计,但有了LangChain 1.0,这一切变得异常简单。下面,我将带你一步步实现这个看似不可能的任务。
1. 环境准备与基础配置
在开始之前,确保你已经安装了Python 3.8或更高版本。LangChain 1.0对包结构进行了重大调整,安装方式也有所变化:
pip install langchain-core langchain-community langchain-openai
这里我们使用langchain-openai作为LLM提供者,但你也可以选择其他兼容的模型服务。安装完成后,创建一个新的Python文件,比如my_agent.py,然后导入必要的模块:
from langchain.agents import create_agent
from langchain.agents.tools import Tool
from langchain_openai import ChatOpenAI
2. 构建你的第一个AI助手
现在到了最激动人心的部分——用create_agent函数构建你的第一个AI助手。这个函数是LangChain 1.0的核心创新,它抽象了所有复杂的概念,让你只需关注三个关键要素:
- 模型:处理自然语言理解和生成
- 工具:让AI能够执行具体操作
- 系统提示:定义AI的行为和角色
让我们从一个简单的天气查询助手开始:
# 定义工具函数
def get_weather(city: str) -> str:
"""获取指定城市的天气信息"""
# 这里应该是调用天气API的实际代码
return f"{city}的天气是晴朗,25°C"
# 创建工具实例
weather_tool = Tool(
name="get_weather",
func=get_weather,
description="获取指定城市的天气信息,输入是城市名称"
)
# 创建AI助手
agent = create_agent(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
tools=[weather_tool],
system_prompt="你是一个友好的天气助手,专门回答关于天气的问题"
)
这就是全部代码!不到10行,你就创建了一个具备ReAct循环能力的AI助手。create_agent函数内部已经处理了所有复杂的逻辑,包括:
- 理解用户意图
- 决定是否需要调用工具
- 处理工具返回结果
- 生成自然语言响应
3. 与AI助手交互
现在,让我们测试一下这个助手。添加以下代码来与你的AI助手对话:
response = agent.invoke("北京今天的天气怎么样?")
print(response)
你会看到类似这样的输出:
让我为您查询北京的天气...北京今天的天气是晴朗,25°C。
更神奇的是,这个助手已经具备了基本的推理能力。试试问:
response = agent.invoke("上海和北京哪个城市更暖和?")
助手会自动调用两次天气查询工具,比较结果后给出回答:
根据最新天气数据:北京25°C,上海28°C。因此上海比北京更暖和。
4. 扩展助手功能
单一功能显然不够酷,让我们为助手添加更多能力。比如,增加一个待办事项管理功能:
todos = []
def add_todo(task: str) -> str:
"""添加待办事项"""
todos.append(task)
return f"已添加:{task}"
def list_todos() -> str:
"""列出所有待办事项"""
return "\n".join(f"{i+1}. {t}" for i, t in enumerate(todos)) if todos else "没有待办事项"
# 创建工具实例
todo_tools = [
Tool(
name="add_todo",
func=add_todo,
description="添加新的待办事项,输入是任务描述"
),
Tool(
name="list_todos",
func=list_todos,
description="列出所有待办事项,不需要输入"
)
]
# 更新助手
agent = create_agent(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
tools=[weather_tool, *todo_tools],
system_prompt="你是一个多功能个人助手,可以帮助查询天气和管理待办事项"
)
现在你的助手可以同时处理天气查询和待办事项管理了:
agent.invoke("添加一个明天上午10点的会议")
agent.invoke("再添加下午3点写报告")
agent.invoke("列出我的所有待办事项")
输出会是:
您的待办事项有:
1. 明天上午10点的会议
2. 下午3点写报告
5. 生产环境注意事项
虽然我们的代码很简单,但create_agent背后已经包含了许多生产级特性。不过,在实际应用中,你可能还需要考虑以下几点:
- 错误处理:工具调用可能会失败
- 安全性:防止注入攻击
- 性能:缓存常用查询结果
LangChain 1.0提供了中间件机制来处理这些问题。例如,添加一个简单的错误处理中间件:
from langchain.agents.middleware import ToolRetryMiddleware
agent = create_agent(
llm=ChatOpenAI(model="gpt-3.5-turbo"),
tools=[weather_tool, *todo_tools],
system_prompt="...",
middlewares=[ToolRetryMiddleware(retries=3)]
)
这个中间件会在工具调用失败时自动重试,大大提高了系统的健壮性。
6. 更复杂的应用场景
让我们看一个稍微复杂点的例子——数据分析助手。假设我们想让AI能够查询和分析销售数据:
import pandas as pd
# 模拟销售数据
sales_data = pd.DataFrame({
"date": ["2023-01-01", "2023-01-02", "2023-01-03"],
"product": ["A", "B", "A"],
"amount": [100, 200, 150]
})
def query_sales(query: str) -> str:
"""查询销售数据"""
try:
# 简单演示,实际应用中这里可以是SQL查询等
if "product A" in query.lower():
return str(sales_data[sales_data["product"] == "A"])
return str(sales_data)
except Exception as e:
return f"查询失败:{str(e)}"
def analyze_sales(metric: str) -> str:
"""分析销售数据"""
if metric == "total":
return f"总销售额:{sales_data['amount'].sum()}"
elif metric == "average":
return f"平均销售额:{sales_data['amount'].mean()}"
return "未知指标"
# 创建工具
sales_tools = [
Tool(
name="query_sales",
func=query_sales,
description="查询原始销售数据,输入是查询条件"
),
Tool(
name="analyze_sales",
func=analyze_sales,
description="分析销售数据,输入是指标名称如'total'或'average'"
)
]
# 创建数据分析助手
sales_agent = create_agent(
llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0),
tools=sales_tools,
system_prompt="你是一个数据分析助手,帮助用户查询和分析销售数据"
)
现在你可以用自然语言与销售数据交互了:
response = sales_agent.invoke("产品A的总销售额是多少?")
print(response)
助手会自动调用query_sales和analyze_sales工具,最终给出类似这样的回答:
产品A的总销售额是250(1月1日100,1月3日150)
7. 调试与优化
当你开发更复杂的AI助手时,可能会遇到一些问题。LangChain 1.0提供了强大的调试工具:
- LangSmith:可视化跟踪每次调用的完整流程
- Verbose模式:打印详细的执行日志
启用verbose模式非常简单:
agent = create_agent(
llm=ChatOpenAI(model="gpt-3.5-turbo", verbose=True),
tools=[...],
system_prompt="..."
)
这样你就能看到助手内部的思考过程,包括:
- 是否决定调用工具
- 选择了哪个工具
- 如何处理工具返回结果
这种透明度对于调试复杂场景非常有帮助。
所有评论(0)