LangChain框架Skill langchain

LangChain框架是一个用于构建基于大型语言模型(LLM)的应用程序的开源工具,支持代理(Agents)、链(Chains)和检索增强生成(RAG)。它提供多LLM提供商集成、工具调用、内存管理和向量存储检索,适用于快速AI应用原型开发和生产部署。关键词:LangChain, LLM应用程序, 代理, RAG, 工具调用, 向量存储, 人工智能框架, 快速开发

RAG应用 0 次安装 0 次浏览 更新于 3/21/2026

名称: langchain 描述: 用于构建由大型语言模型驱动的应用程序的框架,支持代理、链和检索增强生成(RAG)。支持多种提供商(OpenAI、Anthropic、Google),500多个集成,ReAct代理、工具调用、内存管理和向量存储检索。用于构建聊天机器人、问答系统、自主代理或RAG应用程序。最适合快速原型开发和生产部署。 版本: 1.0.0 作者: Orchestra Research 许可证: MIT 标签: [代理, LangChain, RAG, 工具调用, ReAct, 内存管理, 向量存储, LLM应用程序, 聊天机器人, 生产] 依赖项: [langchain, langchain-core, langchain-openai, langchain-anthropic]

LangChain - 使用代理和RAG构建LLM应用程序

构建LLM驱动应用程序的最流行框架。

何时使用LangChain

使用LangChain当:

  • 构建具有工具调用和推理(ReAct模式)的代理
  • 实现RAG(检索增强生成)管道
  • 需要轻松切换LLM提供商(OpenAI、Anthropic、Google)
  • 创建具有对话记忆的聊天机器人
  • 快速原型开发LLM应用程序
  • 生产部署,配合LangSmith可观察性

指标:

  • 119,000+ GitHub星标
  • 272,000+ 代码库 使用LangChain
  • 500+ 集成(模型、向量存储、工具)
  • 3,800+ 贡献者

改用替代方案:

  • LlamaIndex:专注于RAG,更适合文档问答
  • LangGraph:复杂状态工作流,更多控制
  • Haystack:生产搜索管道
  • Semantic Kernel:微软生态系统

快速入门

安装

# 核心库(Python 3.10+)
pip install -U langchain

# 使用OpenAI
pip install langchain-openai

# 使用Anthropic
pip install langchain-anthropic

# 常见额外功能
pip install langchain-community  # 500多个集成
pip install langchain-chroma     # 向量存储

基本LLM使用

from langchain_anthropic import ChatAnthropic

# 初始化模型
llm = ChatAnthropic(model="claude-sonnet-4-5-20250929")

# 简单完成
response = llm.invoke("用两句话解释量子计算")
print(response.content)

创建代理(ReAct模式)

from langchain.agents import create_agent
from langchain_anthropic import ChatAnthropic

# 定义工具
def get_weather(city: str) -> str:
    """获取城市的当前天气。"""
    return f"在{city}天气晴朗,72°F"

def search_web(query: str) -> str:
    """在网络上搜索信息。"""
    return f"搜索结果:{query}"

# 创建代理(<10行代码!)
agent = create_agent(
    model=ChatAnthropic(model="claude-sonnet-4-5-20250929"),
    tools=[get_weather, search_web],
    system_prompt="你是一个有帮助的助手。需要时使用工具。"
)

# 运行代理
result = agent.invoke({"messages": [{"role": "user", "content": "巴黎的天气怎么样?"}]})
print(result["messages"][-1].content)

核心概念

1. 模型 - LLM抽象

from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_google_genai import ChatGoogleGenerativeAI

# 轻松切换提供商
llm = ChatOpenAI(model="gpt-4o")
llm = ChatAnthropic(model="claude-sonnet-4-5-20250929")
llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp")

# 流式传输
for chunk in llm.stream("写一首诗"):
    print(chunk.content, end="", flush=True)

2. 链 - 顺序操作

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

# 定义提示模板
prompt = PromptTemplate(
    input_variables=["topic"],
    template="写一个关于{topic}的3句话摘要"
)

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

# 运行链
result = chain.run(topic="机器学习")

3. 代理 - 使用工具进行推理

ReAct(推理+行动)模式:

from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.tools import Tool

# 定义自定义工具
calculator = Tool(
    name="计算器",
    func=lambda x: eval(x),
    description="用于数学计算。输入:有效的Python表达式。"
)

# 使用工具创建代理
agent = create_tool_calling_agent(
    llm=llm,
    tools=[calculator, search_web],
    prompt="使用可用工具回答问题"
)

# 创建执行器
agent_executor = AgentExecutor(agent=agent, tools=[calculator], verbose=True)

# 运行带推理
result = agent_executor.invoke({"input": "25 * 17 + 142 是多少?"})

4. 内存 - 对话历史

from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain

# 添加内存以跟踪对话
memory = ConversationBufferMemory()

conversation = ConversationChain(
    llm=llm,
    memory=memory,
    verbose=True
)

# 多轮对话
conversation.predict(input="嗨,我是Alice")
conversation.predict(input="我的名字是什么?")  # 记住"Alice"

RAG(检索增强生成)

基本RAG管道

from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA

# 1. 加载文档
loader = WebBaseLoader("https://docs.python.org/3/tutorial/")
docs = loader.load()

# 2. 分割成块
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
splits = text_splitter.split_documents(docs)

# 3. 创建嵌入和向量存储
vectorstore = Chroma.from_documents(
    documents=splits,
    embedding=OpenAIEmbeddings()
)

# 4. 创建检索器
retriever = vectorstore.as_retriever(search_kwargs={"k": 4})

