《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例

第56篇:LangChain快速入门与应用示例

——构建你的第一个AI代理系统


📌 摘要

在大模型(LLM)应用开发领域,LangChain 是当前最主流、功能最强大的框架之一。它不仅提供了模块化的设计思想,还支持多种语言模型、提示工程、记忆机制、检索增强生成(RAG)、智能代理等功能。

本文将带你从零开始,逐步掌握 LangChain 的核心概念和组件使用方式,并通过多个实战案例帮助你构建实际可用的 AI 应用系统,如知识库问答助手、数据分析代理、多轮对话客服机器人等。

✅ 适合对象:AI初中级开发者
🧪 实战内容:Prompt模板、RAG实现、代理系统搭建、流式输出
🛠️ 工具链完整:OpenAI、本地模型、工具调用、回调函数
🎯 场景覆盖:企业知识库、客户服务、数据处理


在这里插入图片描述

🔍 核心概念与知识点

1. LangChain基础架构【实战部分】

1.1 最新版本(0.1.x)核心概念:从旧版到新版架构变化

LangChain 自 v0.1.x 版本起进行了重大重构,引入了:

  • LCEL(LangChain Expression Language):声明式链构建语法;
  • 更清晰的 Runnable 接口;
  • 支持异步、流式、并行处理;
  • 新的 langchain_corelangchain_communitylangchain_openai 等模块拆分。

📌 安装最新版 LangChain:

pip install langchain langchain-openai langchain-anthropic langchain-community
1.2 LangChain表达式语言(LCEL):声明式链构建语法

LCEL 是一种类似函数管道的语法,可以轻松组合 Prompt、模型、解析器等组件。

from langchain_openai import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.schema.output_parser import StrOutputParser

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个{role},擅长{skill}。"),
    ("human", "{query}")
])

llm = ChatOpenAI(model="gpt-4o")

chain = prompt | llm | StrOutputParser()

response = chain.invoke({
    "role": "翻译官",
    "skill": "中英互译",
    "query": "请把'你好吗?'翻译成英文"
})

print(response)
# 输出: How are you?

📌 解释说明:

  • | 表示链式调用;
  • prompt 构建输入;
  • llm 执行推理;
  • StrOutputParser 将输出转为字符串。
1.3 核心组件体系:Models、Prompts、Memory等组件解析
组件功能示例
ModelsLLM / ChatModelOpenAI、Anthropic、本地模型
Prompts提示模板ChatPromptTemplate
Memory对话历史管理ConversationBufferMemory
Tools外部功能集成Search API、数据库查询
Chains链式调用SequentialChain、RetrievalQA
Agents智能代理ReAct Agent
1.4 运行时环境:Tracing与调试工具配置

推荐使用 LangSmith 进行追踪和调试:

export LANGCHAIN_API_KEY=your_langsmith_api_key
export LANGCHAIN_PROJECT=default

然后在代码中启用 Tracing:

import langchain
langchain.debug = True

2. 关键组件实战应用【实战部分】

2.1 模型集成:OpenAI、Anthropic、本地模型适配代码
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
from langchain_ollama import ChatOllama  # 使用本地模型(如Llama3)

openai_llm = ChatOpenAI(model="gpt-4o")
anthropic_llm = ChatAnthropic(model="claude-3-opus-20240229")
local_llm = ChatOllama(model="llama3:8b")  # 假设已安装 Ollama 并运行 llama3

📌 解释说明:

  • 可根据需求切换不同模型;
  • 本地模型适合离线场景或降低成本;
  • 所有模型接口统一,便于替换。
2.2 提示模板:PromptTemplate与聊天提示的最佳实践
from langchain.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位专业的{role},专长于{expertise}。"),
    ("human", "{query}")
])

messages = prompt.invoke({"role": "金融分析师", "expertise": "市场预测", "query": "分析2024年股市趋势"})
print(messages)

输出示例:

[
  SystemMessage(content='你是一位专业的金融分析师,专长于市场预测。'),
  HumanMessage(content='分析2024年股市趋势')
]

