agent_proj/docs/LANGCHAIN_PACKAGE_MAP.md

7.7 KiB

LangChain 包地图 (Package Map)

本项目使用的 LangChain 相关包一览,按功能模块分类


1. 核心包 (Core Packages)

langchain-core

类/函数 导入路径 用途
tool langchain_core.tools 装饰器方式定义 Agent 工具
Embeddings langchain_core.embeddings Embedding 模型抽象基类
BaseChatModel langchain_core.chat_models 聊天模型抽象基类
PromptTemplate langchain_core.prompts Prompt 模板构建
StrOutputParser langchain_core.output_parsers 输出解析为字符串
Document langchain_core.documents 文档对象
ToolMessage langchain_core.messages 工具返回消息
AIMessage langchain_core.messages AI 消息对象

langchain

类/函数 导入路径 用途
create_agent langchain.agents 创建 LangChain Agent
AgentState langchain.agents Agent 状态定义
wrap_tool_call langchain.agents.middleware 工具调用包装器
before_model langchain.agents.middleware 模型调用前钩子
dynamic_prompt langchain.agents.middleware 动态提示词装饰器
ModelRequest langchain.agents.middleware 模型请求对象

2. 社区包 (Community Packages)

langchain-community

类/函数 导入路径 用途
ChatTongyi langchain_community.chat_models.tongyi 通义千问模型
BaseChatModel langchain_community.chat_models 社区版聊天模型基类
DashScopeEmbeddings langchain_community.embeddings 阿里 DashScope Embedding
PyPDFLoader langchain_community.document_loaders PDF 文件加载
TextLoader langchain_community.document_loaders TXT 文件加载
Document langchain_community.docstore.document 社区版文档对象

3. 特定集成包 (Integration Packages)

langchain-chroma

类/函数 导入路径 用途
Chroma langchain_chroma Chroma 向量数据库

langchain-text-splitters

类/函数 导入路径 用途
RecursiveCharacterTextSplitter langchain_text_splitters 递归文本分片器

4. LangGraph 相关包

langgraph

类/函数 导入路径 用途
Command langgraph.types LangGraph 命令对象
Runtime langgraph.runtime LangGraph 运行时
ToolCallRequest langchain.tools.tool_node 工具调用请求

5. 包依赖关系图

┌─────────────────────────────────────────────────────────────────┐
│                        用户代码 (app.py)                         │
└─────────────────────────────┬───────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      langchain.agents                           │
│                    (create_agent, middleware)                    │
└───────────────┬─────────────────────┬───────────────────────────┘
                │                     │
                ▼                     ▼
┌───────────────────────────┐ ┌───────────────────────────────────┐
│    langchain-core         │ │    langchain-community             │
│  - tools (tool)           │ │  - chat_models.tongyi (ChatTongyi)│
│  - prompts (PromptTemplate)│ │  - embeddings (DashScope)         │
│  - output_parsers         │ │  - document_loaders                │
│  - messages               │ │  - docstore.document                │
└───────────────┬───────────┘ └───────────────┬───────────────────┘
                │                             │
                ▼                             ▼
┌───────────────────────────┐ ┌───────────────────────────────────┐
│   langchain-text-splitters│ │       langchain-chroma             │
│ (RecursiveCharacterText   │ │       (Chroma)                     │
│  Splitter)                │ │                                    │
└───────────────────────────┘ └───────────────────────────────────┘
                                    │
                                    ▼
                             ┌─────────────┐
                             │  Chroma DB  │
                             └─────────────┘

6. 项目中的实际使用示例

6.1 工具定义

from langchain_core.tools import tool

@tool(description="查询天气")
def get_weather(city: str) -> str:
    return f"{city}天气晴朗"

6.2 Agent 创建

from langchain.agents import create_agent
from langchain_community.chat_models.tongyi import ChatTongyi

agent = create_agent(
    model=ChatTongyi(model="qwen3-max"),
    tools=[get_weather],
    system_prompt="你是一个智能助手"
)

6.3 RAG Chain

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate

chain = prompt_text | model | StrOutputParser()

6.4 向量存储

from langchain_chroma import Chroma
from langchain_community.embeddings import DashScopeEmbeddings

vector_store = Chroma(
    collection_name="agent",
    embedding_function=DashScopeEmbeddings(model="text-embedding-v4"),
    persist_directory="chroma_db"
)

6.5 文档加载

from langchain_community.document_loaders import PyPDFLoader, TextLoader

pdf_docs = PyPDFLoader("file.pdf").load()
txt_docs = TextLoader("file.txt", encoding="utf-8").load()

6.6 文本分片

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=200,
    chunk_overlap=20,
    separators=["\n\n", "\n", ".", "!", "?"]
)

7. 包版本要求参考

langchain>=0.3.0
langchain-core>=0.3.0
langchain-community>=0.3.0
langchain-chroma>=0.1.0
langchain-text-splitters>=0.3.0
langgraph>=0.2.0

8. QA

Q1: langchain-core 和 langchain-community 的区别?

  • langchain-core: LangChain 核心抽象接口,不包含具体实现
  • langchain-community: 第三方集成 (如通义千问、DashScope)

Q2: 为什么选择 langchain-chroma 而不是直接用 chromadb?

  • LangChain 封装了统一的接口,便于后续更换向量数据库
  • 与 LangChain Chain/Agent 更好地集成

Q3: middleware 机制的实现原理?

  • 基于 LangGraph 的钩子系统
  • wrap_tool_call: 包装工具调用前后逻辑
  • before_model: 模型调用前的预处理
  • dynamic_prompt: 动态生成提示词