LangChain 介绍指南


目录


什么是 LangChain?

LangChain 是一个用于开发由语言模型驱动的应用程序的开源框架。它提供了标准化的接口和工具,让开发者能够轻松构建基于大语言模型(LLM)的应用。

核心理念

  • 组件化:将 LLM 应用拆分为可复用的组件

  • 链式调用:通过组合组件构建复杂应用

  • 可扩展:支持多种 LLM 提供商和工具集成

主要特点

  • 支持多种大模型(OpenAI、Anthropic、百度、阿里等)

  • 提供丰富的工具集和预构建组件

  • 支持记忆管理和上下文处理

  • 内置 Agent 和链式调用功能

  • 开源免费,社区活跃


核心功能

1. 模型抽象

LangChain 提供了统一的接口来访问不同的语言模型:

  • OpenAI 系列:GPT-3.5、GPT-4、GPT-4o

  • Anthropic:Claude 系列

  • Google:Gemini、PaLM

  • 国内模型:文心一言、通义千问、讯飞星火

  • 开源模型:LLaMA、ChatGLM、Qwen

  • 本地部署:vLLM、Ollama、LM Studio

2. 提示词管理

提供强大的提示词模板和管理工具:

  • PromptTemplate:动态生成提示词

  • FewShotPromptTemplate:少样本学习

  • ChatPromptTemplate:对话式提示词

  • PipelinePromptTemplate:多步骤提示词

3. 记忆管理

管理对话历史和上下文信息:

  • ConversationBufferMemory:完整对话历史

  • ConversationSummaryMemory:对话摘要

  • VectorStoreRetrieverMemory:向量检索记忆

  • ConversationBufferWindowMemory:滑动窗口记忆

4. 链式调用

将多个组件组合成复杂的工作流:

  • SequentialChain:顺序执行

  • TransformChain:数据转换

  • RouterChain:条件路由

  • ParallelChain:并行执行

5. Agent 系统

构建能够自主决策和执行的智能体:

  • Zero-shot Agent:零样本推理

  • ReAct Agent:推理 + 行动

  • Plan-and-Execute:规划 + 执行

  • Custom Agent:自定义智能体

6. 工具集成

丰富的外部工具集成:

  • 搜索工具:Google Search、Bing Search

  • 计算工具:Wolfram Alpha、Python REPL

  • 数据库:SQL、NoSQL、向量数据库

  • API 工具:REST API、GraphQL

  • 文件处理:PDF、Word、Excel


主要组件

1. Models(模型层)

# LLM 模型
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.7)

# Chat 模型
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model="gpt-4")

# 嵌入模型
from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()

2. Prompts(提示词层)

from langchain.prompts import PromptTemplate

template = """
你是一个{role}助手。
请回答以下问题:{question}
"""

prompt = PromptTemplate(
    input_variables=["role", "question"],
    template=template
)

3. Chains(链层)

from langchain.chains import LLMChain

chain = LLMChain(
    llm=llm,
    prompt=prompt
)

result = chain.run(role="翻译", question="Hello, world!")

4. Memory(记忆层)

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory(
    memory_key="chat_history",
    return_messages=True
)

5. Agents(代理层)

from langchain.agents import initialize_agent, Tool
from langchain.agents import AgentType

tools = [...]
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)

6. Vector Stores(向量存储)

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings

vectorstore = Chroma(
    embedding_function=OpenAIEmbeddings(),
    persist_directory="./chroma_db"
)

安装配置

基础安装

# 安装核心包
pip install langchain

# 安装完整功能包
pip install langchain-community

# 安装特定集成包
pip install langchain-openai
pip install langchain-anthropic
pip install langchain-google-genai

可选依赖

# 向量数据库
pip install chromadb
pip install faiss-cpu
pip install pinecone-client

# 文档处理
pip install pypdf
pip install python-docx
pip install unstructured

# 搜索工具
pip install google-search-results
pip install wikipedia

# 数据库
pip install sqlalchemy
pip install psycopg2-binary

环境配置

# 设置 API 密钥
export OPENAI_API_KEY="your-api-key"
export ANTHROPIC_API_KEY="your-api-key"
export GOOGLE_API_KEY="your-api-key"

# Windows PowerShell
$env:OPENAI_API_KEY="your-api-key"

快速入门

示例 1:简单的问答应用

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