📌 解释说明:

  • ChatPromptTemplate 支持多消息类型;
  • 可动态填充变量;
  • 适用于对话系统、多轮交互。
2.3 记忆机制:对话历史管理与持久化存储
from langchain.memory import ConversationBufferMemory
from langchain.chains import LLMChain

memory = ConversationBufferMemory()
chain = LLMChain(llm=openai_llm, prompt=prompt, memory=memory)

# 第一次对话
response = chain.invoke({"role": "医生", "expertise": "营养学", "query": "早餐应该吃什么?"})
print(response['text'])

# 第二次对话
response = chain.invoke({"role": "医生", "expertise": "营养学", "query": "那午餐呢?"})
print(response['text'])

📌 解释说明:

  • ConversationBufferMemory 自动记录对话历史;
  • 支持 RedisMemorySQLMemory 等持久化方式;
  • 可用于构建持续对话的客服系统。
2.4 检索增强实现:完整RAG系统构建代码
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import TextLoader

# 加载文档
loader = TextLoader("data/sample.txt")
docs = loader.load()

# 分块处理
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)

# 构建向量数据库
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())

# 构建检索器
retriever = vectorstore.as_retriever()

# 构建RAG链
rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | openai_llm
    | StrOutputParser()
)

result = rag_chain.invoke("什么是量子计算的基本原理?")
print(result)

📌 解释说明:

  • RecursiveCharacterTextSplitter 保证语义连贯;
  • Chroma 是轻量级向量数据库;
  • 支持 FAISS、Pinecone、Weaviate 等高级方案。

3. LangChain应用架构【实战部分】

3.1 Chains构建:Sequential和Router链的实现示例
from langchain.schema.runnable import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 定义路由逻辑
def route(info):
    if "数学" in info["topic"]:
        return math_chain
    elif "文学" in info["topic"]:
        return literature_chain
    else:
        return general_chain

router_chain = RunnablePassthrough.assign(topic=lambda x: x["topic"]) | route

# 示例调用
response = router_chain.invoke({"topic": "数学", "query": "解方程x² + 2x + 1 = 0"})
print(response)

📌 解释说明:

  • RunnablePassthrough 允许保留原始输入;
  • route() 函数决定走哪条子链;
  • 适用于多任务、多模型调度。
3.2 Agents实现:ReAct代理与工具使用完整代码
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain.tools import Tool
from langchain.prompts import MessagesPlaceholder
from langchain_core.messages import HumanMessage

# 自定义工具
def search_internet(query):
    # 模拟搜索
    return f"搜索结果:{query}"

tools = [
    Tool.from_function(
        func=search_internet,
        name="SearchInternet",
        description="搜索最新的互联网信息"
    )
]

# 创建代理
agent_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个智能代理,可以使用工具完成任务。"),
    MessagesPlaceholder(variable_name="chat_history"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad")
])

