LangChain 1 基础概念

  • 定位: 开源 Python AI 应用开发框架。
  • 核心: 基于大型语言模型,提供模块和工具,简化与 LLM 的集成。
  • 支持模型: OpenAI 的 GPT 系列、Claude 3.5、千问模型等主流大语言模型。
  • 能力: 支持文本生成、问答、翻译、对话等任务。
  • 解决问题: 降低 AI 应用开发的门槛,使开发者能轻松构建创意 AI 应用。

1. LangChain 特性总结

  1. LLM 和提示(Prompt)

    • 提供统一的 API 抽象,兼容各种 LLM(如 OpenAI, Anthropic 等),统一访问方式。。
    • 内建 Prompt 模板管理机制,简化提示编写流程。
  2. Chains (链式调用)

    • 复杂任务可拆分为多步模块,链式串联。
    • 场景如:上下文问答、自动SQL生成、流水线式处理。
    • 支持将多个调用(LLM、工具等)连接起来,形成工作流,按顺序执行。
  3. LCEL(LangChain Expression Language)

    • LangChain 新版本的核心特性。
    • 用来灵活地自定义任务处理流程,解决工作流编排问题
    • 写法类似声明式语言,通过表达式定义链(Chain)。
  4. RAG(数据增强生成)

    • LLM 本身不知道“新知识”,RAG 模式通过外部信息检索提升回答质量(推理)。
    • 一种内容增强技术,用于解决 LLM 知识的静态性问题(数据截止日期)。
    • 关键步骤:
      • 先“检索”外部数据(如 PDF/数据库)
      • 再“生成”内容(LLM)
    • 全称:Retrieval-Augmented Generation
    • 与微调对比: RAG 用于内容增强;微调用于改变模型回答方式、语气(如客服机器人)。
  5. Agents(智能代理)

    • LLM 主动调用工具/API 的高级玩法。
    • 根据用户需求,自动调用外部系统或设备来完成任务。
    • 示例: 用户只需说“明天请假一天”,Agent 即可自动调用内部 OA 系统完成请假流程。
    • LangChain 在 Agent 开发方面提供了丰富的组件和库(如 LangGraph)。
  6. Model Memory (模型记忆):

    • 允许 LLM 记住之前的对话内容。
    • 提供存储功能:
      • 内存存储: 临时记忆,程序重启后丢失。
      • 持久化存储: 需要数据库(如 MongoDB, Redis)来保存对话历史。

2. LangChain 框架结构

  • LangChain 库:Python 和 JavaScript 的核心库,提供接口和集成多种组件:

    • langchain-core:基础抽象和 LangChain 表达语言。
    • langchain-community:第三方集成,主要包括 langchain 集成的第三方组件。
    • langchain:主要包括链(chain)、代理(agent)和检索策略。
  • Templates(模板):LangChain 官方提供的 AI 任务模板库,帮助开发者快速启动和搭建项目。

  • LangServe:基于 FastAPI,可以将 LangChain 定义的链(Chain)发布为 RESTful API 服务,方便外部系统调用。

  • LangSmith:云端开发平台,为 LangChain 应用提供可观测性(Observability),支持链路追踪、监控和调试,助力开发和运维。

  • LangChain

    • Chains: 链式调用。将模型、提示、工具等组件串成多步任务流。
    • Agents: 智能体框架,能动态选择工具和决策路径完成复杂任务。
    • Retrieval: 文本检索和文档相关功能(如向量数据库查询),现在更常单独拆分为“Retrieval组件”。
  • LangChain-Community:

    • Model I/O:
      • LLMs: 主流大模型的 API 封装(如 OpenAI、Anthropic、Hugging Face 等)。
      • Chat Models: 专为多轮对话设计,支持消息结构和函数调用。
      • Prompt Templates: 管理和格式化提示词模板。
      • Output Parsers: 格式化 LLM 输出(如 Markdown 转 J SON)。
      • Example Selectors: 在调用时提供示例。
    • Retrieval:
      • Document Loaders: 加载各种格式的文档(PDF, TXT, Markdown)。
      • Text Splitters: 分割长文本。
      • Embeddings: 将文本转换为向量(调用 LLM 能力实现)。
      • Vector Stores: 存储和检索向量(支持 Chroma, FAISS 等)。
    • Agent Tooling:
      • Tools: Agent 可调用的外部工具(API)。
      • Agent Executors: 协调 Agent 逻辑。
  • LangChain-Core (LangChain Expression Language, LCEL):

    • 作用:提供一套表达式语言,让你用声明式方式组合各种方法、接口和模块。
    • 核心能力
      • 方法执行:轻松定义任务/方法的执行流程。
      • 接口调用:统一管理不同模型或服务的 API 调用。
      • 并行 (Parallelization):支持任务并发处理,提升效率。
      • 批量处理 (Batching/Fallbacks):支持批量任务、出错时自动降级回退。
      • 流式 (Streaming):支持流式数据处理,比如流式输出LLM生成内容。
      • 异步调用 (Async):支持异步执行,提升响应速度。
      • 组合 (Composition):任意拼装/嵌套不同组件,实现复杂流程。
      • 追踪 (Tracing):内置调用链路追踪,方便调试和监控。
  • LangChain 的常见应用场景

    • 对话机器人: 构建智能对话助手、客服机器人、聊天机器人。
    • 知识库管理: 实现 RAG 场景,结合知识图谱进行开放域问答。
    • 智能写作: 用于写文章、创意写作、文本摘要等。

