LLM 补全绑定
大语言模型(LLM)补全绑定
相关源文件
以下文件为本维基页面的生成提供了上下文:
docs/RoleSpecificLLMConfiguration-zh.mddocs/RoleSpecificLLMConfiguration.mdexamples/generate_query.pyexamples/lightrag_azure_openai_demo.pylightrag/llm/anthropic.pylightrag/llm/azure_openai.pylightrag/llm/bedrock.pylightrag/llm/gemini.pylightrag/llm/hf.pylightrag/llm/jina.pylightrag/llm/llama_index_impl.pylightrag/llm/lmdeploy.pylightrag/llm/lollms.pylightrag/llm/nvidia_openai.pylightrag/llm/ollama.pylightrag/llm/openai.pylightrag/llm/zhipu.pytests/test_api_config_gemini.pytests/test_api_config_role_max_async.pytests/test_bedrock_llm.pytests/test_gemini_llm.pytests/test_keyword_extraction_drivers.pytests/test_llm_role_runtime.pytests/test_openai_length_finish_reason.pytests/test_utils_llm_cache.pytests/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:提供商特定的参数,如temperature、top_p或response_format。
大语言模型(LLM)补全执行流程
下图展示了请求如何从检索增强生成(RAG)引擎传递到特定提供商。
图表:大语言模型(LLM)请求管线
来源: lightrag/llm/openai.py:211-230、lightrag/llm/ollama.py:83-98、lightrag/llm/bedrock.py:167-181、lightrag/llm/gemini.py:223-240
支持的提供商
LightRAG 支持多种大语言模型(LLM)后端。每个绑定通过 pipmaster 处理自身的库依赖,实现按需安装 lightrag/llm/openai.py:8-13。
| 提供商 | 实现类/函数 | 主要特性 |
|---|---|---|
| OpenAI | openai_complete_if_cache | Langfuse 可观测性、base64 嵌入向量、tiktoken 集成。 |
| Azure OpenAI | azure_openai_complete | 围绕 OpenAI 实现的兼容性封装。 |
| Ollama | _ollama_model_if_cache | 本地推理支持、云端模型检测、图像输入处理。 |
| Bedrock | bedrock_complete_if_cache | AWS SigV4 认证、Converse API、推理内容跳过。 |
| Gemini | gemini_complete_if_cache | Vertex AI 支持、原生 JSON 模式转换。 |
| Anthropic | anthropic_complete_if_cache | Messages API、流式事件、图像/文本内容块。 |
| ZhipuAI | zhipu_complete_if_cache | 官方"思考"支持、GLM 系列优化。 |
| LlamaIndex | llama_index_complete | 与 llama-index 核心 LLM 和 Settings 对象集成。 |
来源: lightrag/llm/openai.py:122-207、lightrag/llm/azure_openai.py:12-16、lightrag/llm/ollama.py:155-172、lightrag/llm/bedrock.py:167-181、lightrag/llm/gemini.py:79-129、lightrag/llm/anthropic.py:52-62、lightrag/llm/zhipu.py:43-68、lightrag/llm/llama_index_impl.py:94-101
技术实现细节
通过 Tenacity 实现重试逻辑
所有主要绑定都使用 tenacity 库来处理瞬时故障,例如速率限制(RateLimitError)、连接问题(APIConnectionError)和超时(APITimeoutError)。标准策略是指数退避,并设置最大尝试次数(通常为 3 到 5 次)lightrag/llm/openai.py:211-220、lightrag/llm/bedrock.py:158-166。
结构化输出(JSON 模式)
LightRAG 高度依赖结构化输出来进行实体和关键词提取。
- OpenAI/Zhipu: 直接支持
response_format={"type": "json_object"}lightrag/llm/openai.py:255-265、lightrag/llm/zhipu.py:104-112。 - Ollama: 将 OpenAI 风格的
response_format转换为 Ollama 原生的format="json"lightrag/llm/ollama.py:55-81。 - Gemini: 将模式转换为
response_mime_type和response_json_schemalightrag/llm/gemini.py:164-169。
思维链(COT)与推理
对于输出推理内容的模型(如 DeepSeek 或启用了思考功能的 Zhipu GLM-4),LightRAG 可以保留这些思考过程。如果 enable_cot 为 True,推理内容会被包裹在 `` 标签中,并附加到最终响应之前 lightrag/llm/zhipu.py:147-150、lightrag/llm/openai.py:318-325。
通过 Langfuse 实现可观测性
OpenAI 绑定包含与 Langfuse 的可选集成。如果在环境中检测到 LANGFUSE_PUBLIC_KEY 和 LANGFUSE_SECRET_KEY,绑定会将标准的 AsyncOpenAI 客户端替换为 Langfuse 检测版本 lightrag/llm/openai.py:43-54。
提供商特定逻辑流程
下图展示了不同提供商如何处理从 LightRAG 内部参数到其特定 API 结构的转换。
图表:参数标准化与 API 调用
来源: lightrag/llm/openai.py:78-87、lightrag/llm/ollama.py:55-82、lightrag/llm/gemini.py:148-180、lightrag/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-312、lightrag/llm/ollama.py:173-190、lightrag/llm/anthropic.py:183-202