agent = create_openai_functions_agent(openai_llm, tools, agent_prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行代理
response = agent_executor.invoke({"input": "2024年奥运会举办地是哪里?"})
print(response["output"])

📌 解释说明:

  • create_openai_functions_agent 支持函数调用;
  • AgentExecutor 负责执行流程控制;
  • 支持流式输出、工具自动选择。
3.3 自定义回调:流式处理与进度监控实现
from langchain.callbacks.base import BaseCallbackHandler

class MyCustomHandler(BaseCallbackHandler):
    def on_llm_new_token(self, token: str, **kwargs) -> None:
        print(f"Token: {token}")

handler = MyCustomHandler()
response = chain.invoke({"query": "请写一篇关于气候变化的文章"}, config={"callbacks": [handler]})

📌 解释说明:

  • on_llm_new_token 实现流式输出;
  • 可用于前端实时显示;
  • 支持自定义日志、性能监控等。
3.4 并行处理策略:高性能应用架构设计
from langchain.schema.runnable import RunnableParallel

parallel_chain = RunnableParallel(
    summary=prompt | llm | StrOutputParser(),
    sentiment=prompt | sentiment_model | StrOutputParser()
)

results = parallel_chain.invoke({"query": "用户对我们的产品评价如何?"})
print(results)

📌 解释说明:

  • RunnableParallel 实现并行执行;
  • 适用于多任务同时处理;
  • 显著提升复杂系统的响应速度。

🧩 垂直应用开发【实战部分】

4.1 文档问答系统:完整知识库应用架构

  • 使用 RAG 技术;
  • 支持 PDF/Word/TXT 文档;
  • 构建可部署的 Web 应用(FastAPI + Gradio);

4.2 对话式代理:持久化对话状态管理

  • 使用 Redis 存储记忆;
  • 支持多用户并发;
  • 构建客服机器人原型。

4.3 数据分析助手:结构化数据处理流程

  • 集成 Pandas;
  • 使用 SQLDatabaseTool 查询数据库;
  • 生成可视化图表建议。

4.4 多模型协作系统:模型路由与任务分发

  • 使用 Router Chain;
  • 动态选择 GPT、Claude 或本地模型;
  • 构建高性价比的企业级系统。

🧩 案例与实例

5.1 企业知识库:完整RAG应用的LangChain实现

见上文“检索增强实现”部分。

5.2 客户服务助手:多轮对话系统的生产级代码

  • 使用 ConversationSummaryBufferMemory
  • 支持上下文压缩;
  • 支持工具调用(如订单查询)。

5.3 数据分析工作流:结合pandas的数据处理代理

from langchain_experimental.agents import create_pandas_dataframe_agent

import pandas as pd
df = pd.read_csv("data/sales.csv")

agent = create_pandas_dataframe_agent(openai_llm, df, verbose=True)
response = agent.invoke("2023年销售额最高的产品是什么?")
print(response["output"])

🛠️ 实战代码与模板

6.1 项目脚手架:生产级LangChain应用模板

GitHub 示例模板地址(假设):https://github.com/yourname/langchain-starter-kit

6.2 自定义组件:扩展LangChain功能的示例代码

  • 自定义 LLM 类;
  • 自定义 Prompt Template;
  • 自定义 Callback Handler。

6.3 性能优化指南:大规模应用的最佳实践

  • 使用 RunnableConfig 控制超时;
  • 启用缓存(langchain.cache.RedisCache);
  • 使用异步模式提高吞吐量。

6.4 调试与监控:LangSmith与追踪工具使用示例

  • 登录 LangSmith:https://smith.langchain.com/
  • 设置 API Key;
  • 查看调用链、耗时、错误信息。

🧠 总结与扩展思考

7.1 LangChain与竞争框架的对比与选择

框架优势缺点
LangChain插件丰富、社区活跃、生态强大初学者学习曲线陡峭
LlamaIndex简洁易用、专注 RAG社区相对较小
AutoGPT自主决策能力强不稳定、资源消耗大

7.2 企业级应用的架构设计考量

  • 安全性:密钥管理、访问控制;
  • 可靠性:重试机制、熔断机制;
  • 可观测性:日志、监控、报警;
  • 成本控制:模型选型、缓存策略。

7.3 LangChain生态系统的未来发展方向

  • 更强的 Agent 能力;
  • 更完善的可视化工具;
  • 更多本地模型支持;
  • 与 LangGraph、LangServe 深度整合。

📚 参考资料

  • LangChain官方文档:https://python.langchain.com/docs/
  • LangSmith官网:https://smith.langchain.com/
  • LangChain中文社区:https://langchain.cn/
  • GitHub仓库:https://github.com/langchain-ai/langchain

🧑‍💻 结语

LangChain 是构建现代大模型应用的核心工具之一。本文不仅介绍了其核心组件与架构,还通过多个实战代码帮助你快速上手,构建真实可用的 AI 应用。

💬 如果你想了解某个平台的深度评测、定制化训练或私有化部署方案,欢迎留言,我们将安排专题深入讲解!


✅ 关注《AI大模型应知应会100篇》专栏,持续更新前沿技术干货!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带娃的IT创业者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值