agentic_huge_data_base / wiki
页面 LightRAG · 3.1 存储抽象与接口·DeepWiki 中文全文译文

3.1 · 存储抽象与接口(Storage Abstractions and Interfaces)

轻量图谱增强检索 · 聚焦本章的模块关系、源码依据与实现要点。

项目LightRAG 章节3.1 状态全文译文 模块图谱与关系、检索、召回与索引、存储与持久化、文档对象与元数据
源码线索
  • lightrag/base.py
  • lightrag/kg/__init__.py
  • lightrag/lightrag.py
  • lightrag/operate.py
  • lightrag/prompt.py
  • lightrag/types.py
  • lightrag/utils.py
模块标签
  • 图谱与关系
  • 检索、召回与索引
  • 存储与持久化
  • 文档对象与元数据
  • 接口与服务契约

章节正文

LLM 补全绑定

大语言模型(LLM)补全绑定

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • docs/RoleSpecificLLMConfiguration-zh.md
  • docs/RoleSpecificLLMConfiguration.md
  • examples/generate_query.py
  • examples/lightrag_azure_openai_demo.py
  • lightrag/llm/anthropic.py
  • lightrag/llm/azure_openai.py
  • lightrag/llm/bedrock.py
  • lightrag/llm/gemini.py
  • lightrag/llm/hf.py
  • lightrag/llm/jina.py
  • lightrag/llm/llama_index_impl.py
  • lightrag/llm/lmdeploy.py
  • lightrag/llm/lollms.py
  • lightrag/llm/nvidia_openai.py
  • lightrag/llm/ollama.py
  • lightrag/llm/openai.py
  • lightrag/llm/zhipu.py
  • tests/test_api_config_gemini.py
  • tests/test_api_config_role_max_async.py
  • tests/test_bedrock_llm.py
  • tests/test_gemini_llm.py
  • tests/test_keyword_extraction_drivers.py
  • tests/test_llm_role_runtime.py
  • tests/test_openai_length_finish_reason.py
  • tests/test_utils_llm_cache.py
  • tests/test_zhipu_llm.py

LightRAG 中的大语言模型(LLM)补全绑定层提供了一个标准化接口,用于与各种大语言模型(LLM)提供商进行交互。该层抽象了各提供商特有的 SDK 和 API 差异,为文本生成、结构化输出和流式传输提供了统一的异步接口。

核心架构与数据流

LightRAG 通过两种主要模式与大语言模型(LLM)交互:complete(高级封装)和 complete_if_cache(带重试逻辑的实现)。_if_cache 的命名约定是历史遗留的;虽然它暗示了缓存功能,但这些函数的主要作用是管理原始 API 调用、处理提供商特定的格式,并实现健壮的重试逻辑。

标准化接口

大多数补全绑定遵循一致的签名:

  • model:模型标识符(例如 "gpt-4o"、"glm-4-flash")。
  • prompt:用户输入的字符串。
  • system_prompt:可选的系统级指令。
  • history_messages:对话轮次列表。
  • enable_cot:布尔值,用于切换思维链(推理)的保留。
  • **kwargs:提供商特定的参数,如 temperaturetop_presponse_format
大语言模型(LLM)补全执行流程

下图展示了请求如何从检索增强生成(RAG)引擎传递到特定提供商。

图表:大语言模型(LLM)请求管线

LightRAG · 大语言模型(LLM)补全执行流程 · 图 1
LightRAG · 大语言模型(LLM)补全执行流程 · 图 1

来源: lightrag/llm/openai.py:211-230lightrag/llm/ollama.py:83-98lightrag/llm/bedrock.py:167-181lightrag/llm/gemini.py:223-240

支持的提供商

LightRAG 支持多种大语言模型(LLM)后端。每个绑定通过 pipmaster 处理自身的库依赖,实现按需安装 lightrag/llm/openai.py:8-13

