Skip to content

LangChain.js 模块分析 #5: 示例与社区组件(含流程图)

模块: examples, langchain-community, langchain-textsplitters, langchain-mcp-adapters 分析日期: 2026-02-13


目录

  1. 示例项目
  2. langchain-community 社区集成
  3. langchain-textsplitters 文本分割
  4. langchain-mcp-adapters MCP 协议

1. 示例项目

1.1 项目结构流程图

mermaid
graph TD
    Start[用户输入] --> SelectExample{选择示例}

    SelectExample --> |A[createAgent]|
    SelectExample --> |B[llms]|
    SelectExample --> |C[multi-agent]|
    SelectExample --> |D[cache]|
    SelectExample --> |E[document_compressors]|

    A --> A1[创建 ReactAgent]
    A --> A2[配置 LLM]
    A --> A3[定义工具]
    A --> A4[运行 Agent]

    A1 --> Output[输出结果]
    Output --> Final[完成]

    B --> B1[配置 ChatOpenAI]
    B --> B2[调用 LLM]
    B --> B3[处理响应]

    B1 --> Output[输出文本]
    Output --> Final[完成]

    C --> C1[创建研究 Agent]
    C --> C2[创建摘要 Agent]
    C --> C3[协作流程]

    C1 --> Research[执行研究]
    C2 --> Summarize[执行摘要]
    Summarize --> Output[发送给摘要 Agent]
    Output --> Final[完成]

    D --> D1[配置缓存]
    D --> D2[调用 LLM(带缓存)]
    D --> D3[缓存命中验证]

    D1 --> |A1[首次调用 - 缓存未命中]|
    D2 --> |A2[第二次调用 - 缓存命中]|
    D2 --> Output[返回缓存结果]
    Output --> Final

    A2 --> Output
    A3 --> Final

    E --> E1[加载文档]
    E --> E2[分割文档]
    E --> E3[生成嵌入]
    E --> E4[添加到向量存储]

    E --> F[创建 RAG 链]
    F --> Query[查询向量存储]
    F --> Output[返回相关文档]

    Query --> Output
    Output --> Final[完成]

    style Start fill:#e1f5ff
    style SelectExample fill:#fff4e6
    style A fill:#d1fae5
    style B fill:#d1fae5
    style C fill:#d1fae5
    style D fill:#d1fae5
    style E fill:#d1fae5
    style F fill:#f59e0b
    style Output fill:#f59e0b
    style Final fill:#f59e0b

2. langchain-community

2.1 社区工具流程图

mermaid
graph TD
    Input[用户请求] --> RegisterTool[注册工具]

    RegisterTool --> |A[验证 Schema]|
    RegisterTool --> |B[创建 Tool 实例]|

    A --> |A1[检查 Zod Schema]|
    A --> |A2[提取元数据]|

    A1 --> Validate[验证通过]
    A2 --> CreateInstance[创建工具实例]

    B --> |B1[实现 call 方法]|
    B --> |B2[错误处理]|
    B --> |B3[返回结果]|

    B1 --> |C1[同步调用]|
    B1 --> |C2[异步调用]|
    B --> |C3[回调处理]|

    C1 --> |D1[try-catch 错误]|
    C2 --> |D2[try-catch 错误]|
    C3 --> |D3[记录日志]|

    D1 --> Output[返回结果]
    D2 --> Output[返回结果]
    D3 --> Output[返回结果]

    Output --> AddToRegistry[添加到工具注册表]
    AddToRegistry --> Final[工具已注册]

    B --> AddToRegistry
    C --> AddToRegistry
    D --> AddToRegistry

    style Input fill:#e1f5ff
    style RegisterTool fill:#fff4e6
    style A fill:#d1fae5
    style B fill:#82c91a
    style C fill:#d1fae5
    style D fill:#f59e0b
    style AddToRegistry fill:#8ec5fc
    style Final fill:#f59e0b

2.2 向量存储集成流程图

mermaid
graph TD
    Input[文档数组] --> SelectStore{选择向量存储}

    SelectStore --> |A[ChromaDB]|
    SelectStore --> |B[Pinecone]|
    SelectStore --> |C[Qdrant]|
    SelectStore --> |D[Weaviate]|
    SelectStore --> |E[InMemoryVectorStore]|

    A --> |A1[添加文档]|
    A --> |A2[生成嵌入]|
    A --> |A3[存储向量]|

    A2 --> |B1[批量处理]|
    A --> |B2[调用 Embeddings API]|
    B --> |B3[返回嵌入向量]|

    B --> |C1[构建索引]|
    C --> SimilaritySearch[相似度搜索]
    C --> MaxMarginalRelevance[MMR 搜索]

    SimilaritySearch --> |D1[余弦相似度]|
    SimilaritySearch --> |D2[返回 top-k 结果]|

    MaxMarginalRelevance --> |E1[平衡相关性和多样性]|
    E --> |F1[返回混合结果]|

    F --> Output[返回文档列表]
    Output --> Final[完成]

    B --> C
    D --> Output
    C --> Output

    style Input fill:#e1f5ff
    style SelectStore fill:#fff4e6
    style A fill:#d1fae5
    style B fill:#82c91a
    style C fill:#d1fae5
    style D fill:#f59e0b
    style E fill:#82c91a
    style Output fill:#f59e0b
    style Final fill:#f59e0b

3. langchain-textsplitters

3.1 文本分割流程图

