{
  "canonical_name": "langchain-ai/langchain",
  "compilation_id": "pack_b9ed358246394dce8d7ad1b1e553221f",
  "created_at": "2026-05-11T10:23:04.120448+00:00",
  "created_by": "project-pack-compiler",
  "feedback": {
    "carrier_selection_notes": [
      "viable_asset_types=skill, recipe, host_instruction, eval, preflight",
      "recommended_asset_types=skill, recipe, host_instruction, eval, preflight"
    ],
    "evidence_delta": {
      "confirmed_claims": [
        "identity_anchor_present",
        "capability_and_host_targets_present",
        "install_path_declared_or_better"
      ],
      "missing_required_fields": [],
      "must_verify_forwarded": [
        "Run or inspect `pip install langchain` in an isolated environment.",
        "Confirm the project exposes the claimed capability to at least one target host."
      ],
      "quickstart_execution_scope": "allowlisted_sandbox_smoke",
      "sandbox_command": "pip install langchain",
      "sandbox_container_image": "python:3.12-slim",
      "sandbox_execution_backend": "docker",
      "sandbox_planner_decision": "llm_execute_isolated_install",
      "sandbox_validation_id": "sbx_af2dd482acd74d9294c553929d463dae"
    },
    "feedback_event_type": "project_pack_compilation_feedback",
    "learning_candidate_reasons": [],
    "template_gaps": []
  },
  "identity": {
    "canonical_id": "project_2782ce8124d3d7fbf783fa355fb00245",
    "canonical_name": "langchain-ai/langchain",
    "homepage_url": null,
    "license": "unknown",
    "repo_url": "https://github.com/langchain-ai/langchain",
    "slug": "langchain",
    "source_packet_id": "phit_8b5880d098b1485cbd91e3d9539efbfe",
    "source_validation_id": "dval_e8be47b3d404457fa44753c525c9108f"
  },
  "merchandising": {
    "best_for": "需要软件开发与交付能力，并使用 chatgpt的用户",
    "github_forks": 22591,
    "github_stars": 136592,
    "one_liner_en": "The agent engineering platform. Available in TypeScript!",
    "one_liner_zh": "The agent engineering platform. Available in TypeScript!",
    "primary_category": {
      "category_id": "software-development",
      "confidence": "medium",
      "name_en": "Software Development",
      "name_zh": "软件开发与交付",
      "reason": "matched_keywords:git"
    },
    "target_user": "使用 chatgpt 等宿主 AI 的用户",
    "title_en": "langchain",
    "title_zh": "langchain 能力包",
    "visible_tags": [
      {
        "label_en": "Knowledge Retrieval",
        "label_zh": "知识检索",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "product_domain-knowledge-retrieval",
        "type": "product_domain"
      },
      {
        "label_en": "Knowledge Base Q&A",
        "label_zh": "知识库问答",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "user_job-knowledge-base-q-a",
        "type": "user_job"
      },
      {
        "label_en": "Structured Extraction",
        "label_zh": "结构化提取",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "core_capability-structured-extraction",
        "type": "core_capability"
      },
      {
        "label_en": "Verifiable Workflow",
        "label_zh": "可验证工作流",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "workflow_pattern-verifiable-workflow",
        "type": "workflow_pattern"
      },
      {
        "label_en": "Evaluation Suite",
        "label_zh": "评测体系",
        "source": "repo_evidence_project_characteristics",
        "tag_id": "selection_signal-evaluation-suite",
        "type": "selection_signal"
      }
    ]
  },
  "packet_id": "phit_8b5880d098b1485cbd91e3d9539efbfe",
  "page_model": {
    "artifacts": {
      "artifact_slug": "langchain",
      "files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json",
        "REPO_INSPECTION.md",
        "CAPABILITY_CONTRACT.json",
        "EVIDENCE_INDEX.json",
        "CLAIM_GRAPH.json"
      ],
      "required_files": [
        "PROJECT_PACK.json",
        "QUICK_START.md",
        "PROMPT_PREVIEW.md",
        "HUMAN_MANUAL.md",
        "AI_CONTEXT_PACK.md",
        "BOUNDARY_RISK_CARD.md",
        "PITFALL_LOG.md",
        "REPO_INSPECTION.json"
      ]
    },
    "detail": {
      "capability_source": "Project Hit Packet + DownstreamValidationResult",
      "commands": [
        {
          "command": "pip install langchain",
          "label": "Python / pip · 官方安装入口",
          "source": "https://github.com/langchain-ai/langchain#readme",
          "verified": true
        }
      ],
      "display_tags": [
        "知识检索",
        "知识库问答",
        "结构化提取",
        "可验证工作流",
        "评测体系"
      ],
      "eyebrow": "软件开发与交付",
      "glance": [
        {
          "body": "判断自己是不是目标用户。",
          "label": "最适合谁",
          "value": "需要软件开发与交付能力，并使用 chatgpt的用户"
        },
        {
          "body": "先理解能力边界，再决定是否继续。",
          "label": "核心价值",
          "value": "The agent engineering platform. Available in TypeScript!"
        },
        {
          "body": "未完成验证前保持审慎。",
          "label": "继续前",
          "value": "publish to Doramagic.ai project surfaces"
        }
      ],
      "guardrail_source": "Boundary & Risk Card",
      "guardrails": [
        {
          "body": "Prompt Preview 只展示流程，不证明项目已安装或运行。",
          "label": "Check 1",
          "value": "不要把试用当真实运行"
        },
        {
          "body": "chatgpt",
          "label": "Check 2",
          "value": "确认宿主兼容"
        },
        {
          "body": "publish to Doramagic.ai project surfaces",
          "label": "Check 3",
          "value": "先隔离验证"
        }
      ],
      "mode": "skill, recipe, host_instruction, eval, preflight",
      "pitfall_log": {
        "items": [
          {
            "body": "README/documentation is current enough for a first validation pass.",
            "category": "能力坑",
            "evidence": [
              "capability.assumptions | github_repo:552661142 | https://github.com/langchain-ai/langchain | README/documentation is current enough for a first validation pass."
            ],
            "severity": "medium",
            "suggested_check": "将假设转成下游验证清单。",
            "title": "能力判断依赖假设",
            "user_impact": "假设不成立时，用户拿不到承诺的能力。"
          },
          {
            "body": "未记录 last_activity_observed。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | last_activity_observed missing"
            ],
            "severity": "medium",
            "suggested_check": "补 GitHub 最近 commit、release、issue/PR 响应信号。",
            "title": "维护活跃度未知",
            "user_impact": "新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "downstream_validation.risk_items | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "进入安全/权限治理复核队列。",
            "title": "下游验证发现风险项",
            "user_impact": "下游已经要求复核，不能在页面中弱化。"
          },
          {
            "body": "no_demo",
            "category": "安全/权限坑",
            "evidence": [
              "risks.scoring_risks | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium"
            ],
            "severity": "medium",
            "suggested_check": "把风险写入边界卡，并确认是否需要人工复核。",
            "title": "存在评分风险",
            "user_impact": "风险会影响是否适合普通用户安装。"
          },
          {
            "body": "issue_or_pr_quality=unknown。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | issue_or_pr_quality=unknown"
            ],
            "severity": "low",
            "suggested_check": "抽样最近 issue/PR，判断是否长期无人处理。",
            "title": "issue/PR 响应质量未知",
            "user_impact": "用户无法判断遇到问题后是否有人维护。"
          },
          {
            "body": "release_recency=unknown。",
            "category": "维护坑",
            "evidence": [
              "evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | release_recency=unknown"
            ],
            "severity": "low",
            "suggested_check": "确认最近 release/tag 和 README 安装命令是否一致。",
            "title": "发布节奏不明确",
            "user_impact": "安装命令和文档可能落后于代码，用户踩坑概率升高。"
          }
        ],
        "source": "ProjectPitfallLog + ProjectHitPacket + validation + community signals",
        "summary": "发现 6 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：能力坑 - 能力判断依赖假设。",
        "title": "踩坑日志"
      },
      "snapshot": {
        "contributors": 3681,
        "forks": 22591,
        "license": "unknown",
        "note": "GitHub API 快照，非实时质量证明；用于开工前背景判断。",
        "stars": 136592,
        "open_issues": 574,
        "pushed_at": null
      },
      "source_url": "https://github.com/langchain-ai/langchain",
      "steps": [
        {
          "body": "不安装项目，先体验能力节奏。",
          "code": "preview",
          "title": "先试 Prompt"
        },
        {
          "body": "理解输入、输出、失败模式和边界。",
          "code": "manual",
          "title": "读说明书"
        },
        {
          "body": "把上下文交给宿主 AI 继续工作。",
          "code": "context",
          "title": "带给 AI"
        },
        {
          "body": "进入主力环境前先完成安装入口与风险边界验证。",
          "code": "verify",
          "title": "沙箱验证"
        }
      ],
      "subtitle": "The agent engineering platform. Available in TypeScript!",
      "title": "langchain 能力包",
      "trial_prompt": "# langchain - Prompt Preview\n\n> 复制下面这段 Prompt 到你常用的 AI，先试一次，不需要安装。\n> 它的目标是让你直接体验这个项目的服务方式，而不是阅读项目介绍。\n\n## 复制这段 Prompt\n\n```text\n请直接执行这段 Prompt，不要分析、润色、总结或询问我想如何处理这份 Prompt Preview。\n\n你现在扮演 langchain 的“安装前体验版”。\n这不是项目介绍、不是评价报告、不是 README 总结。你的任务是让我用最小成本体验它的核心服务。\n\n我的试用任务：我想用它完成一个真实的软件开发与交付任务。\n我常用的宿主 AI：chatgpt\n\n【体验目标】\n围绕我的真实任务，现场演示这个项目如何把输入转成 示例引导, 判断线索。重点是让我感受到工作方式，而不是给我项目背景。\n\n【业务流约束】\n- 你必须像一个正在提供服务的项目能力包，而不是像一个讲解员。\n- 每一轮只推进一个步骤；提出问题后必须停下来等我回答。\n- 每一步都必须让我感受到一个具体服务动作：澄清、整理、规划、检查、判断或收尾。\n- 每一步都要说明：当前目标、你需要我提供什么、我回答后你会产出什么。\n- 不要安装、不要运行命令、不要写代码、不要声称测试通过、不要声称已经修改文件。\n- 需要真实安装或宿主加载后才能验证的内容，必须明确说“这一步需要安装后验证”。\n- 如果我说“用示例继续”，你可以用虚构示例推进，但仍然不能声称真实执行。\n\n【可体验服务能力】\n- 安装前能力预览: The agent engineering platform. Available in TypeScript! 输入：用户任务, 当前 AI 对话上下文；输出：示例引导, 判断线索。\n\n【必须安装后才可验证的能力】\n- 暂无明确的运行时能力线索。\n\n【核心服务流】\n请严格按这个顺序带我体验。不要一次性输出完整流程：\n1. page-overview：LangChain概述。围绕“LangChain概述”模拟一次用户任务，不展示安装或运行结果。\n2. page-core-architecture：核心架构与组件。围绕“核心架构与组件”模拟一次用户任务，不展示安装或运行结果。\n3. page-runnable：Runnable与链式调用。围绕“Runnable与链式调用”模拟一次用户任务，不展示安装或运行结果。\n4. page-agents：Agent代理系统。围绕“Agent代理系统”模拟一次用户任务，不展示安装或运行结果。\n5. page-tools：工具与工具包。围绕“工具与工具包”模拟一次用户任务，不展示安装或运行结果。\n\n【核心能力体验剧本】\n每一步都必须按“输入 -> 服务动作 -> 中间产物”执行。不要只说流程名：\n1. page-overview\n输入：用户提供的“LangChain概述”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n2. page-core-architecture\n输入：用户提供的“核心架构与组件”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n3. page-runnable\n输入：用户提供的“Runnable与链式调用”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n4. page-agents\n输入：用户提供的“Agent代理系统”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n5. page-tools\n输入：用户提供的“工具与工具包”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n【项目服务规则】\n这些规则决定你如何服务用户。不要解释规则本身，而要在每一步执行时遵守：\n- 先确认用户任务、输入材料和成功标准，再模拟项目能力。\n- 每一步都必须形成可检查的小产物，并等待用户确认后再继续。\n- 凡是需要安装、调用工具或访问外部服务的能力，都必须标记为安装后验证。\n\n【每一步的服务约束】\n- Step 1 / page-overview：Step 1 必须围绕“LangChain概述”形成一个小中间产物，并等待用户确认。\n- Step 2 / page-core-architecture：Step 2 必须围绕“核心架构与组件”形成一个小中间产物，并等待用户确认。\n- Step 3 / page-runnable：Step 3 必须围绕“Runnable与链式调用”形成一个小中间产物，并等待用户确认。\n- Step 4 / page-agents：Step 4 必须围绕“Agent代理系统”形成一个小中间产物，并等待用户确认。\n- Step 5 / page-tools：Step 5 必须围绕“工具与工具包”形成一个小中间产物，并等待用户确认。\n\n【边界与风险】\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 安装前预览只能展示工作方式，不能证明兼容性、性能或输出质量。\n\n【可追溯依据】\n这些路径只用于你内部校验或在我追问“依据是什么”时简要引用。不要在首次回复主动展开：\n- https://github.com/langchain-ai/langchain\n- https://github.com/langchain-ai/langchain#readme\n- README.md\n- libs/core/langchain_core/__init__.py\n- libs/langchain/langchain_classic/__init__.py\n- libs/core/langchain_core/messages/__init__.py\n- libs/core/langchain_core/output_parsers/__init__.py\n- libs/core/langchain_core/prompts/__init__.py\n- libs/core/langchain_core/callbacks/base.py\n- libs/core/langchain_core/runnables/base.py\n- libs/core/langchain_core/runnables/config.py\n- libs/core/langchain_core/runnables/branch.py\n\n【首次问题规则】\n- 首次三问必须先确认用户目标、成功标准和边界，不要提前进入工具、安装或实现细节。\n- 如果后续需要技术条件、文件路径或运行环境，必须等用户确认目标后再追问。\n\n首次回复必须只输出下面 4 个部分：\n1. 体验开始：用 1 句话说明你将带我体验 langchain 的核心服务。\n2. 当前步骤：明确进入 Step 1，并说明这一步要解决什么。\n3. 你会如何服务我：说明你会先改变我完成任务的哪个动作。\n4. 只问我 3 个问题，然后停下等待回答。\n\n首次回复禁止输出：后续完整流程、证据清单、安装命令、项目评价、营销文案、已经安装或运行的说法。\n\nStep 1 / brainstorming 的二轮协议：\n- 我回答首次三问后，你仍然停留在 Step 1 / brainstorming，不要进入 Step 2。\n- 第二次回复必须产出 6 个部分：澄清后的任务定义、成功标准、边界条件、\n  2-3 个可选方案、每个方案的权衡、推荐方案。\n- 第二次回复最后必须问我是否确认推荐方案；只有我明确确认后，才能进入下一步。\n- 第二次回复禁止输出 git worktree、代码计划、测试文件、命令或真实执行结果。\n\n后续对话规则：\n- 我回答后，你先完成当前步骤的中间产物并等待确认；只有我确认后，才能进入下一步。\n- 每一步都要生成一个小的中间产物，例如澄清后的目标、计划草案、测试意图、验证清单或继续/停止判断。\n- 所有演示都写成“我会建议/我会引导/这一步会形成”，不要写成已经真实执行。\n- 不要声称已经测试通过、文件已修改、命令已运行或结果已产生。\n- 如果某个能力必须安装后验证，请直接说“这一步需要安装后验证”。\n- 如果证据不足，请明确说“证据不足”，不要补事实。\n```\n",
      "voices": [
        {
          "body": "来源平台：github。github/github_issue: [Integration] MINT Protocol - Agents earn crypto for execution（https://github.com/langchain-ai/langchain/issues/34979）；github/github_issue: Feature Request: Payment primitive integration — x402 payment layer for （https://github.com/langchain-ai/langchain/issues/36306）；github/github_issue: Cryptographic agent identity, intent verification, and kill switch for p（https://github.com/langchain-ai/langchain/issues/36232）；github/github_issue: Progress-aware termination: detect no-progress loops in agent tool execu（https://github.com/langchain-ai/langchain/issues/36139）；github/github_issue: Harmony: bad request on gpt-oss-120b and tool calls with `create_react_a（https://github.com/langchain-ai/langchain/issues/32885）；github/github_issue: Feature: callback handler for AI agent threat detection (Agent Threat Ru（https://github.com/langchain-ai/langchain/issues/37314）；github/github_issue: Feature: callback handler for AI agent threat detection (Agent Threat Ru（https://github.com/langchain-ai/langchain/issues/37313）；github/github_issue: Bug: SSRF bypass in validate_safe_url when LANGCHAIN_ENV=local_test（https://github.com/langchain-ai/langchain/issues/37297）；github/github_issue: create_agent Does Not Handle invalid_tool_calls from JSON Parsing Errors（https://github.com/langchain-ai/langchain/issues/33504）；github/github_issue: Easier multimodal tool（https://github.com/langchain-ai/langchain/issues/37312）；github/github_issue: Schema class for multimodal message（https://github.com/langchain-ai/langchain/issues/37311）；github/github_issue: Security: OWASP Agent Memory Guard – protect against memory poisoning at（https://github.com/langchain-ai/langchain/issues/37310）。这些是项目级外部声音，不作为单独质量证明。",
          "items": [
            {
              "kind": "github_issue",
              "source": "github",
              "title": "[Integration] MINT Protocol - Agents earn crypto for execution",
              "url": "https://github.com/langchain-ai/langchain/issues/34979"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Feature Request: Payment primitive integration — x402 payment layer for ",
              "url": "https://github.com/langchain-ai/langchain/issues/36306"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Cryptographic agent identity, intent verification, and kill switch for p",
              "url": "https://github.com/langchain-ai/langchain/issues/36232"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Progress-aware termination: detect no-progress loops in agent tool execu",
              "url": "https://github.com/langchain-ai/langchain/issues/36139"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Harmony: bad request on gpt-oss-120b and tool calls with `create_react_a",
              "url": "https://github.com/langchain-ai/langchain/issues/32885"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Feature: callback handler for AI agent threat detection (Agent Threat Ru",
              "url": "https://github.com/langchain-ai/langchain/issues/37314"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Feature: callback handler for AI agent threat detection (Agent Threat Ru",
              "url": "https://github.com/langchain-ai/langchain/issues/37313"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Bug: SSRF bypass in validate_safe_url when LANGCHAIN_ENV=local_test",
              "url": "https://github.com/langchain-ai/langchain/issues/37297"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "create_agent Does Not Handle invalid_tool_calls from JSON Parsing Errors",
              "url": "https://github.com/langchain-ai/langchain/issues/33504"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Easier multimodal tool",
              "url": "https://github.com/langchain-ai/langchain/issues/37312"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Schema class for multimodal message",
              "url": "https://github.com/langchain-ai/langchain/issues/37311"
            },
            {
              "kind": "github_issue",
              "source": "github",
              "title": "Security: OWASP Agent Memory Guard – protect against memory poisoning at",
              "url": "https://github.com/langchain-ai/langchain/issues/37310"
            }
          ],
          "status": "已收录 12 条来源",
          "title": "社区讨论"
        }
      ]
    },
    "homepage_card": {
      "category": "软件开发与交付",
      "desc": "The agent engineering platform. Available in TypeScript!",
      "effort": "安装已验证",
      "forks": 22522,
      "icon": "code",
      "name": "langchain 能力包",
      "risk": "可发布",
      "slug": "langchain",
      "stars": 136252,
      "tags": [
        "知识检索",
        "知识库问答",
        "结构化提取",
        "可验证工作流",
        "评测体系"
      ],
      "thumb": "gray",
      "type": "Skill Pack"
    },
    "manual": {
      "markdown": "# https://github.com/langchain-ai/langchain 项目说明书\n\n生成时间：2026-05-10 16:15:16 UTC\n\n## 目录\n\n- [LangChain概述](#page-overview)\n- [核心架构与组件](#page-core-architecture)\n- [Runnable与链式调用](#page-runnable)\n- [Agent代理系统](#page-agents)\n- [工具与工具包](#page-tools)\n- [向量存储与检索](#page-vectorstores)\n- [文档加载与处理](#page-document-loaders)\n- [内存与状态管理](#page-memory)\n- [Chat模型与LLM集成](#page-chat-models)\n- [回调与追踪系统](#page-callbacks-tracing)\n\n<a id='page-overview'></a>\n\n## LangChain概述\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture), [Chat模型与LLM集成](#page-chat-models)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/langchain-ai/langchain/blob/main/README.md)\n- [libs/partners/huggingface/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/partners/anthropic/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/ollama/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n- [libs/partners/openai/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/chroma/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/chroma/README.md)\n</details>\n\n# LangChain概述\n\n## 什么是LangChain？\n\nLangChain是一个用于构建**AI代理（Agents）和LLM驱动应用**的框架。它通过将可互操作的组件与第三方集成串联在一起，简化了AI应用程序的开发过程，同时为底层技术演进提供了前瞻性支持。\n\nLangChain的主要特性包括：\n\n- **灵活抽象层** — 从用于快速起步的高级链（Chains）到用于细粒度控制的低级组件，LangChain可以随着应用程序复杂度的增长而扩展\n- **模块化设计** — 可互换的组件便于定制和扩展\n- **丰富的集成生态** — 支持多种LLM提供商、向量存储、工具和外部服务\n\n资料来源：[README.md:1-25](https://github.com/langchain-ai/langchain/blob/main/README.md)\n\n## 核心架构\n\nLangChain采用模块化架构设计，主要包含以下核心层次：\n\n```mermaid\ngraph TD\n    A[LangChain主框架] --> B[langchain_core 核心库]\n    A --> C[langchain_classic 经典组件库]\n    A --> D[Partner Packages 合作伙伴包]\n    \n    B --> B1[基础抽象层]\n    B --> B2[核心API]\n    B --> B3[回调系统]\n    \n    C --> C1[Chains 链]\n    C --> C2[工具扩展]\n    C --> C3[索引API]\n    \n    D --> D1[OpenAI集成]\n    D --> D2[HuggingFace集成]\n    D --> D3[Anthropic集成]\n    D --> D4[Ollama集成]\n    D --> D5[向量存储集成]\n```\n\n### 核心库 (langchain_core)\n\n`langchain_core`是LangChain的基础库，提供了所有其他组件依赖的核心抽象和接口。\n\n| 模块 | 功能描述 |\n|------|----------|\n| `language_models` | 语言模型基础接口 |\n| `prompts` | 提示词模板抽象 |\n| `callbacks` | 异步/同步回调管理系统 |\n| `tools` | 工具接口定义 |\n\n### 经典组件库 (langchain_classic)\n\n`langchain_classic`包含传统的链式组件、代理逻辑、API调用链等经典功能。\n\n| 组件类型 | 说明 |\n|----------|------|\n| Chains | 可组合的任务执行链 |\n| Agents | AI代理实现 |\n| Tools | 可扩展的工具集 |\n| Deprecated APIs | 已废弃但仍可用的历史接口 |\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:1-30](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n\n## 合作伙伴集成生态\n\nLangChain提供了丰富的**合作伙伴包（Partner Packages）**集成，支持主流AI服务提供商和工具。\n\n### 支持的LLM提供商\n\n| 包名称 | 提供商 | 安装命令 |\n|--------|--------|----------|\n| langchain-openai | OpenAI | `pip install langchain-openai` |\n| langchain-anthropic | Anthropic (Claude) | `pip install langchain-anthropic` |\n| langchain-huggingface | Hugging Face | `pip install langchain-huggingface` |\n| langchain-ollama | Ollama (本地模型) | `pip install langchain-ollama` |\n| langchain-groq | Groq | `pip install langchain-groq` |\n| langchain-deepseek | DeepSeek | `pip install langchain-deepseek` |\n| langchain-perplexity | Perplexity | `pip install langchain-perplexity` |\n| langchain-xai | xAI (Grok) | `pip install langchain-xai` |\n| langchain-openrouter | OpenRouter | `pip install langchain-openrouter` |\n| langchain-fireworks | Fireworks.ai | `pip install langchain-fireworks` |\n\n资料来源：\n- [libs/partners/openai/README.md:1-20](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/anthropic/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/huggingface/README.md:1-20](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/partners/ollama/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n\n### 向量存储与工具集成\n\n| 包名称 | 用途 | 安装命令 |\n|--------|------|----------|\n| langchain-chroma | Chroma向量数据库 | `pip install langchain-chroma` |\n| langchain-nomic | Nomic嵌入服务 | `pip install langchain-nomic` |\n| langchain-exa | Exa网络搜索API | `pip install langchain-exa` |\n\n资料来源：\n- [libs/partners/chroma/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/chroma/README.md)\n- [libs/partners/nomic/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/nomic/README.md)\n\n## 快速开始\n\n### 安装\n\n```bash\npip install langchain\n# 或使用 uv\nuv add langchain\n```\n\n### 基础使用示例\n\n```python\nfrom langchain.chat_models import init_chat_model\n\n# 初始化聊天模型\nmodel = init_chat_model(\"openai:gpt-5.4\")\n\n# 调用模型\nresult = model.invoke(\"Hello, world!\")\n```\n\n### 使用HuggingFace本地模型\n\n如需使用本地推理功能，需安装完整依赖：\n\n```bash\npip install langchain-huggingface[full]\n```\n\n> **注意**：完整安装包含 `sentence-transformers>=5.2.0` 和 `transformers>=5.0.0`。从 `langchain-community` 迁移的用户需要注意版本要求变化。\n\n资料来源：\n- [README.md:30-45](https://github.com/langchain-ai/langchain/blob/main/README.md)\n- [libs/partners/huggingface/README.md:10-20](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n\n## 技术特性\n\n### 安全机制\n\nLangChain的APIChain组件包含详细的安全警告和最佳实践：\n\n- **网络安全** — 使用requests工具包发起HTTP请求，需控制访问权限\n- **域限制** — 支持`limit_to_domains`参数限制可访问的域名范围\n- **请求类型** — 支持GET、POST、PATCH、PUT和DELETE等HTTP方法\n\n```python\ndef _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:\n    \"\"\"检查URL是否在允许的域名列表中\"\"\"\n    scheme, domain = _extract_scheme_and_domain(url)\n    \n    for allowed_domain in limit_to_domains:\n        allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)\n        if scheme == allowed_scheme and domain == allowed_domain_:\n            return True\n    return False\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:35-50](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n\n### 废弃与迁移策略\n\nLangChain采用渐进式废弃策略，标记废弃的功能会：\n\n- 指定废弃版本号 (`since`)\n- 指定移除版本号 (`removal`)\n- 提供替代方案建议 (`alternative`)\n\n```python\n@deprecated(\n    since=\"0.2.13\",\n    removal=\"2.0.0\",\n    alternative=\"langchain.agents.create_agent\",\n    addendum=\"使用 create_agent 构建新代理...\"\n)\nclass APIChain(Chain):\n    ...\n```\n\n## 文档与资源\n\n| 资源类型 | 链接 |\n|----------|------|\n| 官方文档 | [docs.langchain.com](https://docs.langchain.com/oss/python/langchain/overview) |\n| API参考 | [reference.langchain.com/python](https://reference.langchain.com/python) |\n| 社区论坛 | [forum.langchain.com](https://forum.langchain.com) |\n| LangChain.js | [GitHub - langchainjs](https://github.com/langchain-ai/langchainjs) |\n| Deep Agents | [Deep Agents文档](http://docs.langchain.com/oss/python/deepagents/) |\n| LangSmith | [开发调试平台](https://docs.langchain.com/langsmith/home) |\n| LangChain Academy | [免费学习课程](https://academy.langchain.com/) |\n\n## 相关工具与扩展\n\n### LangGraph\n\n对于需要更高级自定义或代理编排的场景，推荐使用**LangGraph** — LangChain官方的工作流控制框架。\n\n```mermaid\ngraph LR\n    A[LangChain] -->|基础链式调用| B[简单任务]\n    A -->|复杂编排| C[LangGraph]\n    C -->|可控工作流| D[复杂Agent系统]\n```\n\n### Deep Agents\n\n针对常见使用模式（规划、子代理、文件系统操作等）开箱即用的解决方案：\n\n- 内置规划能力\n- 多子代理协调\n- 文件系统集成\n- 常见模式封装\n\n## 版本与发布策略\n\nLangChain遵循语义化版本控制规范：\n\n- **版本历史** — 详见 [Releases Policy](https://docs.langchain.com/oss/python/release-policy)\n- **版本规范** — 详见 [Versioning Policy](https://docs.langchain.com/oss/python/versioning)\n- **贡献指南** — 详见 [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview)\n\n## 许可证\n\nLangChain采用 **MIT许可证** 开源发布。\n\n资料来源：[README.md:10-15](https://github.com/langchain-ai/langchain/blob/main/README.md)\n\n---\n\n<a id='page-core-architecture'></a>\n\n## 核心架构与组件\n\n### 相关页面\n\n相关主题：[Runnable与链式调用](#page-runnable), [回调与追踪系统](#page-callbacks-tracing)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/langchain-ai/langchain/blob/main/README.md)\n- [libs/langchain/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/README.md)\n- [libs/langchain/langchain_classic/chains/api/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n- [libs/partners/anthropic/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/openai/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/huggingface/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/partners/ollama/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n</details>\n\n# 核心架构与组件\n\n## 概述\n\nLangChain 是一个用于构建智能体（Agent）和大语言模型（LLM）应用的框架。它通过将可互操作的组件与第三方集成串联在一起，简化了 AI 应用程序开发流程，同时在底层技术演进的背景下保障了决策的前瞻性。\n\n资料来源：[README.md:1-10]()\n\n## 系统架构分层\n\nLangChain 的架构采用分层设计，主要包括以下几个核心层次：\n\n```mermaid\ngraph TD\n    A[用户应用层] --> B[LangChain 核心层]\n    B --> C[Partner 包集成层]\n    C --> D[第三方服务 API]\n    \n    B --> E[langchain_classic 经典组件]\n    B --> F[langchain_core 核心抽象]\n    \n    F --> G[Messages 消息系统]\n    F --> H[Prompts 提示词模板]\n    F --> I[Output Parsers 输出解析器]\n    F --> J[Callbacks 回调机制]\n```\n\n## 核心模块解析\n\n### langchain_core 核心抽象层\n\n`langchain_core` 是整个框架的基础层，提供了所有组件赖以实现的抽象接口和核心类型系统。\n\n#### 消息系统（Messages）\n\n消息系统负责在应用各组件之间传递结构化的对话信息。LangChain 定义了标准化的消息格式，使得不同模型提供商之间的交互具有一致性。\n\n#### 提示词模板（Prompts）\n\n提示词模板系统提供了构建动态提示的能力，支持变量绑定和复用。模板系统与模型无关，可在不同的 LLM 提供商之间无缝切换。\n\n#### 输出解析器（Output Parsers）\n\n输出解析器负责将 LLM 的原始输出转换为结构化数据。这一机制使得 LLM 输出能够被下游组件直接消费和处理。\n\n#### 回调机制（Callbacks）\n\n回调系统提供了可扩展的事件通知机制，允许开发者在链式调用和智能体执行过程中插入自定义逻辑，如日志记录、监控和中间结果处理。\n\n资料来源：[libs/langchain/README.md:1-8]()\n\n### langchain_classic 经典组件\n\n`langchain_classic` 包包含了 LangChain 的经典组件，包括链式调用（Chains）、API 集成工具和已弃用的遗留功能。\n\n#### APIChain 组件\n\n`APIChain` 是 LangChain 提供的一个经典链式组件，用于根据用户问题构建 API 请求并总结响应。其核心工作流程如下：\n\n```mermaid\ngraph LR\n    A[用户问题] --> B[API_URL_PROMPT]\n    B --> C[LLM 生成 API 调用]\n    C --> D[TextRequestsWrapper 执行请求]\n    D --> E[API_RESPONSE_PROMPT]\n    E --> F[LLM 生成最终答案]\n```\n\n**安全特性**：APIChain 内置了域名限制机制，仅允许向预配置的域名发送请求：\n\n```python\ndef _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:\n    scheme, domain = _extract_scheme_and_domain(url)\n    for allowed_domain in limit_to_domains:\n        allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)\n        if scheme == allowed_scheme and domain == allowed_domain_:\n            return True\n    return False\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:1-45]()\n\n## Partner 集成包架构\n\nLangChain 采用模块化的 Partner 包设计，每个 LLM 或服务提供商都有独立的包进行维护。这种设计带来了以下优势：\n\n| 优势 | 说明 |\n|------|------|\n| 独立版本管理 | 各集成包可独立发布和版本控制 |\n| 按需依赖 | 用户只需安装实际使用的集成包 |\n| 灵活升级 | 可独立升级特定提供商而无需影响其他组件 |\n\n### Partner 包列表\n\n| 包名 | 集成对象 | 安装命令 |\n|------|---------|---------|\n| langchain-openai | OpenAI GPT 系列 | `pip install langchain-openai` |\n| langchain-anthropic | Anthropic Claude 系列 | `pip install langchain-anthropic` |\n| langchain-huggingface | HuggingFace 模型和工具 | `pip install langchain-huggingface` |\n| langchain-ollama | Ollama 本地模型 | `pip install langchain-ollama` |\n| langchain-deepseek | DeepSeek 模型 | `pip install langchain-deepseek` |\n| langchain-groq | Groq 推理服务 | `pip install langchain-groq` |\n| langchain-chroma | Chroma 向量数据库 | `pip install langchain-chroma` |\n\n资料来源：[libs/partners/openai/README.md:1-20]()\n\n## 快速入门与初始化模式\n\nLangChain 提供了统一的模型初始化接口 `init_chat_model`，支持通过字符串标识符动态加载和配置模型：\n\n```python\nfrom langchain.chat_models import init_chat_model\n\nmodel = init_chat_model(\"openai:gpt-5.4\")\nresult = model.invoke(\"Hello, world!\")\n```\n\n这种初始化模式的核心优势在于：\n\n1. **配置集中化**：所有模型配置通过单一入口管理\n2. **提供商无关**：代码不依赖特定服务提供商的 SDK 接口\n3. **环境适配**：自动处理不同环境的认证和连接设置\n\n资料来源：[README.md:30-45]()\n\n## 生态系统架构图\n\n```mermaid\ngraph BT\n    LangChain --> LangGraph\n    LangChain --> LangSmith\n    LangGraph --> LangSmith\n    \n    LangChain --> Partner_Packages\n    Partner_Packages --> OpenAI\n    Partner_Packages --> Anthropic\n    Partner_Packages --> HuggingFace\n    Partner_Packages --> Ollama\n    Partner_Packages --> DeepSeek\n    Partner_Packages --> Groq\n    Partner_Packages --> Chroma\n    \n    LangGraph --> Agents\n    Agents --> Tools\n    Tools --> APIs\n```\n\n## 组件依赖关系\n\n### 核心依赖链\n\n```\nlangchain (主包)\n├── langchain_core (强制依赖)\n│   ├── messages (消息类型定义)\n│   ├── prompts (模板系统)\n│   ├── output_parsers (输出解析)\n│   └── callbacks (事件回调)\n├── langchain_classic (核心链式组件)\n│   ├── chains (经典链)\n│   ├── agents (经典代理)\n│   └── tools (工具集)\n└── Partner 包 (可选依赖)\n    ├── langchain-openai\n    ├── langchain-anthropic\n    ├── langchain-huggingface\n    └── ... (其他提供商)\n```\n\n### 依赖版本要求\n\n各 Partner 包对依赖库有不同的版本要求：\n\n| 包 | 核心依赖 | 版本要求 |\n|----|---------|---------|\n| langchain-huggingface[full] | sentence-transformers | >=5.2.0 |\n| langchain-huggingface[full] | transformers | >=5.0.0 |\n\n资料来源：[libs/partners/huggingface/README.md:1-20]()\n\n## 安全与权限控制\n\n### APIChain 域名限制\n\nAPIChain 实现了严格的域名白名单机制，防止应用向未授权的外部服务发送请求。这一机制通过 `_check_in_allowed_domain` 函数实现：\n\n```mermaid\ngraph TD\n    A[API 请求 URL] --> B{检查域名是否在白名单}\n    B -->|是| C[允许请求]\n    B -->|否| D[拒绝请求]\n```\n\n**安全建议**：在生产环境中使用 APIChain 时，应严格限制 `limit_to_domains` 参数的范围，仅包含必要的服务域名。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:35-45]()\n\n## 技术选型要点\n\n### 何时使用 langchain_classic vs 新架构\n\n| 场景 | 推荐方案 |\n|------|---------|\n| 新项目开发 | 使用 LangGraph 和 `create_agent` |\n| 现有 APIChain 用户 | 迁移至新架构（已在 0.2.13 标记弃用） |\n| 需要自定义链式逻辑 | 使用 langchain_classic |\n| 标准 Agent 构建 | 使用 LangGraph |\n\n**弃用说明**：`APIChain` 已在 0.2.13 版本标记为弃用，计划在 2.0.0 版本移除。推荐迁移至使用 `create_agent` 和自定义工具绑定的方式。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:45-60]()\n\n## 总结\n\nLangChain 的核心架构采用分层和模块化设计，通过 `langchain_core` 提供的基础抽象、`langchain_classic` 的经典组件以及丰富的 Partner 包生态，支持快速构建和部署 LLM 应用。开发者应优先使用最新的 LangGraph 架构进行新项目开发，同时了解经典组件的迁移路径以保障长期维护性。\n\n---\n\n<a id='page-runnable'></a>\n\n## Runnable与链式调用\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture), [Agent代理系统](#page-agents)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/runnables/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/base.py)\n- [libs/core/langchain_core/runnables/config.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/config.py)\n- [libs/core/langchain_core/runnables/branch.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/branch.py)\n- [libs/core/langchain_core/runnables/retry.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/retry.py)\n</details>\n\n# Runnable与链式调用\n\n## 概述\n\nRunnable 是 LangChain 框架的核心抽象接口，定义了所有可执行组件的统一契约。它代表了可以接收输入、产生输出的任意操作单元，包括语言模型、提示词模板、工具、检索器、链等。\n\nLangChain 的核心设计理念是将复杂的 AI 应用分解为可组合的小单元，通过链式调用（Chaining）将多个 Runnable 连接在一起，形成端到端的工作流。\n\n## 核心架构\n\n### Runnable 在 LangChain 中的角色\n\n```mermaid\ngraph TD\n    A[输入] --> B[Runnable 组件 1]\n    B --> C[Runnable 组件 2]\n    C --> D[Runnable 组件 N]\n    D --> E[输出]\n    \n    F[BaseRunnable] --> G[RunnableSerializable]\n    F --> H[Chain 基类]\n    F --> I[PromptTemplate]\n    F --> J[BaseChatModel]\n    F --> K[BaseTool]\n```\n\n### 关键类层次结构\n\n| 类名 | 层级 | 说明 |\n|------|------|------|\n| `BaseRunnable` | 抽象基类 | 定义所有 Runnable 的核心接口 |\n| `RunnableSerializable` | 序列化层 | 提供 JSON/字典序列化能力 |\n| `Chain` | 业务层 | 链式调用的具体实现基类 |\n| 具体实现类 | 应用层 | `LLMChain`、`ConversationalRetrievalChain` 等 |\n\n## BaseRunnable 抽象基类\n\n### 核心方法定义\n\n`BaseRunnable` 定义了 Runnable 的核心接口规范，所有实现类必须遵循这些契约。\n\n```python\n# libs/core/langchain_core/runnables/base.py\n\nclass BaseRunnable(Generic[Input, Output]):\n    \"\"\"所有 Runnable 对象的基类。\"\"\"\n    \n    def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:\n        \"\"\"同步调用 Runnable。\"\"\"\n        ...\n    \n    async def ainvoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:\n        \"\"\"异步调用 Runnable。\"\"\"\n        ...\n    \n    def batch(self, inputs: List[Input], config: Optional[RunnableConfig] = None) -> List[Output]:\n        \"\"\"批量同步调用。\"\"\"\n        ...\n    \n    async def abatch(self, inputs: List[Input], config: Optional[RunnableConfig] = None) -> List[Output]:\n        \"\"\"批量异步调用。\"\"\"\n        ...\n```\n\n### 输入输出类型\n\n| 方法 | 输入类型 | 输出类型 | 说明 |\n|------|----------|----------|------|\n| `invoke` | `Input` | `Output` | 单次同步调用 |\n| `ainvoke` | `Input` | `Output` | 单次异步调用 |\n| `batch` | `List[Input]` | `List[Output]` | 批量同步调用 |\n| `abatch` | `List[Input]` | `List[Output]` | 批量异步调用 |\n| `stream` | `Input` | `Iterator[Output]` | 流式同步输出 |\n| `astream` | `Input` | `AsyncIterator[Output]` | 流式异步输出 |\n\n## 链式调用机制\n\n### 管道操作符 `|`\n\n链式调用通过管道操作符 `|` 实现，将前一个 Runnable 的输出作为后一个 Runnable 的输入。\n\n```python\n# libs/core/langchain_core/runnables/base.py\n\nclass BaseRunnable(Generic[Input, Output]):\n    def __or__(\n        self,\n        other: Union[Runnable[Any, Any], Callable[[Any], Any]]\n    ) -> RunnableSerializable[Any, Any]:\n        \"\"\"使用 | 操作符组合两个 Runnable。\"\"\"\n        return RunnableSequence(first=self, last=_maybe_wrap_in_prompt(other))\n```\n\n### 链式调用示例\n\n```mermaid\ngraph LR\n    A[PromptTemplate] -->|\"管道操作符 |\"| B[BaseChatModel]\n    B -->|\"管道操作符 |\"| C[StrOutputParser]\n    \n    A1[输入: 问题] --> A\n    C --> R[最终输出]\n```\n\n**代码示例：**\n\n```python\nfrom langchain_core.prompts import ChatPromptTemplate\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.output_parsers import StrOutputParser\n\n# 定义链的组件\nprompt = ChatPromptTemplate.from_messages([\n    (\"system\", \"你是一个专业的技术助手。\"),\n    (\"human\", \"{question}\")\n])\n\nmodel = ChatOpenAI(model=\"gpt-4\")\noutput_parser = StrOutputParser()\n\n# 链式组合\nchain = prompt | model | output_parser\n\n# 调用链\nresult = chain.invoke({\"question\": \"什么是 LangChain？\"})\n```\n\n### RunnableSequence 内部实现\n\n```python\n# libs/core/langchain_core/runnables/base.py\n\nclass RunnableSequence(RunnableSerializable[Input, Output]):\n    \"\"\"按顺序执行的一系列 Runnable。\"\"\"\n    \n    first: Runnable[Any, Any]\n    middle: List[Runnable[Any, Any]] = Field(default_factory=list)\n    last: Runnable[Any, Any]\n    \n    def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:\n        # 逐步执行每个 Runnable，将输出传递给下一个\n        for Runnable in self.runnables:\n            input = runnable.invoke(input, config)\n        return input\n```\n\n### pipe() 方法\n\n除了 `|` 操作符，还可以通过 `pipe()` 方法实现链式调用：\n\n```python\nchain = prompt.pipe(model).pipe(output_parser)\n```\n\n两种方式在功能上等价，开发者可根据偏好选择。\n\n## Runnable 配置\n\n### RunnableConfig 配置结构\n\n```python\n# libs/core/langchain_core/runnables/config.py\n\nclass RunnableConfig(TypedDict, total=False):\n    \"\"\"配置 Runnable 执行的参数。\"\"\"\n    \n    tags: Optional[List[str]]\n    \"\"\"用于标识此执行的标签列表。\"\"\"\n    \n    metadata: Optional[Dict[str, Any]]\n    \"\"\"附加到此执行的元数据。\"\"\"\n    \n    callbacks: Optional[Union[CallbackManagerForChainRun, AsyncCallbackManagerForChainRun]]\n    \"\"\"回调管理器，用于监控和日志记录。\"\"\"\n    \n    max_concurrency: Optional[int]\n    \"\"\"最大并发执行数。\"\"\"\n    \n    recursion_limit: int\n    \"\"\"链中最大递归深度，默认 25。\"\"\"\n    \n    configurable: Optional[Dict[str, Any]]\n    \"\"\"运行时可配置参数。\"\"\"\n```\n\n### 配置传递机制\n\n```mermaid\ngraph TD\n    A[RunnableConfig] --> B[invoke/ainvoke]\n    B --> C{子 Runnable}\n    C --> D[config 参数]\n    C --> E[继承配置]\n    \n    style A fill:#e1f5fe\n    style D fill:#c8e6c9\n    style E fill:#fff3e0\n```\n\n### 配置合并策略\n\n```python\n# libs/core/langchain_core/runnables/config.py\n\ndef merge_configs(*configs: Optional[RunnableConfig]) -> RunnableConfig:\n    \"\"\"合并多个配置，后面的配置优先。\"\"\"\n    merged: Dict[str, Any] = {}\n    for config in configs:\n        if config:\n            merged.update(config)\n    return merged\n```\n\n## 重试机制\n\n### RetryRunnable 包装器\n\n```python\n# libs/core/langchain_core/runnables/retry.py\n\nclass RetryRunnable(Runnable[Input, Output]):\n    \"\"\"为 Runnable 添加重试逻辑的包装器。\"\"\"\n    \n    def __init__(\n        self,\n        runnable: Runnable[Input, Output],\n        max_attempts: int = 3,\n        min_seconds: float = 1,\n        max_seconds: float = 10,\n        retry_on: Optional[Type[BaseException]] = None,\n    ):\n        self.runnable = runnable\n        self.max_attempts = max_attempts\n        self.retry_on = retry_on or Exception\n```\n\n### 重试配置参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `max_attempts` | `int` | `3` | 最大重试次数 |\n| `min_seconds` | `float` | `1` | 最小等待时间（秒） |\n| `max_seconds` | `float` | `10` | 最大等待时间（秒） |\n| `retry_on` | `Type[Exception]` | `Exception` | 需要重试的异常类型 |\n| `backoff_factor` | `float` | `2` | 退避因子（指数退避） |\n\n### 重试策略使用示例\n\n```python\nfrom langchain_core.runnables.retry import RetryRunnable\n\n# 创建带重试的链\nchain_with_retry = RetryRunnable(\n    runnable=model,\n    max_attempts=3,\n    min_seconds=1,\n    max_seconds=10,\n    retry_on=RateLimitError  # 只在速率限制错误时重试\n)\n```\n\n### 指数退避算法\n\n```mermaid\nsequenceDiagram\n    participant C as 调用方\n    participant R as RetryRunnable\n    participant M as Model\n    \n    C->>R: invoke()\n    R->>M: 第一次调用\n    M--xR: 异常/限流\n    R->>R: 等待 1s\n    R->>M: 第二次调用\n    M--xR: 异常/限流\n    R->>R: 等待 2s\n    R->>M: 第三次调用\n    M-->>R: 成功\n    R-->>C: 返回结果\n```\n\n## 分支逻辑\n\n### RunnableBranch 条件分支\n\n```python\n# libs/core/langchain_core/runnables/branch.py\n\nclass RunnableBranch(RunnableSerializable[Any, Output]):\n    \"\"\"根据条件选择不同执行路径的 Runnable。\"\"\"\n    \n    branches: Sequence[Tuple[Runnable[Input, bool], Runnable[Input, Output]]]\n    default: Optional[Runnable[Input, Output]]\n```\n\n### 分支配置参数\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| `branches` | `Sequence[Tuple[condition, runnable]]` | 条件-执行对列表 |\n| `default` | `Runnable` | 默认执行的 Runnable |\n\n### 分支使用示例\n\n```python\nfrom langchain_core.runnables.branch import RunnableBranch\n\n# 定义分支条件\nbranches = [\n    (\n        lambda x: \"技术\" in x.get(\"category\", \"\"),\n        technical_chain  # 技术问题走此链\n    ),\n    (\n        lambda x: \"一般\" in x.get(\"category\", \"\"),\n        general_chain    # 一般问题走此链\n    ),\n]\n\n# 添加默认分支\nbranch_chain = RunnableBranch(\n    *branches,\n    general_chain  # 默认链\n)\n```\n\n### 分支执行流程\n\n```mermaid\ngraph TD\n    A[输入] --> B{条件 1}\n    B -->|True| C[执行 Runnable 1]\n    B -->|False| D{条件 2}\n    D -->|True| E[执行 Runnable 2]\n    D -->|False| F{...}\n    F -->|...| G[默认 Runnable]\n    \n    C --> H[输出]\n    E --> H\n    G --> H\n```\n\n## 常见使用模式\n\n### 模式一：简单管道链\n\n```python\nchain = prompt | model | output_parser\nresult = chain.invoke({\"question\": \"...\"})\n```\n\n### 模式二：带配置的链\n\n```python\nfrom langchain_core.runnables.config import RunnableConfig\n\nconfig = RunnableConfig(\n    tags=[\"production\", \"v1\"],\n    metadata={\"user_id\": \"123\"},\n    recursion_limit=50\n)\n\nresult = chain.invoke({\"question\": \"...\"}, config=config)\n```\n\n### 模式三：并行分支合并\n\n```python\nfrom langchain_core.runnables import RunnableParallel\n\n# 并行执行多个任务\nparallel_chain = RunnableParallel(\n    summary=summary_prompt | model,\n    keywords=keyword_prompt | model\n)\n\nresult = parallel_chain.invoke({\"document\": doc})\n# 结果: {\"summary\": \"...\", \"keywords\": \"...\"}\n```\n\n### 模式四：动态链\n\n```python\nfrom langchain_core.runnables import RunnableLambda\n\n# 使用函数创建 Runnable\ndef route_by_topic(input_dict):\n    topic = input_dict[\"topic\"]\n    if topic == \"技术\":\n        return tech_chain\n    elif topic == \"商业\":\n        return business_chain\n    else:\n        return general_chain\n\ndynamic_chain = RunnableLambda(route_by_topic)\n```\n\n### 模式五：完整的 LangChain 代理链\n\n```python\nfrom langchain.agents import create_agent\nfrom langchain_core.tools import tool\n\n@tool\ndef search_api(query: str) -> str:\n    \"\"\"搜索外部 API。\"\"\"\n    # API 调用逻辑\n    return result\n\n# 创建代理\nagent = create_agent(tools=[search_api], model=model)\nresult = agent.invoke({\"input\": \"帮我搜索最新的 AI 新闻\"})\n```\n\n## 高级特性\n\n### 回调机制\n\n```python\nfrom langchain_core.callbacks import BaseCallbackHandler\n\nclass CustomHandler(BaseCallbackHandler):\n    def on_chain_start(self, serialized, inputs, **kwargs):\n        print(f\"链开始执行，输入: {inputs}\")\n    \n    def on_chain_end(self, outputs, **kwargs):\n        print(f\"链执行完成，输出: {outputs}\")\n\nhandler = CustomHandler()\nresult = chain.invoke({\"question\": \"...\"}, config={\"callbacks\": [handler]})\n```\n\n### 流式处理\n\n```python\n# 流式调用\nfor chunk in chain.stream({\"question\": \"...\"}):\n    print(chunk, end=\"\", flush=True)\n```\n\n### 批量处理\n\n```python\n# 批量调用\nquestions = [\n    {\"question\": \"问题1\"},\n    {\"question\": \"问题2\"},\n    {\"question\": \"问题3\"}\n]\n\nresults = chain.batch(questions)\n```\n\n## 与旧版 Chain 的关系\n\n| 特性 | `BaseRunnable` | `Chain` (旧版) |\n|------|----------------|----------------|\n| 统一接口 | ✅ | ❌ |\n| 异步支持 | ✅ | 部分 |\n| 流式支持 | ✅ | ❌ |\n| 序列化 | ✅ | ✅ |\n| 推荐程度 | 首选 | 已废弃 |\n\n> **迁移提示**：`Chain` 类在 LangChain 0.2.13 版本被标记为废弃，将在 2.0.0 版本移除。建议使用基于 `Runnable` 的新 API。资料来源：[libs/langchain/langchain_classic/chains/api/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n\n## 最佳实践\n\n1. **优先使用 Runnable API**：新代码应使用 `Runnable` 接口和链式调用\n2. **合理设置递归限制**：复杂链可能需要调高 `recursion_limit`\n3. **使用配置管理**：通过 `RunnableConfig` 管理标签和元数据\n4. **添加重试机制**：对不稳定操作使用 `RetryRunnable`\n5. **利用类型提示**：`BaseRunnable` 是泛型类，指定输入输出类型可提高代码质量\n\n## 总结\n\nRunnable 与链式调用是 LangChain 框架的核心设计范式，通过统一的接口抽象和灵活组合机制，使开发者能够构建从简单到复杂的各种 AI 应用。掌握这一体系对于高效使用 LangChain 至关重要。\n\n---\n\n<a id='page-agents'></a>\n\n## Agent代理系统\n\n### 相关页面\n\n相关主题：[工具与工具包](#page-tools), [Runnable与链式调用](#page-runnable)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/langchain/langchain_classic/agents/agent.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/agent.py)\n- [libs/langchain/langchain_classic/agents/react/agent.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/react/agent.py)\n- [libs/langchain/langchain_classic/agents/openai_functions_agent/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/openai_functions_agent/base.py)\n- [libs/langchain/langchain_classic/agents/structured_chat/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/structured_chat/base.py)\n</details>\n\n# Agent代理系统\n\n## 概述\n\nAgent（代理）系统是LangChain框架中用于构建自主智能体的核心模块。Agent能够根据用户输入动态决定执行哪些操作（Tool），通过循环调用工具并处理结果来完成任务。与静态的Chain不同，Agent具有推理和决策能力，能够在运行时根据上下文选择下一步行动。 资料来源：[libs/langchain/langchain_classic/agents/agent.py:1-50]()\n\nAgent系统主要由以下几个核心组件构成：\n\n| 组件 | 说明 |\n|------|------|\n| **Agent** | 核心抽象类，定义Agent的基本接口和执行循环 |\n| **Tool** | 可执行的功能单元，Agent调用以完成特定任务 |\n| **Toolkit** | 工具集合，便于批量加载相关工具 |\n| **AgentExecutor** | Agent的执行器，负责运行Agent并处理输出 |\n\n```mermaid\ngraph TD\n    A[用户输入] --> B[Agent推理]\n    B --> C{需要调用工具?}\n    C -->|是| D[选择合适Tool]\n    D --> E[执行Tool]\n    E --> F[处理Tool结果]\n    F --> B\n    C -->|否| G[返回最终结果]\n```\n\n## Agent架构\n\n### 基础Agent类\n\n`Agent`类是所有Agent类型的基类，继承自`Chain`。它定义了Agent的核心接口，包括推理逻辑和执行循环。 资料来源：[libs/langchain/langchain_classic/agents/agent.py]()\n\n```python\nclass Agent(Chain):\n    \"\"\"Agent基类，定义推理和执行接口\"\"\"\n    \n    @property\n    def observation_prefix(self) -> str:\n        \"\"\"观察结果前缀\"\"\"\n        \n    @property\n    def llm_prefix(self) -> str:\n        \"\"\"LLM输出前缀\"\"\"\n```\n\n### Agent执行流程\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant A as Agent\n    participant LLM as LLM\n    participant T as Tool\n    \n    U->>A: 输入任务\n    loop 执行循环\n        A->>LLM: 发送提示\n        LLM-->>A: 返回Action/Action Input\n        A->>T: 调用Tool\n        T-->>A: 返回Observation\n    end\n    A-->>U: 返回最终结果\n```\n\n## Agent类型\n\n### ReAct Agent\n\nReAct（Reasoning + Acting）是一种结合推理和行动的Agent模式。Agent首先进行推理，确定需要执行的操作，然后执行该操作，最后根据结果更新推理状态。 资料来源：[libs/langchain/langchain_classic/agents/react/agent.py:1-30]()\n\n```python\nclass BaseReActAgent(Agent):\n    \"\"\"ReAct Agent基类\n    \n    采用Reasoning + Acting循环模式:\n    1. Thought: 思考下一步行动\n    2. Action: 选择要执行的动作\n    3. Observation: 获取动作执行结果\n    \"\"\"\n```\n\n**ReAct Agent特点：**\n\n- 显式的推理过程，每一步都有`Thought`\n- 适合需要多步推理的复杂任务\n- 通过prompt模板控制输出格式\n\n### OpenAI Functions Agent\n\nOpenAI Functions Agent专门用于支持OpenAI function calling功能的模型。它利用模型的原生函数调用能力来生成结构化的工具调用。 资料来源：[libs/langchain/langchain_classic/agents/openai_functions_agent/base.py:1-50]()\n\n```python\nclass OpenAIFunctionsAgent(Agent):\n    \"\"\"基于OpenAI function calling的Agent\n    \n    使用模型原生能力生成函数调用，\n    无需解析文本输出\n    \"\"\"\n    \n    @property\n    def allowed_tools(self) -> list[str]:\n        \"\"\"允许调用的工具列表\"\"\"\n```\n\n**优势：**\n\n| 特性 | 优势 |\n|------|------|\n| 结构化输出 | 直接生成JSON格式的工具调用 |\n| 可靠性 | 减少解析错误 |\n| 类型安全 | 支持参数类型验证 |\n\n### Structured Chat Agent\n\nStructured Chat Agent支持复杂的多轮对话场景，能够处理包含多个参数的函数调用。它结合了聊天模型的能力和结构化工具调用。 资料来源：[libs/langchain/langchain_classic/agents/structured_chat/base.py:1-50]()\n\n```python\nclass StructuredChatAgent(Agent):\n    \"\"\"结构化聊天Agent\n    \n    适用于需要调用复杂工具的场景，\n    支持多参数和嵌套参数\n    \"\"\"\n```\n\n## Tool集成\n\n### Tool定义\n\nTool是Agent执行具体操作的接口。每个Tool包含名称、描述和执行函数。\n\n```python\nfrom langchain_core.tools import Tool\n\nsearch_tool = Tool(\n    name=\"search\",\n    description=\"搜索互联网获取最新信息\",\n    func=search_function\n)\n```\n\n### Tool选择机制\n\nAgent根据Tool的描述来决定调用哪个Tool。这一过程由LLM完成：\n\n1. **描述匹配**：Agent将任务与Tool描述进行匹配\n2. **参数提取**：从用户输入中提取Tool所需的参数\n3. **执行验证**：验证参数是否符合Tool的schema要求\n\n## 配置选项\n\n### 关键参数\n\n| 参数 | 类型 | 说明 | 默认值 |\n|------|------|------|--------|\n| `verbose` | bool | 是否输出详细执行信息 | False |\n| `max_iterations` | int | 最大迭代次数 | 15 |\n| `max_execution_time` | float | 最大执行时间（秒） | None |\n| `early_stopping_method` | str | 提前停止策略 | \"force\" |\n\n### 错误处理\n\nAgent执行过程中可能遇到各种错误：\n\n```python\nfrom langchain_core.agents import AgentFinish, AgentStep\n\nclass AgentExecutor:\n    \"\"\"Agent执行器，处理错误和重试\"\"\"\n    \n    def _handle_tool_error(self, error: Exception) -> str:\n        \"\"\"处理工具执行错误\"\"\"\n        \n    def _handle_parsing_error(self, error: Exception) -> str:\n        \"\"\"处理输出解析错误\"\"\"\n```\n\n## 迁移指南\n\n### 从APIChain迁移\n\n`APIChain`已在0.2.13版本标记为废弃，将在2.0.0版本移除。建议迁移到新的Agent架构：\n\n```python\n# 旧方式 (已废弃)\nfrom langchain.chains import APIChain\nchain = APIChain.from_url_and_prompt(...)\n\n# 新方式\nfrom langchain.agents import create_agent\nagent = create_agent(tools=[http_request_tool])\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:30-50]()\n\n## 最佳实践\n\n### 1. Tool设计原则\n\n- **清晰描述**：Tool描述应准确说明功能和用途\n- **参数验证**：使用pydantic模型定义参数schema\n- **错误返回**：Tool应返回有意义的错误信息\n\n### 2. Agent配置建议\n\n- 设置合理的`max_iterations`防止无限循环\n- 启用`verbose=True`便于调试\n- 考虑设置`max_execution_time`限制执行时间\n\n### 3. Prompt优化\n\n```python\n# 使用系统提示词优化Agent行为\nagent = create_agent(\n    tools=my_tools,\n    system_message=\"\"\"\n    你是一个专业的助手。\n    总是先思考再行动。\n    如果不确定，请返回最终答案。\n    \"\"\"\n)\n```\n\n## 相关资源\n\n- [LangChain官方文档](https://docs.langchain.com/oss/python/langchain/agents)\n- [API参考](https://reference.langchain.com/python/langchain_classic/agents.html)\n- [示例代码库](https://github.com/langchain-ai/langchain/tree/main/examples)\n\n## 总结\n\nAgent代理系统是LangChain的核心能力之一，通过结合LLM的推理能力和Tool的执行能力，实现了灵活的自主任务执行。框架提供了多种Agent类型以适应不同场景，开发者应根据具体需求选择合适的Agent模式。\n\n---\n\n<a id='page-tools'></a>\n\n## 工具与工具包\n\n### 相关页面\n\n相关主题：[Agent代理系统](#page-agents), [向量存储与检索](#page-vectorstores)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/tools/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tools/base.py)\n- [libs/core/langchain_core/tools/structured.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tools/structured.py)\n- [libs/langchain/langchain_classic/tools/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/tools/base.py)\n- [libs/langchain/langchain_classic/agents/agent_toolkits/sql/toolkit.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/agent_toolkits/sql/toolkit.py)\n</details>\n\n# 工具与工具包\n\n## 概述\n\nLangChain 中的**工具（Tools）**和**工具包（Toolkits）**是框架的核心组件，它们使 LLM（大型语言模型）能够与外部世界交互、执行具体操作、访问实时信息以及操控各种系统和数据源。工具是可执行的原子单元，而工具包则是相关工具的集合，为特定领域或任务提供完整的功能支持。\n\n在 LangChain 的架构中，工具系统位于 `langchain_core` 层，这表明工具是跨多个包共享的基础抽象。`langchain-core` 定义了工具的核心接口和基类，而 `langchain-classic` 在此基础上提供了更丰富的实现和特定场景的工具包。\n\nLangChain 的工具系统设计遵循以下核心原则：类型安全、异步支持、结构化参数验证、以及与主流 LLM 提供商的广泛兼容性。通过统一的工具接口，开发者可以轻松创建自定义工具或使用预构建的工具包来加速开发。\n\n## 工具的核心架构\n\n### 工具的基类层次\n\nLangChain 的工具系统采用分层架构设计。`BaseTool` 是所有工具的抽象基类，定义了工具的基本行为和接口。`StructuredTool` 则在 `BaseTool` 基础上添加了结构化参数支持，允许工具接受复杂类型的输入参数。\n\n工具的核心方法包括：\n\n- **invoke**：同步执行工具\n- **ainvoke**：异步执行工具\n- **run**：兼容旧版 API 的执行方法\n- **arun**：异步版本的旧 API\n\n这种分层设计允许工具在保持一致接口的同时，根据具体需求提供不同的功能实现。基础层负责定义契约，而具体实现可以继承和扩展这些基类以添加特定功能。\n\n```mermaid\ngraph TD\n    A[BaseTool] --> B[StructuredTool]\n    A --> C[Tool]\n    B --> D[自定义结构化工具]\n    C --> E[自定义简单工具]\n    D --> F[工具执行层]\n    E --> F\n    F --> G[LLM 交互]\n```\n\n### 工具的参数定义\n\n工具使用 Pydantic 模型定义参数，这确保了参数的类型安全和自动验证。每个工具通过 `args_schema` 属性声明其接受的参数，包括参数名称、类型、描述和默认值。\n\n参数定义的关键字段包括：\n\n- **name**：工具的唯一标识符\n- **description**：工具功能的自然语言描述，供 LLM 理解何时使用\n- **args_schema**：Pydantic 模型类，定义参数结构\n- **return_direct**：控制返回值是否直接返回给用户\n\n参数描述在工具选择过程中至关重要，因为 LLM 需要根据描述来决定调用哪个工具以及如何传递参数。良好的描述应该清晰说明工具的用途、参数含义以及返回值格式。\n\n### 工具的执行流程\n\n工具的执行涉及多个步骤，从接收调用请求到返回结果。当 LLM 决定调用工具时，系统会经过以下流程：参数验证、权限检查、实际执行、结果处理和返回。\n\n异步执行支持是 LangChain 工具系统的重要特性。通过 `ainvoke` 和 `arun` 方法，工具可以执行 I/O 密集型操作而不会阻塞主线程。这对于需要调用外部 API、访问数据库或执行网络请求的工具尤为重要。\n\n错误处理机制贯穿整个执行流程。工具可以捕获和处理各种异常情况，并根据错误类型返回有意义的消息或重试操作。工具的错误处理设计允许开发者定义降级策略和恢复逻辑。\n\n## StructuredTool 的结构化参数支持\n\n`StructuredTool` 是 LangChain 中用于处理复杂参数的工具基类。与简单的字符串参数不同，`StructuredTool` 支持嵌套对象、列表和其他复杂数据类型，这使得工具能够接收更丰富和结构化的输入。\n\n结构化参数通过 Pydantic 模型定义，这带来了几个关键优势：类型检查在运行时自动执行，参数验证规则可以集中定义，JSON Schema 可以自动生成以供 LLM 理解参数结构。\n\n`StructuredTool` 的核心特性包括：\n\n- **类型安全的参数传递**：参数值在传递前经过类型验证\n- **自动生成的参数文档**：基于 Pydantic 模型自动生成参数描述\n- **嵌套结构支持**：允许定义复杂的多层参数结构\n- **默认值处理**：自动应用默认值，减少调用方的负担\n\n## 工具包的设计模式\n\n### 工具包的概念与用途\n\n工具包（Toolkit）是一组相关工具的集合，专门设计用于处理特定领域或完成特定任务。例如，SQL 工具包包含用于数据库查询、表列表获取、架构检查等的相关工具，它们协同工作以支持完整的数据库交互场景。\n\n工具包的设计遵循组合原则：将相关的原子功能打包在一起，使开发者可以一次性引入完整的功能集合。这种设计减少了集成工作量，同时确保了工具之间的一致性和互操作性。\n\n### SQL 工具包详解\n\nSQL 工具包是 LangChain 提供的标准工具包之一，专门用于数据库操作场景。该工具包通常包含以下核心工具：\n\n| 工具名称 | 功能描述 | 输入参数 |\n|---------|---------|---------|\n| query_sql_db | 执行 SQL 查询 | query: str |\n| list_sql_tables | 列出数据库中的表 | - |\n| get_sql_table_schema | 获取表结构信息 | table_names: List[str] |\n| query_checker | 验证和修正 SQL 语法 | query: str |\n\nSQL 工具包通过统一的接口与数据库交互，支持多种数据库后端。工具包初始化时需要数据库连接信息，如连接字符串或连接池配置。工具包内部处理连接管理、查询执行和结果转换等细节，对使用者屏蔽了底层复杂性。\n\n工具包的设计还考虑了安全性。SQL 工具包可以配置允许访问的表列表，防止 LLM 执行未经授权的数据库操作。参数验证和 SQL 语法检查功能有助于防止 SQL 注入等安全威胁。\n\n## 工具与 LLM 的集成\n\n### 工具选择机制\n\n在 LangChain 中，LLM 可以通过多种方式选择和调用工具。最常见的模式是让 LLM 输出结构化的工具调用指令，这些指令包含工具名称和参数。LangChain 提供了解析和执行这些调用的基础设施。\n\n工具选择涉及几个关键因素：\n\n- **工具描述**：LLM 根据描述判断工具的适用性\n- **参数约束**：LLM 需要生成符合参数 schema 的调用\n- **上下文信息**：当前对话状态和可用工具列表影响选择\n\n### 工具调用的执行\n\n当 LLM 输出工具调用时，LangChain 的执行层负责：\n\n1. 解析 LLM 输出，提取工具名称和参数\n2. 验证参数是否符合工具的 schema\n3. 查找并实例化目标工具\n4. 执行工具并捕获结果或错误\n5. 将结果反馈给 LLM 进行后续处理\n\n执行层支持同步和异步两种模式。同步模式下，工具按顺序依次执行；异步模式下，支持并行执行多个独立的工具调用以提高效率。\n\n## 自定义工具开发\n\n### 创建简单工具\n\n创建自定义工具的基本流程相对直接。首先定义工具函数，然后使用 `@tool` 装饰器或继承 `BaseTool` 类将其转换为 LangChain 工具。工具函数应专注于单一职责，便于测试和维护。\n\n自定义工具的关键考虑因素包括：\n\n- **描述的清晰性**：描述应帮助 LLM 理解何时以及如何调用工具\n- **参数命名的直观性**：使用清晰、描述性的参数名称\n- **错误处理**：定义良好的错误消息，帮助调试和恢复\n- **返回值格式**：确保返回值易于 LLM 理解和处理\n\n### 创建结构化工具\n\n对于需要复杂参数的工兴，应使用 `StructuredTool` 或直接继承 `BaseTool` 并定义 Pydantic 格式的 `args_schema`。这种方法允许定义嵌套参数、类型验证规则和默认值。\n\n结构化工具开发的关键步骤：\n\n1. 定义 Pydantic 模型表示工具参数\n2. 继承 `StructuredTool` 或相应基类\n3. 实现核心执行逻辑\n4. 配置工具元数据（名称、描述等）\n\n## 安全与权限控制\n\n### 域限制机制\n\nLangChain 提供了 URL 域限制功能以防止工具被滥用。例如，API 调用工具可以配置允许访问的域名白名单，系统会在执行前验证目标 URL 是否在允许列表中。\n\n域限制通过以下函数实现：\n\n- `_extract_scheme_and_domain`：从 URL 提取协议和域名\n- `_check_in_allowed_domain`：检查 URL 是否在允许的域名列表中\n\n这种机制对于安全敏感的用例至关重要，特别是在允许 LLM 发起网络请求的场景中。\n\n### 工具权限管理\n\n工具系统支持多种权限控制机制：\n\n- **表级访问控制**：数据库工具可以限制可访问的表\n- **操作类型限制**：限制工具可执行的操作类型（如只读）\n- **速率限制**：防止过度使用或资源耗尽\n\n## 生态集成\n\n### 合作伙伴包中的工具\n\nLangChain 的生态系统中包含多个合作伙伴包，每个包都提供了针对特定服务或平台的工具集成。这些包位于 `libs/partners/` 目录下，包括：\n\n| 合作伙伴 | 包名称 | 主要功能 |\n|---------|-------|---------|\n| OpenAI | langchain-openai | OpenAI API 集成 |\n| Anthropic | langchain-anthropic | Claude 模型支持 |\n| HuggingFace | langchain-huggingface | 模型推理与嵌入 |\n| Ollama | langchain-ollama | 本地 LLM 支持 |\n| DeepSeek | langchain-deepseek | DeepSeek API |\n\n这些合作伙伴包通常包含针对特定平台优化的工具实现，充分利用各平台的特性和能力。\n\n### 社区工具与扩展\n\n除了官方维护的包外，LangChain 还支持社区贡献的工具和工具包。`langchain-community` 包曾经是社区工具的主要存放地，但新版本中建议使用专门的合作伙伴包或自定义工具实现。\n\n## 最佳实践\n\n### 工具设计原则\n\n设计良好的工具应遵循以下原则：\n\n- **单一职责**：每个工具应专注于完成一项具体任务\n- **清晰命名**：工具和参数名称应自描述\n- **完整文档**：提供详尽的描述说明工具用途和使用方式\n- **错误恢复**：工具应能优雅地处理错误并提供有用的反馈\n- **类型安全**：使用类型注解和 Pydantic 验证确保参数正确\n\n### 性能优化建议\n\n在生产环境中使用工具时，应考虑以下性能优化策略：\n\n- **连接池复用**：对于需要数据库或网络连接的工兴，应复用连接而非每次调用创建新连接\n- **异步执行**：I/O 密集型操作应使用异步 API\n- **结果缓存**：对于不经常变化的查询结果，可以进行缓存以减少重复调用\n- **批处理**：将多个小操作合并为批处理以减少开销\n\n### 调试与监控\n\n工具执行过程中的调试和监控对于维护系统可靠性至关重要。建议的实现方式包括：\n\n- 配置回调处理器以记录工具调用\n- 实现详细的日志记录以便问题排查\n- 设置监控指标以追踪工具使用模式和性能\n- 建立告警机制以在工具失败时及时响应\n\n## 相关资源\n\n- 官方文档：https://docs.langchain.com/oss/python/langchain/overview\n- API 参考：https://reference.langchain.com/python\n- 贡献指南：https://docs.langchain.com/oss/python/contributing/overview\n\n---\n\n<a id='page-vectorstores'></a>\n\n## 向量存储与检索\n\n### 相关页面\n\n相关主题：[文档加载与处理](#page-document-loaders), [工具与工具包](#page-tools)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/vectorstores/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/vectorstores/base.py)\n- [libs/core/langchain_core/embeddings/embeddings.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/embeddings/embeddings.py)\n- [libs/langchain/langchain_classic/retrievers/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/retrievers/__init__.py)\n- [libs/langchain/langchain_classic/retrievers/self_query/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/retrievers/self_query/base.py)\n</details>\n\n# 向量存储与检索\n\n## 概述\n\n向量存储与检索是 LangChain 框架中用于处理语义搜索和相似性匹配的核心功能模块。在大型语言模型（LLM）应用中，向量存储通过将文本、文档或其他数据转换为高维向量表示，实现高效的语义检索能力。当用户提出查询时，系统会将查询转换为向量，并在向量数据库中查找最相似的文档或文本片段。LangChain 的向量存储架构设计遵循模块化原则，核心接口定义在 `langchain-core` 包中，而具体实现则分布在各个集成包中，例如 `langchain-chroma` 用于 Chroma 向量数据库的集成。这种架构使得开发者可以灵活地在不同向量存储提供商之间切换，同时保持上层应用代码的一致性。\n\n## 核心架构\n\nLangChain 的向量存储系统采用分层架构设计，从底层到上层依次包括向量存储实现层、嵌入模型层和检索器层。向量存储层负责实际的数据存储和相似性搜索操作，支持多种后端包括 Chroma、FAISS、Pinecone 等主流向量数据库。嵌入模型层提供文本到向量的转换能力，通过 `Embeddings` 接口定义标准化的嵌入生成方法。检索器层则封装了各种检索策略，包括直接相似性检索、自查询检索、时间加权检索等高级功能。这种分层设计使得系统具有良好的可扩展性和可维护性，开发者可以根据需求自由组合不同层次的组件。\n\n```mermaid\ngraph TD\n    A[用户查询] --> B[嵌入模型]\n    B --> C[查询向量]\n    C --> D[向量存储]\n    D --> E[相似文档]\n    E --> F[检索结果]\n    \n    G[文档] --> H[嵌入模型]\n    H --> I[文档向量]\n    I --> D\n    \n    J[元数据] --> D\n```\n\n## 向量存储基类\n\nLangChain 的向量存储功能由 `VectorStore` 基类提供核心抽象。该基类定义了一组标准接口，包括 `add_texts`、`add_documents`、`similarity_search`、`similarity_search_by_vector` 等核心方法。向量存储实现需要继承这个基类并实现相应的抽象方法，同时可以提供特定于后端的优化功能。基类还提供了异步支持，通过 `AsyncVectorStore` 接口支持异步操作，这对于构建高性能应用至关重要。向量存储的构造函数通常接受嵌入模型实例、连接参数和配置选项，使得初始化过程灵活且易于配置。\n\n| 方法 | 参数 | 返回值 | 说明 |\n|------|------|--------|------|\n| `add_texts` | texts, metadatas, ids | List[str] | 添加文本到向量存储 |\n| `add_documents` | documents | List[str] | 添加文档对象到向量存储 |\n| `similarity_search` | query, k, filter | List[Document] | 执行相似性搜索 |\n| `similarity_search_by_vector` | embedding, k, filter | List[Document] | 按向量执行相似性搜索 |\n| `delete` | ids | None | 删除指定ID的文档 |\n| `save_local` | folder_path | None | 将向量存储保存到本地 |\n\n## 嵌入模型接口\n\n嵌入模型是向量存储系统的核心组件，负责将文本数据转换为高维向量表示。LangChain 通过 `Embeddings` 基类定义了跨不同嵌入提供商的统一接口，该接口包含 `embed_query` 和 `embed_documents` 两个核心方法。`embed_query` 方法用于单个查询文本的嵌入生成，而 `embed_documents` 方法支持批量处理多个文档的嵌入计算。这个设计允许开发者轻松切换不同的嵌入提供商，无论是使用 OpenAI 的 text-embedding-ada-002、HuggingFace 的 sentence-transformers，还是本地部署的嵌入模型。LangChain 还提供了缓存和批处理优化，以减少 API 调用开销和提高整体性能。\n\n```python\nfrom langchain_core.embeddings import Embeddings\n\nclass Embeddings(ABC):\n    \"\"\"嵌入模型抽象基类\"\"\"\n    \n    @abstractmethod\n    def embed_query(self, text: str) -> List[float]:\n        \"\"\"嵌入单个查询文本\"\"\"\n        pass\n    \n    @abstractmethod\n    def embed_documents(self, texts: List[str]) -> List[List[float]]:\n        \"\"\"嵌入多个文档文本\"\"\"\n        pass\n    \n    async def aembed_query(self, text: str) -> List[float]:\n        \"\"\"异步嵌入单个查询\"\"\"\n        return self.embed_query(text)\n    \n    async def aembed_documents(self, texts: List[str]) -> List[List[float]]:\n        \"\"\"异步嵌入多个文档\"\"\"\n        return self.embed_documents(texts)\n```\n\n## 检索器模块\n\n检索器（Retriever）是 LangChain 中用于从向量存储中获取相关文档的高级抽象。`BaseRetriever` 类定义了标准化的检索接口，使得不同检索策略的实现可以互换使用。LangChain 提供了多种内置检索器，包括 `VectorStoreRetriever` 进行基础向量相似性检索、`SelfQueryRetriever` 支持基于元数据的结构化查询、`ContextualCompressionRetriever` 在检索后进行结果压缩、`MultiVectorRetriever` 支持多向量检索策略，以及 `TimeWeightedVectorStoreRetriever` 结合时间因素的加权检索。这种丰富的检索器生态使得开发者可以根据具体应用场景选择最合适的检索策略。\n\n## 自查询检索器\n\n自查询检索器（Self-Query Retriever）是一种高级检索能力，它能够自动从用户查询中提取语义搜索条件和元数据过滤条件。这种检索器特别适用于结构化元数据丰富的场景，例如文档带有时间戳、类别、作者等属性。当用户提出一个问题时，自查询检索器会同时生成两个部分：一是用于语义相似性匹配的文本嵌入向量，二是用于精确过滤的元数据条件表达式。这种双重处理机制使得检索结果既具有语义相关性，又满足精确的元数据约束条件。\n\n| 组件 | 说明 |\n|------|------|\n| `query_constructor` | 从用户查询中提取结构和语义信息 |\n| `allowed_operators` | 支持的元数据比较运算符 |\n| `default_operator` | 默认的逻辑运算符（AND/OR） |\n| `attribute_infomer` | 属性名称的信息提取器 |\n\n自查询检索器的工作流程涉及多个步骤：首先，大语言模型（LLM）分析用户查询，识别其中的语义搜索意图和元数据过滤条件；然后，系统将提取的元数据条件转换为结构化查询表达式；最后，向量存储同时执行语义搜索和元数据过滤，返回满足双重条件的结果文档。这种设计将自然语言处理和结构化查询有机结合，大大增强了检索系统的表达能力和精确度。\n\n## 相似性搜索策略\n\nLangChain 支持多种相似性搜索策略，以满足不同性能和精度需求。基础的相似性搜索默认使用余弦相似度（Cosine Similarity）作为距离度量，这是语义搜索中最常用的度量方式。系统还支持欧氏距离（L2 Distance）和点积（Dot Product）等其他度量方式，开发者可以根据具体场景和嵌入模型特性选择最合适的度量方法。高级搜索选项包括设置搜索返回的文档数量 `k` 参数、元数据过滤条件 `filter` 参数，以及是否返回相似性分数 `include_embeddings` 参数。这些参数的合理配置对于平衡搜索性能和结果质量至关重要。\n\n## 与向量数据库的集成\n\nLangChain 与多种主流向量数据库提供了深度集成支持。在合作伙伴包（partners）中，`langchain-chroma` 提供了与 Chroma 向量数据库的官方集成，Chroma 是一个专为 LLM 应用设计的开源嵌入数据库，提供了简单的安装和使用体验。除此之外，LangChain 还通过社区包支持 Pinecone、Weaviate、Qdrant、Milvus、FAISS、Elasticsearch 等多种向量存储后端。每种集成都遵循统一的 `VectorStore` 接口规范，确保应用代码在不同后端之间具有良好的可移植性。\n\n```mermaid\ngraph LR\n    A[应用层] --> B[VectorStore 接口]\n    B --> C[Chroma 集成]\n    B --> D[Pinecone 集成]\n    B --> E[FAISS 集成]\n    B --> F[其他集成]\n    \n    C --> G[Chroma 数据库]\n    D --> H[Pinecone 云服务]\n    E --> I[本地 FAISS 索引]\n    F --> J[其他后端]\n```\n\n## 文档处理与索引\n\n在将文档添加到向量存储之前，LangChain 提供了完整的文档处理流水线支持。文档首先通过文本分割器（Text Splitter）被拆分成较小的块（chunks），这是因为大多数嵌入模型对输入长度有限制，而且较小的块能够提供更精确的检索结果。LangChain 的 `text-splitters` 包提供了多种分割策略，包括按字符数分割、按句子分割、递归字符分割等。分割后的文档块包含文本内容（page_content）和元数据（metadata）两个部分，元数据可以包含来源信息、页码、创建时间等任何有助于检索的信息。\n\n| 分割策略 | 适用场景 | 参数说明 |\n|----------|----------|----------|\n| CharacterTextSplitter | 简单文本分割 | chunk_size, chunk_overlap, separator |\n| RecursiveCharacterTextSplitter | 保留段落结构 | 同上，增加 separators 参数 |\n| TokenTextSplitter | 按 token 数量分割 | 需要 tokenizer 参数 |\n\n## 异步操作支持\n\n现代 LLM 应用对性能和并发处理能力有较高要求，LangChain 的向量存储系统提供了完整的异步操作支持。异步接口包括 `aadd_texts`、`aadd_documents`、`aasync_similarity_search` 等方法，允许开发者在异步环境中高效地处理批量操作。异步设计特别适用于需要同时查询多个向量存储、或者在高并发场景下处理大量请求的应用。LangChain 的异步实现遵循 Python 的 asyncio 规范，可以与 FastAPI 等现代 Web 框架无缝集成。\n\n## 安全性与权限控制\n\n在构建向量存储应用时，安全性是需要重点考虑的方面。LangChain 提供了域名限制（Domain Limiting）功能，可以配置向量存储只允许查询特定域名的数据源，防止潜在的安全风险。这一功能在 APIChain 等可能暴露给最终用户的组件中尤为重要，通过限制可访问的域名范围，可以防止恶意查询或数据泄露。开发者应该仔细评估应用的安全需求，合理配置访问控制策略，确保向量存储系统在提供便利的同时不引入安全漏洞。\n\n## 最佳实践\n\n在实际应用中，向量存储与检索系统的性能优化需要关注多个方面。首先是嵌入模型的选择，不同的嵌入模型在精度、速度和成本方面各有权衡，应该根据具体场景选择最合适的模型。其次是文档块大小的确定，过大的块可能导致检索精度下降，过小的块则可能丢失上下文信息，建议通过实验找到最佳的块大小和重叠参数。批量操作时应该利用批处理 API 减少网络开销，同时注意避免超过 API 的速率限制。在生产环境中，应该实现适当的错误处理和重试机制，以应对网络波动和服务不可用等情况。\n\n```mermaid\ngraph TD\n    A[开始] --> B[选择嵌入模型]\n    B --> C[设计文档分割策略]\n    C --> D[配置向量存储]\n    D --> E[构建检索器]\n    E --> F[添加安全限制]\n    F --> G[性能测试]\n    G --> H{是否满足需求}\n    H -->|否| I[调整参数]\n    I --> D\n    H -->|是| J[部署到生产环境]\n```\n\n## 资料来源\n\n- `libs/core/langchain_core/vectorstores/base.py` - 向量存储基类定义\n- `libs/core/langchain_core/embeddings/embeddings.py` - 嵌入模型接口定义\n- `libs/langchain/langchain_classic/retrievers/__init__.py` - 检索器模块初始化\n- `libs/langchain/langchain_classic/retrievers/self_query/base.py` - 自查询检索器实现\n- `libs/partners/chroma/README.md` - Chroma 集成文档\n\n---\n\n<a id='page-document-loaders'></a>\n\n## 文档加载与处理\n\n### 相关页面\n\n相关主题：[向量存储与检索](#page-vectorstores), [内存与状态管理](#page-memory)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/document_loaders/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/document_loaders/base.py)\n- [libs/langchain/langchain_classic/document_loaders/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/document_loaders/base.py)\n- [libs/langchain/langchain_classic/document_loaders/parsers/registry.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/document_loaders/parsers/registry.py)\n- [libs/text-splitters/langchain_text_splitters/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/text-splitters/langchain_text_splitters/base.py)\n</details>\n\n# 文档加载与处理\n\n## 概述\n\n文档加载与处理是 LangChain 框架中用于将各种格式的外部数据转换为标准化 `Document` 对象的核心模块。该模块支持从多种数据源加载内容，包括 PDF、HTML、Markdown、JSON、CSV、Word 文档等，并提供了灵活的分词（Text Splitting）功能以支持大规模文档处理场景。\n\nLangChain 的文档处理架构采用分层设计，核心接口定义在 `langchain-core` 包中，具体实现则分散在 `langchain-classic` 和各集成包中。\n\n## 核心架构\n\nLangChain 文档处理流程包含三个主要阶段：**加载（Loading）**、**解析（Parsing）** 和 **分块（Chunking/Splitting）**。\n\n```mermaid\ngraph TD\n    A[原始数据源] --> B[DocumentLoader]\n    B --> C[Document 对象]\n    C --> D[TextSplitter]\n    D --> E[Document 列表]\n    E --> F[Vector Store / Chain]\n    \n    B1[文件系统] --> B\n    B2[Web URL] --> B\n    B3[数据库] --> B\n    B4[API 响应] --> B\n    \n    C --> C1[page_content: str]\n    C --> C2[metadata: dict]\n```\n\n## 核心数据模型\n\n### Document 对象\n\n`Document` 是 LangChain 中表示文档的基础数据结构，包含以下核心属性：\n\n| 属性 | 类型 | 说明 |\n|------|------|------|\n| `page_content` | `str` | 文档的文本内容 |\n| `metadata` | `dict` | 文档元数据，包含来源、页码等信息 |\n\n```python\nclass Document:\n    page_content: str\n    metadata: dict = Field(default_factory=dict)\n```\n\n资料来源：[libs/core/langchain_core/document_loaders/base.py]()\n\n### BaseLoader 抽象基类\n\n所有文档加载器必须继承自 `BaseLoader` 基类：\n\n```python\nclass BaseLoader(ABC):\n    \"\"\"文档加载器基类\"\"\"\n    \n    @abstractmethod\n    def lazy_load(self) -> Iterator[Document]:\n        \"\"\"懒加载文档，按需生成 Document 对象\"\"\"\n        ...\n    \n    def load(self) -> list[Document]:\n        \"\"\"同步加载所有文档\"\"\"\n        return list(self.lazy_load())\n    \n    async def aload(self) -> list[Document]:\n        \"\"\"异步加载所有文档\"\"\"\n        return [doc async for doc in self.alazy_load()]\n    \n    @abstractmethod\n    async def alazy_load(self) -> AsyncIterator[Document]:\n        \"\"\"异步懒加载文档\"\"\"\n        ...\n```\n\n资料来源：[libs/core/langchain_core/document_loaders/base.py]()\n\n## 文档加载器类型\n\n### 按数据源分类\n\n| 类型 | 说明 | 典型实现 |\n|------|------|----------|\n| 文件加载器 | 从本地文件系统读取文件 | `TextLoader`, `CSVLoader`, `PDFLoader` |\n| Web 加载器 | 从 URL 或网页抓取内容 | `WebBaseLoader`, `WebUnstructuredLoader` |\n| 数据库加载器 | 从数据库查询结果加载 | `SQLDatabaseLoader` |\n| API 加载器 | 从 API 响应解析文档 | `APIBaseLoader` |\n\n### 内置加载器列表\n\n`langchain-classic` 包提供了丰富的内置加载器实现：\n\n| 加载器类 | 支持格式 | 包路径 |\n|----------|----------|--------|\n| `TextLoader` | .txt, 纯文本 | `langchain_classic.document_loaders` |\n| `CSVLoader` | .csv | `langchain_classic.document_loaders` |\n| `UnstructuredFileLoader` | 多种格式 | `langchain_classic.document_loaders` |\n| `PyPDFLoader` | PDF | `langchain_classic.document_loaders` |\n| `WebBaseLoader` | 网页 | `langchain_classic.document_loaders` |\n| `NotionLoader` | Notion 页面 | `langchain_partners` |\n\n## 解析器注册机制\n\nLangChain 使用解析器注册表（Registry）来管理不同文档类型的解析逻辑。\n\n```mermaid\ngraph LR\n    A[文件输入] --> B[ParserRegistry]\n    B --> C{文件类型检测}\n    C -->|.pdf| D[PDFParser]\n    C -->|.html| E[HTMLParser]\n    C -->|.md| F[MarkdownParser]\n    C -->|.json| G[JSONParser]\n    \n    D --> H[Document 对象]\n    E --> H\n    F --> H\n    G --> H\n```\n\n### ParserRegistry 类\n\n```python\nclass ParserRegistry:\n    \"\"\"文档解析器注册表\"\"\"\n    \n    def __init__(self, parsers: dict[str, BaseParser] | None = None):\n        self._parsers = parsers or {}\n    \n    def register(self, extension: str, parser: BaseParser) -> None:\n        \"\"\"注册解析器\"\"\"\n        self._parsers[extension.lower()] = parser\n    \n    def get(self, extension: str) -> BaseParser | None:\n        \"\"\"获取指定扩展名对应的解析器\"\"\"\n        return self._parsers.get(extension.lower())\n    \n    def get_extractors(self) -> dict[str, BaseParser]:\n        \"\"\"获取所有注册的解析器\"\"\"\n        return self._parsers.copy()\n```\n\n资料来源：[libs/langchain/langchain_classic/document_loaders/parsers/registry.py]()\n\n## 文本分块（Text Splitting）\n\n对于长文档，需要将其分割成较小的块（chunks）以便嵌入（embedding）和检索。`langchain-text-splitters` 包提供了灵活的分块策略。\n\n### BaseCharacterTextSplitter\n\n基于字符的分块器，按指定分隔符分割文本：\n\n```python\nclass BaseCharacterTextSplitter(TextSplitter):\n    \"\"\"基于字符的分块器基类\"\"\"\n    \n    def __init__(\n        self,\n        separator: str = \"\\n\\n\",\n        is_separator_regex: bool = False,\n        chunk_size: int = 4000,\n        chunk_overlap: int = 200,\n        length_function: Callable[[str], int] = len,\n        add_start_index: bool = False,\n        strip_whitespace: bool = True,\n    ):\n        ...\n```\n\n### 关键参数说明\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `separator` | `str` | `\"\\n\\n\"` | 分隔符字符串 |\n| `is_separator_regex` | `bool` | `False` | 是否将分隔符作为正则表达式 |\n| `chunk_size` | `int` | `4000` | 每个块的最大字符数 |\n| `chunk_overlap` | `int` | `200` | 相邻块之间的重叠字符数 |\n| `length_function` | `Callable` | `len` | 计算文本长度的函数 |\n| `add_start_index` | `bool` | `False` | 是否在元数据中添加起始位置 |\n| `strip_whitespace` | `bool` | `True` | 是否去除首尾空白 |\n\n资料来源：[libs/text-splitters/langchain_text_splitters/base.py]()\n\n### 分块策略\n\nLangChain 支持多种分块策略：\n\n```mermaid\ngraph TD\n    A[输入文本] --> B{分块策略}\n    \n    B -->|字符分割| C[CharacterTextSplitter]\n    B -->|递归分割| D[RecursiveCharacterTextSplitter]\n    B -->|代码分割| E[LanguageSplitter]\n    B -->|语义分割| F[SemanticChunker]\n    \n    C --> G[按固定分隔符分割]\n    D --> H[优先小分隔符<br/>失败则回退大分隔符]\n    E --> I[按编程语言语法分割]\n    F --> J[基于嵌入相似度分割]\n    \n    G --> K[Document 列表]\n    H --> K\n    I --> K\n    J --> K\n```\n\n### RecursiveCharacterTextSplitter\n\n递归字符分块器尝试按优先级顺序使用不同的分隔符：\n\n```python\nclass RecursiveCharacterTextSplitter(BaseSeparatorTextSplitter):\n    \"\"\"递归字符分块器\"\"\"\n    \n    def __init__(\n        self,\n        separators: list[str] | None = None,\n        **kwargs,\n    ):\n        if separators is None:\n            separators = [\"\\n\\n\", \"\\n\", \" \", \"\"]\n        super().__init__(separators=separators, **kwargs)\n```\n\n**分割优先级：**\n1. `\\n\\n` - 段落分隔符\n2. `\\n` - 换行符\n3. ` ` - 空格\n4. `\"\"` - 单字符\n\n资料来源：[libs/text-splitters/langchain_text_splitters/base.py]()\n\n## 使用示例\n\n### 基本加载流程\n\n```python\nfrom langchain_core.document_loaders import TextLoader\nfrom langchain_core.documents import Document\n\n# 使用 TextLoader 加载文本文件\nloader = TextLoader(file_path=\"example.txt\")\ndocuments = loader.load()\n\n# 访问文档内容\nfor doc in documents:\n    print(f\"内容: {doc.page_content}\")\n    print(f\"元数据: {doc.metadata}\")\n```\n\n### 异步加载\n\n```python\nfrom langchain_core.document_loaders import BaseLoader\n\nclass AsyncDocumentLoader(BaseLoader):\n    \"\"\"自定义异步加载器\"\"\"\n    \n    async def alazy_load(self) -> AsyncIterator[Document]:\n        # 异步获取数据\n        content = await self._fetch_content()\n        yield Document(page_content=content)\n```\n\n### 文档分块\n\n```python\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\n\n# 初始化分块器\nsplitter = RecursiveCharacterTextSplitter(\n    chunk_size=1000,\n    chunk_overlap=200,\n    separators=[\"\\n\\n\", \"\\n\", \" \", \"\"]\n)\n\n# 对文档进行分块\ntexts = [\"这是第一段文本...\", \"这是第二段文本...\"]\ndocs = [Document(page_content=t) for t in texts]\nchunks = splitter.split_documents(docs)\n\nprint(f\"原始文档数: {len(docs)}\")\nprint(f\"分块后块数: {len(chunks)}\")\n```\n\n## 元数据管理\n\n文档元数据用于存储与内容相关的附加信息：\n\n| 元数据键 | 说明 | 示例值 |\n|----------|------|--------|\n| `source` | 文档来源路径或 URL | `\"./data/document.pdf\"` |\n| `page` | 页码（PDF 等多页文档） | `1` |\n| `total_pages` | 总页数 | `42` |\n| `creation_date` | 创建时间 | `\"2024-01-15\"` |\n| `author` | 作者 | `\"John Doe\"` |\n\n```python\n# 创建带元数据的文档\ndoc = Document(\n    page_content=\"这是文档内容\",\n    metadata={\n        \"source\": \"report.pdf\",\n        \"page\": 5,\n        \"author\": \"Alice\"\n    }\n)\n```\n\n## 与其他模块的集成\n\n```mermaid\ngraph LR\n    A[DocumentLoader] --> B[Document]\n    B --> C[TextSplitter]\n    C --> D[Chunked Documents]\n    D --> E[Embeddings]\n    E --> F[Vector Store]\n    \n    D --> G[Cache]\n    D --> H[Chain Input]\n```\n\n文档处理模块与 LangChain 其他核心组件的协作：\n\n| 组件 | 集成方式 |\n|------|----------|\n| **Embeddings** | 分块后的文本块传递给嵌入模型生成向量 |\n| **Vector Store** | 嵌入向量存储到向量数据库 |\n| **Retrieval** | 向量检索用于问答系统的上下文增强 |\n| **Chain** | 文档内容作为 LLM Chain 的输入 |\n\n## 最佳实践\n\n### 1. 选择合适的分块大小\n\n| 使用场景 | 推荐 chunk_size | 说明 |\n|----------|-----------------|------|\n| 问答系统 | 500-1000 | 短块提高检索精度 |\n| 摘要生成 | 2000-4000 | 足够上下文生成准确摘要 |\n| 对话系统 | 1000-2000 | 平衡上下文和相关性 |\n\n### 2. 合理设置重叠\n\n- **chunk_overlap** 应设置为 **chunk_size 的 10-20%**\n- 足够的重叠确保跨块边界的语义连续性\n\n### 3. 处理特殊格式\n\n对于结构化文档（PDF、Word），优先使用专用加载器以保留布局和元信息：\n\n```python\n# PDF 加载（保留页码）\nfrom langchain_core.document_loaders import PyPDFLoader\n\nloader = PyPDFLoader(\"document.pdf\")\npages = loader.load_and_split()  # 每页返回一个 Document\n```\n\n## 扩展自定义加载器\n\n```python\nfrom langchain_core.document_loaders import BaseLoader\nfrom langchain_core.documents import Document\nfrom typing import Iterator\n\nclass CustomLoader(BaseLoader):\n    \"\"\"自定义文档加载器\"\"\"\n    \n    def __init__(self, file_path: str):\n        self.file_path = file_path\n    \n    def lazy_load(self) -> Iterator[Document]:\n        \"\"\"实现懒加载逻辑\"\"\"\n        with open(self.file_path, 'r', encoding='utf-8') as f:\n            content = f.read()\n        \n        yield Document(\n            page_content=content,\n            metadata={\"source\": self.file_path}\n        )\n    \n    async def alazy_load(self) -> AsyncIterator[Document]:\n        \"\"\"实现异步懒加载\"\"\"\n        content = await self._async_read()\n        yield Document(\n            page_content=content,\n            metadata={\"source\": self.file_path}\n        )\n```\n\n## 相关资源\n\n| 资源类型 | 链接 |\n|----------|------|\n| API 文档 | [LangChain Core Document Loaders](https://reference.langchain.com/python/langchain_core/document_loaders) |\n| 使用指南 | [LangChain Docs - Document Loaders](https://docs.langchain.com/oss/python/integrations/providers/huggingface) |\n| GitHub 仓库 | [langchain-ai/langchain](https://github.com/langchain-ai/langchain) |\n\n---\n\n<a id='page-memory'></a>\n\n## 内存与状态管理\n\n### 相关页面\n\n相关主题：[文档加载与处理](#page-document-loaders), [Agent代理系统](#page-agents)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/langchain/langchain_classic/memory/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/__init__.py)\n- [libs/langchain/langchain_classic/memory/buffer.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/buffer.py)\n- [libs/langchain/langchain_classic/memory/summary.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/summary.py)\n- [libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py)\n- [libs/langchain/langchain_classic/memory/vectorstore.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/vectorstore.py)\n- [libs/langchain/langchain_classic/chains/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/base.py)\n</details>\n\n# 内存与状态管理\n\n## 概述\n\n在 LangChain 框架中，**内存与状态管理**是构建上下文感知（context-aware）应用的核心能力。内存模块负责在多轮对话或复杂任务执行过程中持久化、检索和管理交互历史，使大型语言模型（LLM）能够访问先前的上下文信息，从而生成连贯且符合上下文的响应。\n\nLangChain 的内存系统被设计为可插拔（pluggable）架构，允许开发者根据不同的应用场景选择或自定义合适的内存实现方案。这些方案涵盖从简单的缓冲区存储到复杂的向量检索等多种策略。\n\n## 核心架构\n\n### 系统组件关系\n\nLangChain 的内存系统主要由以下几个核心组件构成，它们之间通过标准化接口进行交互：\n\n```mermaid\ngraph TD\n    A[用户交互 / Chain 执行] --> B[Memory 模块]\n    B --> C[缓冲区内存<br/>BufferMemory]\n    B --> D[摘要内存<br/>SummaryMemory]\n    B --> E[向量存储内存<br/>VectorStoreMemory]\n    B --> F[聊天消息历史<br/>ChatMessageHistory]\n    \n    C --> G[BaseMemory 接口]\n    D --> G\n    E --> G\n    F --> G\n    \n    G --> H[Chain 上下文]\n    G --> I[LLM 上下文窗口]\n```\n\n### 内存类型分类\n\nLangChain 内存模块支持多种内存实现，以满足不同场景的需求：\n\n| 内存类型 | 用途描述 | 适用场景 |\n|---------|---------|---------|\n| `BufferMemory` | 简单缓冲区存储原始消息 | 短对话、测试环境 |\n| `SummaryMemory` | 自动生成对话摘要 | 长对话、资源受限环境 |\n| `VectorStoreMemory` | 使用向量数据库存储和检索 | 大规模历史检索、语义搜索 |\n| `ChatMessageHistory` | 管理聊天消息的生命周期 | 独立的消息历史管理 |\n| `CombinedMemory` | 组合多种内存策略 | 复杂应用、需要多种检索方式 |\n\n资料来源：[libs/langchain/langchain_classic/memory/__init__.py]()\n\n## 缓冲区内存（BufferMemory）\n\n### 功能说明\n\n缓冲区内存是 LangChain 中最简单的内存实现，它按顺序存储所有对话消息，并在需要时将完整的历史记录传递给下游组件。这种方式保留了所有交互细节，但会随着对话长度增加而消耗更多令牌（token）。\n\n### 核心实现\n\n```python\nclass BufferMemory(BaseMemory):\n    \"\"\"简单的缓冲区内存实现\"\"\"\n    \n    chat_memory: ChatMessageHistory = Field(default_factory=ChatMessageHistory)\n    output_key: Optional[str] = None\n    input_key: Optional[str] = None\n    return_messages: bool = False\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/buffer.py]()\n\n### 消息缓冲机制\n\n缓冲区内存通过 `ChatMessageHistory` 管理消息的添加和检索。消息被组织为一系列 `HumanMessage` 和 `AIMessage` 对象，按时间顺序排列。\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant M as BufferMemory\n    participant H as ChatMessageHistory\n    \n    U->>M: 添加用户消息\n    M->>H: store_message(content, type=\"human\")\n    H-->>M: 确认存储\n    \n    U->>M: 添加AI响应\n    M->>H: store_message(content, type=\"ai\")\n    H-->>M: 确认存储\n    \n    M->>H: load_memory_variables()\n    H-->>M: 返回完整消息历史\n    M-->>U: 传递给Chain/LLM\n```\n\n### 使用示例\n\n```python\nfrom langchain.memory import BufferMemory\nfrom langchain.chains import ConversationChain\n\nmemory = BufferMemory(\n    return_messages=True,\n    output_key=\"response\",\n    input_key=\"input\"\n)\n\nchain = ConversationChain(\n    llm=llm,\n    memory=memory,\n    verbose=True\n)\n\n# 多轮对话\nchain.invoke({\"input\": \"我叫张三\"})\nchain.invoke({\"input\": \"我叫什么名字？\"})  # 能够记住之前的信息\n```\n\n## 摘要内存（SummaryMemory）\n\n### 设计目的\n\n摘要内存在处理长对话时更为高效，它不会存储每一条原始消息，而是维护一个不断更新的对话摘要。这种设计显著减少了令牌消耗，同时保留了对话的核心信息。\n\n### 工作原理\n\n摘要内存采用增量更新策略：每当收到新消息时，系统会调用 LLM 分析当前对话历史并生成更新的摘要。这个摘要替换了原有的历史记录，成为新的上下文基础。\n\n```mermaid\ngraph LR\n    A[新消息到达] --> B{对话历史为空？}\n    B -->|是| C[生成初始摘要]\n    B -->|否| D[加载当前摘要]\n    D --> E[分析新旧内容]\n    E --> F[生成更新摘要]\n    C --> G[存储摘要]\n    F --> G\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/summary.py]()\n\n### 配置参数\n\n| 参数名 | 类型 | 默认值 | 说明 |\n|-------|------|--------|------|\n| `chat_memory` | ChatMessageHistory | 自动创建 | 消息存储后端 |\n| `memory_key` | str | \"history\" | 变量名，用于模板 |\n| `output_key` | Optional[str] | None | 输出提取键 |\n| `input_key` | Optional[str] | None | 输入提取键 |\n| `return_messages` | bool | False | 是否返回消息对象 |\n| `summary_message_num` | int | 1 | 摘要生成触发消息数 |\n\n## 聊天消息历史（ChatMessageHistory）\n\n### 架构角色\n\n`ChatMessageHistory` 是 LangChain 内存系统的核心数据层，负责管理消息的持久化存储和检索。它作为一个抽象层，支持多种后端存储实现。\n\n```mermaid\nclassDiagram\n    class BaseChatMessageHistory {\n        <<abstract>>\n        +messages: List[BaseMessage]\n        +add_user_message()*\n        +add_ai_message()*\n        +clear()*\n    }\n    \n    class ChatMessageHistory {\n        +add_user_message()\n        +add_ai_message()\n        +add_message()\n        +clear()\n        +get_messages()\n    }\n    \n    class FileChatMessageHistory {\n        +add_user_message()\n        +add_ai_message()\n        +clear()\n        +get_messages()\n    }\n    \n    class RedisChatMessageHistory {\n        +add_user_message()\n        +add_ai_message()\n        +clear()\n        +get_messages()\n    }\n    \n    BaseChatMessageHistory <|-- ChatMessageHistory\n    BaseChatMessageHistory <|-- FileChatMessageHistory\n    BaseChatMessageHistory <|-- RedisChatMessageHistory\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py]()\n\n### 消息类型\n\n系统支持多种消息类型以适应不同的交互模式：\n\n| 消息类型 | 标识符 | 用途 |\n|---------|-------|------|\n| `HumanMessage` | human | 用户输入消息 |\n| `AIMessage` | ai | AI 生成的响应 |\n| `SystemMessage` | system | 系统级指令 |\n| `FunctionMessage` | function | 函数调用结果 |\n| `ToolMessage` | tool | 工具执行结果 |\n\n## 向量存储内存（VectorStoreMemory）\n\n### 语义检索能力\n\n向量存储内存利用嵌入（embedding）技术将对话内容转换为高维向量，然后存储在向量数据库中。这种方法支持语义相似性搜索，允许系统根据含义而非精确关键词来检索相关历史。\n\n```mermaid\ngraph TD\n    A[对话消息] --> B[Embedding 模型]\n    B --> C[向量表示]\n    C --> D[向量数据库存储]\n    \n    E[查询请求] --> F[查询 Embedding]\n    F --> G[向量相似度搜索]\n    D --> G\n    G --> H[检索相关历史]\n    H --> I[返回上下文片段]\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/vectorstore.py]()\n\n### 配置选项\n\n| 参数 | 类型 | 说明 |\n|-----|------|------|\n| `vectorstore` | VectorStore | 向量存储后端实例 |\n| `memory_key` | str | 内存变量标识 |\n| `input_key` | Optional[str] | 输入键 |\n| `search_kwargs` | dict | 搜索参数（如 k 值） |\n| `embedding` | Optional[Embedding] | 嵌入模型 |\n\n## 与 Chain 的集成\n\n### 数据流处理\n\nLangChain 的 Chain（链）是内存系统的主要消费者。Chain 通过标准化的内存接口与各种内存实现进行交互：\n\n```mermaid\ngraph LR\n    A[用户输入] --> B[Chain.input_keys]\n    B --> C[Memory.load_memory_variables]\n    C --> D[与输入合并]\n    D --> E[LLM 处理]\n    E --> F[Chain.output_keys]\n    \n    G[Memory] --> C\n    H[历史消息] --> G\n    \n    F --> I[Memory.save_context]\n    I --> J[更新内存状态]\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/base.py]()\n\n### 内存绑定机制\n\n在创建 Chain 实例时，通过 `memory` 参数将内存模块绑定到 Chain：\n\n```python\nfrom langchain.chains import LLMChain\nfrom langchain.memory import ConversationBufferMemory\n\n# 创建内存实例\nmemory = ConversationBufferMemory(\n    memory_key=\"chat_history\",\n    return_messages=True\n)\n\n# 创建链并绑定内存\nchain = LLMChain(\n    llm=llm,\n    prompt=prompt,\n    memory=memory\n)\n```\n\n## 最佳实践\n\n### 场景选择指南\n\n| 应用场景 | 推荐内存类型 | 原因 |\n|---------|-------------|------|\n| 简短测试/演示 | BufferMemory | 实现简单、易于调试 |\n| 长对话、有限上下文 | SummaryMemory | 节省令牌、保留关键信息 |\n| 需要语义检索 | VectorStoreMemory | 支持模糊匹配、智能召回 |\n| 持久化需求 | 配合 Redis/File 等后端 | 跨会话保持状态 |\n| 复杂企业应用 | CombinedMemory | 组合多种策略 |\n\n### 性能优化建议\n\n1. **消息分页**：对于超长对话，实施基于时间或数量的消息分页策略\n2. **异步处理**：使用异步内存实现提高 I/O 密集型操作的吞吐量\n3. **缓存策略**：对频繁访问的摘要结果实施缓存\n4. **后端选择**：根据数据量选择合适的存储后端（内存/文件/数据库/向量库）\n\n### 安全考量\n\n在生产环境中部署内存系统时，应注意以下安全要点：\n\n- **数据隔离**：确保不同用户/会话的内存数据严格隔离\n- **敏感信息处理**：对包含敏感内容的对话实施适当的脱敏或加密\n- **访问控制**：限制对历史消息的读取和修改权限\n- **数据清理**：定期清理不再需要的会话历史，遵守数据保留政策\n\n## 扩展与自定义\n\n### 自定义内存实现\n\n开发者可以通过继承 `BaseMemory` 类来创建自定义内存实现：\n\n```python\nfrom langchain.memory import BaseMemory\nfrom langchain.schema import BaseMessage\n\nclass CustomMemory(BaseMemory):\n    \"\"\"自定义内存实现示例\"\"\"\n    \n    memory_key: str = \"custom_history\"\n    \n    @property\n    def memory_variables(self) -> List[str]:\n        return [self.memory_key]\n    \n    def load_memory_variables(\n        self, inputs: Dict[str, Any]\n    ) -> Dict[str, Any]:\n        # 自定义加载逻辑\n        return {self.memory_key: []}\n    \n    def save_context(\n        self, inputs: Dict[str, Any], outputs: Dict[str, str]\n    ) -> None:\n        # 自定义保存逻辑\n        pass\n    \n    def clear(self) -> None:\n        # 自定义清理逻辑\n        pass\n```\n\n### 与外部系统集成\n\nLangChain 内存系统支持与多种外部系统集成，以实现更强大的状态管理能力：\n\n| 外部系统 | 集成方式 | 典型用途 |\n|---------|---------|---------|\n| Redis | `RedisChatMessageHistory` | 分布式环境、缓存 |\n| MongoDB | `MongoDBChatMessageHistory` | 文档存储、灵活性 |\n| PostgreSQL | 数据库后端 | 企业级持久化 |\n| Elasticsearch | 向量搜索 | 高级检索能力 |\n\n## 总结\n\nLangChain 的内存与状态管理系统为构建上下文感知的 LLM 应用提供了强大而灵活的基础设施。通过模块化的设计和丰富的内置实现，开发者可以轻松选择或组合适合特定场景的内存策略。从简单的缓冲区到复杂的向量检索，系统提供了全面的解决方案来管理对话状态和历史信息。\n\n核心优势包括：\n\n- **统一接口**：所有内存类型遵循 `BaseMemory` 接口，便于替换和扩展\n- **多种策略**：支持缓冲、摘要、向量检索等多种内存管理策略\n- **持久化支持**：可与多种存储后端集成，满足生产环境需求\n- **无缝集成**：与 Chain、Agent 等组件深度集成，开箱即用\n\n---\n\n<a id='page-chat-models'></a>\n\n## Chat模型与LLM集成\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture), [LangChain概述](#page-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/partners/openai/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/anthropic/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/huggingface/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/langchain/langchain_classic/chains/api/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n- [libs/partners/ollama/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n- [README.md](https://github.com/langchain-ai/langchain/blob/main/README.md)\n</details>\n\n# Chat模型与LLM集成\n\nLangChain 是一个用于构建 LLM 驱动应用的框架，它提供了模块化和可互操作的组件架构。Chat 模型与 LLM 集成是 LangChain 生态系统中的核心功能模块，提供了与各种大语言模型提供商的标准化接口。\n\n## 概述\n\nLangChain 的 Chat 模型与 LLM 集成系统为开发者提供了统一的方式来接入不同提供商的大语言模型服务。该系统基于 `langchain-core` 库构建的核心抽象层，通过合作伙伴包（Partner Packages）的形式支持多种 LLM 提供商。\n\n## 核心架构\n\n### 集成包结构\n\nLangChain 采用模块化的包结构组织其 LLM 集成：\n\n| 包名称 | 用途 | 核心功能 |\n|--------|------|----------|\n| `langchain-openai` | OpenAI 模型集成 | GPT-4o、GPT-4 等模型调用 |\n| `langchain-anthropic` | Anthropic 模型集成 | Claude 系列模型调用 |\n| `langchain-huggingface` | HuggingFace 集成 | 本地推理和嵌入模型 |\n| `langchain-ollama` | Ollama 本地模型 | 本地部署的开源模型 |\n| `langchain-groq` | Groq 加速推理 | 高速 LLM 推理服务 |\n| `langchain-deepseek` | DeepSeek 模型 | 深度求索模型集成 |\n| `langchain-fireworks` | Fireworks.ai | 高性能推理平台 |\n\n### 类层次结构\n\nLangChain 的 LLM 集成采用分层设计：\n\n```\nBaseLanguageModel (langchain-core)\n    ├── BaseChatModel\n    │   ├── ChatOpenAI (langchain-openai)\n    │   ├── ChatAnthropic (langchain-anthropic)\n    │   └── ...\n    └── BaseLLM\n        ├── OpenAI (langchain-openai)\n        └── ...\n```\n\n资料来源：[README.md:31-36]()\n\n## 快速开始\n\n### 基础安装\n\n使用 pip 安装 LangChain 主包：\n\n```bash\npip install langchain\n```\n\n### 初始化 Chat 模型\n\nLangChain 提供了统一的模型初始化接口：\n\n```python\nfrom langchain.chat_models import init_chat_model\n\nmodel = init_chat_model(\"openai:gpt-5.4\")\nresult = model.invoke(\"Hello, world!\")\n```\n\n资料来源：[README.md:31-36]()\n\n### OpenAI 集成\n\n安装 langchain-openai 包：\n\n```bash\npip install langchain-openai\n```\n\n该包包含与 OpenAI GPT 模型交互的 LangChain 集成，提供对 GPT-4o、GPT-4 等模型的支持。\n\n资料来源：[libs/partners/openai/README.md:1-20]()\n\n### Anthropic 集成\n\n安装 langchain-anthropic 包：\n\n```bash\npip install langchain-anthropic\n```\n\n该包提供与 Anthropic Claude 模型的集成功能，支持通过 LangChain 框架调用 Claude 系列生成模型。\n\n资料来源：[libs/partners/anthropic/README.md:1-18]()\n\n### HuggingFace 集成\n\n基础安装：\n\n```bash\npip install langchain-huggingface\n```\n\n如果需要使用 `HuggingFaceEmbeddings` 或 `HuggingFacePipeline` 进行本地推理，应安装完整版本：\n\n```bash\npip install langchain-huggingface[full]\n```\n\n> **注意**：基础安装不包含 `sentence-transformers` 或 `transformers`。`[full]` 版本包含 `sentence-transformers>=5.2.0` 和 `transformers>=5.0.0`。\n\n> **迁移提示**：从 `langchain-community` 迁移的用户需要注意，旧版接受 `sentence-transformers>=2.2.0`，但 `langchain-huggingface[full]` 要求 `>=5.2.0`。\n\n资料来源：[libs/partners/huggingface/README.md:1-25]()\n\n### Ollama 本地模型\n\n安装 langchain-ollama 包：\n\n```bash\npip install langchain-ollama\n```\n\n该包提供与 Ollama 的集成，支持本地部署的开源大语言模型。\n\n资料来源：[libs/partners/ollama/README.md:1-18]()\n\n## APIChain 与工具调用\n\n### Chain 架构\n\nAPIChain 是 LangChain Classic 中的一个重要组件，它实现了调用 API 并总结响应以回答问题的功能。该链使用请求工具包发送 GET、POST、PATCH、PUT 和 DELETE 请求。\n\n```python\nmodel = ChatOpenAI(model=\"gpt-4o-mini\", temperature=0)\ntoolkit = RequestsToolkit(\n    requests_wrapper=TextRequestsWrapper(headers={}),\n    allow_dangerous_requests=ALLOW_DANGEROUS_REQUESTS,\n)\ntools = toolkit.get_tools()\n\napi_request_chain = (\n    API_URL_PROMPT.partial(api_docs=api_spec)\n    | model.bind_tools(tools, tool_choice=\"any\")\n)\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:1-85]()\n\n### 状态管理\n\nLangChain 使用 LangGraph 进行状态管理：\n\n```python\nclass ChainState(TypedDict):\n    \"\"\"LangGraph state.\"\"\"\n    messages: Annotated[Sequence[BaseMessage], add_messages]\n```\n\n### 工作流图\n\n```mermaid\ngraph TD\n    A[用户问题] --> B[call_tool]\n    B --> C[execute_tool]\n    C --> D[call_model]\n    D --> E[返回结果]\n    \n    B -->|API调用| F[RequestsToolkit]\n    C -->|执行工具| G[HTTP请求]\n    D -->|LLM处理| H[ChatOpenAI]\n```\n\n## 安全性考虑\n\nAPIChain 包含重要的安全警告：\n\n> **安全注意**：此 API 链使用请求工具包向 API 发出 GET、POST、PATCH、PUT 和 DELETE 请求。\n>\n> 请谨慎控制允许使用此链的人员。如果向最终用户公开，用户将能够代表托管代码的服务器发出任意请求。例如，用户可以请求服务器向只能从服务器访问的私有 API 发出请求。\n>\n> 请控制对此工具包的使用权限和网络访问权限。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:85-100]()\n\n## 领域限制\n\n### URL 验证机制\n\nLangChain 提供了 URL 域限制功能，防止恶意请求：\n\n```python\ndef _extract_scheme_and_domain(url: str) -> tuple[str, str]:\n    \"\"\"Extract the scheme + domain from a given URL.\"\"\"\n    parsed_uri = urlparse(url)\n    return parsed_uri.scheme, parsed_uri.netloc\n\ndef _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:\n    \"\"\"Check if a URL is in the allowed domains.\"\"\"\n    scheme, domain = _extract_scheme_and_domain(url)\n    \n    for allowed_domain in limit_to_domains:\n        allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)\n        if scheme == allowed_scheme and domain == allowed_domain_:\n            return True\n    return False\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:30-60]()\n\n## 弃用与迁移\n\nLangChain Classic 中的某些组件已被标记为弃用：\n\n```python\n@deprecated(\n    since=\"0.2.13\",\n    removal=\"2.0.0\",\n    alternative=\"langchain.agents.create_agent\",\n    addendum=(\n        \"Build new agents with `create_agent` and bind a tool that issues \"\n        \"the HTTP request.\"\n    ),\n)\nclass APIChain(Chain):\n    \"\"\"Chain that makes API calls...\"\"\"\n```\n\n推荐使用新的 `langchain.agents.create_agent` 方法构建代理。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:60-85]()\n\n## 更多提供商\n\nLangChain 生态系统还支持众多其他 LLM 提供商：\n\n| 提供商 | 包名 | 特点 |\n|--------|------|------|\n| DeepSeek | `langchain-deepseek` | 深度求索模型 |\n| xAI | `langchain-xai` | xAI 官方集成 |\n| Perplexity | `langchain-perplexity` | Perplexity AI |\n| Fireworks | `langchain-fireworks` | 高性能推理 |\n| OpenRouter | `langchain-openrouter` | 统一 API 支持数百模型 |\n| Exa | `langchain-exa` | Web 搜索 API |\n\n## 文档资源\n\n| 资源类型 | 链接 |\n|----------|------|\n| API 参考 | [reference.langchain.com](https://reference.langchain.com/python/langchain_classic) |\n| 概念指南 | [docs.langchain.com](https://docs.langchain.com/oss/python/langchain/overview) |\n| 发布策略 | [docs.langchain.com](https://docs.langchain.com/oss/python/release-policy) |\n| 版本控制 | [docs.langchain.com](https://docs.langchain.com/oss/python/versioning) |\n| 贡献指南 | [docs.langchain.com](https://docs.langchain.com/oss/python/contributing/overview) |\n\n资料来源：[libs/langchain/README.md:1-20]()\n资料来源：[libs/partners/openai/README.md:1-20]()\n\n## 相关链接\n\n- **LangGraph**：用于构建可控代理工作流的框架 - [docs.langchain.com/langgraph](https://docs.langchain.com/oss/python/langgraph/overview)\n- **LangSmith**：用于开发、调试和部署 AI 代理的工具 - [docs.langchain.com/langsmith](https://docs.langchain.com/langsmith/home)\n- **Deep Agents**：基于 LangChain 的高级代理包 - [docs.langchain.com/deepagents](http://docs.langchain.com/oss/python/deepagents/)\n- **LangChain.js**：等效的 JavaScript/TypeScript 库 - [github.com/langchain-ai/langchainjs](https://github.com/langchain-ai/langchainjs)\n\n---\n\n<a id='page-callbacks-tracing'></a>\n\n## 回调与追踪系统\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/tracers/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tracers/__init__.py)\n- [libs/core/langchain_core/tracers/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tracers/base.py)\n- [libs/core/langchain_core/tracers/event_stream.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tracers/event_stream.py)\n- [libs/core/langchain_core/callbacks/manager.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/callbacks/manager.py)\n</details>\n\n# 回调与追踪系统\n\n## 概述\n\nLangChain 的回调与追踪系统是框架的核心基础设施之一，为 LangChain 组件提供了一套统一的生命周期事件通知和执行追踪机制。该系统使开发者能够在 LangChain 运行期间捕获关键事件、监控执行流程、收集性能指标，并实现自定义的日志记录和监控功能。\n\n回调与追踪系统的主要职责包括：\n\n- **事件传播**：在 Chain、LLM、Tool、Agent 等核心组件的生命周期关键时刻触发回调\n- **执行追踪**：记录组件的输入、输出、执行时间和中间状态\n- **异步支持**：提供异步和同步两种回调处理模式\n- **上下文传递**：通过回调管理器维护和传递调用上下文\n\n资料来源：[libs/core/langchain_core/tracers/__init__.py:1-50]()\n\n## 系统架构\n\n### 核心组件关系\n\nLangChain 的回调与追踪系统由以下几个核心组件构成，它们之间形成清晰的层次结构：\n\n```mermaid\ngraph TD\n    A[CallbackHandler 回调处理器] --> B[BaseCallbackManager 基础回调管理器]\n    A --> C[Tracer 追踪器]\n    C --> D[BaseTracer 基础追踪器]\n    C --> E[EventStreamTracer 事件流追踪器]\n    B --> F[CallbackManager 同步回调管理器]\n    B --> G[AsyncCallbackManager 异步回调管理器]\n    H[Run 运行时对象] --> C\n```\n\n### 组件职责\n\n| 组件类型 | 职责描述 | 位置 |\n|---------|---------|------|\n| CallbackHandler | 定义回调方法接口 | langchain_core.callbacks |\n| Tracer | 追踪器基类，生成 Run 对象 | langchain_core.tracers |\n| CallbackManager | 管理同步回调的执行 | langchain_core.callbacks.manager |\n| AsyncCallbackManager | 管理异步回调的执行 | langchain_core.callbacks.manager |\n| Run | 代表一次执行追踪的运行时对象 | langchain_core.tracers.base |\n\n资料来源：[libs/core/langchain_core/tracers/base.py:1-100]()\n\n## 回调处理器\n\n### CallbackHandler 接口\n\nCallbackHandler 是所有回调处理器的基类接口，定义了组件生命周期中可能被触发的方法。处理器可以继承此接口并选择性重写特定方法来实现自定义行为。\n\n```python\nclass CallbackHandler:\n    \"\"\"回调处理器基类接口\"\"\"\n    \n    def on_llm_start(self, **kwargs) -> None:\n        \"\"\"LLM 调用开始时触发\"\"\"\n        pass\n    \n    def on_llm_end(self, **kwargs) -> None:\n        \"\"\"LLM 调用结束时触发\"\"\"\n        pass\n    \n    def on_chain_start(self, **kwargs) -> None:\n        \"\"\"Chain 执行开始时触发\"\"\"\n        pass\n    \n    def on_chain_end(self, **kwargs) -> None:\n        \"\"\"Chain 执行结束时触发\"\"\"\n        pass\n    \n    def on_tool_start(self, **kwargs) -> None:\n        \"\"\"Tool 调用开始时触发\"\"\"\n        pass\n    \n    def on_tool_end(self, **kwargs) -> None:\n        \"\"\"Tool 调用结束时触发\"\"\"\n        pass\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:1-80]()\n\n### 内置回调处理器\n\nLangChain 提供了多种内置回调处理器，适用于不同的监控和日志需求：\n\n| 处理器名称 | 用途 | 关键功能 |\n|-----------|------|---------|\n| StdOutCallbackHandler | 标准输出日志 | 在控制台打印执行信息 |\n| TracingCallbackHandler | 分布式追踪 | 集成第三方追踪系统 |\n| LangChainTracer | LangChain 原生追踪 | 记录 Run 到追踪后端 |\n| FileCallbackHandler | 文件日志 | 写入日志到文件 |\n\n## 追踪器系统\n\n### Tracer 抽象基类\n\nTracer 是专门用于创建和记录 Run 对象的组件。每个 Run 代表一次被追踪的执行单元，包含执行过程中的元数据、输入输出等信息。\n\n```mermaid\ngraph LR\n    A[开始追踪] --> B[创建 Run 对象]\n    B --> C[记录事件]\n    C --> D{事件类型}\n    D -->|start| E[on_run_start]\n    D -->|end| F[on_run_end]\n    D -->|error| G[on_run_error]\n    E --> H[更新 Run 状态]\n    F --> H\n    G --> H\n    H --> I[持久化或发送]\n```\n\n资料来源：[libs/core/langchain_core/tracers/base.py:1-150]()\n\n### BaseTracer 实现\n\nBaseTracer 提供了 Tracer 接口的基础实现，处理 Run 对象的创建和状态管理：\n\n```python\nclass BaseTracer(BaseCallbackHandler, ABC):\n    \"\"\"追踪器基类实现\"\"\"\n    \n    def __init__(self):\n        self.run_dict: dict[str, Run] = {}\n        self._active_runs: set[str] = set()\n    \n    @abstractmethod\n    def _generate_run_id(self) -> str:\n        \"\"\"生成唯一的 Run 标识符\"\"\"\n        pass\n```\n\n资料来源：[libs/core/langchain_core/tracers/base.py:50-100]()\n\n### EventStreamTracer 事件流追踪器\n\nEventStreamTracer 是一种特殊的追踪器实现，它通过事件流的方式持续输出追踪事件，适用于需要实时监控的场景：\n\n```mermaid\ngraph TD\n    A[执行组件] --> B[EventStreamTracer]\n    B --> C[事件序列化器]\n    C --> D[事件缓冲区]\n    D --> E[流式输出]\n    E --> F[消费者/监控仪表盘]\n```\n\n资料来源：[libs/core/langchain_core/tracers/event_stream.py:1-100]()\n\nEventStreamTracer 的核心特性包括：\n\n- **流式输出**：实时将事件推送至消费者\n- **事件缓冲**：批量处理事件以优化性能\n- **序列化支持**：将 Run 对象转换为可传输格式\n\n## 回调管理器\n\n### CallbackManager\n\nCallbackManager 是同步回调执行的管理器，负责注册、调用和清理回调处理器：\n\n```mermaid\ngraph TD\n    A[请求进入] --> B[CallbackManager]\n    B --> C[遍历已注册处理器]\n    C --> D{按顺序触发方法}\n    D --> E[on_chain_start]\n    D --> F[on_llm_start]\n    D --> G[on_tool_start]\n    E --> H[执行组件逻辑]\n    H --> I[on_chain_end]\n    I --> J[on_llm_end]\n    J --> K[on_tool_end]\n    K --> L[返回结果]\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:100-200]()\n\n### 回调管理器核心方法\n\n| 方法名 | 参数 | 返回类型 | 功能描述 |\n|--------|------|---------|---------|\n| add_handler | handler, name | None | 注册新的回调处理器 |\n| remove_handler | name | None | 移除指定名称的处理器 |\n| set_handlers | handlers | None | 替换所有已注册的处理器 |\n| clear | None | None | 清空所有处理器 |\n| get_handler | name | CallbackHandler | 根据名称获取处理器 |\n\n### 异步回调管理\n\nAsyncCallbackManager 提供与 CallbackManager 类似的功能，但专门用于异步执行环境：\n\n```python\nclass AsyncCallbackManager(BaseCallbackManager):\n    \"\"\"异步回调管理器\"\"\"\n    \n    async def ahandle_chain_start(\n        self,\n        name: str,\n        serialized: dict[str, Any],\n        inputs: dict[str, Any],\n        run_id: UUID,\n        parent_run_id: UUID | None = None,\n        **kwargs: Any,\n    ) -> AsyncManagerGetResults:\n        \"\"\"异步处理 Chain 开始事件\"\"\"\n        pass\n    \n    async def ahandle_chain_end(\n        self,\n        outputs: dict[str, Any],\n        run_id: UUID,\n        **kwargs: Any,\n    ) -> None:\n        \"\"\"异步处理 Chain 结束事件\"\"\"\n        pass\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:200-300]()\n\n## Run 对象模型\n\n### Run 数据结构\n\nRun 是追踪系统的核心数据模型，代表一次可追踪的执行单元：\n\n```mermaid\nclassDiagram\n    class Run {\n        +str id\n        +str name\n        +str session_id\n        +str run_type\n        +dict~str, Any~ inputs\n        +dict~str, Any~ outputs\n        +datetime start_time\n        +datetime end_time\n        +str|None parent_run_id\n        +dict~str, Any~ extra\n        +str|None error\n    }\n    \n    class ChainRun {\n        +str run_type = \"chain\"\n    }\n    \n    class LLMRun {\n        +str run_type = \"llm\"\n        +int token_usage\n    }\n    \n    class ToolRun {\n        +str run_type = \"tool\"\n    }\n    \n    Run <|-- ChainRun\n    Run <|-- LLMRun\n    Run <|-- ToolRun\n```\n\n### Run 追踪字段\n\n| 字段名 | 类型 | 可选 | 说明 |\n|-------|------|------|------|\n| id | str | 否 | Run 的唯一标识符 |\n| name | str | 否 | Run 的名称 |\n| run_type | str | 否 | Run 类型（chain/llm/tool） |\n| session_id | str | 是 | 所属会话标识 |\n| parent_run_id | str | 是 | 父级 Run 标识 |\n| inputs | dict | 是 | 输入参数 |\n| outputs | dict | 是 | 输出结果 |\n| start_time | datetime | 否 | 开始时间 |\n| end_time | datetime | 是 | 结束时间 |\n| error | str | 是 | 错误信息 |\n\n资料来源：[libs/core/langchain_core/tracers/base.py:100-200]()\n\n## 使用示例\n\n### 基本用法\n\n```python\nfrom langchain_core.callbacks import CallbackManager, StdOutCallbackHandler\nfrom langchain_openai import ChatOpenAI\n\n# 创建回调管理器\ncallback_manager = CallbackManager(handlers=[StdOutCallbackHandler()])\n\n# 创建带回调的 LLM 实例\nllm = ChatOpenAI(\n    model=\"gpt-4\",\n    callback_manager=callback_manager\n)\n\n# 调用时自动触发回调\nresponse = llm.invoke(\"Hello, world!\")\n```\n\n### 自定义回调处理器\n\n```python\nfrom langchain_core.callbacks import BaseCallbackHandler\nfrom langchain_core.tracers.base import BaseTracer\n\nclass CustomTracer(BaseTracer):\n    \"\"\"自定义追踪器\"\"\"\n    \n    def __init__(self):\n        super().__init__()\n        self.events = []\n    \n    def _generate_run_id(self) -> str:\n        return str(uuid.uuid4())\n    \n    def on_chain_start(self, serialized, inputs, **kwargs):\n        self.events.append({\n            \"type\": \"chain_start\",\n            \"inputs\": inputs\n        })\n    \n    def on_chain_end(self, outputs, **kwargs):\n        self.events.append({\n            \"type\": \"chain_end\", \n            \"outputs\": outputs\n        })\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:300-400]()\n\n### 父子 Run 追踪\n\n```python\nfrom langchain_core.callbacks import CallbackManager\n\n# 在嵌套调用中自动维护父子关系\ncallback_manager = CallbackManager(handlers=[tracer])\n\n# 父 Chain\nparent_chain = Chain(callback_manager=callback_manager)\n\n# 子 Chain（自动关联 parent_run_id）\nchild_chain = Chain(callback_manager=callback_manager)\n\nresult = parent_chain.invoke(input, config={\"callbacks\": callback_manager})\n```\n\n## 配置选项\n\n### 全局回调配置\n\n| 配置项 | 类型 | 默认值 | 说明 |\n|-------|------|-------|------|\n| callbacks | CallbackManager | None | 全局回调管理器 |\n| verbose | bool | False | 启用详细输出 |\n| tracing_enabled | bool | True | 启用追踪功能 |\n| tracing_endpoint | str | None | 追踪服务端点 |\n| tracing_headers | dict | None | 追踪请求头 |\n\n### 环境变量\n\n| 变量名 | 值 | 作用 |\n|-------|-----|------|\n| LANGCHAIN_TRACING_V2 | true/false | 启用 V2 追踪 |\n| LANGCHAIN_ENDPOINT | URL | 追踪服务端点 |\n| LANGCHAIN_API_KEY | string | API 认证密钥 |\n| LANGCHAIN_PROJECT | string | 追踪项目名称 |\n\n## 安全注意事项\n\n在 LangChain 的 APIChain 文档中明确指出回调与追踪系统的安全考量：\n\n> **安全注意**：API 链使用 requests 工具包向 API 发起 `GET`、`POST`、`PATCH`、`PUT` 和 `DELETE` 请求。\n> \n> 请谨慎控制谁可以使用此链以及它具有何种网络访问权限。\n> \n> 如果向最终用户公开，请考虑用户将能够代表服务器发起任意请求。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:40-60]()\n\n### 安全最佳实践\n\n- 限制回调中发送的敏感数据范围\n- 在生产环境中使用 HTTPS 传输追踪数据\n- 实施回调数据的访问控制策略\n- 定期审计追踪日志内容\n\n## 生态集成\n\n### 合作伙伴包中的追踪支持\n\n多个 LangChain 合作伙伴包内置了回调与追踪系统支持：\n\n| 集成包 | 追踪支持 | 主要功能 |\n|-------|---------|---------|\n| langchain-openai | ✅ | OpenAI API 调用追踪 |\n| langchain-anthropic | ✅ | Anthropic API 调用追踪 |\n| langchain-huggingface | ✅ | Transformers 本地推理追踪 |\n| langchain-ollama | ✅ | Ollama 本地模型追踪 |\n| langchain-deepseek | ✅ | DeepSeek API 调用追踪 |\n\n资料来源：[libs/partners/openai/README.md](), [libs/partners/anthropic/README.md](), [libs/partners/huggingface/README.md]()\n\n## 总结\n\nLangChain 的回调与追踪系统为框架提供了强大的可观测性和扩展性能力。通过统一的回调接口、灵活的追踪机制和完善的 Run 数据模型，开发者可以轻松实现：\n\n- 执行过程监控和日志记录\n- 性能指标收集和分析\n- 分布式追踪集成\n- 自定义监控和告警系统\n\n该系统设计遵循了模块化原则，允许开发者根据需求选择性地使用回调或追踪功能，或将两者结合使用以获得完整的应用可观测性。\n\n---\n\n---\n\n## Doramagic 踩坑日志\n\n项目：langchain-ai/langchain\n\n摘要：发现 6 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：能力坑 - 能力判断依赖假设。\n\n## 1. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:552661142 | https://github.com/langchain-ai/langchain | README/documentation is current enough for a first validation pass.\n\n## 2. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | last_activity_observed missing\n\n## 3. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n\n## 4. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n\n## 5. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | issue_or_pr_quality=unknown\n\n## 6. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | release_recency=unknown\n\n<!-- canonical_name: langchain-ai/langchain; human_manual_source: deepwiki_human_wiki -->\n",
      "markdown_key": "langchain",
      "pages": "draft",
      "source_refs": [
        {
          "evidence_id": "github_repo:552661142",
          "kind": "repo",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/langchain-ai/langchain"
        },
        {
          "evidence_id": "art_20f7ab635e4c4eab85f60b7ef2f73914",
          "kind": "docs",
          "supports_claim_ids": [
            "claim_identity",
            "claim_distribution",
            "claim_capability"
          ],
          "url": "https://github.com/langchain-ai/langchain#readme"
        }
      ],
      "summary": "DeepWiki/Human Wiki 完整输出，末尾追加 Discovery Agent 踩坑日志。",
      "title": "langchain 说明书",
      "toc": [
        "https://github.com/langchain-ai/langchain 项目说明书",
        "目录",
        "LangChain概述",
        "什么是LangChain？",
        "核心架构",
        "合作伙伴集成生态",
        "快速开始",
        "或使用 uv",
        "Doramagic 踩坑日志"
      ]
    }
  },
  "quality_gate": {
    "blocking_gaps": [],
    "category_confidence": "medium",
    "compile_status": "ready_for_review",
    "five_assets_present": true,
    "install_sandbox_verified": true,
    "missing_evidence": [],
    "next_action": "publish to Doramagic.ai project surfaces",
    "prompt_preview_boundary_ok": true,
    "publish_status": "publishable",
    "quick_start_verified": true,
    "repo_clone_verified": false,
    "repo_commit": null,
    "repo_inspection_error": null,
    "repo_inspection_files": [],
    "repo_inspection_verified": false,
    "review_reasons": [],
    "tag_count_ok": true,
    "unsupported_claims": []
  },
  "schema_version": "0.1",
  "user_assets": {
    "ai_context_pack": {
      "asset_id": "ai_context_pack",
      "filename": "AI_CONTEXT_PACK.md",
      "markdown": "# langchain - Doramagic AI Context Pack\n\n> 定位：给用户宿主 AI 装载的开工前上下文。它不代表已经安装、运行或验证目标项目。\n\n## 项目\n\n- canonical_name: `langchain-ai/langchain`\n- capability: The agent engineering platform. Available in TypeScript!\n- expected_user_outcome: The agent engineering platform. Available in TypeScript!\n\n## 基础边界\n\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 项目事实必须来自 repo evidence、Claim Graph 或明确来源。\n- 遇到未验证能力时，必须标记为待验证，而不是补全为事实。\n- publish_status: `publishable`\n- blocking_gaps: none\n\n---\n\n## Doramagic Context Augmentation\n\n下面内容用于强化 Repomix/AI Context Pack 主体。Human Manual 只提供阅读骨架；踩坑日志会被转成宿主 AI 必须遵守的工作约束。\n\n## Human Manual 骨架\n\n使用规则：这里只是项目阅读路线和显著性信号，不是事实权威。具体事实仍必须回到 repo evidence / Claim Graph。\n\n宿主 AI 硬性规则：\n- 不得把页标题、章节顺序、摘要或 importance 当作项目事实证据。\n- 解释 Human Manual 骨架时，必须明确说它只是阅读路线/显著性信号。\n- 能力、安装、兼容性、运行状态和风险判断必须引用 repo evidence、source path 或 Claim Graph。\n\n- **LangChain概述**：importance `high`\n  - source_paths: README.md, libs/core/langchain_core/__init__.py, libs/langchain/langchain_classic/__init__.py\n- **核心架构与组件**：importance `high`\n  - source_paths: libs/core/langchain_core/messages/__init__.py, libs/core/langchain_core/output_parsers/__init__.py, libs/core/langchain_core/prompts/__init__.py, libs/core/langchain_core/callbacks/base.py\n- **Runnable与链式调用**：importance `high`\n  - source_paths: libs/core/langchain_core/runnables/base.py, libs/core/langchain_core/runnables/config.py, libs/core/langchain_core/runnables/branch.py, libs/core/langchain_core/runnables/retry.py\n- **Agent代理系统**：importance `high`\n  - source_paths: libs/langchain/langchain_classic/agents/agent.py, libs/langchain/langchain_classic/agents/react/agent.py, libs/langchain/langchain_classic/agents/openai_functions_agent/base.py, libs/langchain/langchain_classic/agents/structured_chat/base.py\n- **工具与工具包**：importance `high`\n  - source_paths: libs/core/langchain_core/tools/base.py, libs/core/langchain_core/tools/structured.py, libs/langchain/langchain_classic/tools/base.py, libs/langchain/langchain_classic/agents/agent_toolkits/sql/toolkit.py\n- **向量存储与检索**：importance `high`\n  - source_paths: libs/core/langchain_core/vectorstores/base.py, libs/core/langchain_core/embeddings/embeddings.py, libs/langchain/langchain_classic/retrievers/__init__.py, libs/langchain/langchain_classic/retrievers/self_query/base.py\n- **文档加载与处理**：importance `medium`\n  - source_paths: libs/core/langchain_core/document_loaders/base.py, libs/langchain/langchain_classic/document_loaders/base.py, libs/langchain/langchain_classic/document_loaders/parsers/registry.py, libs/text-splitters/langchain_text_splitters/base.py\n- **内存与状态管理**：importance `medium`\n  - source_paths: libs/langchain/langchain_classic/memory/__init__.py, libs/langchain/langchain_classic/memory/buffer.py, libs/langchain/langchain_classic/memory/summary.py, libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py\n\n## Repo Inspection Evidence / 源码检查证据\n\n- repo_clone_verified: false\n- repo_inspection_verified: false\n- repo_commit: `unknown`\n\n宿主 AI 硬性规则：\n- 没有 repo_clone_verified=true 时，不得声称已经读过源码。\n- 没有 repo_inspection_verified=true 时，不得把 README/docs/package 文件判断写成事实。\n- 没有 quick_start_verified=true 时，不得声称 Quick Start 已跑通。\n\n## Doramagic Pitfall Constraints / 踩坑约束\n\n这些规则来自 Doramagic 发现、验证或编译过程中的项目专属坑点。宿主 AI 必须把它们当作工作约束，而不是普通说明文字。\n\n### Constraint 1: 能力判断依赖假设\n\n- Trigger: README/documentation is current enough for a first validation pass.\n- Host AI rule: 将假设转成下游验证清单。\n- Why it matters: 假设不成立时，用户拿不到承诺的能力。\n- Evidence: capability.assumptions | github_repo:552661142 | https://github.com/langchain-ai/langchain | README/documentation is current enough for a first validation pass.\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 2: 维护活跃度未知\n\n- Trigger: 未记录 last_activity_observed。\n- Host AI rule: 补 GitHub 最近 commit、release、issue/PR 响应信号。\n- Why it matters: 新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- Evidence: evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | last_activity_observed missing\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 3: 下游验证发现风险项\n\n- Trigger: no_demo\n- Host AI rule: 进入安全/权限治理复核队列。\n- Why it matters: 下游已经要求复核，不能在页面中弱化。\n- Evidence: downstream_validation.risk_items | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 4: 存在评分风险\n\n- Trigger: no_demo\n- Host AI rule: 把风险写入边界卡，并确认是否需要人工复核。\n- Why it matters: 风险会影响是否适合普通用户安装。\n- Evidence: risks.scoring_risks | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 5: issue/PR 响应质量未知\n\n- Trigger: issue_or_pr_quality=unknown。\n- Host AI rule: 抽样最近 issue/PR，判断是否长期无人处理。\n- Why it matters: 用户无法判断遇到问题后是否有人维护。\n- Evidence: evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | issue_or_pr_quality=unknown\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n\n### Constraint 6: 发布节奏不明确\n\n- Trigger: release_recency=unknown。\n- Host AI rule: 确认最近 release/tag 和 README 安装命令是否一致。\n- Why it matters: 安装命令和文档可能落后于代码，用户踩坑概率升高。\n- Evidence: evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | release_recency=unknown\n- Hard boundary: 不要把这个坑点包装成已解决、已验证或可忽略，除非后续验证证据明确证明它已经关闭。\n",
      "summary": "给宿主 AI 的上下文和工作边界。",
      "title": "AI Context Pack / 带给我的 AI"
    },
    "boundary_risk_card": {
      "asset_id": "boundary_risk_card",
      "filename": "BOUNDARY_RISK_CARD.md",
      "markdown": "# Boundary & Risk Card / 安装前决策卡\n\n项目：langchain-ai/langchain\n\n## Doramagic 试用结论\n\n当前结论：可以进入发布前推荐检查；首次使用仍应从最小权限、临时目录和可回滚配置开始。\n\n## 用户现在可以做\n\n- 可以先阅读 Human Manual，理解项目目的和主要工作流。\n- 可以复制 Prompt Preview 做安装前体验；这只验证交互感，不代表真实运行。\n- 可以把官方 Quick Start 命令放到隔离环境中验证，不要直接进主力环境。\n\n## 现在不要做\n\n- 不要把 Prompt Preview 当成项目实际运行结果。\n- 不要把 metadata-only validation 当成沙箱安装验证。\n- 不要把未验证能力写成“已支持、已跑通、可放心安装”。\n- 不要在首次试用时交出生产数据、私人文件、真实密钥或主力配置目录。\n\n## 安装前检查\n\n- 宿主 AI 是否匹配：chatgpt\n- 官方安装入口状态：已发现官方入口\n- 是否在临时目录、临时宿主或容器中验证：必须是\n- 是否能回滚配置改动：必须能\n- 是否需要 API Key、网络访问、读写文件或修改宿主配置：未确认前按高风险处理\n- 是否记录了安装命令、实际输出和失败日志：必须记录\n\n## 当前阻塞项\n\n- 无阻塞项。\n\n## 项目专属踩坑\n\n- 能力判断依赖假设（medium）：假设不成立时，用户拿不到承诺的能力。 建议检查：将假设转成下游验证清单。\n- 维护活跃度未知（medium）：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 下游验证发现风险项（medium）：下游已经要求复核，不能在页面中弱化。 建议检查：进入安全/权限治理复核队列。\n- 存在评分风险（medium）：风险会影响是否适合普通用户安装。 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- issue/PR 响应质量未知（low）：用户无法判断遇到问题后是否有人维护。 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n\n## 风险与权限提示\n\n- no_demo: medium\n\n## 证据缺口\n\n- 暂未发现结构化证据缺口。\n",
      "summary": "安装、权限、验证和推荐前风险。",
      "title": "Boundary & Risk Card / 边界与风险卡"
    },
    "human_manual": {
      "asset_id": "human_manual",
      "filename": "HUMAN_MANUAL.md",
      "markdown": "# https://github.com/langchain-ai/langchain 项目说明书\n\n生成时间：2026-05-10 16:15:16 UTC\n\n## 目录\n\n- [LangChain概述](#page-overview)\n- [核心架构与组件](#page-core-architecture)\n- [Runnable与链式调用](#page-runnable)\n- [Agent代理系统](#page-agents)\n- [工具与工具包](#page-tools)\n- [向量存储与检索](#page-vectorstores)\n- [文档加载与处理](#page-document-loaders)\n- [内存与状态管理](#page-memory)\n- [Chat模型与LLM集成](#page-chat-models)\n- [回调与追踪系统](#page-callbacks-tracing)\n\n<a id='page-overview'></a>\n\n## LangChain概述\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture), [Chat模型与LLM集成](#page-chat-models)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/langchain-ai/langchain/blob/main/README.md)\n- [libs/partners/huggingface/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/partners/anthropic/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/ollama/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n- [libs/partners/openai/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/chroma/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/chroma/README.md)\n</details>\n\n# LangChain概述\n\n## 什么是LangChain？\n\nLangChain是一个用于构建**AI代理（Agents）和LLM驱动应用**的框架。它通过将可互操作的组件与第三方集成串联在一起，简化了AI应用程序的开发过程，同时为底层技术演进提供了前瞻性支持。\n\nLangChain的主要特性包括：\n\n- **灵活抽象层** — 从用于快速起步的高级链（Chains）到用于细粒度控制的低级组件，LangChain可以随着应用程序复杂度的增长而扩展\n- **模块化设计** — 可互换的组件便于定制和扩展\n- **丰富的集成生态** — 支持多种LLM提供商、向量存储、工具和外部服务\n\n资料来源：[README.md:1-25](https://github.com/langchain-ai/langchain/blob/main/README.md)\n\n## 核心架构\n\nLangChain采用模块化架构设计，主要包含以下核心层次：\n\n```mermaid\ngraph TD\n    A[LangChain主框架] --> B[langchain_core 核心库]\n    A --> C[langchain_classic 经典组件库]\n    A --> D[Partner Packages 合作伙伴包]\n    \n    B --> B1[基础抽象层]\n    B --> B2[核心API]\n    B --> B3[回调系统]\n    \n    C --> C1[Chains 链]\n    C --> C2[工具扩展]\n    C --> C3[索引API]\n    \n    D --> D1[OpenAI集成]\n    D --> D2[HuggingFace集成]\n    D --> D3[Anthropic集成]\n    D --> D4[Ollama集成]\n    D --> D5[向量存储集成]\n```\n\n### 核心库 (langchain_core)\n\n`langchain_core`是LangChain的基础库，提供了所有其他组件依赖的核心抽象和接口。\n\n| 模块 | 功能描述 |\n|------|----------|\n| `language_models` | 语言模型基础接口 |\n| `prompts` | 提示词模板抽象 |\n| `callbacks` | 异步/同步回调管理系统 |\n| `tools` | 工具接口定义 |\n\n### 经典组件库 (langchain_classic)\n\n`langchain_classic`包含传统的链式组件、代理逻辑、API调用链等经典功能。\n\n| 组件类型 | 说明 |\n|----------|------|\n| Chains | 可组合的任务执行链 |\n| Agents | AI代理实现 |\n| Tools | 可扩展的工具集 |\n| Deprecated APIs | 已废弃但仍可用的历史接口 |\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:1-30](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n\n## 合作伙伴集成生态\n\nLangChain提供了丰富的**合作伙伴包（Partner Packages）**集成，支持主流AI服务提供商和工具。\n\n### 支持的LLM提供商\n\n| 包名称 | 提供商 | 安装命令 |\n|--------|--------|----------|\n| langchain-openai | OpenAI | `pip install langchain-openai` |\n| langchain-anthropic | Anthropic (Claude) | `pip install langchain-anthropic` |\n| langchain-huggingface | Hugging Face | `pip install langchain-huggingface` |\n| langchain-ollama | Ollama (本地模型) | `pip install langchain-ollama` |\n| langchain-groq | Groq | `pip install langchain-groq` |\n| langchain-deepseek | DeepSeek | `pip install langchain-deepseek` |\n| langchain-perplexity | Perplexity | `pip install langchain-perplexity` |\n| langchain-xai | xAI (Grok) | `pip install langchain-xai` |\n| langchain-openrouter | OpenRouter | `pip install langchain-openrouter` |\n| langchain-fireworks | Fireworks.ai | `pip install langchain-fireworks` |\n\n资料来源：\n- [libs/partners/openai/README.md:1-20](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/anthropic/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/huggingface/README.md:1-20](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/partners/ollama/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n\n### 向量存储与工具集成\n\n| 包名称 | 用途 | 安装命令 |\n|--------|------|----------|\n| langchain-chroma | Chroma向量数据库 | `pip install langchain-chroma` |\n| langchain-nomic | Nomic嵌入服务 | `pip install langchain-nomic` |\n| langchain-exa | Exa网络搜索API | `pip install langchain-exa` |\n\n资料来源：\n- [libs/partners/chroma/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/chroma/README.md)\n- [libs/partners/nomic/README.md:1-15](https://github.com/langchain-ai/langchain/blob/main/libs/partners/nomic/README.md)\n\n## 快速开始\n\n### 安装\n\n```bash\npip install langchain\n# 或使用 uv\nuv add langchain\n```\n\n### 基础使用示例\n\n```python\nfrom langchain.chat_models import init_chat_model\n\n# 初始化聊天模型\nmodel = init_chat_model(\"openai:gpt-5.4\")\n\n# 调用模型\nresult = model.invoke(\"Hello, world!\")\n```\n\n### 使用HuggingFace本地模型\n\n如需使用本地推理功能，需安装完整依赖：\n\n```bash\npip install langchain-huggingface[full]\n```\n\n> **注意**：完整安装包含 `sentence-transformers>=5.2.0` 和 `transformers>=5.0.0`。从 `langchain-community` 迁移的用户需要注意版本要求变化。\n\n资料来源：\n- [README.md:30-45](https://github.com/langchain-ai/langchain/blob/main/README.md)\n- [libs/partners/huggingface/README.md:10-20](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n\n## 技术特性\n\n### 安全机制\n\nLangChain的APIChain组件包含详细的安全警告和最佳实践：\n\n- **网络安全** — 使用requests工具包发起HTTP请求，需控制访问权限\n- **域限制** — 支持`limit_to_domains`参数限制可访问的域名范围\n- **请求类型** — 支持GET、POST、PATCH、PUT和DELETE等HTTP方法\n\n```python\ndef _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:\n    \"\"\"检查URL是否在允许的域名列表中\"\"\"\n    scheme, domain = _extract_scheme_and_domain(url)\n    \n    for allowed_domain in limit_to_domains:\n        allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)\n        if scheme == allowed_scheme and domain == allowed_domain_:\n            return True\n    return False\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:35-50](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n\n### 废弃与迁移策略\n\nLangChain采用渐进式废弃策略，标记废弃的功能会：\n\n- 指定废弃版本号 (`since`)\n- 指定移除版本号 (`removal`)\n- 提供替代方案建议 (`alternative`)\n\n```python\n@deprecated(\n    since=\"0.2.13\",\n    removal=\"2.0.0\",\n    alternative=\"langchain.agents.create_agent\",\n    addendum=\"使用 create_agent 构建新代理...\"\n)\nclass APIChain(Chain):\n    ...\n```\n\n## 文档与资源\n\n| 资源类型 | 链接 |\n|----------|------|\n| 官方文档 | [docs.langchain.com](https://docs.langchain.com/oss/python/langchain/overview) |\n| API参考 | [reference.langchain.com/python](https://reference.langchain.com/python) |\n| 社区论坛 | [forum.langchain.com](https://forum.langchain.com) |\n| LangChain.js | [GitHub - langchainjs](https://github.com/langchain-ai/langchainjs) |\n| Deep Agents | [Deep Agents文档](http://docs.langchain.com/oss/python/deepagents/) |\n| LangSmith | [开发调试平台](https://docs.langchain.com/langsmith/home) |\n| LangChain Academy | [免费学习课程](https://academy.langchain.com/) |\n\n## 相关工具与扩展\n\n### LangGraph\n\n对于需要更高级自定义或代理编排的场景，推荐使用**LangGraph** — LangChain官方的工作流控制框架。\n\n```mermaid\ngraph LR\n    A[LangChain] -->|基础链式调用| B[简单任务]\n    A -->|复杂编排| C[LangGraph]\n    C -->|可控工作流| D[复杂Agent系统]\n```\n\n### Deep Agents\n\n针对常见使用模式（规划、子代理、文件系统操作等）开箱即用的解决方案：\n\n- 内置规划能力\n- 多子代理协调\n- 文件系统集成\n- 常见模式封装\n\n## 版本与发布策略\n\nLangChain遵循语义化版本控制规范：\n\n- **版本历史** — 详见 [Releases Policy](https://docs.langchain.com/oss/python/release-policy)\n- **版本规范** — 详见 [Versioning Policy](https://docs.langchain.com/oss/python/versioning)\n- **贡献指南** — 详见 [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview)\n\n## 许可证\n\nLangChain采用 **MIT许可证** 开源发布。\n\n资料来源：[README.md:10-15](https://github.com/langchain-ai/langchain/blob/main/README.md)\n\n---\n\n<a id='page-core-architecture'></a>\n\n## 核心架构与组件\n\n### 相关页面\n\n相关主题：[Runnable与链式调用](#page-runnable), [回调与追踪系统](#page-callbacks-tracing)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [README.md](https://github.com/langchain-ai/langchain/blob/main/README.md)\n- [libs/langchain/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/README.md)\n- [libs/langchain/langchain_classic/chains/api/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n- [libs/partners/anthropic/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/openai/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/huggingface/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/partners/ollama/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n</details>\n\n# 核心架构与组件\n\n## 概述\n\nLangChain 是一个用于构建智能体（Agent）和大语言模型（LLM）应用的框架。它通过将可互操作的组件与第三方集成串联在一起，简化了 AI 应用程序开发流程，同时在底层技术演进的背景下保障了决策的前瞻性。\n\n资料来源：[README.md:1-10]()\n\n## 系统架构分层\n\nLangChain 的架构采用分层设计，主要包括以下几个核心层次：\n\n```mermaid\ngraph TD\n    A[用户应用层] --> B[LangChain 核心层]\n    B --> C[Partner 包集成层]\n    C --> D[第三方服务 API]\n    \n    B --> E[langchain_classic 经典组件]\n    B --> F[langchain_core 核心抽象]\n    \n    F --> G[Messages 消息系统]\n    F --> H[Prompts 提示词模板]\n    F --> I[Output Parsers 输出解析器]\n    F --> J[Callbacks 回调机制]\n```\n\n## 核心模块解析\n\n### langchain_core 核心抽象层\n\n`langchain_core` 是整个框架的基础层，提供了所有组件赖以实现的抽象接口和核心类型系统。\n\n#### 消息系统（Messages）\n\n消息系统负责在应用各组件之间传递结构化的对话信息。LangChain 定义了标准化的消息格式，使得不同模型提供商之间的交互具有一致性。\n\n#### 提示词模板（Prompts）\n\n提示词模板系统提供了构建动态提示的能力，支持变量绑定和复用。模板系统与模型无关，可在不同的 LLM 提供商之间无缝切换。\n\n#### 输出解析器（Output Parsers）\n\n输出解析器负责将 LLM 的原始输出转换为结构化数据。这一机制使得 LLM 输出能够被下游组件直接消费和处理。\n\n#### 回调机制（Callbacks）\n\n回调系统提供了可扩展的事件通知机制，允许开发者在链式调用和智能体执行过程中插入自定义逻辑，如日志记录、监控和中间结果处理。\n\n资料来源：[libs/langchain/README.md:1-8]()\n\n### langchain_classic 经典组件\n\n`langchain_classic` 包包含了 LangChain 的经典组件，包括链式调用（Chains）、API 集成工具和已弃用的遗留功能。\n\n#### APIChain 组件\n\n`APIChain` 是 LangChain 提供的一个经典链式组件，用于根据用户问题构建 API 请求并总结响应。其核心工作流程如下：\n\n```mermaid\ngraph LR\n    A[用户问题] --> B[API_URL_PROMPT]\n    B --> C[LLM 生成 API 调用]\n    C --> D[TextRequestsWrapper 执行请求]\n    D --> E[API_RESPONSE_PROMPT]\n    E --> F[LLM 生成最终答案]\n```\n\n**安全特性**：APIChain 内置了域名限制机制，仅允许向预配置的域名发送请求：\n\n```python\ndef _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:\n    scheme, domain = _extract_scheme_and_domain(url)\n    for allowed_domain in limit_to_domains:\n        allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)\n        if scheme == allowed_scheme and domain == allowed_domain_:\n            return True\n    return False\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:1-45]()\n\n## Partner 集成包架构\n\nLangChain 采用模块化的 Partner 包设计，每个 LLM 或服务提供商都有独立的包进行维护。这种设计带来了以下优势：\n\n| 优势 | 说明 |\n|------|------|\n| 独立版本管理 | 各集成包可独立发布和版本控制 |\n| 按需依赖 | 用户只需安装实际使用的集成包 |\n| 灵活升级 | 可独立升级特定提供商而无需影响其他组件 |\n\n### Partner 包列表\n\n| 包名 | 集成对象 | 安装命令 |\n|------|---------|---------|\n| langchain-openai | OpenAI GPT 系列 | `pip install langchain-openai` |\n| langchain-anthropic | Anthropic Claude 系列 | `pip install langchain-anthropic` |\n| langchain-huggingface | HuggingFace 模型和工具 | `pip install langchain-huggingface` |\n| langchain-ollama | Ollama 本地模型 | `pip install langchain-ollama` |\n| langchain-deepseek | DeepSeek 模型 | `pip install langchain-deepseek` |\n| langchain-groq | Groq 推理服务 | `pip install langchain-groq` |\n| langchain-chroma | Chroma 向量数据库 | `pip install langchain-chroma` |\n\n资料来源：[libs/partners/openai/README.md:1-20]()\n\n## 快速入门与初始化模式\n\nLangChain 提供了统一的模型初始化接口 `init_chat_model`，支持通过字符串标识符动态加载和配置模型：\n\n```python\nfrom langchain.chat_models import init_chat_model\n\nmodel = init_chat_model(\"openai:gpt-5.4\")\nresult = model.invoke(\"Hello, world!\")\n```\n\n这种初始化模式的核心优势在于：\n\n1. **配置集中化**：所有模型配置通过单一入口管理\n2. **提供商无关**：代码不依赖特定服务提供商的 SDK 接口\n3. **环境适配**：自动处理不同环境的认证和连接设置\n\n资料来源：[README.md:30-45]()\n\n## 生态系统架构图\n\n```mermaid\ngraph BT\n    LangChain --> LangGraph\n    LangChain --> LangSmith\n    LangGraph --> LangSmith\n    \n    LangChain --> Partner_Packages\n    Partner_Packages --> OpenAI\n    Partner_Packages --> Anthropic\n    Partner_Packages --> HuggingFace\n    Partner_Packages --> Ollama\n    Partner_Packages --> DeepSeek\n    Partner_Packages --> Groq\n    Partner_Packages --> Chroma\n    \n    LangGraph --> Agents\n    Agents --> Tools\n    Tools --> APIs\n```\n\n## 组件依赖关系\n\n### 核心依赖链\n\n```\nlangchain (主包)\n├── langchain_core (强制依赖)\n│   ├── messages (消息类型定义)\n│   ├── prompts (模板系统)\n│   ├── output_parsers (输出解析)\n│   └── callbacks (事件回调)\n├── langchain_classic (核心链式组件)\n│   ├── chains (经典链)\n│   ├── agents (经典代理)\n│   └── tools (工具集)\n└── Partner 包 (可选依赖)\n    ├── langchain-openai\n    ├── langchain-anthropic\n    ├── langchain-huggingface\n    └── ... (其他提供商)\n```\n\n### 依赖版本要求\n\n各 Partner 包对依赖库有不同的版本要求：\n\n| 包 | 核心依赖 | 版本要求 |\n|----|---------|---------|\n| langchain-huggingface[full] | sentence-transformers | >=5.2.0 |\n| langchain-huggingface[full] | transformers | >=5.0.0 |\n\n资料来源：[libs/partners/huggingface/README.md:1-20]()\n\n## 安全与权限控制\n\n### APIChain 域名限制\n\nAPIChain 实现了严格的域名白名单机制，防止应用向未授权的外部服务发送请求。这一机制通过 `_check_in_allowed_domain` 函数实现：\n\n```mermaid\ngraph TD\n    A[API 请求 URL] --> B{检查域名是否在白名单}\n    B -->|是| C[允许请求]\n    B -->|否| D[拒绝请求]\n```\n\n**安全建议**：在生产环境中使用 APIChain 时，应严格限制 `limit_to_domains` 参数的范围，仅包含必要的服务域名。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:35-45]()\n\n## 技术选型要点\n\n### 何时使用 langchain_classic vs 新架构\n\n| 场景 | 推荐方案 |\n|------|---------|\n| 新项目开发 | 使用 LangGraph 和 `create_agent` |\n| 现有 APIChain 用户 | 迁移至新架构（已在 0.2.13 标记弃用） |\n| 需要自定义链式逻辑 | 使用 langchain_classic |\n| 标准 Agent 构建 | 使用 LangGraph |\n\n**弃用说明**：`APIChain` 已在 0.2.13 版本标记为弃用，计划在 2.0.0 版本移除。推荐迁移至使用 `create_agent` 和自定义工具绑定的方式。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:45-60]()\n\n## 总结\n\nLangChain 的核心架构采用分层和模块化设计，通过 `langchain_core` 提供的基础抽象、`langchain_classic` 的经典组件以及丰富的 Partner 包生态，支持快速构建和部署 LLM 应用。开发者应优先使用最新的 LangGraph 架构进行新项目开发，同时了解经典组件的迁移路径以保障长期维护性。\n\n---\n\n<a id='page-runnable'></a>\n\n## Runnable与链式调用\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture), [Agent代理系统](#page-agents)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/runnables/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/base.py)\n- [libs/core/langchain_core/runnables/config.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/config.py)\n- [libs/core/langchain_core/runnables/branch.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/branch.py)\n- [libs/core/langchain_core/runnables/retry.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/runnables/retry.py)\n</details>\n\n# Runnable与链式调用\n\n## 概述\n\nRunnable 是 LangChain 框架的核心抽象接口，定义了所有可执行组件的统一契约。它代表了可以接收输入、产生输出的任意操作单元，包括语言模型、提示词模板、工具、检索器、链等。\n\nLangChain 的核心设计理念是将复杂的 AI 应用分解为可组合的小单元，通过链式调用（Chaining）将多个 Runnable 连接在一起，形成端到端的工作流。\n\n## 核心架构\n\n### Runnable 在 LangChain 中的角色\n\n```mermaid\ngraph TD\n    A[输入] --> B[Runnable 组件 1]\n    B --> C[Runnable 组件 2]\n    C --> D[Runnable 组件 N]\n    D --> E[输出]\n    \n    F[BaseRunnable] --> G[RunnableSerializable]\n    F --> H[Chain 基类]\n    F --> I[PromptTemplate]\n    F --> J[BaseChatModel]\n    F --> K[BaseTool]\n```\n\n### 关键类层次结构\n\n| 类名 | 层级 | 说明 |\n|------|------|------|\n| `BaseRunnable` | 抽象基类 | 定义所有 Runnable 的核心接口 |\n| `RunnableSerializable` | 序列化层 | 提供 JSON/字典序列化能力 |\n| `Chain` | 业务层 | 链式调用的具体实现基类 |\n| 具体实现类 | 应用层 | `LLMChain`、`ConversationalRetrievalChain` 等 |\n\n## BaseRunnable 抽象基类\n\n### 核心方法定义\n\n`BaseRunnable` 定义了 Runnable 的核心接口规范，所有实现类必须遵循这些契约。\n\n```python\n# libs/core/langchain_core/runnables/base.py\n\nclass BaseRunnable(Generic[Input, Output]):\n    \"\"\"所有 Runnable 对象的基类。\"\"\"\n    \n    def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:\n        \"\"\"同步调用 Runnable。\"\"\"\n        ...\n    \n    async def ainvoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:\n        \"\"\"异步调用 Runnable。\"\"\"\n        ...\n    \n    def batch(self, inputs: List[Input], config: Optional[RunnableConfig] = None) -> List[Output]:\n        \"\"\"批量同步调用。\"\"\"\n        ...\n    \n    async def abatch(self, inputs: List[Input], config: Optional[RunnableConfig] = None) -> List[Output]:\n        \"\"\"批量异步调用。\"\"\"\n        ...\n```\n\n### 输入输出类型\n\n| 方法 | 输入类型 | 输出类型 | 说明 |\n|------|----------|----------|------|\n| `invoke` | `Input` | `Output` | 单次同步调用 |\n| `ainvoke` | `Input` | `Output` | 单次异步调用 |\n| `batch` | `List[Input]` | `List[Output]` | 批量同步调用 |\n| `abatch` | `List[Input]` | `List[Output]` | 批量异步调用 |\n| `stream` | `Input` | `Iterator[Output]` | 流式同步输出 |\n| `astream` | `Input` | `AsyncIterator[Output]` | 流式异步输出 |\n\n## 链式调用机制\n\n### 管道操作符 `|`\n\n链式调用通过管道操作符 `|` 实现，将前一个 Runnable 的输出作为后一个 Runnable 的输入。\n\n```python\n# libs/core/langchain_core/runnables/base.py\n\nclass BaseRunnable(Generic[Input, Output]):\n    def __or__(\n        self,\n        other: Union[Runnable[Any, Any], Callable[[Any], Any]]\n    ) -> RunnableSerializable[Any, Any]:\n        \"\"\"使用 | 操作符组合两个 Runnable。\"\"\"\n        return RunnableSequence(first=self, last=_maybe_wrap_in_prompt(other))\n```\n\n### 链式调用示例\n\n```mermaid\ngraph LR\n    A[PromptTemplate] -->|\"管道操作符 |\"| B[BaseChatModel]\n    B -->|\"管道操作符 |\"| C[StrOutputParser]\n    \n    A1[输入: 问题] --> A\n    C --> R[最终输出]\n```\n\n**代码示例：**\n\n```python\nfrom langchain_core.prompts import ChatPromptTemplate\nfrom langchain_openai import ChatOpenAI\nfrom langchain_core.output_parsers import StrOutputParser\n\n# 定义链的组件\nprompt = ChatPromptTemplate.from_messages([\n    (\"system\", \"你是一个专业的技术助手。\"),\n    (\"human\", \"{question}\")\n])\n\nmodel = ChatOpenAI(model=\"gpt-4\")\noutput_parser = StrOutputParser()\n\n# 链式组合\nchain = prompt | model | output_parser\n\n# 调用链\nresult = chain.invoke({\"question\": \"什么是 LangChain？\"})\n```\n\n### RunnableSequence 内部实现\n\n```python\n# libs/core/langchain_core/runnables/base.py\n\nclass RunnableSequence(RunnableSerializable[Input, Output]):\n    \"\"\"按顺序执行的一系列 Runnable。\"\"\"\n    \n    first: Runnable[Any, Any]\n    middle: List[Runnable[Any, Any]] = Field(default_factory=list)\n    last: Runnable[Any, Any]\n    \n    def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:\n        # 逐步执行每个 Runnable，将输出传递给下一个\n        for Runnable in self.runnables:\n            input = runnable.invoke(input, config)\n        return input\n```\n\n### pipe() 方法\n\n除了 `|` 操作符，还可以通过 `pipe()` 方法实现链式调用：\n\n```python\nchain = prompt.pipe(model).pipe(output_parser)\n```\n\n两种方式在功能上等价，开发者可根据偏好选择。\n\n## Runnable 配置\n\n### RunnableConfig 配置结构\n\n```python\n# libs/core/langchain_core/runnables/config.py\n\nclass RunnableConfig(TypedDict, total=False):\n    \"\"\"配置 Runnable 执行的参数。\"\"\"\n    \n    tags: Optional[List[str]]\n    \"\"\"用于标识此执行的标签列表。\"\"\"\n    \n    metadata: Optional[Dict[str, Any]]\n    \"\"\"附加到此执行的元数据。\"\"\"\n    \n    callbacks: Optional[Union[CallbackManagerForChainRun, AsyncCallbackManagerForChainRun]]\n    \"\"\"回调管理器，用于监控和日志记录。\"\"\"\n    \n    max_concurrency: Optional[int]\n    \"\"\"最大并发执行数。\"\"\"\n    \n    recursion_limit: int\n    \"\"\"链中最大递归深度，默认 25。\"\"\"\n    \n    configurable: Optional[Dict[str, Any]]\n    \"\"\"运行时可配置参数。\"\"\"\n```\n\n### 配置传递机制\n\n```mermaid\ngraph TD\n    A[RunnableConfig] --> B[invoke/ainvoke]\n    B --> C{子 Runnable}\n    C --> D[config 参数]\n    C --> E[继承配置]\n    \n    style A fill:#e1f5fe\n    style D fill:#c8e6c9\n    style E fill:#fff3e0\n```\n\n### 配置合并策略\n\n```python\n# libs/core/langchain_core/runnables/config.py\n\ndef merge_configs(*configs: Optional[RunnableConfig]) -> RunnableConfig:\n    \"\"\"合并多个配置，后面的配置优先。\"\"\"\n    merged: Dict[str, Any] = {}\n    for config in configs:\n        if config:\n            merged.update(config)\n    return merged\n```\n\n## 重试机制\n\n### RetryRunnable 包装器\n\n```python\n# libs/core/langchain_core/runnables/retry.py\n\nclass RetryRunnable(Runnable[Input, Output]):\n    \"\"\"为 Runnable 添加重试逻辑的包装器。\"\"\"\n    \n    def __init__(\n        self,\n        runnable: Runnable[Input, Output],\n        max_attempts: int = 3,\n        min_seconds: float = 1,\n        max_seconds: float = 10,\n        retry_on: Optional[Type[BaseException]] = None,\n    ):\n        self.runnable = runnable\n        self.max_attempts = max_attempts\n        self.retry_on = retry_on or Exception\n```\n\n### 重试配置参数\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `max_attempts` | `int` | `3` | 最大重试次数 |\n| `min_seconds` | `float` | `1` | 最小等待时间（秒） |\n| `max_seconds` | `float` | `10` | 最大等待时间（秒） |\n| `retry_on` | `Type[Exception]` | `Exception` | 需要重试的异常类型 |\n| `backoff_factor` | `float` | `2` | 退避因子（指数退避） |\n\n### 重试策略使用示例\n\n```python\nfrom langchain_core.runnables.retry import RetryRunnable\n\n# 创建带重试的链\nchain_with_retry = RetryRunnable(\n    runnable=model,\n    max_attempts=3,\n    min_seconds=1,\n    max_seconds=10,\n    retry_on=RateLimitError  # 只在速率限制错误时重试\n)\n```\n\n### 指数退避算法\n\n```mermaid\nsequenceDiagram\n    participant C as 调用方\n    participant R as RetryRunnable\n    participant M as Model\n    \n    C->>R: invoke()\n    R->>M: 第一次调用\n    M--xR: 异常/限流\n    R->>R: 等待 1s\n    R->>M: 第二次调用\n    M--xR: 异常/限流\n    R->>R: 等待 2s\n    R->>M: 第三次调用\n    M-->>R: 成功\n    R-->>C: 返回结果\n```\n\n## 分支逻辑\n\n### RunnableBranch 条件分支\n\n```python\n# libs/core/langchain_core/runnables/branch.py\n\nclass RunnableBranch(RunnableSerializable[Any, Output]):\n    \"\"\"根据条件选择不同执行路径的 Runnable。\"\"\"\n    \n    branches: Sequence[Tuple[Runnable[Input, bool], Runnable[Input, Output]]]\n    default: Optional[Runnable[Input, Output]]\n```\n\n### 分支配置参数\n\n| 参数 | 类型 | 说明 |\n|------|------|------|\n| `branches` | `Sequence[Tuple[condition, runnable]]` | 条件-执行对列表 |\n| `default` | `Runnable` | 默认执行的 Runnable |\n\n### 分支使用示例\n\n```python\nfrom langchain_core.runnables.branch import RunnableBranch\n\n# 定义分支条件\nbranches = [\n    (\n        lambda x: \"技术\" in x.get(\"category\", \"\"),\n        technical_chain  # 技术问题走此链\n    ),\n    (\n        lambda x: \"一般\" in x.get(\"category\", \"\"),\n        general_chain    # 一般问题走此链\n    ),\n]\n\n# 添加默认分支\nbranch_chain = RunnableBranch(\n    *branches,\n    general_chain  # 默认链\n)\n```\n\n### 分支执行流程\n\n```mermaid\ngraph TD\n    A[输入] --> B{条件 1}\n    B -->|True| C[执行 Runnable 1]\n    B -->|False| D{条件 2}\n    D -->|True| E[执行 Runnable 2]\n    D -->|False| F{...}\n    F -->|...| G[默认 Runnable]\n    \n    C --> H[输出]\n    E --> H\n    G --> H\n```\n\n## 常见使用模式\n\n### 模式一：简单管道链\n\n```python\nchain = prompt | model | output_parser\nresult = chain.invoke({\"question\": \"...\"})\n```\n\n### 模式二：带配置的链\n\n```python\nfrom langchain_core.runnables.config import RunnableConfig\n\nconfig = RunnableConfig(\n    tags=[\"production\", \"v1\"],\n    metadata={\"user_id\": \"123\"},\n    recursion_limit=50\n)\n\nresult = chain.invoke({\"question\": \"...\"}, config=config)\n```\n\n### 模式三：并行分支合并\n\n```python\nfrom langchain_core.runnables import RunnableParallel\n\n# 并行执行多个任务\nparallel_chain = RunnableParallel(\n    summary=summary_prompt | model,\n    keywords=keyword_prompt | model\n)\n\nresult = parallel_chain.invoke({\"document\": doc})\n# 结果: {\"summary\": \"...\", \"keywords\": \"...\"}\n```\n\n### 模式四：动态链\n\n```python\nfrom langchain_core.runnables import RunnableLambda\n\n# 使用函数创建 Runnable\ndef route_by_topic(input_dict):\n    topic = input_dict[\"topic\"]\n    if topic == \"技术\":\n        return tech_chain\n    elif topic == \"商业\":\n        return business_chain\n    else:\n        return general_chain\n\ndynamic_chain = RunnableLambda(route_by_topic)\n```\n\n### 模式五：完整的 LangChain 代理链\n\n```python\nfrom langchain.agents import create_agent\nfrom langchain_core.tools import tool\n\n@tool\ndef search_api(query: str) -> str:\n    \"\"\"搜索外部 API。\"\"\"\n    # API 调用逻辑\n    return result\n\n# 创建代理\nagent = create_agent(tools=[search_api], model=model)\nresult = agent.invoke({\"input\": \"帮我搜索最新的 AI 新闻\"})\n```\n\n## 高级特性\n\n### 回调机制\n\n```python\nfrom langchain_core.callbacks import BaseCallbackHandler\n\nclass CustomHandler(BaseCallbackHandler):\n    def on_chain_start(self, serialized, inputs, **kwargs):\n        print(f\"链开始执行，输入: {inputs}\")\n    \n    def on_chain_end(self, outputs, **kwargs):\n        print(f\"链执行完成，输出: {outputs}\")\n\nhandler = CustomHandler()\nresult = chain.invoke({\"question\": \"...\"}, config={\"callbacks\": [handler]})\n```\n\n### 流式处理\n\n```python\n# 流式调用\nfor chunk in chain.stream({\"question\": \"...\"}):\n    print(chunk, end=\"\", flush=True)\n```\n\n### 批量处理\n\n```python\n# 批量调用\nquestions = [\n    {\"question\": \"问题1\"},\n    {\"question\": \"问题2\"},\n    {\"question\": \"问题3\"}\n]\n\nresults = chain.batch(questions)\n```\n\n## 与旧版 Chain 的关系\n\n| 特性 | `BaseRunnable` | `Chain` (旧版) |\n|------|----------------|----------------|\n| 统一接口 | ✅ | ❌ |\n| 异步支持 | ✅ | 部分 |\n| 流式支持 | ✅ | ❌ |\n| 序列化 | ✅ | ✅ |\n| 推荐程度 | 首选 | 已废弃 |\n\n> **迁移提示**：`Chain` 类在 LangChain 0.2.13 版本被标记为废弃，将在 2.0.0 版本移除。建议使用基于 `Runnable` 的新 API。资料来源：[libs/langchain/langchain_classic/chains/api/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n\n## 最佳实践\n\n1. **优先使用 Runnable API**：新代码应使用 `Runnable` 接口和链式调用\n2. **合理设置递归限制**：复杂链可能需要调高 `recursion_limit`\n3. **使用配置管理**：通过 `RunnableConfig` 管理标签和元数据\n4. **添加重试机制**：对不稳定操作使用 `RetryRunnable`\n5. **利用类型提示**：`BaseRunnable` 是泛型类，指定输入输出类型可提高代码质量\n\n## 总结\n\nRunnable 与链式调用是 LangChain 框架的核心设计范式，通过统一的接口抽象和灵活组合机制，使开发者能够构建从简单到复杂的各种 AI 应用。掌握这一体系对于高效使用 LangChain 至关重要。\n\n---\n\n<a id='page-agents'></a>\n\n## Agent代理系统\n\n### 相关页面\n\n相关主题：[工具与工具包](#page-tools), [Runnable与链式调用](#page-runnable)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/langchain/langchain_classic/agents/agent.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/agent.py)\n- [libs/langchain/langchain_classic/agents/react/agent.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/react/agent.py)\n- [libs/langchain/langchain_classic/agents/openai_functions_agent/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/openai_functions_agent/base.py)\n- [libs/langchain/langchain_classic/agents/structured_chat/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/structured_chat/base.py)\n</details>\n\n# Agent代理系统\n\n## 概述\n\nAgent（代理）系统是LangChain框架中用于构建自主智能体的核心模块。Agent能够根据用户输入动态决定执行哪些操作（Tool），通过循环调用工具并处理结果来完成任务。与静态的Chain不同，Agent具有推理和决策能力，能够在运行时根据上下文选择下一步行动。 资料来源：[libs/langchain/langchain_classic/agents/agent.py:1-50]()\n\nAgent系统主要由以下几个核心组件构成：\n\n| 组件 | 说明 |\n|------|------|\n| **Agent** | 核心抽象类，定义Agent的基本接口和执行循环 |\n| **Tool** | 可执行的功能单元，Agent调用以完成特定任务 |\n| **Toolkit** | 工具集合，便于批量加载相关工具 |\n| **AgentExecutor** | Agent的执行器，负责运行Agent并处理输出 |\n\n```mermaid\ngraph TD\n    A[用户输入] --> B[Agent推理]\n    B --> C{需要调用工具?}\n    C -->|是| D[选择合适Tool]\n    D --> E[执行Tool]\n    E --> F[处理Tool结果]\n    F --> B\n    C -->|否| G[返回最终结果]\n```\n\n## Agent架构\n\n### 基础Agent类\n\n`Agent`类是所有Agent类型的基类，继承自`Chain`。它定义了Agent的核心接口，包括推理逻辑和执行循环。 资料来源：[libs/langchain/langchain_classic/agents/agent.py]()\n\n```python\nclass Agent(Chain):\n    \"\"\"Agent基类，定义推理和执行接口\"\"\"\n    \n    @property\n    def observation_prefix(self) -> str:\n        \"\"\"观察结果前缀\"\"\"\n        \n    @property\n    def llm_prefix(self) -> str:\n        \"\"\"LLM输出前缀\"\"\"\n```\n\n### Agent执行流程\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant A as Agent\n    participant LLM as LLM\n    participant T as Tool\n    \n    U->>A: 输入任务\n    loop 执行循环\n        A->>LLM: 发送提示\n        LLM-->>A: 返回Action/Action Input\n        A->>T: 调用Tool\n        T-->>A: 返回Observation\n    end\n    A-->>U: 返回最终结果\n```\n\n## Agent类型\n\n### ReAct Agent\n\nReAct（Reasoning + Acting）是一种结合推理和行动的Agent模式。Agent首先进行推理，确定需要执行的操作，然后执行该操作，最后根据结果更新推理状态。 资料来源：[libs/langchain/langchain_classic/agents/react/agent.py:1-30]()\n\n```python\nclass BaseReActAgent(Agent):\n    \"\"\"ReAct Agent基类\n    \n    采用Reasoning + Acting循环模式:\n    1. Thought: 思考下一步行动\n    2. Action: 选择要执行的动作\n    3. Observation: 获取动作执行结果\n    \"\"\"\n```\n\n**ReAct Agent特点：**\n\n- 显式的推理过程，每一步都有`Thought`\n- 适合需要多步推理的复杂任务\n- 通过prompt模板控制输出格式\n\n### OpenAI Functions Agent\n\nOpenAI Functions Agent专门用于支持OpenAI function calling功能的模型。它利用模型的原生函数调用能力来生成结构化的工具调用。 资料来源：[libs/langchain/langchain_classic/agents/openai_functions_agent/base.py:1-50]()\n\n```python\nclass OpenAIFunctionsAgent(Agent):\n    \"\"\"基于OpenAI function calling的Agent\n    \n    使用模型原生能力生成函数调用，\n    无需解析文本输出\n    \"\"\"\n    \n    @property\n    def allowed_tools(self) -> list[str]:\n        \"\"\"允许调用的工具列表\"\"\"\n```\n\n**优势：**\n\n| 特性 | 优势 |\n|------|------|\n| 结构化输出 | 直接生成JSON格式的工具调用 |\n| 可靠性 | 减少解析错误 |\n| 类型安全 | 支持参数类型验证 |\n\n### Structured Chat Agent\n\nStructured Chat Agent支持复杂的多轮对话场景，能够处理包含多个参数的函数调用。它结合了聊天模型的能力和结构化工具调用。 资料来源：[libs/langchain/langchain_classic/agents/structured_chat/base.py:1-50]()\n\n```python\nclass StructuredChatAgent(Agent):\n    \"\"\"结构化聊天Agent\n    \n    适用于需要调用复杂工具的场景，\n    支持多参数和嵌套参数\n    \"\"\"\n```\n\n## Tool集成\n\n### Tool定义\n\nTool是Agent执行具体操作的接口。每个Tool包含名称、描述和执行函数。\n\n```python\nfrom langchain_core.tools import Tool\n\nsearch_tool = Tool(\n    name=\"search\",\n    description=\"搜索互联网获取最新信息\",\n    func=search_function\n)\n```\n\n### Tool选择机制\n\nAgent根据Tool的描述来决定调用哪个Tool。这一过程由LLM完成：\n\n1. **描述匹配**：Agent将任务与Tool描述进行匹配\n2. **参数提取**：从用户输入中提取Tool所需的参数\n3. **执行验证**：验证参数是否符合Tool的schema要求\n\n## 配置选项\n\n### 关键参数\n\n| 参数 | 类型 | 说明 | 默认值 |\n|------|------|------|--------|\n| `verbose` | bool | 是否输出详细执行信息 | False |\n| `max_iterations` | int | 最大迭代次数 | 15 |\n| `max_execution_time` | float | 最大执行时间（秒） | None |\n| `early_stopping_method` | str | 提前停止策略 | \"force\" |\n\n### 错误处理\n\nAgent执行过程中可能遇到各种错误：\n\n```python\nfrom langchain_core.agents import AgentFinish, AgentStep\n\nclass AgentExecutor:\n    \"\"\"Agent执行器，处理错误和重试\"\"\"\n    \n    def _handle_tool_error(self, error: Exception) -> str:\n        \"\"\"处理工具执行错误\"\"\"\n        \n    def _handle_parsing_error(self, error: Exception) -> str:\n        \"\"\"处理输出解析错误\"\"\"\n```\n\n## 迁移指南\n\n### 从APIChain迁移\n\n`APIChain`已在0.2.13版本标记为废弃，将在2.0.0版本移除。建议迁移到新的Agent架构：\n\n```python\n# 旧方式 (已废弃)\nfrom langchain.chains import APIChain\nchain = APIChain.from_url_and_prompt(...)\n\n# 新方式\nfrom langchain.agents import create_agent\nagent = create_agent(tools=[http_request_tool])\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:30-50]()\n\n## 最佳实践\n\n### 1. Tool设计原则\n\n- **清晰描述**：Tool描述应准确说明功能和用途\n- **参数验证**：使用pydantic模型定义参数schema\n- **错误返回**：Tool应返回有意义的错误信息\n\n### 2. Agent配置建议\n\n- 设置合理的`max_iterations`防止无限循环\n- 启用`verbose=True`便于调试\n- 考虑设置`max_execution_time`限制执行时间\n\n### 3. Prompt优化\n\n```python\n# 使用系统提示词优化Agent行为\nagent = create_agent(\n    tools=my_tools,\n    system_message=\"\"\"\n    你是一个专业的助手。\n    总是先思考再行动。\n    如果不确定，请返回最终答案。\n    \"\"\"\n)\n```\n\n## 相关资源\n\n- [LangChain官方文档](https://docs.langchain.com/oss/python/langchain/agents)\n- [API参考](https://reference.langchain.com/python/langchain_classic/agents.html)\n- [示例代码库](https://github.com/langchain-ai/langchain/tree/main/examples)\n\n## 总结\n\nAgent代理系统是LangChain的核心能力之一，通过结合LLM的推理能力和Tool的执行能力，实现了灵活的自主任务执行。框架提供了多种Agent类型以适应不同场景，开发者应根据具体需求选择合适的Agent模式。\n\n---\n\n<a id='page-tools'></a>\n\n## 工具与工具包\n\n### 相关页面\n\n相关主题：[Agent代理系统](#page-agents), [向量存储与检索](#page-vectorstores)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/tools/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tools/base.py)\n- [libs/core/langchain_core/tools/structured.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tools/structured.py)\n- [libs/langchain/langchain_classic/tools/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/tools/base.py)\n- [libs/langchain/langchain_classic/agents/agent_toolkits/sql/toolkit.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/agents/agent_toolkits/sql/toolkit.py)\n</details>\n\n# 工具与工具包\n\n## 概述\n\nLangChain 中的**工具（Tools）**和**工具包（Toolkits）**是框架的核心组件，它们使 LLM（大型语言模型）能够与外部世界交互、执行具体操作、访问实时信息以及操控各种系统和数据源。工具是可执行的原子单元，而工具包则是相关工具的集合，为特定领域或任务提供完整的功能支持。\n\n在 LangChain 的架构中，工具系统位于 `langchain_core` 层，这表明工具是跨多个包共享的基础抽象。`langchain-core` 定义了工具的核心接口和基类，而 `langchain-classic` 在此基础上提供了更丰富的实现和特定场景的工具包。\n\nLangChain 的工具系统设计遵循以下核心原则：类型安全、异步支持、结构化参数验证、以及与主流 LLM 提供商的广泛兼容性。通过统一的工具接口，开发者可以轻松创建自定义工具或使用预构建的工具包来加速开发。\n\n## 工具的核心架构\n\n### 工具的基类层次\n\nLangChain 的工具系统采用分层架构设计。`BaseTool` 是所有工具的抽象基类，定义了工具的基本行为和接口。`StructuredTool` 则在 `BaseTool` 基础上添加了结构化参数支持，允许工具接受复杂类型的输入参数。\n\n工具的核心方法包括：\n\n- **invoke**：同步执行工具\n- **ainvoke**：异步执行工具\n- **run**：兼容旧版 API 的执行方法\n- **arun**：异步版本的旧 API\n\n这种分层设计允许工具在保持一致接口的同时，根据具体需求提供不同的功能实现。基础层负责定义契约，而具体实现可以继承和扩展这些基类以添加特定功能。\n\n```mermaid\ngraph TD\n    A[BaseTool] --> B[StructuredTool]\n    A --> C[Tool]\n    B --> D[自定义结构化工具]\n    C --> E[自定义简单工具]\n    D --> F[工具执行层]\n    E --> F\n    F --> G[LLM 交互]\n```\n\n### 工具的参数定义\n\n工具使用 Pydantic 模型定义参数，这确保了参数的类型安全和自动验证。每个工具通过 `args_schema` 属性声明其接受的参数，包括参数名称、类型、描述和默认值。\n\n参数定义的关键字段包括：\n\n- **name**：工具的唯一标识符\n- **description**：工具功能的自然语言描述，供 LLM 理解何时使用\n- **args_schema**：Pydantic 模型类，定义参数结构\n- **return_direct**：控制返回值是否直接返回给用户\n\n参数描述在工具选择过程中至关重要，因为 LLM 需要根据描述来决定调用哪个工具以及如何传递参数。良好的描述应该清晰说明工具的用途、参数含义以及返回值格式。\n\n### 工具的执行流程\n\n工具的执行涉及多个步骤，从接收调用请求到返回结果。当 LLM 决定调用工具时，系统会经过以下流程：参数验证、权限检查、实际执行、结果处理和返回。\n\n异步执行支持是 LangChain 工具系统的重要特性。通过 `ainvoke` 和 `arun` 方法，工具可以执行 I/O 密集型操作而不会阻塞主线程。这对于需要调用外部 API、访问数据库或执行网络请求的工具尤为重要。\n\n错误处理机制贯穿整个执行流程。工具可以捕获和处理各种异常情况，并根据错误类型返回有意义的消息或重试操作。工具的错误处理设计允许开发者定义降级策略和恢复逻辑。\n\n## StructuredTool 的结构化参数支持\n\n`StructuredTool` 是 LangChain 中用于处理复杂参数的工具基类。与简单的字符串参数不同，`StructuredTool` 支持嵌套对象、列表和其他复杂数据类型，这使得工具能够接收更丰富和结构化的输入。\n\n结构化参数通过 Pydantic 模型定义，这带来了几个关键优势：类型检查在运行时自动执行，参数验证规则可以集中定义，JSON Schema 可以自动生成以供 LLM 理解参数结构。\n\n`StructuredTool` 的核心特性包括：\n\n- **类型安全的参数传递**：参数值在传递前经过类型验证\n- **自动生成的参数文档**：基于 Pydantic 模型自动生成参数描述\n- **嵌套结构支持**：允许定义复杂的多层参数结构\n- **默认值处理**：自动应用默认值，减少调用方的负担\n\n## 工具包的设计模式\n\n### 工具包的概念与用途\n\n工具包（Toolkit）是一组相关工具的集合，专门设计用于处理特定领域或完成特定任务。例如，SQL 工具包包含用于数据库查询、表列表获取、架构检查等的相关工具，它们协同工作以支持完整的数据库交互场景。\n\n工具包的设计遵循组合原则：将相关的原子功能打包在一起，使开发者可以一次性引入完整的功能集合。这种设计减少了集成工作量，同时确保了工具之间的一致性和互操作性。\n\n### SQL 工具包详解\n\nSQL 工具包是 LangChain 提供的标准工具包之一，专门用于数据库操作场景。该工具包通常包含以下核心工具：\n\n| 工具名称 | 功能描述 | 输入参数 |\n|---------|---------|---------|\n| query_sql_db | 执行 SQL 查询 | query: str |\n| list_sql_tables | 列出数据库中的表 | - |\n| get_sql_table_schema | 获取表结构信息 | table_names: List[str] |\n| query_checker | 验证和修正 SQL 语法 | query: str |\n\nSQL 工具包通过统一的接口与数据库交互，支持多种数据库后端。工具包初始化时需要数据库连接信息，如连接字符串或连接池配置。工具包内部处理连接管理、查询执行和结果转换等细节，对使用者屏蔽了底层复杂性。\n\n工具包的设计还考虑了安全性。SQL 工具包可以配置允许访问的表列表，防止 LLM 执行未经授权的数据库操作。参数验证和 SQL 语法检查功能有助于防止 SQL 注入等安全威胁。\n\n## 工具与 LLM 的集成\n\n### 工具选择机制\n\n在 LangChain 中，LLM 可以通过多种方式选择和调用工具。最常见的模式是让 LLM 输出结构化的工具调用指令，这些指令包含工具名称和参数。LangChain 提供了解析和执行这些调用的基础设施。\n\n工具选择涉及几个关键因素：\n\n- **工具描述**：LLM 根据描述判断工具的适用性\n- **参数约束**：LLM 需要生成符合参数 schema 的调用\n- **上下文信息**：当前对话状态和可用工具列表影响选择\n\n### 工具调用的执行\n\n当 LLM 输出工具调用时，LangChain 的执行层负责：\n\n1. 解析 LLM 输出，提取工具名称和参数\n2. 验证参数是否符合工具的 schema\n3. 查找并实例化目标工具\n4. 执行工具并捕获结果或错误\n5. 将结果反馈给 LLM 进行后续处理\n\n执行层支持同步和异步两种模式。同步模式下，工具按顺序依次执行；异步模式下，支持并行执行多个独立的工具调用以提高效率。\n\n## 自定义工具开发\n\n### 创建简单工具\n\n创建自定义工具的基本流程相对直接。首先定义工具函数，然后使用 `@tool` 装饰器或继承 `BaseTool` 类将其转换为 LangChain 工具。工具函数应专注于单一职责，便于测试和维护。\n\n自定义工具的关键考虑因素包括：\n\n- **描述的清晰性**：描述应帮助 LLM 理解何时以及如何调用工具\n- **参数命名的直观性**：使用清晰、描述性的参数名称\n- **错误处理**：定义良好的错误消息，帮助调试和恢复\n- **返回值格式**：确保返回值易于 LLM 理解和处理\n\n### 创建结构化工具\n\n对于需要复杂参数的工兴，应使用 `StructuredTool` 或直接继承 `BaseTool` 并定义 Pydantic 格式的 `args_schema`。这种方法允许定义嵌套参数、类型验证规则和默认值。\n\n结构化工具开发的关键步骤：\n\n1. 定义 Pydantic 模型表示工具参数\n2. 继承 `StructuredTool` 或相应基类\n3. 实现核心执行逻辑\n4. 配置工具元数据（名称、描述等）\n\n## 安全与权限控制\n\n### 域限制机制\n\nLangChain 提供了 URL 域限制功能以防止工具被滥用。例如，API 调用工具可以配置允许访问的域名白名单，系统会在执行前验证目标 URL 是否在允许列表中。\n\n域限制通过以下函数实现：\n\n- `_extract_scheme_and_domain`：从 URL 提取协议和域名\n- `_check_in_allowed_domain`：检查 URL 是否在允许的域名列表中\n\n这种机制对于安全敏感的用例至关重要，特别是在允许 LLM 发起网络请求的场景中。\n\n### 工具权限管理\n\n工具系统支持多种权限控制机制：\n\n- **表级访问控制**：数据库工具可以限制可访问的表\n- **操作类型限制**：限制工具可执行的操作类型（如只读）\n- **速率限制**：防止过度使用或资源耗尽\n\n## 生态集成\n\n### 合作伙伴包中的工具\n\nLangChain 的生态系统中包含多个合作伙伴包，每个包都提供了针对特定服务或平台的工具集成。这些包位于 `libs/partners/` 目录下，包括：\n\n| 合作伙伴 | 包名称 | 主要功能 |\n|---------|-------|---------|\n| OpenAI | langchain-openai | OpenAI API 集成 |\n| Anthropic | langchain-anthropic | Claude 模型支持 |\n| HuggingFace | langchain-huggingface | 模型推理与嵌入 |\n| Ollama | langchain-ollama | 本地 LLM 支持 |\n| DeepSeek | langchain-deepseek | DeepSeek API |\n\n这些合作伙伴包通常包含针对特定平台优化的工具实现，充分利用各平台的特性和能力。\n\n### 社区工具与扩展\n\n除了官方维护的包外，LangChain 还支持社区贡献的工具和工具包。`langchain-community` 包曾经是社区工具的主要存放地，但新版本中建议使用专门的合作伙伴包或自定义工具实现。\n\n## 最佳实践\n\n### 工具设计原则\n\n设计良好的工具应遵循以下原则：\n\n- **单一职责**：每个工具应专注于完成一项具体任务\n- **清晰命名**：工具和参数名称应自描述\n- **完整文档**：提供详尽的描述说明工具用途和使用方式\n- **错误恢复**：工具应能优雅地处理错误并提供有用的反馈\n- **类型安全**：使用类型注解和 Pydantic 验证确保参数正确\n\n### 性能优化建议\n\n在生产环境中使用工具时，应考虑以下性能优化策略：\n\n- **连接池复用**：对于需要数据库或网络连接的工兴，应复用连接而非每次调用创建新连接\n- **异步执行**：I/O 密集型操作应使用异步 API\n- **结果缓存**：对于不经常变化的查询结果，可以进行缓存以减少重复调用\n- **批处理**：将多个小操作合并为批处理以减少开销\n\n### 调试与监控\n\n工具执行过程中的调试和监控对于维护系统可靠性至关重要。建议的实现方式包括：\n\n- 配置回调处理器以记录工具调用\n- 实现详细的日志记录以便问题排查\n- 设置监控指标以追踪工具使用模式和性能\n- 建立告警机制以在工具失败时及时响应\n\n## 相关资源\n\n- 官方文档：https://docs.langchain.com/oss/python/langchain/overview\n- API 参考：https://reference.langchain.com/python\n- 贡献指南：https://docs.langchain.com/oss/python/contributing/overview\n\n---\n\n<a id='page-vectorstores'></a>\n\n## 向量存储与检索\n\n### 相关页面\n\n相关主题：[文档加载与处理](#page-document-loaders), [工具与工具包](#page-tools)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/vectorstores/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/vectorstores/base.py)\n- [libs/core/langchain_core/embeddings/embeddings.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/embeddings/embeddings.py)\n- [libs/langchain/langchain_classic/retrievers/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/retrievers/__init__.py)\n- [libs/langchain/langchain_classic/retrievers/self_query/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/retrievers/self_query/base.py)\n</details>\n\n# 向量存储与检索\n\n## 概述\n\n向量存储与检索是 LangChain 框架中用于处理语义搜索和相似性匹配的核心功能模块。在大型语言模型（LLM）应用中，向量存储通过将文本、文档或其他数据转换为高维向量表示，实现高效的语义检索能力。当用户提出查询时，系统会将查询转换为向量，并在向量数据库中查找最相似的文档或文本片段。LangChain 的向量存储架构设计遵循模块化原则，核心接口定义在 `langchain-core` 包中，而具体实现则分布在各个集成包中，例如 `langchain-chroma` 用于 Chroma 向量数据库的集成。这种架构使得开发者可以灵活地在不同向量存储提供商之间切换，同时保持上层应用代码的一致性。\n\n## 核心架构\n\nLangChain 的向量存储系统采用分层架构设计，从底层到上层依次包括向量存储实现层、嵌入模型层和检索器层。向量存储层负责实际的数据存储和相似性搜索操作，支持多种后端包括 Chroma、FAISS、Pinecone 等主流向量数据库。嵌入模型层提供文本到向量的转换能力，通过 `Embeddings` 接口定义标准化的嵌入生成方法。检索器层则封装了各种检索策略，包括直接相似性检索、自查询检索、时间加权检索等高级功能。这种分层设计使得系统具有良好的可扩展性和可维护性，开发者可以根据需求自由组合不同层次的组件。\n\n```mermaid\ngraph TD\n    A[用户查询] --> B[嵌入模型]\n    B --> C[查询向量]\n    C --> D[向量存储]\n    D --> E[相似文档]\n    E --> F[检索结果]\n    \n    G[文档] --> H[嵌入模型]\n    H --> I[文档向量]\n    I --> D\n    \n    J[元数据] --> D\n```\n\n## 向量存储基类\n\nLangChain 的向量存储功能由 `VectorStore` 基类提供核心抽象。该基类定义了一组标准接口，包括 `add_texts`、`add_documents`、`similarity_search`、`similarity_search_by_vector` 等核心方法。向量存储实现需要继承这个基类并实现相应的抽象方法，同时可以提供特定于后端的优化功能。基类还提供了异步支持，通过 `AsyncVectorStore` 接口支持异步操作，这对于构建高性能应用至关重要。向量存储的构造函数通常接受嵌入模型实例、连接参数和配置选项，使得初始化过程灵活且易于配置。\n\n| 方法 | 参数 | 返回值 | 说明 |\n|------|------|--------|------|\n| `add_texts` | texts, metadatas, ids | List[str] | 添加文本到向量存储 |\n| `add_documents` | documents | List[str] | 添加文档对象到向量存储 |\n| `similarity_search` | query, k, filter | List[Document] | 执行相似性搜索 |\n| `similarity_search_by_vector` | embedding, k, filter | List[Document] | 按向量执行相似性搜索 |\n| `delete` | ids | None | 删除指定ID的文档 |\n| `save_local` | folder_path | None | 将向量存储保存到本地 |\n\n## 嵌入模型接口\n\n嵌入模型是向量存储系统的核心组件，负责将文本数据转换为高维向量表示。LangChain 通过 `Embeddings` 基类定义了跨不同嵌入提供商的统一接口，该接口包含 `embed_query` 和 `embed_documents` 两个核心方法。`embed_query` 方法用于单个查询文本的嵌入生成，而 `embed_documents` 方法支持批量处理多个文档的嵌入计算。这个设计允许开发者轻松切换不同的嵌入提供商，无论是使用 OpenAI 的 text-embedding-ada-002、HuggingFace 的 sentence-transformers，还是本地部署的嵌入模型。LangChain 还提供了缓存和批处理优化，以减少 API 调用开销和提高整体性能。\n\n```python\nfrom langchain_core.embeddings import Embeddings\n\nclass Embeddings(ABC):\n    \"\"\"嵌入模型抽象基类\"\"\"\n    \n    @abstractmethod\n    def embed_query(self, text: str) -> List[float]:\n        \"\"\"嵌入单个查询文本\"\"\"\n        pass\n    \n    @abstractmethod\n    def embed_documents(self, texts: List[str]) -> List[List[float]]:\n        \"\"\"嵌入多个文档文本\"\"\"\n        pass\n    \n    async def aembed_query(self, text: str) -> List[float]:\n        \"\"\"异步嵌入单个查询\"\"\"\n        return self.embed_query(text)\n    \n    async def aembed_documents(self, texts: List[str]) -> List[List[float]]:\n        \"\"\"异步嵌入多个文档\"\"\"\n        return self.embed_documents(texts)\n```\n\n## 检索器模块\n\n检索器（Retriever）是 LangChain 中用于从向量存储中获取相关文档的高级抽象。`BaseRetriever` 类定义了标准化的检索接口，使得不同检索策略的实现可以互换使用。LangChain 提供了多种内置检索器，包括 `VectorStoreRetriever` 进行基础向量相似性检索、`SelfQueryRetriever` 支持基于元数据的结构化查询、`ContextualCompressionRetriever` 在检索后进行结果压缩、`MultiVectorRetriever` 支持多向量检索策略，以及 `TimeWeightedVectorStoreRetriever` 结合时间因素的加权检索。这种丰富的检索器生态使得开发者可以根据具体应用场景选择最合适的检索策略。\n\n## 自查询检索器\n\n自查询检索器（Self-Query Retriever）是一种高级检索能力，它能够自动从用户查询中提取语义搜索条件和元数据过滤条件。这种检索器特别适用于结构化元数据丰富的场景，例如文档带有时间戳、类别、作者等属性。当用户提出一个问题时，自查询检索器会同时生成两个部分：一是用于语义相似性匹配的文本嵌入向量，二是用于精确过滤的元数据条件表达式。这种双重处理机制使得检索结果既具有语义相关性，又满足精确的元数据约束条件。\n\n| 组件 | 说明 |\n|------|------|\n| `query_constructor` | 从用户查询中提取结构和语义信息 |\n| `allowed_operators` | 支持的元数据比较运算符 |\n| `default_operator` | 默认的逻辑运算符（AND/OR） |\n| `attribute_infomer` | 属性名称的信息提取器 |\n\n自查询检索器的工作流程涉及多个步骤：首先，大语言模型（LLM）分析用户查询，识别其中的语义搜索意图和元数据过滤条件；然后，系统将提取的元数据条件转换为结构化查询表达式；最后，向量存储同时执行语义搜索和元数据过滤，返回满足双重条件的结果文档。这种设计将自然语言处理和结构化查询有机结合，大大增强了检索系统的表达能力和精确度。\n\n## 相似性搜索策略\n\nLangChain 支持多种相似性搜索策略，以满足不同性能和精度需求。基础的相似性搜索默认使用余弦相似度（Cosine Similarity）作为距离度量，这是语义搜索中最常用的度量方式。系统还支持欧氏距离（L2 Distance）和点积（Dot Product）等其他度量方式，开发者可以根据具体场景和嵌入模型特性选择最合适的度量方法。高级搜索选项包括设置搜索返回的文档数量 `k` 参数、元数据过滤条件 `filter` 参数，以及是否返回相似性分数 `include_embeddings` 参数。这些参数的合理配置对于平衡搜索性能和结果质量至关重要。\n\n## 与向量数据库的集成\n\nLangChain 与多种主流向量数据库提供了深度集成支持。在合作伙伴包（partners）中，`langchain-chroma` 提供了与 Chroma 向量数据库的官方集成，Chroma 是一个专为 LLM 应用设计的开源嵌入数据库，提供了简单的安装和使用体验。除此之外，LangChain 还通过社区包支持 Pinecone、Weaviate、Qdrant、Milvus、FAISS、Elasticsearch 等多种向量存储后端。每种集成都遵循统一的 `VectorStore` 接口规范，确保应用代码在不同后端之间具有良好的可移植性。\n\n```mermaid\ngraph LR\n    A[应用层] --> B[VectorStore 接口]\n    B --> C[Chroma 集成]\n    B --> D[Pinecone 集成]\n    B --> E[FAISS 集成]\n    B --> F[其他集成]\n    \n    C --> G[Chroma 数据库]\n    D --> H[Pinecone 云服务]\n    E --> I[本地 FAISS 索引]\n    F --> J[其他后端]\n```\n\n## 文档处理与索引\n\n在将文档添加到向量存储之前，LangChain 提供了完整的文档处理流水线支持。文档首先通过文本分割器（Text Splitter）被拆分成较小的块（chunks），这是因为大多数嵌入模型对输入长度有限制，而且较小的块能够提供更精确的检索结果。LangChain 的 `text-splitters` 包提供了多种分割策略，包括按字符数分割、按句子分割、递归字符分割等。分割后的文档块包含文本内容（page_content）和元数据（metadata）两个部分，元数据可以包含来源信息、页码、创建时间等任何有助于检索的信息。\n\n| 分割策略 | 适用场景 | 参数说明 |\n|----------|----------|----------|\n| CharacterTextSplitter | 简单文本分割 | chunk_size, chunk_overlap, separator |\n| RecursiveCharacterTextSplitter | 保留段落结构 | 同上，增加 separators 参数 |\n| TokenTextSplitter | 按 token 数量分割 | 需要 tokenizer 参数 |\n\n## 异步操作支持\n\n现代 LLM 应用对性能和并发处理能力有较高要求，LangChain 的向量存储系统提供了完整的异步操作支持。异步接口包括 `aadd_texts`、`aadd_documents`、`aasync_similarity_search` 等方法，允许开发者在异步环境中高效地处理批量操作。异步设计特别适用于需要同时查询多个向量存储、或者在高并发场景下处理大量请求的应用。LangChain 的异步实现遵循 Python 的 asyncio 规范，可以与 FastAPI 等现代 Web 框架无缝集成。\n\n## 安全性与权限控制\n\n在构建向量存储应用时，安全性是需要重点考虑的方面。LangChain 提供了域名限制（Domain Limiting）功能，可以配置向量存储只允许查询特定域名的数据源，防止潜在的安全风险。这一功能在 APIChain 等可能暴露给最终用户的组件中尤为重要，通过限制可访问的域名范围，可以防止恶意查询或数据泄露。开发者应该仔细评估应用的安全需求，合理配置访问控制策略，确保向量存储系统在提供便利的同时不引入安全漏洞。\n\n## 最佳实践\n\n在实际应用中，向量存储与检索系统的性能优化需要关注多个方面。首先是嵌入模型的选择，不同的嵌入模型在精度、速度和成本方面各有权衡，应该根据具体场景选择最合适的模型。其次是文档块大小的确定，过大的块可能导致检索精度下降，过小的块则可能丢失上下文信息，建议通过实验找到最佳的块大小和重叠参数。批量操作时应该利用批处理 API 减少网络开销，同时注意避免超过 API 的速率限制。在生产环境中，应该实现适当的错误处理和重试机制，以应对网络波动和服务不可用等情况。\n\n```mermaid\ngraph TD\n    A[开始] --> B[选择嵌入模型]\n    B --> C[设计文档分割策略]\n    C --> D[配置向量存储]\n    D --> E[构建检索器]\n    E --> F[添加安全限制]\n    F --> G[性能测试]\n    G --> H{是否满足需求}\n    H -->|否| I[调整参数]\n    I --> D\n    H -->|是| J[部署到生产环境]\n```\n\n## 资料来源\n\n- `libs/core/langchain_core/vectorstores/base.py` - 向量存储基类定义\n- `libs/core/langchain_core/embeddings/embeddings.py` - 嵌入模型接口定义\n- `libs/langchain/langchain_classic/retrievers/__init__.py` - 检索器模块初始化\n- `libs/langchain/langchain_classic/retrievers/self_query/base.py` - 自查询检索器实现\n- `libs/partners/chroma/README.md` - Chroma 集成文档\n\n---\n\n<a id='page-document-loaders'></a>\n\n## 文档加载与处理\n\n### 相关页面\n\n相关主题：[向量存储与检索](#page-vectorstores), [内存与状态管理](#page-memory)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/document_loaders/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/document_loaders/base.py)\n- [libs/langchain/langchain_classic/document_loaders/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/document_loaders/base.py)\n- [libs/langchain/langchain_classic/document_loaders/parsers/registry.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/document_loaders/parsers/registry.py)\n- [libs/text-splitters/langchain_text_splitters/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/text-splitters/langchain_text_splitters/base.py)\n</details>\n\n# 文档加载与处理\n\n## 概述\n\n文档加载与处理是 LangChain 框架中用于将各种格式的外部数据转换为标准化 `Document` 对象的核心模块。该模块支持从多种数据源加载内容，包括 PDF、HTML、Markdown、JSON、CSV、Word 文档等，并提供了灵活的分词（Text Splitting）功能以支持大规模文档处理场景。\n\nLangChain 的文档处理架构采用分层设计，核心接口定义在 `langchain-core` 包中，具体实现则分散在 `langchain-classic` 和各集成包中。\n\n## 核心架构\n\nLangChain 文档处理流程包含三个主要阶段：**加载（Loading）**、**解析（Parsing）** 和 **分块（Chunking/Splitting）**。\n\n```mermaid\ngraph TD\n    A[原始数据源] --> B[DocumentLoader]\n    B --> C[Document 对象]\n    C --> D[TextSplitter]\n    D --> E[Document 列表]\n    E --> F[Vector Store / Chain]\n    \n    B1[文件系统] --> B\n    B2[Web URL] --> B\n    B3[数据库] --> B\n    B4[API 响应] --> B\n    \n    C --> C1[page_content: str]\n    C --> C2[metadata: dict]\n```\n\n## 核心数据模型\n\n### Document 对象\n\n`Document` 是 LangChain 中表示文档的基础数据结构，包含以下核心属性：\n\n| 属性 | 类型 | 说明 |\n|------|------|------|\n| `page_content` | `str` | 文档的文本内容 |\n| `metadata` | `dict` | 文档元数据，包含来源、页码等信息 |\n\n```python\nclass Document:\n    page_content: str\n    metadata: dict = Field(default_factory=dict)\n```\n\n资料来源：[libs/core/langchain_core/document_loaders/base.py]()\n\n### BaseLoader 抽象基类\n\n所有文档加载器必须继承自 `BaseLoader` 基类：\n\n```python\nclass BaseLoader(ABC):\n    \"\"\"文档加载器基类\"\"\"\n    \n    @abstractmethod\n    def lazy_load(self) -> Iterator[Document]:\n        \"\"\"懒加载文档，按需生成 Document 对象\"\"\"\n        ...\n    \n    def load(self) -> list[Document]:\n        \"\"\"同步加载所有文档\"\"\"\n        return list(self.lazy_load())\n    \n    async def aload(self) -> list[Document]:\n        \"\"\"异步加载所有文档\"\"\"\n        return [doc async for doc in self.alazy_load()]\n    \n    @abstractmethod\n    async def alazy_load(self) -> AsyncIterator[Document]:\n        \"\"\"异步懒加载文档\"\"\"\n        ...\n```\n\n资料来源：[libs/core/langchain_core/document_loaders/base.py]()\n\n## 文档加载器类型\n\n### 按数据源分类\n\n| 类型 | 说明 | 典型实现 |\n|------|------|----------|\n| 文件加载器 | 从本地文件系统读取文件 | `TextLoader`, `CSVLoader`, `PDFLoader` |\n| Web 加载器 | 从 URL 或网页抓取内容 | `WebBaseLoader`, `WebUnstructuredLoader` |\n| 数据库加载器 | 从数据库查询结果加载 | `SQLDatabaseLoader` |\n| API 加载器 | 从 API 响应解析文档 | `APIBaseLoader` |\n\n### 内置加载器列表\n\n`langchain-classic` 包提供了丰富的内置加载器实现：\n\n| 加载器类 | 支持格式 | 包路径 |\n|----------|----------|--------|\n| `TextLoader` | .txt, 纯文本 | `langchain_classic.document_loaders` |\n| `CSVLoader` | .csv | `langchain_classic.document_loaders` |\n| `UnstructuredFileLoader` | 多种格式 | `langchain_classic.document_loaders` |\n| `PyPDFLoader` | PDF | `langchain_classic.document_loaders` |\n| `WebBaseLoader` | 网页 | `langchain_classic.document_loaders` |\n| `NotionLoader` | Notion 页面 | `langchain_partners` |\n\n## 解析器注册机制\n\nLangChain 使用解析器注册表（Registry）来管理不同文档类型的解析逻辑。\n\n```mermaid\ngraph LR\n    A[文件输入] --> B[ParserRegistry]\n    B --> C{文件类型检测}\n    C -->|.pdf| D[PDFParser]\n    C -->|.html| E[HTMLParser]\n    C -->|.md| F[MarkdownParser]\n    C -->|.json| G[JSONParser]\n    \n    D --> H[Document 对象]\n    E --> H\n    F --> H\n    G --> H\n```\n\n### ParserRegistry 类\n\n```python\nclass ParserRegistry:\n    \"\"\"文档解析器注册表\"\"\"\n    \n    def __init__(self, parsers: dict[str, BaseParser] | None = None):\n        self._parsers = parsers or {}\n    \n    def register(self, extension: str, parser: BaseParser) -> None:\n        \"\"\"注册解析器\"\"\"\n        self._parsers[extension.lower()] = parser\n    \n    def get(self, extension: str) -> BaseParser | None:\n        \"\"\"获取指定扩展名对应的解析器\"\"\"\n        return self._parsers.get(extension.lower())\n    \n    def get_extractors(self) -> dict[str, BaseParser]:\n        \"\"\"获取所有注册的解析器\"\"\"\n        return self._parsers.copy()\n```\n\n资料来源：[libs/langchain/langchain_classic/document_loaders/parsers/registry.py]()\n\n## 文本分块（Text Splitting）\n\n对于长文档，需要将其分割成较小的块（chunks）以便嵌入（embedding）和检索。`langchain-text-splitters` 包提供了灵活的分块策略。\n\n### BaseCharacterTextSplitter\n\n基于字符的分块器，按指定分隔符分割文本：\n\n```python\nclass BaseCharacterTextSplitter(TextSplitter):\n    \"\"\"基于字符的分块器基类\"\"\"\n    \n    def __init__(\n        self,\n        separator: str = \"\\n\\n\",\n        is_separator_regex: bool = False,\n        chunk_size: int = 4000,\n        chunk_overlap: int = 200,\n        length_function: Callable[[str], int] = len,\n        add_start_index: bool = False,\n        strip_whitespace: bool = True,\n    ):\n        ...\n```\n\n### 关键参数说明\n\n| 参数 | 类型 | 默认值 | 说明 |\n|------|------|--------|------|\n| `separator` | `str` | `\"\\n\\n\"` | 分隔符字符串 |\n| `is_separator_regex` | `bool` | `False` | 是否将分隔符作为正则表达式 |\n| `chunk_size` | `int` | `4000` | 每个块的最大字符数 |\n| `chunk_overlap` | `int` | `200` | 相邻块之间的重叠字符数 |\n| `length_function` | `Callable` | `len` | 计算文本长度的函数 |\n| `add_start_index` | `bool` | `False` | 是否在元数据中添加起始位置 |\n| `strip_whitespace` | `bool` | `True` | 是否去除首尾空白 |\n\n资料来源：[libs/text-splitters/langchain_text_splitters/base.py]()\n\n### 分块策略\n\nLangChain 支持多种分块策略：\n\n```mermaid\ngraph TD\n    A[输入文本] --> B{分块策略}\n    \n    B -->|字符分割| C[CharacterTextSplitter]\n    B -->|递归分割| D[RecursiveCharacterTextSplitter]\n    B -->|代码分割| E[LanguageSplitter]\n    B -->|语义分割| F[SemanticChunker]\n    \n    C --> G[按固定分隔符分割]\n    D --> H[优先小分隔符<br/>失败则回退大分隔符]\n    E --> I[按编程语言语法分割]\n    F --> J[基于嵌入相似度分割]\n    \n    G --> K[Document 列表]\n    H --> K\n    I --> K\n    J --> K\n```\n\n### RecursiveCharacterTextSplitter\n\n递归字符分块器尝试按优先级顺序使用不同的分隔符：\n\n```python\nclass RecursiveCharacterTextSplitter(BaseSeparatorTextSplitter):\n    \"\"\"递归字符分块器\"\"\"\n    \n    def __init__(\n        self,\n        separators: list[str] | None = None,\n        **kwargs,\n    ):\n        if separators is None:\n            separators = [\"\\n\\n\", \"\\n\", \" \", \"\"]\n        super().__init__(separators=separators, **kwargs)\n```\n\n**分割优先级：**\n1. `\\n\\n` - 段落分隔符\n2. `\\n` - 换行符\n3. ` ` - 空格\n4. `\"\"` - 单字符\n\n资料来源：[libs/text-splitters/langchain_text_splitters/base.py]()\n\n## 使用示例\n\n### 基本加载流程\n\n```python\nfrom langchain_core.document_loaders import TextLoader\nfrom langchain_core.documents import Document\n\n# 使用 TextLoader 加载文本文件\nloader = TextLoader(file_path=\"example.txt\")\ndocuments = loader.load()\n\n# 访问文档内容\nfor doc in documents:\n    print(f\"内容: {doc.page_content}\")\n    print(f\"元数据: {doc.metadata}\")\n```\n\n### 异步加载\n\n```python\nfrom langchain_core.document_loaders import BaseLoader\n\nclass AsyncDocumentLoader(BaseLoader):\n    \"\"\"自定义异步加载器\"\"\"\n    \n    async def alazy_load(self) -> AsyncIterator[Document]:\n        # 异步获取数据\n        content = await self._fetch_content()\n        yield Document(page_content=content)\n```\n\n### 文档分块\n\n```python\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\n\n# 初始化分块器\nsplitter = RecursiveCharacterTextSplitter(\n    chunk_size=1000,\n    chunk_overlap=200,\n    separators=[\"\\n\\n\", \"\\n\", \" \", \"\"]\n)\n\n# 对文档进行分块\ntexts = [\"这是第一段文本...\", \"这是第二段文本...\"]\ndocs = [Document(page_content=t) for t in texts]\nchunks = splitter.split_documents(docs)\n\nprint(f\"原始文档数: {len(docs)}\")\nprint(f\"分块后块数: {len(chunks)}\")\n```\n\n## 元数据管理\n\n文档元数据用于存储与内容相关的附加信息：\n\n| 元数据键 | 说明 | 示例值 |\n|----------|------|--------|\n| `source` | 文档来源路径或 URL | `\"./data/document.pdf\"` |\n| `page` | 页码（PDF 等多页文档） | `1` |\n| `total_pages` | 总页数 | `42` |\n| `creation_date` | 创建时间 | `\"2024-01-15\"` |\n| `author` | 作者 | `\"John Doe\"` |\n\n```python\n# 创建带元数据的文档\ndoc = Document(\n    page_content=\"这是文档内容\",\n    metadata={\n        \"source\": \"report.pdf\",\n        \"page\": 5,\n        \"author\": \"Alice\"\n    }\n)\n```\n\n## 与其他模块的集成\n\n```mermaid\ngraph LR\n    A[DocumentLoader] --> B[Document]\n    B --> C[TextSplitter]\n    C --> D[Chunked Documents]\n    D --> E[Embeddings]\n    E --> F[Vector Store]\n    \n    D --> G[Cache]\n    D --> H[Chain Input]\n```\n\n文档处理模块与 LangChain 其他核心组件的协作：\n\n| 组件 | 集成方式 |\n|------|----------|\n| **Embeddings** | 分块后的文本块传递给嵌入模型生成向量 |\n| **Vector Store** | 嵌入向量存储到向量数据库 |\n| **Retrieval** | 向量检索用于问答系统的上下文增强 |\n| **Chain** | 文档内容作为 LLM Chain 的输入 |\n\n## 最佳实践\n\n### 1. 选择合适的分块大小\n\n| 使用场景 | 推荐 chunk_size | 说明 |\n|----------|-----------------|------|\n| 问答系统 | 500-1000 | 短块提高检索精度 |\n| 摘要生成 | 2000-4000 | 足够上下文生成准确摘要 |\n| 对话系统 | 1000-2000 | 平衡上下文和相关性 |\n\n### 2. 合理设置重叠\n\n- **chunk_overlap** 应设置为 **chunk_size 的 10-20%**\n- 足够的重叠确保跨块边界的语义连续性\n\n### 3. 处理特殊格式\n\n对于结构化文档（PDF、Word），优先使用专用加载器以保留布局和元信息：\n\n```python\n# PDF 加载（保留页码）\nfrom langchain_core.document_loaders import PyPDFLoader\n\nloader = PyPDFLoader(\"document.pdf\")\npages = loader.load_and_split()  # 每页返回一个 Document\n```\n\n## 扩展自定义加载器\n\n```python\nfrom langchain_core.document_loaders import BaseLoader\nfrom langchain_core.documents import Document\nfrom typing import Iterator\n\nclass CustomLoader(BaseLoader):\n    \"\"\"自定义文档加载器\"\"\"\n    \n    def __init__(self, file_path: str):\n        self.file_path = file_path\n    \n    def lazy_load(self) -> Iterator[Document]:\n        \"\"\"实现懒加载逻辑\"\"\"\n        with open(self.file_path, 'r', encoding='utf-8') as f:\n            content = f.read()\n        \n        yield Document(\n            page_content=content,\n            metadata={\"source\": self.file_path}\n        )\n    \n    async def alazy_load(self) -> AsyncIterator[Document]:\n        \"\"\"实现异步懒加载\"\"\"\n        content = await self._async_read()\n        yield Document(\n            page_content=content,\n            metadata={\"source\": self.file_path}\n        )\n```\n\n## 相关资源\n\n| 资源类型 | 链接 |\n|----------|------|\n| API 文档 | [LangChain Core Document Loaders](https://reference.langchain.com/python/langchain_core/document_loaders) |\n| 使用指南 | [LangChain Docs - Document Loaders](https://docs.langchain.com/oss/python/integrations/providers/huggingface) |\n| GitHub 仓库 | [langchain-ai/langchain](https://github.com/langchain-ai/langchain) |\n\n---\n\n<a id='page-memory'></a>\n\n## 内存与状态管理\n\n### 相关页面\n\n相关主题：[文档加载与处理](#page-document-loaders), [Agent代理系统](#page-agents)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/langchain/langchain_classic/memory/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/__init__.py)\n- [libs/langchain/langchain_classic/memory/buffer.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/buffer.py)\n- [libs/langchain/langchain_classic/memory/summary.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/summary.py)\n- [libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py)\n- [libs/langchain/langchain_classic/memory/vectorstore.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/memory/vectorstore.py)\n- [libs/langchain/langchain_classic/chains/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/base.py)\n</details>\n\n# 内存与状态管理\n\n## 概述\n\n在 LangChain 框架中，**内存与状态管理**是构建上下文感知（context-aware）应用的核心能力。内存模块负责在多轮对话或复杂任务执行过程中持久化、检索和管理交互历史，使大型语言模型（LLM）能够访问先前的上下文信息，从而生成连贯且符合上下文的响应。\n\nLangChain 的内存系统被设计为可插拔（pluggable）架构，允许开发者根据不同的应用场景选择或自定义合适的内存实现方案。这些方案涵盖从简单的缓冲区存储到复杂的向量检索等多种策略。\n\n## 核心架构\n\n### 系统组件关系\n\nLangChain 的内存系统主要由以下几个核心组件构成，它们之间通过标准化接口进行交互：\n\n```mermaid\ngraph TD\n    A[用户交互 / Chain 执行] --> B[Memory 模块]\n    B --> C[缓冲区内存<br/>BufferMemory]\n    B --> D[摘要内存<br/>SummaryMemory]\n    B --> E[向量存储内存<br/>VectorStoreMemory]\n    B --> F[聊天消息历史<br/>ChatMessageHistory]\n    \n    C --> G[BaseMemory 接口]\n    D --> G\n    E --> G\n    F --> G\n    \n    G --> H[Chain 上下文]\n    G --> I[LLM 上下文窗口]\n```\n\n### 内存类型分类\n\nLangChain 内存模块支持多种内存实现，以满足不同场景的需求：\n\n| 内存类型 | 用途描述 | 适用场景 |\n|---------|---------|---------|\n| `BufferMemory` | 简单缓冲区存储原始消息 | 短对话、测试环境 |\n| `SummaryMemory` | 自动生成对话摘要 | 长对话、资源受限环境 |\n| `VectorStoreMemory` | 使用向量数据库存储和检索 | 大规模历史检索、语义搜索 |\n| `ChatMessageHistory` | 管理聊天消息的生命周期 | 独立的消息历史管理 |\n| `CombinedMemory` | 组合多种内存策略 | 复杂应用、需要多种检索方式 |\n\n资料来源：[libs/langchain/langchain_classic/memory/__init__.py]()\n\n## 缓冲区内存（BufferMemory）\n\n### 功能说明\n\n缓冲区内存是 LangChain 中最简单的内存实现，它按顺序存储所有对话消息，并在需要时将完整的历史记录传递给下游组件。这种方式保留了所有交互细节，但会随着对话长度增加而消耗更多令牌（token）。\n\n### 核心实现\n\n```python\nclass BufferMemory(BaseMemory):\n    \"\"\"简单的缓冲区内存实现\"\"\"\n    \n    chat_memory: ChatMessageHistory = Field(default_factory=ChatMessageHistory)\n    output_key: Optional[str] = None\n    input_key: Optional[str] = None\n    return_messages: bool = False\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/buffer.py]()\n\n### 消息缓冲机制\n\n缓冲区内存通过 `ChatMessageHistory` 管理消息的添加和检索。消息被组织为一系列 `HumanMessage` 和 `AIMessage` 对象，按时间顺序排列。\n\n```mermaid\nsequenceDiagram\n    participant U as 用户\n    participant M as BufferMemory\n    participant H as ChatMessageHistory\n    \n    U->>M: 添加用户消息\n    M->>H: store_message(content, type=\"human\")\n    H-->>M: 确认存储\n    \n    U->>M: 添加AI响应\n    M->>H: store_message(content, type=\"ai\")\n    H-->>M: 确认存储\n    \n    M->>H: load_memory_variables()\n    H-->>M: 返回完整消息历史\n    M-->>U: 传递给Chain/LLM\n```\n\n### 使用示例\n\n```python\nfrom langchain.memory import BufferMemory\nfrom langchain.chains import ConversationChain\n\nmemory = BufferMemory(\n    return_messages=True,\n    output_key=\"response\",\n    input_key=\"input\"\n)\n\nchain = ConversationChain(\n    llm=llm,\n    memory=memory,\n    verbose=True\n)\n\n# 多轮对话\nchain.invoke({\"input\": \"我叫张三\"})\nchain.invoke({\"input\": \"我叫什么名字？\"})  # 能够记住之前的信息\n```\n\n## 摘要内存（SummaryMemory）\n\n### 设计目的\n\n摘要内存在处理长对话时更为高效，它不会存储每一条原始消息，而是维护一个不断更新的对话摘要。这种设计显著减少了令牌消耗，同时保留了对话的核心信息。\n\n### 工作原理\n\n摘要内存采用增量更新策略：每当收到新消息时，系统会调用 LLM 分析当前对话历史并生成更新的摘要。这个摘要替换了原有的历史记录，成为新的上下文基础。\n\n```mermaid\ngraph LR\n    A[新消息到达] --> B{对话历史为空？}\n    B -->|是| C[生成初始摘要]\n    B -->|否| D[加载当前摘要]\n    D --> E[分析新旧内容]\n    E --> F[生成更新摘要]\n    C --> G[存储摘要]\n    F --> G\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/summary.py]()\n\n### 配置参数\n\n| 参数名 | 类型 | 默认值 | 说明 |\n|-------|------|--------|------|\n| `chat_memory` | ChatMessageHistory | 自动创建 | 消息存储后端 |\n| `memory_key` | str | \"history\" | 变量名，用于模板 |\n| `output_key` | Optional[str] | None | 输出提取键 |\n| `input_key` | Optional[str] | None | 输入提取键 |\n| `return_messages` | bool | False | 是否返回消息对象 |\n| `summary_message_num` | int | 1 | 摘要生成触发消息数 |\n\n## 聊天消息历史（ChatMessageHistory）\n\n### 架构角色\n\n`ChatMessageHistory` 是 LangChain 内存系统的核心数据层，负责管理消息的持久化存储和检索。它作为一个抽象层，支持多种后端存储实现。\n\n```mermaid\nclassDiagram\n    class BaseChatMessageHistory {\n        <<abstract>>\n        +messages: List[BaseMessage]\n        +add_user_message()*\n        +add_ai_message()*\n        +clear()*\n    }\n    \n    class ChatMessageHistory {\n        +add_user_message()\n        +add_ai_message()\n        +add_message()\n        +clear()\n        +get_messages()\n    }\n    \n    class FileChatMessageHistory {\n        +add_user_message()\n        +add_ai_message()\n        +clear()\n        +get_messages()\n    }\n    \n    class RedisChatMessageHistory {\n        +add_user_message()\n        +add_ai_message()\n        +clear()\n        +get_messages()\n    }\n    \n    BaseChatMessageHistory <|-- ChatMessageHistory\n    BaseChatMessageHistory <|-- FileChatMessageHistory\n    BaseChatMessageHistory <|-- RedisChatMessageHistory\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/chat_message_histories/__init__.py]()\n\n### 消息类型\n\n系统支持多种消息类型以适应不同的交互模式：\n\n| 消息类型 | 标识符 | 用途 |\n|---------|-------|------|\n| `HumanMessage` | human | 用户输入消息 |\n| `AIMessage` | ai | AI 生成的响应 |\n| `SystemMessage` | system | 系统级指令 |\n| `FunctionMessage` | function | 函数调用结果 |\n| `ToolMessage` | tool | 工具执行结果 |\n\n## 向量存储内存（VectorStoreMemory）\n\n### 语义检索能力\n\n向量存储内存利用嵌入（embedding）技术将对话内容转换为高维向量，然后存储在向量数据库中。这种方法支持语义相似性搜索，允许系统根据含义而非精确关键词来检索相关历史。\n\n```mermaid\ngraph TD\n    A[对话消息] --> B[Embedding 模型]\n    B --> C[向量表示]\n    C --> D[向量数据库存储]\n    \n    E[查询请求] --> F[查询 Embedding]\n    F --> G[向量相似度搜索]\n    D --> G\n    G --> H[检索相关历史]\n    H --> I[返回上下文片段]\n```\n\n资料来源：[libs/langchain/langchain_classic/memory/vectorstore.py]()\n\n### 配置选项\n\n| 参数 | 类型 | 说明 |\n|-----|------|------|\n| `vectorstore` | VectorStore | 向量存储后端实例 |\n| `memory_key` | str | 内存变量标识 |\n| `input_key` | Optional[str] | 输入键 |\n| `search_kwargs` | dict | 搜索参数（如 k 值） |\n| `embedding` | Optional[Embedding] | 嵌入模型 |\n\n## 与 Chain 的集成\n\n### 数据流处理\n\nLangChain 的 Chain（链）是内存系统的主要消费者。Chain 通过标准化的内存接口与各种内存实现进行交互：\n\n```mermaid\ngraph LR\n    A[用户输入] --> B[Chain.input_keys]\n    B --> C[Memory.load_memory_variables]\n    C --> D[与输入合并]\n    D --> E[LLM 处理]\n    E --> F[Chain.output_keys]\n    \n    G[Memory] --> C\n    H[历史消息] --> G\n    \n    F --> I[Memory.save_context]\n    I --> J[更新内存状态]\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/base.py]()\n\n### 内存绑定机制\n\n在创建 Chain 实例时，通过 `memory` 参数将内存模块绑定到 Chain：\n\n```python\nfrom langchain.chains import LLMChain\nfrom langchain.memory import ConversationBufferMemory\n\n# 创建内存实例\nmemory = ConversationBufferMemory(\n    memory_key=\"chat_history\",\n    return_messages=True\n)\n\n# 创建链并绑定内存\nchain = LLMChain(\n    llm=llm,\n    prompt=prompt,\n    memory=memory\n)\n```\n\n## 最佳实践\n\n### 场景选择指南\n\n| 应用场景 | 推荐内存类型 | 原因 |\n|---------|-------------|------|\n| 简短测试/演示 | BufferMemory | 实现简单、易于调试 |\n| 长对话、有限上下文 | SummaryMemory | 节省令牌、保留关键信息 |\n| 需要语义检索 | VectorStoreMemory | 支持模糊匹配、智能召回 |\n| 持久化需求 | 配合 Redis/File 等后端 | 跨会话保持状态 |\n| 复杂企业应用 | CombinedMemory | 组合多种策略 |\n\n### 性能优化建议\n\n1. **消息分页**：对于超长对话，实施基于时间或数量的消息分页策略\n2. **异步处理**：使用异步内存实现提高 I/O 密集型操作的吞吐量\n3. **缓存策略**：对频繁访问的摘要结果实施缓存\n4. **后端选择**：根据数据量选择合适的存储后端（内存/文件/数据库/向量库）\n\n### 安全考量\n\n在生产环境中部署内存系统时，应注意以下安全要点：\n\n- **数据隔离**：确保不同用户/会话的内存数据严格隔离\n- **敏感信息处理**：对包含敏感内容的对话实施适当的脱敏或加密\n- **访问控制**：限制对历史消息的读取和修改权限\n- **数据清理**：定期清理不再需要的会话历史，遵守数据保留政策\n\n## 扩展与自定义\n\n### 自定义内存实现\n\n开发者可以通过继承 `BaseMemory` 类来创建自定义内存实现：\n\n```python\nfrom langchain.memory import BaseMemory\nfrom langchain.schema import BaseMessage\n\nclass CustomMemory(BaseMemory):\n    \"\"\"自定义内存实现示例\"\"\"\n    \n    memory_key: str = \"custom_history\"\n    \n    @property\n    def memory_variables(self) -> List[str]:\n        return [self.memory_key]\n    \n    def load_memory_variables(\n        self, inputs: Dict[str, Any]\n    ) -> Dict[str, Any]:\n        # 自定义加载逻辑\n        return {self.memory_key: []}\n    \n    def save_context(\n        self, inputs: Dict[str, Any], outputs: Dict[str, str]\n    ) -> None:\n        # 自定义保存逻辑\n        pass\n    \n    def clear(self) -> None:\n        # 自定义清理逻辑\n        pass\n```\n\n### 与外部系统集成\n\nLangChain 内存系统支持与多种外部系统集成，以实现更强大的状态管理能力：\n\n| 外部系统 | 集成方式 | 典型用途 |\n|---------|---------|---------|\n| Redis | `RedisChatMessageHistory` | 分布式环境、缓存 |\n| MongoDB | `MongoDBChatMessageHistory` | 文档存储、灵活性 |\n| PostgreSQL | 数据库后端 | 企业级持久化 |\n| Elasticsearch | 向量搜索 | 高级检索能力 |\n\n## 总结\n\nLangChain 的内存与状态管理系统为构建上下文感知的 LLM 应用提供了强大而灵活的基础设施。通过模块化的设计和丰富的内置实现，开发者可以轻松选择或组合适合特定场景的内存策略。从简单的缓冲区到复杂的向量检索，系统提供了全面的解决方案来管理对话状态和历史信息。\n\n核心优势包括：\n\n- **统一接口**：所有内存类型遵循 `BaseMemory` 接口，便于替换和扩展\n- **多种策略**：支持缓冲、摘要、向量检索等多种内存管理策略\n- **持久化支持**：可与多种存储后端集成，满足生产环境需求\n- **无缝集成**：与 Chain、Agent 等组件深度集成，开箱即用\n\n---\n\n<a id='page-chat-models'></a>\n\n## Chat模型与LLM集成\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture), [LangChain概述](#page-overview)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/partners/openai/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/openai/README.md)\n- [libs/partners/anthropic/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/anthropic/README.md)\n- [libs/partners/huggingface/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/huggingface/README.md)\n- [libs/langchain/langchain_classic/chains/api/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/langchain/langchain_classic/chains/api/base.py)\n- [libs/partners/ollama/README.md](https://github.com/langchain-ai/langchain/blob/main/libs/partners/ollama/README.md)\n- [README.md](https://github.com/langchain-ai/langchain/blob/main/README.md)\n</details>\n\n# Chat模型与LLM集成\n\nLangChain 是一个用于构建 LLM 驱动应用的框架，它提供了模块化和可互操作的组件架构。Chat 模型与 LLM 集成是 LangChain 生态系统中的核心功能模块，提供了与各种大语言模型提供商的标准化接口。\n\n## 概述\n\nLangChain 的 Chat 模型与 LLM 集成系统为开发者提供了统一的方式来接入不同提供商的大语言模型服务。该系统基于 `langchain-core` 库构建的核心抽象层，通过合作伙伴包（Partner Packages）的形式支持多种 LLM 提供商。\n\n## 核心架构\n\n### 集成包结构\n\nLangChain 采用模块化的包结构组织其 LLM 集成：\n\n| 包名称 | 用途 | 核心功能 |\n|--------|------|----------|\n| `langchain-openai` | OpenAI 模型集成 | GPT-4o、GPT-4 等模型调用 |\n| `langchain-anthropic` | Anthropic 模型集成 | Claude 系列模型调用 |\n| `langchain-huggingface` | HuggingFace 集成 | 本地推理和嵌入模型 |\n| `langchain-ollama` | Ollama 本地模型 | 本地部署的开源模型 |\n| `langchain-groq` | Groq 加速推理 | 高速 LLM 推理服务 |\n| `langchain-deepseek` | DeepSeek 模型 | 深度求索模型集成 |\n| `langchain-fireworks` | Fireworks.ai | 高性能推理平台 |\n\n### 类层次结构\n\nLangChain 的 LLM 集成采用分层设计：\n\n```\nBaseLanguageModel (langchain-core)\n    ├── BaseChatModel\n    │   ├── ChatOpenAI (langchain-openai)\n    │   ├── ChatAnthropic (langchain-anthropic)\n    │   └── ...\n    └── BaseLLM\n        ├── OpenAI (langchain-openai)\n        └── ...\n```\n\n资料来源：[README.md:31-36]()\n\n## 快速开始\n\n### 基础安装\n\n使用 pip 安装 LangChain 主包：\n\n```bash\npip install langchain\n```\n\n### 初始化 Chat 模型\n\nLangChain 提供了统一的模型初始化接口：\n\n```python\nfrom langchain.chat_models import init_chat_model\n\nmodel = init_chat_model(\"openai:gpt-5.4\")\nresult = model.invoke(\"Hello, world!\")\n```\n\n资料来源：[README.md:31-36]()\n\n### OpenAI 集成\n\n安装 langchain-openai 包：\n\n```bash\npip install langchain-openai\n```\n\n该包包含与 OpenAI GPT 模型交互的 LangChain 集成，提供对 GPT-4o、GPT-4 等模型的支持。\n\n资料来源：[libs/partners/openai/README.md:1-20]()\n\n### Anthropic 集成\n\n安装 langchain-anthropic 包：\n\n```bash\npip install langchain-anthropic\n```\n\n该包提供与 Anthropic Claude 模型的集成功能，支持通过 LangChain 框架调用 Claude 系列生成模型。\n\n资料来源：[libs/partners/anthropic/README.md:1-18]()\n\n### HuggingFace 集成\n\n基础安装：\n\n```bash\npip install langchain-huggingface\n```\n\n如果需要使用 `HuggingFaceEmbeddings` 或 `HuggingFacePipeline` 进行本地推理，应安装完整版本：\n\n```bash\npip install langchain-huggingface[full]\n```\n\n> **注意**：基础安装不包含 `sentence-transformers` 或 `transformers`。`[full]` 版本包含 `sentence-transformers>=5.2.0` 和 `transformers>=5.0.0`。\n\n> **迁移提示**：从 `langchain-community` 迁移的用户需要注意，旧版接受 `sentence-transformers>=2.2.0`，但 `langchain-huggingface[full]` 要求 `>=5.2.0`。\n\n资料来源：[libs/partners/huggingface/README.md:1-25]()\n\n### Ollama 本地模型\n\n安装 langchain-ollama 包：\n\n```bash\npip install langchain-ollama\n```\n\n该包提供与 Ollama 的集成，支持本地部署的开源大语言模型。\n\n资料来源：[libs/partners/ollama/README.md:1-18]()\n\n## APIChain 与工具调用\n\n### Chain 架构\n\nAPIChain 是 LangChain Classic 中的一个重要组件，它实现了调用 API 并总结响应以回答问题的功能。该链使用请求工具包发送 GET、POST、PATCH、PUT 和 DELETE 请求。\n\n```python\nmodel = ChatOpenAI(model=\"gpt-4o-mini\", temperature=0)\ntoolkit = RequestsToolkit(\n    requests_wrapper=TextRequestsWrapper(headers={}),\n    allow_dangerous_requests=ALLOW_DANGEROUS_REQUESTS,\n)\ntools = toolkit.get_tools()\n\napi_request_chain = (\n    API_URL_PROMPT.partial(api_docs=api_spec)\n    | model.bind_tools(tools, tool_choice=\"any\")\n)\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:1-85]()\n\n### 状态管理\n\nLangChain 使用 LangGraph 进行状态管理：\n\n```python\nclass ChainState(TypedDict):\n    \"\"\"LangGraph state.\"\"\"\n    messages: Annotated[Sequence[BaseMessage], add_messages]\n```\n\n### 工作流图\n\n```mermaid\ngraph TD\n    A[用户问题] --> B[call_tool]\n    B --> C[execute_tool]\n    C --> D[call_model]\n    D --> E[返回结果]\n    \n    B -->|API调用| F[RequestsToolkit]\n    C -->|执行工具| G[HTTP请求]\n    D -->|LLM处理| H[ChatOpenAI]\n```\n\n## 安全性考虑\n\nAPIChain 包含重要的安全警告：\n\n> **安全注意**：此 API 链使用请求工具包向 API 发出 GET、POST、PATCH、PUT 和 DELETE 请求。\n>\n> 请谨慎控制允许使用此链的人员。如果向最终用户公开，用户将能够代表托管代码的服务器发出任意请求。例如，用户可以请求服务器向只能从服务器访问的私有 API 发出请求。\n>\n> 请控制对此工具包的使用权限和网络访问权限。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:85-100]()\n\n## 领域限制\n\n### URL 验证机制\n\nLangChain 提供了 URL 域限制功能，防止恶意请求：\n\n```python\ndef _extract_scheme_and_domain(url: str) -> tuple[str, str]:\n    \"\"\"Extract the scheme + domain from a given URL.\"\"\"\n    parsed_uri = urlparse(url)\n    return parsed_uri.scheme, parsed_uri.netloc\n\ndef _check_in_allowed_domain(url: str, limit_to_domains: Sequence[str]) -> bool:\n    \"\"\"Check if a URL is in the allowed domains.\"\"\"\n    scheme, domain = _extract_scheme_and_domain(url)\n    \n    for allowed_domain in limit_to_domains:\n        allowed_scheme, allowed_domain_ = _extract_scheme_and_domain(allowed_domain)\n        if scheme == allowed_scheme and domain == allowed_domain_:\n            return True\n    return False\n```\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:30-60]()\n\n## 弃用与迁移\n\nLangChain Classic 中的某些组件已被标记为弃用：\n\n```python\n@deprecated(\n    since=\"0.2.13\",\n    removal=\"2.0.0\",\n    alternative=\"langchain.agents.create_agent\",\n    addendum=(\n        \"Build new agents with `create_agent` and bind a tool that issues \"\n        \"the HTTP request.\"\n    ),\n)\nclass APIChain(Chain):\n    \"\"\"Chain that makes API calls...\"\"\"\n```\n\n推荐使用新的 `langchain.agents.create_agent` 方法构建代理。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:60-85]()\n\n## 更多提供商\n\nLangChain 生态系统还支持众多其他 LLM 提供商：\n\n| 提供商 | 包名 | 特点 |\n|--------|------|------|\n| DeepSeek | `langchain-deepseek` | 深度求索模型 |\n| xAI | `langchain-xai` | xAI 官方集成 |\n| Perplexity | `langchain-perplexity` | Perplexity AI |\n| Fireworks | `langchain-fireworks` | 高性能推理 |\n| OpenRouter | `langchain-openrouter` | 统一 API 支持数百模型 |\n| Exa | `langchain-exa` | Web 搜索 API |\n\n## 文档资源\n\n| 资源类型 | 链接 |\n|----------|------|\n| API 参考 | [reference.langchain.com](https://reference.langchain.com/python/langchain_classic) |\n| 概念指南 | [docs.langchain.com](https://docs.langchain.com/oss/python/langchain/overview) |\n| 发布策略 | [docs.langchain.com](https://docs.langchain.com/oss/python/release-policy) |\n| 版本控制 | [docs.langchain.com](https://docs.langchain.com/oss/python/versioning) |\n| 贡献指南 | [docs.langchain.com](https://docs.langchain.com/oss/python/contributing/overview) |\n\n资料来源：[libs/langchain/README.md:1-20]()\n资料来源：[libs/partners/openai/README.md:1-20]()\n\n## 相关链接\n\n- **LangGraph**：用于构建可控代理工作流的框架 - [docs.langchain.com/langgraph](https://docs.langchain.com/oss/python/langgraph/overview)\n- **LangSmith**：用于开发、调试和部署 AI 代理的工具 - [docs.langchain.com/langsmith](https://docs.langchain.com/langsmith/home)\n- **Deep Agents**：基于 LangChain 的高级代理包 - [docs.langchain.com/deepagents](http://docs.langchain.com/oss/python/deepagents/)\n- **LangChain.js**：等效的 JavaScript/TypeScript 库 - [github.com/langchain-ai/langchainjs](https://github.com/langchain-ai/langchainjs)\n\n---\n\n<a id='page-callbacks-tracing'></a>\n\n## 回调与追踪系统\n\n### 相关页面\n\n相关主题：[核心架构与组件](#page-core-architecture)\n\n<details>\n<summary>相关源码文件</summary>\n\n以下源码文件用于生成本页说明：\n\n- [libs/core/langchain_core/tracers/__init__.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tracers/__init__.py)\n- [libs/core/langchain_core/tracers/base.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tracers/base.py)\n- [libs/core/langchain_core/tracers/event_stream.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/tracers/event_stream.py)\n- [libs/core/langchain_core/callbacks/manager.py](https://github.com/langchain-ai/langchain/blob/main/libs/core/langchain_core/callbacks/manager.py)\n</details>\n\n# 回调与追踪系统\n\n## 概述\n\nLangChain 的回调与追踪系统是框架的核心基础设施之一，为 LangChain 组件提供了一套统一的生命周期事件通知和执行追踪机制。该系统使开发者能够在 LangChain 运行期间捕获关键事件、监控执行流程、收集性能指标，并实现自定义的日志记录和监控功能。\n\n回调与追踪系统的主要职责包括：\n\n- **事件传播**：在 Chain、LLM、Tool、Agent 等核心组件的生命周期关键时刻触发回调\n- **执行追踪**：记录组件的输入、输出、执行时间和中间状态\n- **异步支持**：提供异步和同步两种回调处理模式\n- **上下文传递**：通过回调管理器维护和传递调用上下文\n\n资料来源：[libs/core/langchain_core/tracers/__init__.py:1-50]()\n\n## 系统架构\n\n### 核心组件关系\n\nLangChain 的回调与追踪系统由以下几个核心组件构成，它们之间形成清晰的层次结构：\n\n```mermaid\ngraph TD\n    A[CallbackHandler 回调处理器] --> B[BaseCallbackManager 基础回调管理器]\n    A --> C[Tracer 追踪器]\n    C --> D[BaseTracer 基础追踪器]\n    C --> E[EventStreamTracer 事件流追踪器]\n    B --> F[CallbackManager 同步回调管理器]\n    B --> G[AsyncCallbackManager 异步回调管理器]\n    H[Run 运行时对象] --> C\n```\n\n### 组件职责\n\n| 组件类型 | 职责描述 | 位置 |\n|---------|---------|------|\n| CallbackHandler | 定义回调方法接口 | langchain_core.callbacks |\n| Tracer | 追踪器基类，生成 Run 对象 | langchain_core.tracers |\n| CallbackManager | 管理同步回调的执行 | langchain_core.callbacks.manager |\n| AsyncCallbackManager | 管理异步回调的执行 | langchain_core.callbacks.manager |\n| Run | 代表一次执行追踪的运行时对象 | langchain_core.tracers.base |\n\n资料来源：[libs/core/langchain_core/tracers/base.py:1-100]()\n\n## 回调处理器\n\n### CallbackHandler 接口\n\nCallbackHandler 是所有回调处理器的基类接口，定义了组件生命周期中可能被触发的方法。处理器可以继承此接口并选择性重写特定方法来实现自定义行为。\n\n```python\nclass CallbackHandler:\n    \"\"\"回调处理器基类接口\"\"\"\n    \n    def on_llm_start(self, **kwargs) -> None:\n        \"\"\"LLM 调用开始时触发\"\"\"\n        pass\n    \n    def on_llm_end(self, **kwargs) -> None:\n        \"\"\"LLM 调用结束时触发\"\"\"\n        pass\n    \n    def on_chain_start(self, **kwargs) -> None:\n        \"\"\"Chain 执行开始时触发\"\"\"\n        pass\n    \n    def on_chain_end(self, **kwargs) -> None:\n        \"\"\"Chain 执行结束时触发\"\"\"\n        pass\n    \n    def on_tool_start(self, **kwargs) -> None:\n        \"\"\"Tool 调用开始时触发\"\"\"\n        pass\n    \n    def on_tool_end(self, **kwargs) -> None:\n        \"\"\"Tool 调用结束时触发\"\"\"\n        pass\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:1-80]()\n\n### 内置回调处理器\n\nLangChain 提供了多种内置回调处理器，适用于不同的监控和日志需求：\n\n| 处理器名称 | 用途 | 关键功能 |\n|-----------|------|---------|\n| StdOutCallbackHandler | 标准输出日志 | 在控制台打印执行信息 |\n| TracingCallbackHandler | 分布式追踪 | 集成第三方追踪系统 |\n| LangChainTracer | LangChain 原生追踪 | 记录 Run 到追踪后端 |\n| FileCallbackHandler | 文件日志 | 写入日志到文件 |\n\n## 追踪器系统\n\n### Tracer 抽象基类\n\nTracer 是专门用于创建和记录 Run 对象的组件。每个 Run 代表一次被追踪的执行单元，包含执行过程中的元数据、输入输出等信息。\n\n```mermaid\ngraph LR\n    A[开始追踪] --> B[创建 Run 对象]\n    B --> C[记录事件]\n    C --> D{事件类型}\n    D -->|start| E[on_run_start]\n    D -->|end| F[on_run_end]\n    D -->|error| G[on_run_error]\n    E --> H[更新 Run 状态]\n    F --> H\n    G --> H\n    H --> I[持久化或发送]\n```\n\n资料来源：[libs/core/langchain_core/tracers/base.py:1-150]()\n\n### BaseTracer 实现\n\nBaseTracer 提供了 Tracer 接口的基础实现，处理 Run 对象的创建和状态管理：\n\n```python\nclass BaseTracer(BaseCallbackHandler, ABC):\n    \"\"\"追踪器基类实现\"\"\"\n    \n    def __init__(self):\n        self.run_dict: dict[str, Run] = {}\n        self._active_runs: set[str] = set()\n    \n    @abstractmethod\n    def _generate_run_id(self) -> str:\n        \"\"\"生成唯一的 Run 标识符\"\"\"\n        pass\n```\n\n资料来源：[libs/core/langchain_core/tracers/base.py:50-100]()\n\n### EventStreamTracer 事件流追踪器\n\nEventStreamTracer 是一种特殊的追踪器实现，它通过事件流的方式持续输出追踪事件，适用于需要实时监控的场景：\n\n```mermaid\ngraph TD\n    A[执行组件] --> B[EventStreamTracer]\n    B --> C[事件序列化器]\n    C --> D[事件缓冲区]\n    D --> E[流式输出]\n    E --> F[消费者/监控仪表盘]\n```\n\n资料来源：[libs/core/langchain_core/tracers/event_stream.py:1-100]()\n\nEventStreamTracer 的核心特性包括：\n\n- **流式输出**：实时将事件推送至消费者\n- **事件缓冲**：批量处理事件以优化性能\n- **序列化支持**：将 Run 对象转换为可传输格式\n\n## 回调管理器\n\n### CallbackManager\n\nCallbackManager 是同步回调执行的管理器，负责注册、调用和清理回调处理器：\n\n```mermaid\ngraph TD\n    A[请求进入] --> B[CallbackManager]\n    B --> C[遍历已注册处理器]\n    C --> D{按顺序触发方法}\n    D --> E[on_chain_start]\n    D --> F[on_llm_start]\n    D --> G[on_tool_start]\n    E --> H[执行组件逻辑]\n    H --> I[on_chain_end]\n    I --> J[on_llm_end]\n    J --> K[on_tool_end]\n    K --> L[返回结果]\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:100-200]()\n\n### 回调管理器核心方法\n\n| 方法名 | 参数 | 返回类型 | 功能描述 |\n|--------|------|---------|---------|\n| add_handler | handler, name | None | 注册新的回调处理器 |\n| remove_handler | name | None | 移除指定名称的处理器 |\n| set_handlers | handlers | None | 替换所有已注册的处理器 |\n| clear | None | None | 清空所有处理器 |\n| get_handler | name | CallbackHandler | 根据名称获取处理器 |\n\n### 异步回调管理\n\nAsyncCallbackManager 提供与 CallbackManager 类似的功能，但专门用于异步执行环境：\n\n```python\nclass AsyncCallbackManager(BaseCallbackManager):\n    \"\"\"异步回调管理器\"\"\"\n    \n    async def ahandle_chain_start(\n        self,\n        name: str,\n        serialized: dict[str, Any],\n        inputs: dict[str, Any],\n        run_id: UUID,\n        parent_run_id: UUID | None = None,\n        **kwargs: Any,\n    ) -> AsyncManagerGetResults:\n        \"\"\"异步处理 Chain 开始事件\"\"\"\n        pass\n    \n    async def ahandle_chain_end(\n        self,\n        outputs: dict[str, Any],\n        run_id: UUID,\n        **kwargs: Any,\n    ) -> None:\n        \"\"\"异步处理 Chain 结束事件\"\"\"\n        pass\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:200-300]()\n\n## Run 对象模型\n\n### Run 数据结构\n\nRun 是追踪系统的核心数据模型，代表一次可追踪的执行单元：\n\n```mermaid\nclassDiagram\n    class Run {\n        +str id\n        +str name\n        +str session_id\n        +str run_type\n        +dict~str, Any~ inputs\n        +dict~str, Any~ outputs\n        +datetime start_time\n        +datetime end_time\n        +str|None parent_run_id\n        +dict~str, Any~ extra\n        +str|None error\n    }\n    \n    class ChainRun {\n        +str run_type = \"chain\"\n    }\n    \n    class LLMRun {\n        +str run_type = \"llm\"\n        +int token_usage\n    }\n    \n    class ToolRun {\n        +str run_type = \"tool\"\n    }\n    \n    Run <|-- ChainRun\n    Run <|-- LLMRun\n    Run <|-- ToolRun\n```\n\n### Run 追踪字段\n\n| 字段名 | 类型 | 可选 | 说明 |\n|-------|------|------|------|\n| id | str | 否 | Run 的唯一标识符 |\n| name | str | 否 | Run 的名称 |\n| run_type | str | 否 | Run 类型（chain/llm/tool） |\n| session_id | str | 是 | 所属会话标识 |\n| parent_run_id | str | 是 | 父级 Run 标识 |\n| inputs | dict | 是 | 输入参数 |\n| outputs | dict | 是 | 输出结果 |\n| start_time | datetime | 否 | 开始时间 |\n| end_time | datetime | 是 | 结束时间 |\n| error | str | 是 | 错误信息 |\n\n资料来源：[libs/core/langchain_core/tracers/base.py:100-200]()\n\n## 使用示例\n\n### 基本用法\n\n```python\nfrom langchain_core.callbacks import CallbackManager, StdOutCallbackHandler\nfrom langchain_openai import ChatOpenAI\n\n# 创建回调管理器\ncallback_manager = CallbackManager(handlers=[StdOutCallbackHandler()])\n\n# 创建带回调的 LLM 实例\nllm = ChatOpenAI(\n    model=\"gpt-4\",\n    callback_manager=callback_manager\n)\n\n# 调用时自动触发回调\nresponse = llm.invoke(\"Hello, world!\")\n```\n\n### 自定义回调处理器\n\n```python\nfrom langchain_core.callbacks import BaseCallbackHandler\nfrom langchain_core.tracers.base import BaseTracer\n\nclass CustomTracer(BaseTracer):\n    \"\"\"自定义追踪器\"\"\"\n    \n    def __init__(self):\n        super().__init__()\n        self.events = []\n    \n    def _generate_run_id(self) -> str:\n        return str(uuid.uuid4())\n    \n    def on_chain_start(self, serialized, inputs, **kwargs):\n        self.events.append({\n            \"type\": \"chain_start\",\n            \"inputs\": inputs\n        })\n    \n    def on_chain_end(self, outputs, **kwargs):\n        self.events.append({\n            \"type\": \"chain_end\", \n            \"outputs\": outputs\n        })\n```\n\n资料来源：[libs/core/langchain_core/callbacks/manager.py:300-400]()\n\n### 父子 Run 追踪\n\n```python\nfrom langchain_core.callbacks import CallbackManager\n\n# 在嵌套调用中自动维护父子关系\ncallback_manager = CallbackManager(handlers=[tracer])\n\n# 父 Chain\nparent_chain = Chain(callback_manager=callback_manager)\n\n# 子 Chain（自动关联 parent_run_id）\nchild_chain = Chain(callback_manager=callback_manager)\n\nresult = parent_chain.invoke(input, config={\"callbacks\": callback_manager})\n```\n\n## 配置选项\n\n### 全局回调配置\n\n| 配置项 | 类型 | 默认值 | 说明 |\n|-------|------|-------|------|\n| callbacks | CallbackManager | None | 全局回调管理器 |\n| verbose | bool | False | 启用详细输出 |\n| tracing_enabled | bool | True | 启用追踪功能 |\n| tracing_endpoint | str | None | 追踪服务端点 |\n| tracing_headers | dict | None | 追踪请求头 |\n\n### 环境变量\n\n| 变量名 | 值 | 作用 |\n|-------|-----|------|\n| LANGCHAIN_TRACING_V2 | true/false | 启用 V2 追踪 |\n| LANGCHAIN_ENDPOINT | URL | 追踪服务端点 |\n| LANGCHAIN_API_KEY | string | API 认证密钥 |\n| LANGCHAIN_PROJECT | string | 追踪项目名称 |\n\n## 安全注意事项\n\n在 LangChain 的 APIChain 文档中明确指出回调与追踪系统的安全考量：\n\n> **安全注意**：API 链使用 requests 工具包向 API 发起 `GET`、`POST`、`PATCH`、`PUT` 和 `DELETE` 请求。\n> \n> 请谨慎控制谁可以使用此链以及它具有何种网络访问权限。\n> \n> 如果向最终用户公开，请考虑用户将能够代表服务器发起任意请求。\n\n资料来源：[libs/langchain/langchain_classic/chains/api/base.py:40-60]()\n\n### 安全最佳实践\n\n- 限制回调中发送的敏感数据范围\n- 在生产环境中使用 HTTPS 传输追踪数据\n- 实施回调数据的访问控制策略\n- 定期审计追踪日志内容\n\n## 生态集成\n\n### 合作伙伴包中的追踪支持\n\n多个 LangChain 合作伙伴包内置了回调与追踪系统支持：\n\n| 集成包 | 追踪支持 | 主要功能 |\n|-------|---------|---------|\n| langchain-openai | ✅ | OpenAI API 调用追踪 |\n| langchain-anthropic | ✅ | Anthropic API 调用追踪 |\n| langchain-huggingface | ✅ | Transformers 本地推理追踪 |\n| langchain-ollama | ✅ | Ollama 本地模型追踪 |\n| langchain-deepseek | ✅ | DeepSeek API 调用追踪 |\n\n资料来源：[libs/partners/openai/README.md](), [libs/partners/anthropic/README.md](), [libs/partners/huggingface/README.md]()\n\n## 总结\n\nLangChain 的回调与追踪系统为框架提供了强大的可观测性和扩展性能力。通过统一的回调接口、灵活的追踪机制和完善的 Run 数据模型，开发者可以轻松实现：\n\n- 执行过程监控和日志记录\n- 性能指标收集和分析\n- 分布式追踪集成\n- 自定义监控和告警系统\n\n该系统设计遵循了模块化原则，允许开发者根据需求选择性地使用回调或追踪功能，或将两者结合使用以获得完整的应用可观测性。\n\n---\n\n---\n\n## Doramagic 踩坑日志\n\n项目：langchain-ai/langchain\n\n摘要：发现 6 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：能力坑 - 能力判断依赖假设。\n\n## 1. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:552661142 | https://github.com/langchain-ai/langchain | README/documentation is current enough for a first validation pass.\n\n## 2. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | last_activity_observed missing\n\n## 3. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n\n## 4. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n\n## 5. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | issue_or_pr_quality=unknown\n\n## 6. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | release_recency=unknown\n\n<!-- canonical_name: langchain-ai/langchain; human_manual_source: deepwiki_human_wiki -->\n",
      "summary": "DeepWiki/Human Wiki 完整输出，末尾追加 Discovery Agent 踩坑日志。",
      "title": "Human Manual / 人类版说明书"
    },
    "pitfall_log": {
      "asset_id": "pitfall_log",
      "filename": "PITFALL_LOG.md",
      "markdown": "# Pitfall Log / 踩坑日志\n\n项目：langchain-ai/langchain\n\n摘要：发现 6 个潜在踩坑项，其中 0 个为 high/blocking；最高优先级：能力坑 - 能力判断依赖假设。\n\n## 1. 能力坑 · 能力判断依赖假设\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：README/documentation is current enough for a first validation pass.\n- 对用户的影响：假设不成立时，用户拿不到承诺的能力。\n- 建议检查：将假设转成下游验证清单。\n- 防护动作：假设必须转成验证项；没有验证结果前不能写成事实。\n- 证据：capability.assumptions | github_repo:552661142 | https://github.com/langchain-ai/langchain | README/documentation is current enough for a first validation pass.\n\n## 2. 维护坑 · 维护活跃度未知\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：未记录 last_activity_observed。\n- 对用户的影响：新项目、停更项目和活跃项目会被混在一起，推荐信任度下降。\n- 建议检查：补 GitHub 最近 commit、release、issue/PR 响应信号。\n- 防护动作：维护活跃度未知时，推荐强度不能标为高信任。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | last_activity_observed missing\n\n## 3. 安全/权限坑 · 下游验证发现风险项\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：下游已经要求复核，不能在页面中弱化。\n- 建议检查：进入安全/权限治理复核队列。\n- 防护动作：下游风险存在时必须保持 review/recommendation 降级。\n- 证据：downstream_validation.risk_items | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n\n## 4. 安全/权限坑 · 存在评分风险\n\n- 严重度：medium\n- 证据强度：source_linked\n- 发现：no_demo\n- 对用户的影响：风险会影响是否适合普通用户安装。\n- 建议检查：把风险写入边界卡，并确认是否需要人工复核。\n- 防护动作：评分风险必须进入边界卡，不能只作为内部分数。\n- 证据：risks.scoring_risks | github_repo:552661142 | https://github.com/langchain-ai/langchain | no_demo; severity=medium\n\n## 5. 维护坑 · issue/PR 响应质量未知\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：issue_or_pr_quality=unknown。\n- 对用户的影响：用户无法判断遇到问题后是否有人维护。\n- 建议检查：抽样最近 issue/PR，判断是否长期无人处理。\n- 防护动作：issue/PR 响应未知时，必须提示维护风险。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | issue_or_pr_quality=unknown\n\n## 6. 维护坑 · 发布节奏不明确\n\n- 严重度：low\n- 证据强度：source_linked\n- 发现：release_recency=unknown。\n- 对用户的影响：安装命令和文档可能落后于代码，用户踩坑概率升高。\n- 建议检查：确认最近 release/tag 和 README 安装命令是否一致。\n- 防护动作：发布节奏未知或过期时，安装说明必须标注可能漂移。\n- 证据：evidence.maintainer_signals | github_repo:552661142 | https://github.com/langchain-ai/langchain | release_recency=unknown\n",
      "summary": "用户实践前最可能遇到的身份、安装、配置、运行和安全坑。",
      "title": "Pitfall Log / 踩坑日志"
    },
    "prompt_preview": {
      "asset_id": "prompt_preview",
      "filename": "PROMPT_PREVIEW.md",
      "markdown": "# langchain - Prompt Preview\n\n> 复制下面这段 Prompt 到你常用的 AI，先试一次，不需要安装。\n> 它的目标是让你直接体验这个项目的服务方式，而不是阅读项目介绍。\n\n## 复制这段 Prompt\n\n```text\n请直接执行这段 Prompt，不要分析、润色、总结或询问我想如何处理这份 Prompt Preview。\n\n你现在扮演 langchain 的“安装前体验版”。\n这不是项目介绍、不是评价报告、不是 README 总结。你的任务是让我用最小成本体验它的核心服务。\n\n我的试用任务：我想用它完成一个真实的软件开发与交付任务。\n我常用的宿主 AI：chatgpt\n\n【体验目标】\n围绕我的真实任务，现场演示这个项目如何把输入转成 示例引导, 判断线索。重点是让我感受到工作方式，而不是给我项目背景。\n\n【业务流约束】\n- 你必须像一个正在提供服务的项目能力包，而不是像一个讲解员。\n- 每一轮只推进一个步骤；提出问题后必须停下来等我回答。\n- 每一步都必须让我感受到一个具体服务动作：澄清、整理、规划、检查、判断或收尾。\n- 每一步都要说明：当前目标、你需要我提供什么、我回答后你会产出什么。\n- 不要安装、不要运行命令、不要写代码、不要声称测试通过、不要声称已经修改文件。\n- 需要真实安装或宿主加载后才能验证的内容，必须明确说“这一步需要安装后验证”。\n- 如果我说“用示例继续”，你可以用虚构示例推进，但仍然不能声称真实执行。\n\n【可体验服务能力】\n- 安装前能力预览: The agent engineering platform. Available in TypeScript! 输入：用户任务, 当前 AI 对话上下文；输出：示例引导, 判断线索。\n\n【必须安装后才可验证的能力】\n- 暂无明确的运行时能力线索。\n\n【核心服务流】\n请严格按这个顺序带我体验。不要一次性输出完整流程：\n1. page-overview：LangChain概述。围绕“LangChain概述”模拟一次用户任务，不展示安装或运行结果。\n2. page-core-architecture：核心架构与组件。围绕“核心架构与组件”模拟一次用户任务，不展示安装或运行结果。\n3. page-runnable：Runnable与链式调用。围绕“Runnable与链式调用”模拟一次用户任务，不展示安装或运行结果。\n4. page-agents：Agent代理系统。围绕“Agent代理系统”模拟一次用户任务，不展示安装或运行结果。\n5. page-tools：工具与工具包。围绕“工具与工具包”模拟一次用户任务，不展示安装或运行结果。\n\n【核心能力体验剧本】\n每一步都必须按“输入 -> 服务动作 -> 中间产物”执行。不要只说流程名：\n1. page-overview\n输入：用户提供的“LangChain概述”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n2. page-core-architecture\n输入：用户提供的“核心架构与组件”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n3. page-runnable\n输入：用户提供的“Runnable与链式调用”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n4. page-agents\n输入：用户提供的“Agent代理系统”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n5. page-tools\n输入：用户提供的“工具与工具包”相关信息。\n服务动作：模拟项目在这一步的核心判断和整理方式。\n中间产物：一个可检查的小结果。\n\n【项目服务规则】\n这些规则决定你如何服务用户。不要解释规则本身，而要在每一步执行时遵守：\n- 先确认用户任务、输入材料和成功标准，再模拟项目能力。\n- 每一步都必须形成可检查的小产物，并等待用户确认后再继续。\n- 凡是需要安装、调用工具或访问外部服务的能力，都必须标记为安装后验证。\n\n【每一步的服务约束】\n- Step 1 / page-overview：Step 1 必须围绕“LangChain概述”形成一个小中间产物，并等待用户确认。\n- Step 2 / page-core-architecture：Step 2 必须围绕“核心架构与组件”形成一个小中间产物，并等待用户确认。\n- Step 3 / page-runnable：Step 3 必须围绕“Runnable与链式调用”形成一个小中间产物，并等待用户确认。\n- Step 4 / page-agents：Step 4 必须围绕“Agent代理系统”形成一个小中间产物，并等待用户确认。\n- Step 5 / page-tools：Step 5 必须围绕“工具与工具包”形成一个小中间产物，并等待用户确认。\n\n【边界与风险】\n- 不要声称已经安装、运行、调用 API、读写本地文件或完成真实任务。\n- 安装前预览只能展示工作方式，不能证明兼容性、性能或输出质量。\n\n【可追溯依据】\n这些路径只用于你内部校验或在我追问“依据是什么”时简要引用。不要在首次回复主动展开：\n- https://github.com/langchain-ai/langchain\n- https://github.com/langchain-ai/langchain#readme\n- README.md\n- libs/core/langchain_core/__init__.py\n- libs/langchain/langchain_classic/__init__.py\n- libs/core/langchain_core/messages/__init__.py\n- libs/core/langchain_core/output_parsers/__init__.py\n- libs/core/langchain_core/prompts/__init__.py\n- libs/core/langchain_core/callbacks/base.py\n- libs/core/langchain_core/runnables/base.py\n- libs/core/langchain_core/runnables/config.py\n- libs/core/langchain_core/runnables/branch.py\n\n【首次问题规则】\n- 首次三问必须先确认用户目标、成功标准和边界，不要提前进入工具、安装或实现细节。\n- 如果后续需要技术条件、文件路径或运行环境，必须等用户确认目标后再追问。\n\n首次回复必须只输出下面 4 个部分：\n1. 体验开始：用 1 句话说明你将带我体验 langchain 的核心服务。\n2. 当前步骤：明确进入 Step 1，并说明这一步要解决什么。\n3. 你会如何服务我：说明你会先改变我完成任务的哪个动作。\n4. 只问我 3 个问题，然后停下等待回答。\n\n首次回复禁止输出：后续完整流程、证据清单、安装命令、项目评价、营销文案、已经安装或运行的说法。\n\nStep 1 / brainstorming 的二轮协议：\n- 我回答首次三问后，你仍然停留在 Step 1 / brainstorming，不要进入 Step 2。\n- 第二次回复必须产出 6 个部分：澄清后的任务定义、成功标准、边界条件、\n  2-3 个可选方案、每个方案的权衡、推荐方案。\n- 第二次回复最后必须问我是否确认推荐方案；只有我明确确认后，才能进入下一步。\n- 第二次回复禁止输出 git worktree、代码计划、测试文件、命令或真实执行结果。\n\n后续对话规则：\n- 我回答后，你先完成当前步骤的中间产物并等待确认；只有我确认后，才能进入下一步。\n- 每一步都要生成一个小的中间产物，例如澄清后的目标、计划草案、测试意图、验证清单或继续/停止判断。\n- 所有演示都写成“我会建议/我会引导/这一步会形成”，不要写成已经真实执行。\n- 不要声称已经测试通过、文件已修改、命令已运行或结果已产生。\n- 如果某个能力必须安装后验证，请直接说“这一步需要安装后验证”。\n- 如果证据不足，请明确说“证据不足”，不要补事实。\n```\n",
      "summary": "不安装项目也能感受能力节奏的安全试用 Prompt。",
      "title": "Prompt Preview / 安装前试用 Prompt"
    },
    "quick_start": {
      "asset_id": "quick_start",
      "filename": "QUICK_START.md",
      "markdown": "# Quick Start / 官方入口\n\n项目：langchain-ai/langchain\n\n## 官方安装入口\n\n### Python / pip · 官方安装入口\n\n```bash\npip install langchain\n```\n\n来源：https://github.com/langchain-ai/langchain#readme\n\n## 来源\n\n- repo: https://github.com/langchain-ai/langchain\n- docs: https://github.com/langchain-ai/langchain#readme\n",
      "summary": "从项目官方 README 或安装文档提取的开工入口。",
      "title": "Quick Start / 官方入口"
    }
  },
  "validation_id": "dval_e8be47b3d404457fa44753c525c9108f"
}
