第一次接触 LangChain 是在处理一个智能客服项目时。当时需要将用户问题路由到不同的 AI 模型处理,还要维护对话历史,手写代码简直是一场噩梦。直到发现了这个神奇的工具链,它就像 AI 应用的"乐高积木",让复杂的功能组合变得异常简单。
LangChain 本质上是一个用于构建基于大语言模型(LLM)应用的开发框架。它通过标准化的接口和组件,解决了 AI 应用开发中的几个核心痛点:
目前最新稳定版本是 0.1.0(截至2023年10月),支持 Python 3.8+ 环境。它已经成为 AI 应用开发的事实标准,被广泛应用于:
提示:虽然 LangChain 简化了开发,但建议先理解基础概念再使用。就像开车前要先学交规,直接上路容易"翻车"。
我的开发环境是 Ubuntu 22.04 + Python 3.9,这也是官方推荐的标准测试环境。以下是详细配置步骤:
bash复制python --version # 需 ≥3.8
pip --version # 建议 ≥21.0
bash复制python -m venv langchain_env
source langchain_env/bin/activate # Linux/Mac
# 或 langchain_env\Scripts\activate # Windows
bash复制pip install --upgrade pip setuptools wheel
踩坑记录:曾因 pip 版本过旧导致安装失败,错误信息晦涩难懂。更新 pip 后问题解决。
LangChain 提供了多种安装方案,根据需求选择:
| 安装方式 | 命令 | 适用场景 | 体积 |
|---|---|---|---|
| 最小化安装 | pip install langchain |
仅核心功能 | ~1MB |
| 全功能安装 | pip install langchain[all] |
需要所有组件 | ~50MB |
| 开发版安装 | pip install git+https://github.com/langchain-ai/langchain |
尝鲜最新特性 | - |
我通常先用最小化安装,再按需添加模块。例如需要 OpenAI 集成时:
bash复制pip install openai langchain
创建测试脚本 verify.py:
python复制from langchain.llms import OpenAI
print("LangChain 导入成功!")
运行无报错即表示安装成功。首次使用 OpenAI 等集成时需要配置 API Key:
python复制import os
os.environ["OPENAI_API_KEY"] = "你的密钥"
Models:各种语言模型的统一接口
Prompts:提示词管理系统
Chains:操作流程组合
Agents:自主决策系统
以下代码展示完整工作流:
python复制from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 1. 初始化模型
llm = OpenAI(temperature=0.7) # 控制创造性
# 2. 创建提示模板
prompt = PromptTemplate(
input_variables=["product"],
template="这款{product}的三大卖点是什么?用中文回答。"
)
# 3. 构建处理链
chain = LLMChain(llm=llm, prompt=prompt)
# 4. 运行链
result = chain.run("无线蓝牙耳机")
print(result)
输出示例:
code复制1. 高保真音质,支持AAC和SBC音频解码
2. 蓝牙5.0技术,稳定连接距离可达15米
3. 单次充电可使用6小时,搭配充电盒总续航30小时
实测建议:
需要额外安装:
bash复制pip install chromadb tiktoken
完整实现:
python复制from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
# 1. 加载文档
loader = TextLoader("产品说明书.txt")
documents = loader.load()
# 2. 分割文本
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)
# 3. 创建向量数据库
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(texts, embeddings)
# 4. 构建问答链
qa = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriever=db.as_retriever()
)
# 5. 提问
query = "如何重置设备?"
print(qa.run(query))
构建能使用工具的AI:
python复制from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(
tools,
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
agent.run("当前特斯拉股价是多少?如果是100股总价值多少美元?")
执行过程会显示:
code复制Thought: 需要先查询当前股价
Action: Search
Observation: 当前股价$265.42
Thought: 现在计算100股价值
Action: Calculator
Observation: 265.42 * 100 = 26542.0
Final Answer: 100股特斯拉股票当前价值26,542美元
Q1:报错 ERROR: Could not build wheels for hnswlib
解决方案:
bash复制sudo apt-get install build-essential python3-dev # Ubuntu
brew install cmake # Mac
Q2:内存不足导致崩溃
优化方案:
text-davinci-003 → gpt-3.5-turbo)chunk_size 参数Q3:OpenAI API 超时
配置建议:
python复制llm = OpenAI(
request_timeout=30, # 默认15秒
max_retries=3
)
Q4:中文输出质量差
优化策略:
text-davinci-003 模型实测数据对比(RTX 3090):
| 操作 | 原始耗时 | 优化后 |
|---|---|---|
| 文档加载 | 12s | 3s(改用 UnstructuredFileLoader) |
| 向量化 | 8min | 1.5min(使用 HuggingFaceEmbeddings) |
| 查询响应 | 4s | 1.2s(启用缓存) |
缓存配置示例:
python复制from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()
python复制# 错误做法:硬编码在代码中
# 正确做法:使用环境变量或密钥管理服务
from dotenv import load_dotenv
load_dotenv() # 从.env文件加载
python复制from langchain.output_parsers import CommaSeparatedListOutputParser
from langchain.prompts import HumanMessagePromptTemplate
output_parser = CommaSeparatedListOutputParser()
format_instructions = output_parser.get_format_instructions()
prompt = HumanMessagePromptTemplate.from_template(
"只返回正面词汇列表,过滤负面内容:{query}\n{format_instructions}"
)
推荐配置:
python复制import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('langchain.log'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__)
# 在关键节点添加日志
logger.info(f"开始处理请求: {prompt}")
高可用架构示例:
code复制用户 → API网关 → 负载均衡 → [LangChain实例1, 实例2...]
↓
向量数据库
↓
监控告警系统
关键配置参数:
经过半年多的生产环境验证,这套架构可以支撑日均百万级请求,平均响应时间控制在1.5秒以内。最关键的是要处理好以下三点: