跳转至

第一章:LangChain 简介

什么是 LangChain?

LangChain 是一个用于开发大语言模型(LLM)应用的框架,它提供了:

  • 模型集成:统一接口对接多种 LLM(OpenAI、Anthropic、DeepSeek 等)
  • 提示词管理:模板化和优化提示词
  • LCEL 链式调用:声明式语法组合多个操作
  • 记忆系统:维护对话上下文
  • Agent 系统:让 LLM 自主使用工具完成任务
  • RAG 支持:检索增强生成的一站式解决方案

LangChain 0.3+ 重要变化

LangChain 0.3 版本进行了重大重构:

包结构变化

# 旧版本(0.2 及之前)
pip install langchain

# 新版本(0.3+)- 模块化安装
pip install langchain              # 核心包
pip install langchain-openai       # OpenAI 集成
pip install langchain-anthropic    # Anthropic 集成
pip install langchain-community    # 社区集成
pip install langchain-core         # 核心接口(自动安装)

废弃的 API

旧 API 新 API 说明
LLMChain LCEL (prompt \| llm) 使用 LCEL 语法
initialize_agent create_react_agent 使用新的 Agent 创建函数
AgentExecutor + 旧 agent LangGraph 复杂 Agent 推荐使用 LangGraph
ConversationChain LCEL + Memory 使用 LCEL 组合
RetrievalQA LCEL + Retriever 使用 LCEL 组合

LCEL 成为核心

LCEL(LangChain Expression Language)是 0.3+ 的核心语法:

# 旧方式
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(topic="Python")

# 新方式(LCEL)
chain = prompt | llm | output_parser
result = chain.invoke({"topic": "Python"})

核心概念

1. Runnable 接口

所有 LCEL 组件都实现 Runnable 接口:

from langchain_core.runnables import RunnableLambda

# 所有 Runnable 都支持这些方法
runnable.invoke(...)        # 同步调用
runnable.ainvoke(...)       # 异步调用
runnable.batch([...])       # 批量调用
runnable.abatch([...])      # 异步批量
runnable.stream(...)        # 流式输出
runnable.astream(...)       # 异步流式

2. 模型类型

类型 说明 示例
Chat Model 消息列表 → AIMessage ChatOpenAI, ChatAnthropic
LLM 字符串 → 字符串 OpenAI(已不推荐,用 Chat Model)
Embeddings 字符串 → 向量 OpenAIEmbeddings

3. 消息类型

from langchain_core.messages import (
    SystemMessage,
    HumanMessage,
    AIMessage,
    ToolMessage
)

messages = [
    SystemMessage("你是一个助手"),
    HumanMessage("你好"),
    AIMessage("你好!有什么可以帮助你的?"),
]

4. 提示词模板

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个{role}"),
    ("human", "{input}")
])

# 格式化
formatted = prompt.invoke({"role": "翻译官", "input": "Hello"})

5. 输出解析器

from langchain_core.output_parsers import StrOutputParser

parser = StrOutputParser()
# AIMessage → str

安装配置

安装

# 核心包 + OpenAI 集成
pip install langchain langchain-openai

# 其他模型
pip install langchain-anthropic      # Claude
pip install langchain-google-genai   # Gemini
pip install langchain-community      # 社区模型

# 向量数据库
pip install langchain-milvus
pip install langchain-chroma

# 文档处理
pip install langchain-text-splitters
pip install langchain-community  # 包含 document loaders

配置 API Key

import os

# 方式 1:直接设置
os.environ["OPENAI_API_KEY"] = "sk-xxx"

# 方式 2:使用 .env 文件
from dotenv import load_dotenv
load_dotenv()  # 自动加载 .env 文件

# 方式 3:直接传给模型
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(api_key="sk-xxx")

.env 文件示例

OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
DEEPSEEK_API_KEY=sk-xxx

快速示例

最简单的链

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 1. 定义组件
prompt = ChatPromptTemplate.from_template("讲一个关于{topic}的笑话")
llm = ChatOpenAI(model="gpt-4o-mini")
parser = StrOutputParser()

# 2. 组装链(LCEL 语法)
chain = prompt | llm | parser

# 3. 调用
result = chain.invoke({"topic": "程序员"})
print(result)

流式输出

for chunk in chain.stream({"topic": "程序员"}):
    print(chunk, end="", flush=True)

带系统提示的对话

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个{role},回答要{style}"),
    ("human", "{input}")
])

chain = prompt | llm | parser

result = chain.invoke({
    "role": "资深程序员",
    "style": "简洁专业",
    "input": "什么是 Python 的 GIL?"
})

支持的模型

OpenAI

from langchain_openai import ChatOpenAI

# 标准 OpenAI
llm = ChatOpenAI(model="gpt-4o")

# Azure OpenAI
llm = ChatOpenAI(
    azure_endpoint="https://xxx.openai.azure.com/",
    azure_deployment="gpt-4",
    api_key="xxx",
    api_version="2024-02-15-preview"
)

Anthropic Claude

from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-5-sonnet-20241022")

DeepSeek

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="deepseek-chat",
    base_url="https://api.deepseek.com/v1",
    api_key="sk-xxx"
)

通义千问

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="qwen-turbo",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key="sk-xxx"
)

智谱 AI

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="glm-4",
    base_url="https://open.bigmodel.cn/api/paas/v4",
    api_key="xxx"
)

项目结构建议

langchain-project/
├── app/
│   ├── __init__.py
│   ├── main.py              # 入口
│   ├── chains/              # 自定义链
│   │   └── __init__.py
│   ├── agents/              # Agent 定义
│   │   └── __init__.py
│   ├── tools/               # 自定义工具
│   │   └── __init__.py
│   └── prompts/             # 提示词模板
│       └── __init__.py
├── .env                     # 环境变量
├── pyproject.toml           # 依赖管理
└── README.md

LangChain vs 直接调用 API

特性 直接调用 API LangChain
模型切换 修改代码 统一接口,一行切换
提示词管理 手动拼接 模板化、可复用
链式调用 手动编排 LCEL 声明式语法
流式输出 手动处理 内置支持
记忆系统 自己实现 开箱即用
工具调用 手动解析 自动处理
RAG 自己搭建 完整工具链

适用场景

  • ✅ 聊天机器人和对话系统
  • ✅ 文档问答(RAG)
  • ✅ 代码生成和分析
  • ✅ 数据提取和处理
  • ✅ Agent 自动化任务
  • ✅ 智能助手

小结

本章学习了:

  • ✅ LangChain 0.3+ 的重大变化
  • ✅ 废弃 API 与新 API 对照
  • ✅ LCEL 核心语法
  • ✅ 安装和配置
  • ✅ 支持的模型

下一章

第二章:快速开始 - 深入学习 LangChain 的核心功能。