1. LangChain 快速入门:用通义千问构建你的第一个 AI 应用
最近在折腾大语言模型应用开发时,发现 LangChain 这个框架确实能极大提升开发效率。作为一个 Python 开发者,如果你也想快速上手大模型应用开发,不妨跟着我的实战经验一起走一遍。今天我们就用通义千问(Qwen)作为示例模型,从零开始构建一个能跑起来的 AI 应用。
LangChain 的核心价值在于它把大模型应用开发中的常见模式都抽象成了可复用的组件。想象一下,如果没有 LangChain,每次调用大模型你都得自己处理提示词模板、输入输出解析、对话历史管理等琐事。而有了 LangChain,这些重复工作都能通过预置的模块快速组装完成。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与安装
2.1 基础环境配置
首先确保你的 Python 环境是 3.8 或更高版本。我推荐使用虚拟环境来管理依赖:
bash复制python -m venv langchain-env
source langchain-env/bin/activate # Linux/Mac
# 或者 langchain-env\Scripts\activate # Windows
2.2 安装核心依赖
LangChain 采用模块化设计,核心包只包含基础功能,特定模型的支持需要额外安装:
bash复制pip install langchain langchain-community
针对不同的模型提供商,还需要安装对应的集成包。本文使用通义千问,所以需要:
bash复制pip install langchain-qwq
如果你还想尝试其他模型,这里列出几个常见选项:
bash复制# OpenAI (ChatGPT)
pip install langchain-openai
# Hugging Face
pip install langchain-huggingface
# 文心一言
pip install langchain-baidu
注意:不同模型的 API 调用方式和计费策略差异很大,建议先查阅官方文档了解详情。
3. 第一个 LangChain 应用实战
3.1 获取 API 密钥
使用通义千问需要先在达摩院控制台申请 API Key。拿到 Key 后,可以这样设置环境变量:
python复制import os
os.environ["DASHSCOPE_API_KEY"] = "你的API_KEY"
安全提示:千万不要把 API Key 直接硬编码在代码中!最佳实践是使用环境变量或密钥管理服务。
3.2 初始化模型
LangChain 为不同模型提供了统一的接口,初始化方式非常直观:
python复制from langchain_community.chat_models.tongyi import ChatTongyi
model = ChatTongyi(model="qwen-plus")
这里的 qwen-plus 是模型名称,通义千问还提供其他版本如 qwen-turbo(更快但能力稍弱)和 qwen-max(最强但最贵)。
3.3 构建提示模板
LangChain 的 ChatPromptTemplate 让提示词管理变得轻松:
python复制from langchain_core.prompts import ChatPromptTemplate
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个精通{topic}的资深技术专家。"),
("user", "请用三句话解释一下什么是{concept}。")
])
这个模板中有两个变量 {topic} 和 {concept},调用时可以动态替换。模板中的角色说明:
system: 设定 AI 的角色和专业背景user: 用户实际提出的问题ai: 用于多轮对话时传递 AI 之前的回复
3.4 组装处理链
LangChain 最强大的特性就是可以用管道符 | 将各个组件连接成链:
python复制from langchain_core.output_parsers import StrOutputParser
output_parser = StrOutputParser()
chain = prompt | model | output_parser
这个链的工作流程是:
- 将输入数据填充到提示模板
- 将完整提示发送给大模型
- 用输出解析器处理模型返回
StrOutputParser 是最简单的解析器,直接把模型输出转为字符串。LangChain 还支持更复杂的解析器,比如提取 JSON、结构化数据等。
3.5 调用链获取响应
调用链有两种常用方式:
一次性获取完整响应:
python复制response = chain.invoke({
