LangChain 快速入门
LLM 应用开发框架 LangChain 快速入门,从安装到构建你的第一个 AI Agent
llmai-agentsragopenaianthropicpython
什么是 LangChain?
LangChain 是一个开源的 Python 框架,用于构建基于 LLM 的应用。它提供:
- 多提供商抽象 — 统一接口连接 OpenAI、Anthropic、Google 等,无需绑定单一供应商
- 可组合链(Chains) — 使用管道操作符(
|)将提示词、模型、解析器组合成流水线 - Agent 架构 — 预置的 Agent 系统,支持工具调用,代码少于 10 行
- 基于 LangGraph 构建 — 持久化执行、人机交互支持
- 开发者生态 — LangSmith 提供追踪、调试和可观测性
安装
# 基础安装
pip install langchain
# 支持 OpenAI
pip install langchain langchain-openai
# 支持 Anthropic Claude
pip install langchain langchain-anthropic
要求:Python 3.10+,来自 LLM 提供商的 API Key。
将 API Key 设置为环境变量:
# OpenAI
export OPENAI_API_KEY="sk-..."
# 或 Anthropic
export ANTHROPIC_API_KEY="sk-ant-..."
你的第一个 Chain
最简单的 LangChain 模式——将提示词模板通过管道连接到模型:
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
# 创建组件
model = ChatAnthropic(model="claude-sonnet-4-20250514")
prompt = ChatPromptTemplate.from_template(
"Translate this text to {language}: {text}"
)
# 使用管道操作符组合成 chain
chain = prompt | model
# 运行 chain
result = chain.invoke({
"language": "Spanish",
"text": "Hello, how are you?"
})
print(result.content)
# → "Hola, ¿cómo estás?"
关键点:| 操作符是 LangChain 组合组件的核心模式。
构建简单聊天机器人
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import HumanMessage, SystemMessage
model = ChatAnthropic(model="claude-sonnet-4-20250514")
messages = [
SystemMessage(content="You are a helpful coding assistant."),
HumanMessage(content="How do I read a JSON file in Python?")
]
response = model.invoke(messages)
print(response.content)
要保持对话历史,只需将消息追加到列表:
from langchain_core.messages import AIMessage
# 追加 AI 响应
messages.append(AIMessage(content=response.content))
# 添加后续问题
messages.append(HumanMessage(content="Can you show me error handling?"))
# 模型现在有完整对话上下文
response = model.invoke(messages)
创建带工具的 Agent
Agent 可以调用函数(工具)与外部系统交互:
from langchain import create_agent
from langchain_anthropic import ChatAnthropic
from langchain_core.tools import tool
@tool
def get_weather(location: str) -> str:
"""Get the current weather for a location."""
# 生产环境调用真实天气 API
return f"The weather in {location} is 22°C and sunny."
@tool
def calculate(expression: str) -> str:
"""Evaluate a math expression."""
return str(eval(expression))
model = ChatAnthropic(model="claude-sonnet-4-20250514")
agent = create_agent(
tools=[get_weather, calculate],
model=model,
system_prompt="You are a helpful assistant with access to weather data and a calculator."
)
response = agent.invoke({
"input": "What's the weather in Tokyo? Also what's 42 * 17?"
})
print(response["output"])
关键点:@tool 装饰器将任意函数转换为 Agent 可调用的工具。写清晰的文档字符串——Agent 用它们来决定何时调用每个工具。
常见模式
流式响应
for chunk in chain.stream({"language": "French", "text": "Good morning"}):
print(chunk.content, end="", flush=True)
批量处理
inputs = [
{"language": "Spanish", "text": "Hello"},
{"language": "French", "text": "Hello"},
{"language": "Japanese", "text": "Hello"},
]
results = chain.batch(inputs)
输出解析
from langchain_core.output_parsers import JsonOutputParser
chain = prompt | model | JsonOutputParser()
result = chain.invoke(inputs) # 返回解析后的字典
最佳实践
- 从简单开始 — 先用提示词 + 模型链,只有在需要动态工具选择时才添加 Agent
- API Key 存在环境变量 — 永远不要硬编码到源代码中
- 使用清晰的系统提示词 — 具体的指令产生更一致的结果
- 保持工具专注 — 每个工具做一件事,文档清晰
- 用便宜模型测试 — 开发时用 Haiku/GPT-4o-mini,上线后再切换到生产模型
- 启用 LangSmith — 早点连接以便追踪和调试
- 监控 token 使用量 — 跟踪成本,尤其是长对话场景
常见问题
Chains 和 Agents 的区别——何时用哪个?
Chains 适用于固定的、可预测的工作流(翻译、摘要、格式化)。Agents 当模型需要动态决定下一步做什么时使用。
如何处理长对话?
实现对话摘要,或使用滚动窗口(只保留最近 N 条消息)。LangGraph Memory Store 提供内置持久化。
LangChain vs LangGraph vs Deep Agents?
- LangChain — 快速入门、预置模式(从这里开始)
- LangGraph — 细粒度控制、确定性工作流
- Deep Agents — 复杂多步骤任务,带规划和子 Agent
我的 Agent 很慢,怎么办?
减少工具数量,简化工具描述,用 invoke() 代替 stream() 提速,考虑使用更快的模型。
下一步
- LangChain 官方文档 — 完整文档
- LangSmith — 追踪和调试
- LangGraph 教程 — 高级 Agent 模式
- LangChain GitHub — 源码和示例