LangChain 接入教程
使用最流行的 AI 应用开发框架构建强大的 LLM 应用
什么是 LangChain?
LangChain 是目前最流行的 AI 应用开发框架,提供了一套完整的工具链来构建基于大语言模型(LLM)的应用程序。
模块化设计
Models、Prompts、Indexes、Chains、Agents 等核心组件
丰富的集成
支持 100+ LLM 提供商、向量数据库、工具等
开箱即用
内置常用模板和工具链,快速搭建应用
生产就绪
LangSmith 可观测性、部署监控、评估测试
💡 为什么选择 LangChain?
• 统一的 API 接口,轻松切换不同 LLM 提供商
• 强大的 Chain 和 Agent 机制,实现复杂工作流
• 完善的 RAG(检索增强生成)支持
• 活跃的社区和丰富的文档
• 统一的 API 接口,轻松切换不同 LLM 提供商
• 强大的 Chain 和 Agent 机制,实现复杂工作流
• 完善的 RAG(检索增强生成)支持
• 活跃的社区和丰富的文档
安装 LangChain
安装核心包
bash
# Install LangChain core packages
pip install langchain langchain-openai
# Optional installations:
# pip install langchain-community # Community integrations
# pip install langchain-text-splitters # Text splitters
# pip install chromadb # Vector database (for RAG)
环境要求
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| Python | 3.9+ | 推荐 3.10 或 3.11 |
| pip | 最新版 | 包管理器 |
基础配置
方式一:环境变量(推荐)
bash
# Linux / macOS
export OPENAI_API_KEY="sk-你的API_KEY"
export OPENAI_BASE_URL="https://api.xidao.online/v1"
# Windows (PowerShell)
$env:OPENAI_API_KEY="sk-你的API_KEY"
$env:OPENAI_BASE_URL="https://api.xidao.online/v1"
方式二:代码中直接配置
Python
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4o",
api_key="sk-你的API_KEY",
base_url="https://api.xidao.online/v1"
)
⚠️ 注意:XiDao Api 兼容 OpenAI API 格式,所以使用
langchain-openai 包即可。Base URL 末尾需要加 /v1。
简单对话示例
基本对话
Python
from langchain_openai import ChatOpenAI
# Initialize model
llm = ChatOpenAI(
model="gpt-4o", # or claude-sonnet-4-5-20250929, gemini-2.5-pro, etc.
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# Simple conversation
response = llm.invoke("你好,请介绍一下你自己")
print(response.content)
# Streaming output
for chunk in llm.stream("写一首关于春天的诗"):
print(chunk.content, end="", flush=True)
使用 Prompt Template
Python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# Create prompt template
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的{role},请用简洁专业的语言回答问题。"),
("human", "{question}")
])
# Create chain
llm = ChatOpenAI(
model="gpt-4o",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
chain = prompt | llm
# Invoke
result = chain.invoke({
"role": "Python 开发工程师",
"question": "如何使用列表推导式过滤偶数?"
})
print(result.content)
链式调用 (Chains)
LangChain 的核心概念之一是 Chain,可以将多个组件串联起来形成处理流水线。
示例:文本分析管道
Python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# 1. Define prompt template
prompt = ChatPromptTemplate.from_template(
"分析以下文本的情感倾向,返回正面/负面/中性:\n\n{text}"
)
# 2. Initialize LLM
llm = ChatOpenAI(
model="gpt-4o",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# 3. Output parser
output_parser = StrOutputParser()
# 4. Assemble chain
chain = prompt | llm | output_parser
# 5. Invoke
result = chain.invoke({"text": "今天天气真好,心情很愉快!"})
print(result) # Output: 正面
示例:多步推理链
Python
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# Step 1: Understand question
step1_prompt = ChatPromptTemplate.from_template(
"将用户的问题改写为更清晰的表述:\n{input}"
)
# Step 2: Analyze requirements
step2_prompt = ChatPromptTemplate.from_template(
"分析以下问题的技术要点:\n{rephrased_input}"
)
# Step 3: Generate answer
step3_prompt = ChatPromptTemplate.from_template(
"根据分析结果,给出详细的解决方案:\n技术要点:{analysis}"
)
llm = ChatOpenAI(
model="claude-sonnet-4-5-20250929",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# Assemble multi-step chain
chain = (
step1_prompt | llm
| (lambda x: {"rephrased_input": x.content})
| step2_prompt | llm
| (lambda x: {"analysis": x.content})
| step3_prompt | llm
)
result = chain.invoke({"input": "如何优化 Python 代码性能?"})
print(result.content)
RAG 应用(检索增强生成)
RAG 是 LangChain 最常用的应用场景之一,结合外部知识库提升回答质量。
完整 RAG 示例
Python
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
# 0. Configure API
llm = ChatOpenAI(
model="gpt-4o",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
embeddings = OpenAIEmbeddings(
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# 1. Load and split documents
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
documents = text_splitter.split_text("""
XiDao Api is a professional AI API relay service platform,
providing stable and efficient AI model access for developers.
Supports Claude, GPT, Gemini and other mainstream models,
one token can access multiple AI capabilities.
Transparent pricing, pay-as-you-go, no need to register separately.
""")
# 2. Create vector store
vectorstore = Chroma.from_texts(
texts=documents,
embedding=embeddings,
persist_directory="./chroma_db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 3. Create RAG chain
prompt = ChatPromptTemplate.from_template("""
根据以下上下文信息回答问题。
如果上下文中没有相关信息,请说"我不知道"。
上下文:
{context}
问题:{input}
""")
document_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, document_chain)
# 4. Use RAG
result = rag_chain.invoke({"input": "XiDao Api 支持哪些模型?"})
print(result["answer"])
💡 RAG 最佳实践:
• 使用合适的 chunk_size(通常 500-2000 字符)
• 选择合适的重叠度(chunk_overlap 通常为 10-20%)
• 根据场景调整检索数量 k
• 定期更新向量数据库以保持知识新鲜
• 使用合适的 chunk_size(通常 500-2000 字符)
• 选择合适的重叠度(chunk_overlap 通常为 10-20%)
• 根据场景调整检索数量 k
• 定期更新向量数据库以保持知识新鲜
Agent 智能体
Agent 是 LangChain 最强大的特性之一,可以让 LLM 自主决定使用哪些工具来完成任务。
工具调用示例
Python
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# 1. Define custom tools
@tool
def calculate(expression: str) -> str:
"""Calculate mathematical expression"""
try:
result = eval(expression)
return f"计算结果: {result}"
except Exception as e:
return f"计算错误: {e}"
@tool
def search_web(query: str) -> str:
"""Search web information (simulated)"""
return f"关于 '{query}' 的搜索结果:这是一个模拟的搜索结果"
# 2. Initialize LLM and tools
llm = ChatOpenAI(
model="claude-sonnet-4-5-20250929",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
tools = [calculate, search_web]
# 3. Create Agent
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有帮助的 AI 助手。使用提供的工具来帮助用户解决问题。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 4. Use Agent
response = agent_executor.invoke({
"input": "帮我计算 (123 * 456) + 789 的结果"
})
print(response["output"])
高级用法
使用不同模型
Python
from langchain_openai import ChatOpenAI
# Claude Sonnet 4.5 - Strong reasoning
claude_llm = ChatOpenAI(
model="claude-sonnet-4-5-20250929",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# GPT-4o - Versatile
gpt_llm = ChatOpenAI(
model="gpt-4o",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# Gemini Pro - Excellent frontend capabilities
gemini_llm = ChatOpenAI(
model="gemini-2.5-pro",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
# Select model based on task
task = "编写复杂的算法逻辑"
if "算法" in task or "逻辑" in task:
selected_llm = claude_llm
elif "前端" in task or "UI" in task:
selected_llm = gemini_llm
else:
selected_llm = gpt_llm
response = selected_llm.invoke(task)
print(response.content)
流式输出与回调
Python
from langchain_openai import ChatOpenAI
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# Enable streaming
llm = ChatOpenAI(
model="gpt-4o",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY",
streaming=True,
callbacks=[StreamingStdOutCallbackHandler()]
)
# Streaming output prints to console in real-time
response = llm.invoke("写一篇关于 AI 发展的文章")
批量处理
Python
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(
model="gpt-4o-mini",
base_url="https://api.xidao.online/v1",
api_key="sk-你的API_KEY"
)
prompt = ChatPromptTemplate.from_template("将以下内容翻译成英文:{text}")
chain = prompt | llm
# Batch processing
texts = ["你好世界", "人工智能", "机器学习"]
results = chain.batch([{"text": t} for t in texts])
for i, result in enumerate(results):
print(f"{texts[i]} -> {result.content}")
⚠️ 注意事项:
• 批量处理时注意速率限制,避免触发限流
• 对于大量请求,建议添加重试机制和错误处理
• 生产环境建议使用 LangSmith 进行监控和调试
• 批量处理时注意速率限制,避免触发限流
• 对于大量请求,建议添加重试机制和错误处理
• 生产环境建议使用 LangSmith 进行监控和调试