3. Model I/O 流程示例

  1. Format(格式化)
    • 使用 Prompts(提示词工具),把变量(如 x="foo", y="bar")填充到模板(如“Does {x} like {y}, and why?”)中,生成具体的问题:“Does foo like bar, and why?”
  2. Predict(预测)
    • 把格式化后的提示词输入到 模型
      • LLM(基础模型):接收文本输入,返回文本输出。
      • Chat Models(聊天模型):专为多轮消息交互设计,支持输入多条消息(用户、AI、系统、函数等),输出聊天消息。
  3. Parse(解析)
    • 利用 Output Parsers(输出解析器),将 LLM 返回的原始输出(如自然语言、Markdown)解析为结构化数据(如 JSON),便于后续处理或调用。

4. LangChain 实战入门(以 OpenAI 为例)

  1. 环境准备: Python 环境。

  2. 安装:

    1
    2
    3
    pip install langchain
    pip install langchain-openai
    pip install langchain-community
  3. 导入库:

    • ChatPromptTemplate (用于聊天场景的提示词模板)。
    • ChatOpenAI (用于与 OpenAI 的 Chat 模型交互)。
    • StrOutputParser (用于将输出解析为字符串,或自定义解析器如 JSON)。
  4. 配置环境变量: 设置 OPENAI_API_KEY

  5. 实例化 LLM: llm = ChatOpenAI(model="gpt-3.5-turbo") (或其他模型)。

  6. 定义提示词模板: 使用 ChatPromptTemplate.from_messages(),例如:

    • System + Message (定义角色,如“世界级技术专家”)
    • Human + Message (用户输入,可带参数)。
  7. 构建 Chain: 使用 | 将提示词模板和 LLM 连接起来:chain = prompt | llm

  8. 执行 Chain: 调用 chain.invoke({"input": "你的问题"})

  9. 格式化输出: 在 Chain 中加入 Output Parser,如 chain = prompt | llm | StrOutputParser,先调用chain的同时把用户写的input 回填到promptinput中然后调用llm,最后调用StrOutputParser 格式化输出(只有纯文本)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 导入 LangChain 的聊天提示词模板
from langchain_core.prompts import ChatPromptTemplate

# 导入 LangChain 的 OpenAI 聊天模型封装
from langchain_openai import ChatOpenAI

# 1. 初始化 LLM(以 OpenAI GPT-3.5/4 为例)
llm = ChatOpenAI() # 需要提前配置 OpenAI API 密钥

# 2. 创建一个聊天提示词模板,包含 system 角色和 user 角色
prompt = ChatPromptTemplate.from_messages([
("system", "你是世界级的技术专家。"),
("user", "{input}"), # {input} 是模板变量
])

# 3. 将 prompt 和 llm 组合成一个 chain(链式调用,自动拼装输入和输出)

chain = prompt | llm

# 4. 调用 chain,传入用户实际输入(这里要求生成一篇关于 AI 的技术短文)
result = chain.invoke({
"input": "帮我写一篇关于AI的技术文章,100个字"
})

# 5. 打印 LLM 返回的结果
print(result)

# 输出格式:content: ‘xxxxxx’

LangChain 输出解析器(Output Parser)用法

LLM 的原始输出通常是一条消息对象。为了方便后续处理,可以用输出解析器将其转为字符串、JSON 或其它结构化数据。

  • 代码示例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from langchain_core.output_parsers import StrOutputParser

    # 创建一个字符串输出解析器
    output_parser = StrOutputParser()

    # 将输出解析器串联进链(Prompt | LLM | OutputParser)
    chain = prompt | llm | output_parser

    # 调用链并传入输入,得到字符串输出
    result = chain.invoke({"input": "帮我写一篇 langchain 的技术文章,100 个字"})
    print(result)

    # 输出格式:‘xxxxxx’

核心说明:

  • StrOutputParser() 负责把 LLM 输出的消息对象转为纯字符串,适合直接打印或写入文件。
  • 你可以在链式工作流中,随时追加不同类型的 Output Parser,得到自己想要的数据格式。
  • 实际开发中,如果需要结构化数据(如 JSON),可用 JsonOutputParser() 或自定义解析器。

参考资料


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

LangChain 1 基础概念
http://neurowave.tech/2025/06/25/2-10-LLM-Langchain1/
作者
Artin Tan
发布于
2025年6月25日
更新于
2025年8月6日