返回首目录更多内容

🦜🔗Part 1: LangChain 概述与环境搭建

1.1 什么是 LangChain

详细解释

LangChain 是一个用于开发由大语言模型(LLM)驱动的应用程序的开源框架。你可以把它想象成 LLM 的"乐高积木" – 就像乐高积木可以拼搭出各种造型一样,LangChain 提供了各种标准化的组件,让你可以灵活地组合它们,构建出强大的 AI 应用。

类比理解

  • 如果说大语言模型(如 GPT-4)是一台发动机,那么 LangChain 就是方向盘、轮胎、底盘等配件
  • 单独的发动机无法直接驾驶,但装上配件后就能变成一辆完整的汽车
  • LangChain 帮你把发动机和各种配件标准化连接起来
能做什么

LangChain 可以帮你构建以下类型的应用:

应用类型 说明 示例
对话机器人 与用户进行多轮对话 客服机器人、私人助手
文档问答 基于文档内容回答问题 企业知识库问答
数据分析 用自然语言查询和分析数据 自然语言转 SQL
代码生成 根据描述生成代码 编程助手
内容创作 自动生成文章、摘要、翻译 写作助手
Agent 智能体 让 LLM 自主决策和使用工具 自动化工作流
多模态应用 处理文本、图片等多种输入 图片描述生成
核心价值(6 大能力)

LangChain 6 大核心能力

模型集成

提示管理

链式调用

数据连接

Agent 智能体

记忆管理

统一接口调用
多种 LLM

模板化
提示工程

组件编排
与组合

连接外部
数据源

自主决策
使用工具

多轮对话
上下文管理

  1. 模型集成:提供统一接口,轻松切换不同的 LLM 提供商(OpenAI、Anthropic、Google 等)
  2. 提示管理:系统化管理提示模板,支持变量插值、少样本学习等
  3. 链式调用:将多个组件串联成工作流,实现复杂的处理逻辑
  4. 数据连接:连接各种数据源(数据库、文档、API),让 LLM 能访问外部信息
  5. Agent 智能体:让 LLM 自主决定使用哪些工具来完成任务
  6. 记忆管理:管理对话历史,实现上下文感知的多轮对话

1.2 架构全景图

LangChain 的架构可以分为四个层次,从上到下分别是应用层、核心层、组件层和集成层:

集成层(Integration Layer)

组件层(Component Layer)

核心层(Core Layer)

应用层(Application Layer)

RAG 问答系统

对话机器人

Agent 智能体

数据分析工具

LCEL 表达式语言

链 Chains

Agent 执行器

记忆 Memory

回调 Callbacks

Models 模型

Prompts 提示

Output Parsers 输出解析

Retrievers 检索器

Tools 工具

Document Loaders 文档加载

OpenAI

Anthropic

Google

Ollama

HuggingFace

Pinecone / Chroma

各种数据源

各层详细解释
层次 作用 关键组件
应用层 用户直接使用的应用 RAG 系统、聊天机器人、Agent
核心层 框架的核心抽象和编排机制 LCEL、Chains、Agent、Memory
组件层 可复用的功能模块 Models、Prompts、Parsers、Retrievers
集成层 与外部服务和平台的对接 OpenAI、Anthropic、向量数据库等

1.3 包结构详解

LangChain 1.3 采用模块化的包结构,你可以按需安装所需的包:

langchain
核心框架

langchain-core
基础抽象

langchain-community
社区集成

langchain-openai
OpenAI 集成

langchain-anthropic
Anthropic 集成

langchain-google-genai
Google 集成

langchain-ollama
Ollama 集成

langchain-huggingface
HuggingFace 集成

包名 作用 安装命令 核心导出
langchain-core 基础抽象和接口定义 pip install langchain-core Runnable, PromptValue, ChatMessage
langchain 核心框架(包含链、Agent 等) pip install langchain LCEL, Chains, Memory, Retrievers
langchain-community 社区贡献的第三方集成 pip install langchain-community 各种文档加载器、向量存储、工具
langchain-openai OpenAI(GPT)模型集成 pip install langchain-openai ChatOpenAI, OpenAIEmbeddings
langchain-anthropic Anthropic(Claude)模型集成 pip install langchain-anthropic ChatAnthropic
langchain-google-genai Google(Gemini)模型集成 pip install langchain-google-genai ChatGoogleGenerativeAI
langchain-ollama Ollama 本地模型集成 pip install langchain-ollama ChatOllama, OllamaEmbeddings
langchain-huggingface HuggingFace 模型集成 pip install langchain-huggingface HuggingFaceEmbeddings, HuggingFacePipeline

重要提示langchain-core 是所有包的基础依赖,安装其他包时会自动安装。langchain 包会自动安装 langchain-corelangchain-community


1.4 环境搭建