提供商实现类/函数主要特性
OpenAIopenai_complete_if_cacheLangfuse 可观测性、base64 嵌入向量、tiktoken 集成。
Azure OpenAIazure_openai_complete围绕 OpenAI 实现的兼容性封装。
Ollama_ollama_model_if_cache本地推理支持、云端模型检测、图像输入处理。
Bedrockbedrock_complete_if_cacheAWS SigV4 认证、Converse API、推理内容跳过。
Geminigemini_complete_if_cacheVertex AI 支持、原生 JSON 模式转换。
Anthropicanthropic_complete_if_cacheMessages API、流式事件、图像/文本内容块。
ZhipuAIzhipu_complete_if_cache官方"思考"支持、GLM 系列优化。
LlamaIndexllama_index_completellama-index 核心 LLM 和 Settings 对象集成。

来源: lightrag/llm/openai.py:122-207lightrag/llm/azure_openai.py:12-16lightrag/llm/ollama.py:155-172lightrag/llm/bedrock.py:167-181lightrag/llm/gemini.py:79-129lightrag/llm/anthropic.py:52-62lightrag/llm/zhipu.py:43-68lightrag/llm/llama_index_impl.py:94-101

技术实现细节

通过 Tenacity 实现重试逻辑

所有主要绑定都使用 tenacity 库来处理瞬时故障,例如速率限制(RateLimitError)、连接问题(APIConnectionError)和超时(APITimeoutError)。标准策略是指数退避,并设置最大尝试次数(通常为 3 到 5 次)lightrag/llm/openai.py:211-220lightrag/llm/bedrock.py:158-166

结构化输出(JSON 模式)

LightRAG 高度依赖结构化输出来进行实体和关键词提取。

  • OpenAI/Zhipu: 直接支持 response_format={"type": "json_object"} lightrag/llm/openai.py:255-265lightrag/llm/zhipu.py:104-112
  • Ollama: 将 OpenAI 风格的 response_format 转换为 Ollama 原生的 format="json" lightrag/llm/ollama.py:55-81
  • Gemini: 将模式转换为 response_mime_typeresponse_json_schema lightrag/llm/gemini.py:164-169
思维链(COT)与推理

对于输出推理内容的模型(如 DeepSeek 或启用了思考功能的 Zhipu GLM-4),LightRAG 可以保留这些思考过程。如果 enable_cot 为 True,推理内容会被包裹在 `` 标签中,并附加到最终响应之前 lightrag/llm/zhipu.py:147-150lightrag/llm/openai.py:318-325

通过 Langfuse 实现可观测性

OpenAI 绑定包含与 Langfuse 的可选集成。如果在环境中检测到 LANGFUSE_PUBLIC_KEYLANGFUSE_SECRET_KEY,绑定会将标准的 AsyncOpenAI 客户端替换为 Langfuse 检测版本 lightrag/llm/openai.py:43-54

提供商特定逻辑流程

下图展示了不同提供商如何处理从 LightRAG 内部参数到其特定 API 结构的转换。

图表:参数标准化与 API 调用

LightRAG · 提供商特定逻辑流程 · 图 2
LightRAG · 提供商特定逻辑流程 · 图 2

来源: lightrag/llm/openai.py:78-87lightrag/llm/ollama.py:55-82lightrag/llm/gemini.py:148-180lightrag/llm/bedrock.py:55-64

流式传输支持

大多数提供商(OpenAI、Ollama、Anthropic 等)都支持流式传输。当在 kwargs 中传递 stream=True 时,函数会返回一个 AsyncIterator[str] 而不是单个字符串。

  • Anthropic: 使用内部的 stream_response 辅助函数来迭代消息事件 lightrag/llm/anthropic.py:183-202
  • Ollama: 使用 inner() 异步生成器从 Ollama 聊天流中产生内容 lightrag/llm/ollama.py:176-190

来源: lightrag/llm/openai.py:295-312lightrag/llm/ollama.py:173-190lightrag/llm/anthropic.py:183-202