# 初始化 LLM
llm = OpenAI(temperature=0.7)

# 创建提示词模板
template = """
请简要解释以下概念:{concept}
"""

prompt = PromptTemplate(
    input_variables=["concept"],
    template=template
)

# 创建链
chain = LLMChain(llm=llm, prompt=prompt)

# 运行
result = chain.run(concept="人工智能")
print(result)

示例 2:对话机器人

from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, AIMessage, SystemMessage
from langchain.memory import ConversationBufferMemory

# 初始化模型
chat = ChatOpenAI(model="gpt-3.5-turbo")

# 初始化记忆
memory = ConversationBufferMemory()

# 对话
messages = [
    SystemMessage(content="你是一个有帮助的助手。"),
    HumanMessage(content="你好!")
]

response = chat(messages)
memory.save_context(
    {"input": "你好!"},
    {"output": response.content}
)

print(response.content)

示例 3:文档问答(RAG)

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

# 加载文档
loader = TextLoader("document.txt")
documents = loader.load()

# 分割文本
text_splitter = CharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=0
)
texts = text_splitter.split_documents(documents)

# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
    texts,
    embeddings,
    persist_directory="./chroma_db"
)

# 创建 QA 链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(),
    retriever=vectorstore.as_retriever()
)

# 提问
query = "文档的主要内容是什么?"
result = qa_chain.run(query)
print(result)

示例 4:Agent 应用

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI

# 初始化 LLM
llm = OpenAI(temperature=0)

# 加载工具
tools = load_tools(
    ["serpapi", "llm-math"],
    llm=llm
)

# 初始化 Agent
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True
)

# 运行
agent.run("2024 年诺贝尔文学奖得主是谁?他的年龄是多少?")

示例 5:多步骤工作流

from langchain.chains import SequentialChain, TransformChain
from langchain.chains import LLMChain

# 链 1:生成大纲
outline_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate(
        input_variables=["topic"],
        template="为以下主题生成文章大纲:{topic}"
    ),
    output_key="outline"
)

# 链 2:根据大纲写文章
article_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate(
        input_variables=["topic", "outline"],
        template="根据以下大纲写一篇文章:\n主题:{topic}\n大纲:{outline}"
    ),
    output_key="article"
)

# 链 3:生成标题
title_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate(
        input_variables=["article"],
        template="为以下文章生成 3 个吸引人的标题:{article}"
    ),
    output_key="titles"
)

# 组合成顺序链
overall_chain = SequentialChain(
    chains=[outline_chain, article_chain, title_chain],
    input_variables=["topic"],
    output_variables=["outline", "article", "titles"],
    verbose=True
)

# 运行
result = overall_chain({"topic": "人工智能的未来"})
print(result["titles"])

应用场景

1. 智能客服

  • 自动回答常见问题

  • 多轮对话支持

  • 知识库检索

  • 工单自动生成

2. 内容创作

  • 文章写作助手

  • 营销文案生成

  • 社交媒体内容

  • 邮件自动回复

3. 数据分析

  • 自然语言查询数据库

  • 数据可视化生成

  • 报告自动生成

  • 趋势分析

4. 代码助手

  • 代码生成

  • 代码审查

  • Bug 修复

  • 文档生成

5. 教育培训

  • 智能辅导

  • 题目生成

  • 作业批改

  • 个性化学习路径

6. 知识管理

  • 文档智能检索

  • 知识图谱构建

  • 信息抽取

  • 智能摘要

7. 营销自动化

  • 客户画像分析

  • 个性化推荐

  • 营销活动生成

  • 舆情监控


生态系统

核心库

  • langchain-core:核心抽象和接口

  • langchain-community:社区贡献的集成

  • langchain-openai:OpenAI 集成

  • langchain-anthropic:Anthropic 集成

  • langchain-google:Google 集成

工具库

  • langserve:部署 LangChain 应用

  • langsmith:调试和监控平台

  • langgraph:构建有状态应用

集成平台

向量数据库

  • Chroma

  • Pinecone

  • Weaviate

  • Milvus

  • FAISS

文档存储

  • Notion

  • Confluence

  • Google Drive

  • Dropbox

数据库

  • PostgreSQL

  • MySQL

  • MongoDB

  • Redis

云服务

  • AWS

  • Azure

  • GCP


优缺点分析