系统要求
项目 最低要求 推荐配置
操作系统 Windows 10 / macOS 10.15 / Ubuntu 20.04 最新稳定版
Python 3.9+ 3.11 或 3.12
内存 4 GB 8 GB+
磁盘空间 1 GB 5 GB+
网络 需要访问互联网(下载包和调用 API) 稳定的宽带连接
Python 版本检查
# 检查 Python 版本
python --version
# 或
python3 --version

# 检查 pip 版本
pip --version
# 或
pip3 --version

注意:如果版本低于 3.9,请先升级 Python。推荐从 python.org 下载安装。

创建虚拟环境

Windows(PowerShell):

# 创建虚拟环境
python -m venv langchain_env

# 激活虚拟环境
.\langchain_env\Scripts\Activate.ps1

# 如果遇到执行策略错误,先运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Windows(CMD):

# 创建虚拟环境
python -m venv langchain_env

# 激活虚拟环境
langchain_env\Scripts\activate.bat

macOS / Linux:

# 创建虚拟环境
python3 -m venv langchain_env

# 激活虚拟环境
source langchain_env/bin/activate

激活后,命令行提示符前会出现 (langchain_env) 前缀,表示虚拟环境已激活。

安装 LangChain
# 第一步:升级 pip(推荐)
pip install --upgrade pip

# 第二步:安装 LangChain 核心包
pip install langchain

# 第三步:安装你需要的模型提供商包(按需选择)
pip install langchain-openai          # OpenAI (GPT-3.5/GPT-4)
pip install langchain-anthropic       # Anthropic (Claude)
pip install langchain-google-genai    # Google (Gemini)
pip install langchain-ollama          # Ollama (本地模型)

# 第四步:安装常用工具包(推荐)
pip install python-dotenv             # 环境变量管理
pip install pydantic                  # 数据验证(通常已自动安装)

# 一次性安装所有推荐包
pip install langchain langchain-openai python-dotenv
API 密钥配置

方式一:使用 .env 文件(推荐)

在项目根目录创建 .env 文件:

# .env 文件内容

# OpenAI API 密钥
OPENAI_API_KEY=sk-your-openai-api-key-here

# Anthropic API 密钥(如果使用 Claude)
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here

# Google API 密钥(如果使用 Gemini)
GOOGLE_API_KEY=your-google-api-key-here

# 可选:设置默认模型
OPENAI_MODEL=gpt-4o-mini

安全提示:务必将 .env 文件添加到 .gitignore 中,绝不要将 API 密钥提交到代码仓库!

在 Python 代码中加载 .env 文件:

# load_env.py
from dotenv import load_dotenv

# 加载 .env 文件中的环境变量
load_dotenv()

# 现在可以通过 os.environ 访问这些变量
import os
print(f"OpenAI API Key: {os.environ.get('OPENAI_API_KEY', '未设置')}")

方式二:直接设置环境变量

# Linux / macOS
export OPENAI_API_KEY="sk-your-key-here"

# Windows (PowerShell)
$env:OPENAI_API_KEY="sk-your-key-here"

# Windows (CMD)
set OPENAI_API_KEY=sk-your-key-here
验证安装脚本

创建以下脚本验证你的安装是否成功:

# verify_installation.py
import sys

def check_python_version():
    version = sys.version_info
    print(f"Python 版本: {version.major}.{version.minor}.{version.micro}")
    if version.major < 3 or (version.major == 3 and version.minor < 9):
        print("  [错误] Python 版本需要 >= 3.9")
        return False
    print("  [通过] Python 版本满足要求")
    return True

def check_package(package_name, import_name=None):
    if import_name is None:
        import_name = package_name
    try:
        mod = __import__(import_name)
        version = getattr(mod, "__version__", "未知版本")
        print(f"  [通过] {package_name} (版本: {version})")
        return True
    except ImportError:
        print(f"  [缺失] {package_name} 未安装")
        return False

def main():
    print("=" * 50)
    print("LangChain 安装验证")
    print("=" * 50)
    all_passed = True

    print("\n1. 检查 Python 版本...")
    all_passed &= check_python_version()

    print("\n2. 检查核心包...")
    all_passed &= check_package("langchain", "langchain")
    all_passed &= check_package("langchain-core", "langchain_core")
    all_passed &= check_package("langchain-community", "langchain_community")

    print("\n3. 检查模型提供商包...")
    check_package("langchain-openai", "langchain_openai")
    check_package("langchain-anthropic", "langchain_anthropic")
    check_package("langchain-ollama", "langchain_ollama")

    print("\n4. 检查工具包...")
    all_passed &= check_package("python-dotenv", "dotenv")
    all_passed &= check_package("pydantic", "pydantic")

    print("\n5. 检查 API 密钥配置...")
    from dotenv import load_dotenv
    load_dotenv()
    import os
    if os.environ.get("OPENAI_API_KEY"):
        key = os.environ["OPENAI_API_KEY"]
        print(f"  [通过] OPENAI_API_KEY 已设置 ({key[:8]}...)")
    else:
        print("  [警告] OPENAI_API_KEY 未设置")

    print("\n" + "=" * 50)
    if all_passed:
        print("所有核心依赖安装成功!")
    else:
        print("部分依赖缺失,请安装。")
    print("=" * 50)

