LangChain + 通义千问(Qwen)快速入门:10分钟构建你的第一个 AI Agent
随着大模型技术的发展,越来越多开发者开始使用 Agent 架构 来构建 AI 应用。而在 Python 生态中,最流行的 Agent 框架之一就是 LangChain。
如果你使用的是 阿里云生态,那么 Qwen(通义千问) 是一个非常不错的模型选择,它可以通过 DashScope API 进行调用。
本文将带你 从 0 到 1 构建一个基于 LangChain + Qwen 的 AI Agent,整个过程大约只需要 10 分钟。
最终我们会实现一个具备以下能力的 AI Agent:
- 可以回答用户问题
- 可以调用工具(如天气查询)
- 具备对话记忆
- 支持结构化输出
一、环境准备
在开始之前,我们需要准备几个基础环境。
1 安装依赖
首先安装必要的 Python 包:
pip install langchain langchain-community dashscope langgraph
这些依赖分别用于:
| 依赖 | 作用 |
|---|---|
| langchain | Agent 框架 |
| dashscope | 调用千问 API |
| langgraph | Agent 状态与记忆 |
2 获取通义千问 API Key
访问阿里云百炼平台:
创建 API Key,然后在本地设置环境变量。
Linux / macOS:
export DASHSCOPE_API_KEY="your_api_key"
Windows:
set DASHSCOPE_API_KEY=your_api_key
二、构建第一个 LangChain Agent
我们先创建一个最简单的 Agent,让它可以回答问题并调用工具。
1 定义一个工具
Agent 的核心能力之一是 Tool Calling(工具调用) 。
例如我们创建一个天气工具:
from langchain.agents import create_agent
def get_weather(city: str) -> str:
"""获取指定城市天气"""
return f"{city}今天是晴天,气温25度"
2 创建 Agent
接下来创建一个 Agent,并指定使用 Qwen 模型。
agent = create_agent(
model="qwen-plus",
tools=[get_weather],
system_prompt="You are a helpful assistant"
)
3 运行 Agent
现在我们可以运行 Agent:
response = agent.invoke(
{
"messages": [
{"role": "user", "content": "北京天气怎么样"}
]
}
)
print(response)
此时 Agent 会:
- 解析用户问题
- 判断是否需要调用工具
- 自动调用
get_weather - 返回最终答案
这就是 Agent 的基本运行机制。
三、构建一个真实可用的 Agent
上面的 Demo 只是一个简单示例。
在真实应用中,我们通常还需要:
- 更明确的 Prompt
- 外部数据工具
- 结构化输出
- 对话记忆
下面我们逐步升级这个 Agent。
1 定义系统 Prompt
系统 Prompt 决定 Agent 的行为。
SYSTEM_PROMPT = """
你是一名专业天气助手。
你可以使用两个工具:
1 get_weather_for_location
获取某个城市天气
2 get_user_location
获取用户位置
如果用户没有说明城市,
请先获取用户位置。
"""
好的 Prompt 可以显著提升 Agent 的稳定性。
2 创建工具(Tools)
LangChain 提供 @tool 装饰器来定义工具。
from langchain.tools import tool
@tool
def get_weather_for_location(city: str) -> str:
"""获取指定城市天气"""
return f"{city}今天晴天,25℃"
再创建一个获取用户位置的工具:
from dataclasses import dataclass
from langchain.tools import ToolRuntime
@dataclass
class Context:
user_id: str
@tool
def get_user_location(runtime: ToolRuntime[Context]) -> str:
"""根据用户ID获取用户位置"""
if runtime.context.user_id == "1":
return "北京"
return "上海"
LangChain 会自动把:
- 工具名称
- 参数
- 描述
加入到模型 Prompt 中。
3 配置 Qwen 模型
LangChain 提供统一的模型初始化方式:
from langchain.chat_models import init_chat_model
model = init_chat_model(
"qwen-plus",
temperature=0.5,
timeout=10,
max_tokens=1000
)
常见模型包括:
| 模型 | 特点 |
|---|---|
| qwen-turbo | 速度快 |
| qwen-plus | 通用能力强 |
| qwen-max | 推理能力最强 |
4 定义结构化输出
在生产环境中,我们通常希望 AI 输出 固定结构的数据。
from dataclasses import dataclass
@dataclass
class ResponseFormat:
answer: str
weather: str | None = None
这样可以方便后端系统解析 AI 结果。
5 添加对话记忆
为了让 Agent 能够进行多轮对话,我们需要加入 Memory。
from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver()
生产环境通常会使用:
- Redis
- PostgreSQL
- MongoDB
来保存对话历史。
6 创建完整 Agent
最后将所有组件组合在一起:
from langchain.agents.structured_output import ToolStrategy
from langchain.agents import create_agent
agent = create_agent(
model=model,
system_prompt=SYSTEM_PROMPT,
tools=[get_user_location, get_weather_for_location],
context_schema=Context,
response_format=ToolStrategy(ResponseFormat),
checkpointer=checkpointer
)
7 运行 Agent
config = {
"configurable": {
"thread_id": "1"
}
}
response = agent.invoke(
{
"messages": [
{"role": "user", "content": "今天天气怎么样"}
]
},
config=config,
context=Context(user_id="1")
)
print(response["structured_response"])
示例输出:
ResponseFormat(
answer="北京今天阳光明媚,非常适合出门。",
weather="北京晴天,25℃"
)
四、继续对话
因为我们启用了 对话记忆,所以可以继续聊天。
response = agent.invoke(
{
"messages": [
{"role": "user", "content": "谢谢"}
]
},
config=config,
context=Context(user_id="1")
)
Agent 会记住之前的上下文。
五、总结
通过本文,我们完成了一个 LangChain + Qwen Agent 的完整构建流程:
- 配置 DashScope API
- 创建基础 Agent
- 编写工具 Tools
- 配置 Qwen 模型
- 定义结构化输出
- 添加对话记忆
- 构建完整 Agent
这种架构可以用于很多实际场景,例如:
- AI Copilot
- 企业知识库问答
- AI 自动化工作流
- 数据分析助手
随着 Agent 技术的发展,LLM + Tools + Memory 正逐渐成为 AI 应用开发的主流架构。