# 5. 创建QA链
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    return_source_documents=True
)

# 6. 查询
result = qa_chain({"query": "什么是Python装饰器?"})
print(result["result"])
print(f"来源:{result['source_documents']}")

带内存的对话式RAG

from langchain.chains import ConversationalRetrievalChain

# 带对话内存的RAG
qa = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=retriever,
    memory=ConversationBufferMemory(
        memory_key="chat_history",
        return_messages=True
    )
)

# 多轮RAG
qa({"question": "Python用于什么?"})
qa({"question": "你能详细说说Web开发吗?"})  # 记住上下文

高级代理模式

结构化输出

from langchain_core.pydantic_v1 import BaseModel, Field

# 定义模式
class WeatherReport(BaseModel):
    city: str = Field(description="城市名称")
    temperature: float = Field(description="温度(华氏度)")
    condition: str = Field(description="天气状况")

# 获取结构化响应
structured_llm = llm.with_structured_output(WeatherReport)
result = structured_llm.invoke("旧金山的天气怎么样?是65°F,晴朗")
print(result.city, result.temperature, result.condition)

并行工具执行

from langchain.agents import create_tool_calling_agent

# 代理自动并行化独立工具调用
agent = create_tool_calling_agent(
    llm=llm,
    tools=[get_weather, search_web, calculator]
)

# 这将并行调用get_weather("巴黎")和get_weather("伦敦")
result = agent.invoke({
    "messages": [{"role": "user", "content": "比较巴黎和伦敦的天气"}]
})

流式代理执行

# 流式代理步骤
for step in agent_executor.stream({"input": "研究AI趋势"}):
    if "actions" in step:
        print(f"工具:{step['actions'][0].tool}")
    if "output" in step:
        print(f"输出:{step['output']}")

常见模式

多文档QA

from langchain.chains.qa_with_sources import load_qa_with_sources_chain

# 加载多个文档
docs = [
    loader.load("https://docs.python.org"),
    loader.load("https://docs.numpy.org")
]

# 带来源引用的QA
chain = load_qa_with_sources_chain(llm, chain_type="stuff")
result = chain({"input_documents": docs, "question": "如何使用numpy数组?"})
print(result["output_text"])  # 包括来源引用

带错误处理的自定义工具

from langchain.tools import tool

@tool
def risky_operation(query: str) -> str:
    """执行可能失败的风险操作。"""
    try:
        # 你的操作在这里
        result = perform_operation(query)
        return f"成功:{result}"
    except Exception as e:
        return f"错误:{str(e)}"

# 代理优雅处理错误
agent = create_agent(model=llm, tools=[risky_operation])

LangSmith可观察性

import os

# 启用追踪
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-api-key"
os.environ["LANGCHAIN_PROJECT"] = "my-project"

# 所有链/代理自动追踪
agent = create_agent(model=llm, tools=[calculator])
result = agent.invoke({"input": "计算123 * 456"})

# 在smith.langchain.com查看追踪

向量存储

Chroma(本地)

from langchain_chroma import Chroma

vectorstore = Chroma.from_documents(
    documents=docs,
    embedding=OpenAIEmbeddings(),
    persist_directory="./chroma_db"
)

Pinecone(云)

from langchain_pinecone import PineconeVectorStore

vectorstore = PineconeVectorStore.from_documents(
    documents=docs,
    embedding=OpenAIEmbeddings(),
    index_name="my-index"
)

FAISS(相似性搜索)

from langchain_community.vectorstores import FAISS

vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())
vectorstore.save_local("faiss_index")

# 稍后加载
vectorstore = FAISS.load_local("faiss_index", OpenAIEmbeddings())

文档加载器

# 网页
from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://example.com")

# PDF
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("paper.pdf")

# GitHub
from langchain_community.document_loaders import GithubFileLoader
loader = GithubFileLoader(repo="user/repo", file_filter=lambda x: x.endswith(".py"))

# CSV
from langchain_community.document_loaders import CSVLoader
loader = CSVLoader("data.csv")

文本分割器

# 递归(推荐用于一般文本)
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    separators=["

", "
", " ", ""]
)

# 代码感知
from langchain.text_splitter import PythonCodeTextSplitter
splitter = PythonCodeTextSplitter(chunk_size=500)

# 语义(按含义)
from langchain_experimental.text_splitter import SemanticChunker
splitter = SemanticChunker(OpenAIEmbeddings())

最佳实践

  1. 从简单开始 - 大多数情况下使用create_agent()
  2. 启用流式传输 - 长响应的更好用户体验
  3. 添加错误处理 - 工具可能失败,优雅处理
  4. 使用LangSmith - 调试代理的必备工具
  5. 优化块大小 - RAG使用500-1000字符
  6. 版本化提示 - 生产中跟踪变化
  7. 缓存嵌入 - 昂贵,尽可能缓存
  8. 监控成本 - 使用LangSmith跟踪令牌使用

性能基准

操作 延迟 备注
简单LLM调用 ~1-2秒 取决于提供商
带1个工具的代理 ~3-5秒 ReAct推理开销
RAG检索 ~0.5-1秒 向量搜索 + LLM
嵌入1000个文档 ~10-30秒 取决于模型

LangChain vs LangGraph

功能 LangChain LangGraph
最适合 快速代理,RAG 复杂工作流
抽象级别
开始代码 <10行 ~30行
控制 简单 完全控制
状态工作流 有限 原生支持
循环图
人机交互 基本 高级

使用LangGraph当:

  • 需要带循环的状态工作流
  • 需要细粒度控制
  • 构建多代理系统
  • 生产应用带复杂逻辑

参考文献

资源