201 lines
7.7 KiB
Markdown
201 lines
7.7 KiB
Markdown
# 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 工具定义
|
|
```python
|
|
from langchain_core.tools import tool
|
|
|
|
@tool(description="查询天气")
|
|
def get_weather(city: str) -> str:
|
|
return f"{city}天气晴朗"
|
|
```
|
|
|
|
### 6.2 Agent 创建
|
|
```python
|
|
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
|
|
```python
|
|
from langchain_core.output_parsers import StrOutputParser
|
|
from langchain_core.prompts import PromptTemplate
|
|
|
|
chain = prompt_text | model | StrOutputParser()
|
|
```
|
|
|
|
### 6.4 向量存储
|
|
```python
|
|
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 文档加载
|
|
```python
|
|
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 文本分片
|
|
```python
|
|
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`: 动态生成提示词
|