优点

  1. 易于使用

    • 简洁的 API 设计

    • 丰富的文档和示例

    • 快速上手

  2. 灵活性强

    • 支持多种 LLM 提供商

    • 可自定义组件

    • 模块化设计

  3. 功能丰富

    • 完整的工具链

    • 预构建的链和 Agent

    • 丰富的集成

  4. 社区活跃

    • 大量贡献者

    • 频繁更新

    • 丰富的第三方资源

  5. 生产就绪

    • 支持部署和监控

    • 性能优化

    • 错误处理

缺点

  1. 学习曲线

    • 概念较多

    • 需要理解 LLM 原理

    • 高级功能复杂

  2. 依赖管理

    • 依赖包众多

    • 版本兼容问题

    • 安装复杂

  3. 性能开销

    • 抽象层带来开销

    • 某些场景不如原生

    • 需要优化

  4. 文档质量

    • 部分文档过时

    • 示例不够完善

    • 中文文档缺乏


最佳实践

1. 提示词优化

# 使用清晰的指令
prompt = PromptTemplate(
    input_variables=["task"],
    template="请完成以下任务,要求简洁准确:{task}"
)

# 提供上下文
prompt = PromptTemplate(
    input_variables=["context", "question"],
    template="基于以下信息回答问题:\n{context}\n问题:{question}"
)

# 使用少样本学习
examples = [
    {"input": "苹果", "output": "水果"},
    {"input": "胡萝卜", "output": "蔬菜"}
]

2. 记忆管理

# 限制对话长度
memory = ConversationBufferWindowMemory(
    k=5,  # 保留最近 5 轮对话
    return_messages=True
)

# 使用摘要记忆
memory = ConversationSummaryMemory(
    llm=llm,
    memory_key="summary"
)

3. 错误处理

from langchain.callbacks import CallbackManager

def handle_error(error):
    print(f"发生错误:{error}")
    return "抱歉,我遇到了一个问题。"

try:
    result = chain.run(input_text)
except Exception as e:
    result = handle_error(e)

4. 性能优化

# 批量处理
results = llm.generate(prompts)

# 缓存结果
from langchain.cache import InMemoryCache
from langchain.globals import set_llm_cache

set_llm_cache(InMemoryCache())

# 流式输出
for chunk in llm.stream(prompt):
    print(chunk, end="", flush=True)

5. 成本控制

# 限制 token 使用
llm = ChatOpenAI(
    max_tokens=500,
    temperature=0.5
)

# 监控使用量
from langchain.callbacks import get_openai_callback

with get_openai_callback() as cb:
    result = chain.run(input_text)
    print(f"Total Tokens: {cb.total_tokens}")
    print(f"Total Cost: ${cb.total_cost}")

常见问题

Q1: LangChain 适合什么场景?

适合需要组合多个组件、管理对话历史、使用外部工具的 LLM 应用场景。

Q2: LangChain 和 LlamaIndex 有什么区别?

LangChain 更通用,支持多种功能;LlamaIndex 专注于数据检索和 RAG 场景。

Q3: 如何选择合适的 LLM?

根据需求选择:

  • 高质量:GPT-4、Claude

  • 性价比:GPT-3.5、国产模型

  • 本地部署:LLaMA、Qwen

Q4: 如何调试 LangChain 应用?

  • 启用 verbose 模式

  • 使用 LangSmith 平台

  • 添加日志记录

  • 逐步测试组件

Q5: 如何部署到生产环境?

  • 使用 LangServe 部署 API

  • 容器化部署(Docker)

  • 配置负载均衡

  • 添加监控告警


相关资源

官方资源

学习资源

  • LangChain 官方教程

  • YouTube 官方频道

  • 社区博客和文章

社区资源

  • Discord 社区

  • Stack Overflow

  • Reddit r/LangChain

  • 中文社区


总结

LangChain 是一个强大的 LLM 应用开发框架,通过组件化和链式调用的方式,让开发者能够快速构建复杂的 AI 应用。

适用场景

  • 需要组合多个 AI 功能

  • 需要管理对话历史

  • 需要访问外部数据和工具

  • 需要快速原型开发

不适用场景

  • 简单的单次调用

  • 对性能要求极高

  • 资源受限环境

学习建议

  1. 从基础组件开始

  2. 实践简单示例

  3. 逐步构建复杂应用

  4. 参考官方文档和社区资源


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