if __name__ == "__main__":
    main()
常见安装错误排查
错误信息 原因 解决方案
No module named 'langchain' 未安装 langchain 包 pip install langchain
No module named 'langchain_openai' 未安装 OpenAI 集成包 pip install langchain-openai
python-dotenv not found 未安装 dotenv pip install python-dotenv
TypeError: __init__() got an unexpected keyword argument 版本不兼容 pip install --upgrade langchain langchain-openai
SSL: CERTIFICATE_VERIFY_FAILED 网络代理/证书问题 检查网络设置
Permission denied 权限不足 使用虚拟环境,或加 --user 参数

1.5 LangChain 1.3 新特性

4 大核心改进

1. 增强的 LCEL(LangChain Expression Language)

# 1.3 新增:更灵活的配置传递
from langchain_core.runnables import ConfigurableField
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    model=ConfigurableField(
        id="model_name",
        name="Model",
        description="选择要使用的模型"
    )
)

result = model.invoke("你好")
result = model.invoke("你好", config={"configurable": {"model_name": "gpt-4o"}})

2. 改进的异步支持

import asyncio
from langchain_openai import ChatOpenAI

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

async def main():
    results = await model.abatch([
        "什么是机器学习?",
        "什么是深度学习?",
        "什么是自然语言处理?"
    ])
    for result in results:
        print(result.content)

asyncio.run(main())

3. TypedDict 结构化输出

from typing import TypedDict
from langchain_openai import ChatOpenAI

class MovieReview(TypedDict):
    title: str
    rating: float
    summary: str
    recommendation: str

model = ChatOpenAI(model="gpt-4o-mini")
structured_model = model.with_structured_output(MovieReview)
result = structured_model.invoke("评价电影《星际穿越》")
print(result)

4. 统一的模型初始化接口

from langchain.chat_models import init_chat_model

model = init_chat_model("gpt-4o-mini", model_provider="openai")
claude_model = init_chat_model("claude-3-5-sonnet-20241022", model_provider="anthropic")
ollama_model = init_chat_model("llama3", model_provider="ollama")
Breaking Changes 表格
变更项 旧版本(0.x) 新版本(1.x) 影响
导入路径 from langchain.llms import OpenAI from langchain_openai import ChatOpenAI 所有模型类移至独立包
链的创建 LLMChain(llm=..., prompt=...) 使用 LCEL: prompt | model 旧的 Chain 类被废弃
Agent 类型 initialize_agent(...) 使用 create_react_agent(...) Agent 初始化方式变更
文档加载器 from langchain.document_loaders from langchain_community.document_loaders 文档加载器移至社区包
输出解析器 from langchain.output_parsers from langchain_core.output_parsers 核心解析器移至 core 包
内存管理 ConversationBufferMemory 使用 RunnableWithMessageHistory 内存管理方式重构
从 0.x 迁移注意事项
# ===== 旧版本(0.x)写法 - 已废弃 =====
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("告诉我关于 {topic} 的知识")
llm = OpenAI(model_name="text-davinci-003")
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(topic="人工智能")

# ===== 新版本(1.x)写法 - 推荐 =====
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template("告诉我关于 {topic} 的知识")
model = ChatOpenAI(model="gpt-4o-mini")
chain = prompt | model
result = chain.invoke({"topic": "人工智能"})

1.6 最佳实践

项目结构建议
my_langchain_project/
├── .env                    # 环境变量(API 密钥等)
├── .gitignore              # Git 忽略文件
├── requirements.txt        # 依赖清单
├── src/                    # 源代码目录
│   ├── chains/             # 链的定义
│   ├── prompts/            # 提示模板
│   ├── parsers/            # 输出解析器
│   └── utils/              # 工具函数
├── tests/                  # 测试目录
└── notebooks/              # Jupyter 笔记本
依赖管理
# requirements.txt
langchain>=0.3.0
langchain-core>=0.3.0
langchain-community>=0.3.0
langchain-openai>=0.2.0
python-dotenv>=1.0.0
pydantic>=2.0.0
# src/utils/config.py
import os
from dotenv import load_dotenv

load_dotenv()

class Config:
    DEFAULT_MODEL = os.getenv("DEFAULT_MODEL", "gpt-4o-mini")
    OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
    DEFAULT_TEMPERATURE = float(os.getenv("DEFAULT_TEMPERATURE", "0.7"))
    DEFAULT_MAX_TOKENS = int(os.getenv("DEFAULT_MAX_TOKENS", "2048"))

    @classmethod
    def get_model_kwargs(cls) -> dict:
        return {
            "temperature": cls.DEFAULT_TEMPERATURE,
            "max_tokens": cls.DEFAULT_MAX_TOKENS,
        }

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