mermaid
graph TD
    Input[文档文本] --> SelectSplitter{选择分割器}

    SelectSplitter --> |A[RecursiveCharacterTextSplitter]|
    SelectSplitter --> |B[MarkdownTextSplitter]|
    SelectSplitter --> |C[CodeTextSplitter]|

    A --> |A1[创建分割器实例]|
    A --> |A2[配置参数]|
    A --> |A3[分割文档]|

    A2 --> |B1[字符级分割]|
    B --> |B1[递归分割]|
    B --> |B1[智能换行]|

    B --> |C[生成文档块]|
    C --> |C1[处理重叠]|
    C --> |C2[保留元数据]|

    C --> Output[返回块数组]
    Output --> Final[完成]

    B --> C
    C --> Output

    C --> |A1[Markdown 特定分割]|
    A --> |B1[按标题级别]|
    A --> |B1[保持结构]|

    B --> |C2[分割文档块]|
    C --> |C3[添加标题元数据]|

    D --> Output[返回 Markdown 块]
    D --> Final[完成]

    A --> |A1[代码感知分割]|
    A --> |B1[检测代码块]|
    A --> |B1[按语法结构分割]|

    B --> |C2[分割代码段]|
    C --> Output[返回代码块]
    C --> Final[完成]

    A --> Output
    B --> Output
    D --> Output

    style Input fill:#e1f5ff
    style SelectSplitter fill:#fff4e6
    style A fill:#d1fae5
    style B fill:#d1fae5
    style C fill:#d1fae5
    style Output fill:#f59e0b
    style Final fill:#f59e0b

4. langchain-mcp-adapters

4.1 MCP 协议流程图

mermaid
graph TD
    Start[初始化 MCP] --> CreateClient{创建客户端}

    CreateClient --> |A[stdio 传输]|
    CreateClient --> |B[SSE 传输]|

    A --> |A1[启动子进程]|
    A --> |A2[建立通信管道]|
    A --> |A3[处理消息循环]|

    A --> ListTools[列出可用工具]
    B --> |B1[请求 tools/list]|
    B --> |B2[获取工具列表]|

    B --> |C1[解析工具 Schema]|
    C --> |D1[注册工具到 LangChain]|

    ListTools --> CallTool[调用工具]

    CallTool --> |A1[准备参数]|
    A --> |A2[创建 ToolCall 对象]|
    A --> |A3[调用 MCP 客户端]|

    A --> |B1[执行调用]|
    B --> |B2[等待响应]|
    B --> |C3[解析响应]|

    C --> |D1[提取工具结果]|
    D --> |E1[创建 ToolMessage]|

    E --> |F1[返回给调用者]|
    F --> |G[注册 MCP 适配器]|

    G --> |H1[设置工具注册表]|
    H --> |H2[添加到 LangChain 工具]|

    I --> Final[工具已注册]
    F --> Final

    A --> B
    B --> C
    D --> E
    E --> F
    G --> H

    B --> |B1[创建 HTTP 服务]|
    B --> |B2[启动 SSE 服务器]|
    B --> |B3[处理工具调用请求]|

    B --> |C1[接收 SSE 连接]|
    C --> |C2[解析 MCP 协议消息]|
    C --> |C3[转发到客户端]|

    C --> |D1[发送到 MCP 客户端]|
    D --> |E1[获取响应]|
    D --> |E2[返回给 HTTP 客户]|

    E --> |F1[返回工具结果]|
    F --> |G[注册 MCP 适配器]|

    B --> C
    C --> D
    E --> F
    G --> H

    style Start fill:#e1f5ff
    style CreateClient fill:#fff4e6
    style A fill:#d1fae5
    style ListTools fill:#82c91a
    style CallTool fill:#f59e0b
    style Final fill:#f59e0b

4.2 工具注册流程图

mermaid
graph TD
    Input[工具定义] --> RegisterMCP[注册到 LangChain]

    RegisterMCP --> |A[提取工具名]|
    RegisterMCP --> |B[创建 Tool 实例]|
    RegisterMCP --> |C[实现 invoke 方法]|

    A --> |A1[获取工具名]|
    A --> |A2[获取描述]|
    A --> |A3[获取 Schema]|

    B --> |B1[创建 Zod 解析器]|
    B --> |B2[实现调用逻辑]|
    B --> |B3[错误处理]|

    B1 --> |C1[实现 call 包装]|
    C --> |D1[创建 ToolMessage]|
    C --> |E1[返回结果]|

    D --> |F1[添加到 LangChain 工具表]|
    F --> |Final[工具已注册]

    B --> C
    D --> E
    F --> Final

    A --> B
    B --> C
    C --> D
    E --> F

    style Input fill:#e1f5ff
    style RegisterMCP fill:#fff4e6
    style A fill:#d1fae5
    style B fill:#d1fae5
    style C fill:#82c91a
    style D fill:#f59e0b
    style E fill:#82c91a
    style Final fill:#f59e0b

总结

示例与社区组件提供了:

  1. Examples - 丰富的使用示例(Agent、LLM、缓存、RAG)
  2. langchain-community - 社区工具、向量存储集成
  3. langchain-textsplitters - 灵活的文本分割策略
  4. langchain-mcp-adapters - MCP 协议完整支持

关键特性:

  • 生产就绪的代码示例
  • 多种向量存储集成
  • 灵活的文本分割策略
  • MCP 协议的完整实现

流程图亮点:

  • Agent 创建和执行流程
  • LLM 调用流程
  • 缓存命中/未命中流程
  • 向量存储添加和搜索流程
  • MCP 客户端/服务器端通信流程
  • 工具注册和调用流程

✅ 模块 5 分析完成: 示例与社区组件(含流程图)📊 总进度: 5/6 (83.3%)