菜单

LLM 组件

相关源文件

LLM 组件是 PrivateGPT 的核心子系统,负责初始化、配置和与各种语言模型提供商进行交互。它抽象了本地和云端 LLM 实现之间的差异,为系统的其余部分提供了一个统一的接口。该组件支持多种 LLM 后端,包括本地模型(Llama.cpp, Ollama)和云服务(OpenAI, Azure OpenAI, Google Gemini, AWS Sagemaker)。

来源: private_gpt/components/llm/llm_component.py18-22

组件架构

LLM 组件被实现为一个单例类,该类根据配置设置初始化相应的 LLM 实现。

该组件使用依赖注入来接收应用程序设置并初始化相应的 LLM 实现。它还处理基于所选模型的 tokenizer 设置和提示格式化。

来源: private_gpt/components/llm/llm_component.py18-44

初始化过程

LLM 组件的初始化过程遵循以下步骤

  1. 通过依赖注入接收应用程序设置
  2. 如果指定,配置全局 tokenizer(用于更精确的 token 计数)
  3. 从设置中确定 LLM 模式
  4. 根据模式初始化相应的 LLM 实现
  5. 配置模型特定的参数

来源: private_gpt/components/llm/llm_component.py22-44 private_gpt/components/llm/llm_component.py45-225

支持的 LLM 模式

LLM 组件支持通过不同模式的多种 LLM 后端

模式描述提供商主要功能
llamacpp使用 Llama.cpp 的本地 LLM本地完整的本地执行,GPU 加速
ollama使用 Ollama 的本地 LLM本地简易的模型管理,容器化
openai使用 OpenAI API 的云端 LLMOpenAI高性能,最新模型
openailikeOpenAI 兼容 API (LocalAI, vLLM)多种兼容 OpenAI 的自定义模型
azopenaiMicrosoft Azure OpenAI 服务MicrosoftAzure 基础架构上的 OpenAI 模型
sagemakerAWS SageMaker 托管模型AmazonAWS 基础架构上的自定义模型
geminiGoogle Gemini 模型GoogleGoogle 的最新模型
mock用于测试的 Mock LLMNone无真实 LLM 测试

来源: private_gpt/components/llm/llm_component.py45-225 fern/docs/pages/manual/llms.mdx1-234

本地模型

对于本地 LLM 执行,该组件支持

Llama.cpp 模式

LLM 组件配置 Llama.cpp,默认启用 GPU 加速,将 n_gpu_layers 设置为 -1(所有层),将 offload_kqv 设置为 True。

来源: private_gpt/components/llm/llm_component.py45-76

Ollama 模式

使用 Ollama 时,该组件可以自动拉取模型(如果配置了),并支持 keep-alive 设置以在请求之间保持模型加载。

来源: private_gpt/components/llm/llm_component.py129-191

云服务

对于云端 LLM 执行,该组件支持

OpenAI 模式

来源: private_gpt/components/llm/llm_component.py91-104

Azure OpenAI 模式

来源: private_gpt/components/llm/llm_component.py193-210

其他云服务

该组件还支持 AWS SageMaker、Google Gemini 和 OpenAI-Like 服务,具有类似的配置模式。

来源: private_gpt/components/llm/llm_component.py78-90 private_gpt/components/llm/llm_component.py105-128 private_gpt/components/llm/llm_component.py211-223

提示样式

LLM 组件使用提示样式系统为不同的 LLM 后端正确格式化消息。每种提示样式都在标准化消息格式和不同模型所期望的特定格式之间进行转换。

该组件提供以下提示样式

风格描述格式示例
默认使用模型的默认格式取决于模型
llama2Meta 的 Llama 2 格式<s> [INST] <<SYS>> system prompt <</SYS>> user message [/INST] assistant response </s>
llama3Meta 的 Llama 3 格式<|begin_of_text|> <|start_header_id|>system<|end_header_id|>...
tag基于标签的格式 (Vigogne)<|system|>: system message\n<|user|>: user message\n<|assistant|>
mistralMistral AI 格式<s>[INST] system\nuser [/INST] assistant</s>
chatmlChatML 格式 (Anthropic)<|im_start|>system\n...<|im_end|>\n<|im_start|>user\n...

提示样式根据正在使用的模型进行选择,并可在配置中自定义。

来源: private_gpt/components/llm/prompt_helper.py11-310 tests/test_prompt_helper.py1-196

与 PrivateGPT 的集成

LLM 组件是 PrivateGPT 系统的一个关键部分,正如其在系统架构中的位置所示

LLM 组件主要由 RAG 管道使用,该管道基于检索到的文档提供上下文感知的响应。Chat、Chunks 和 Summarize 等服务都使用 RAG 管道,从而也使用 LLM 组件。

配置选项

LLM 组件可以通过 settings.yaml 文件或特定于配置文件的设置文件(如 settings-openai.yaml)进行配置。

关键配置参数包括

参数描述默认
llm.mode要使用的 LLM 后端必填
llm.temperature模型温度(随机性)取决于模型
llm.max_new_tokens生成的新 token 的最大数量256
llm.context_window最大上下文窗口大小取决于模型
llm.tokenizer用于计算 token 的 tokenizerNone
llm.prompt_style要使用的提示样式默认

每个 LLM 模式还有其自己的特定配置选项,例如 API 密钥、端点和模型名称。

来源: private_gpt/components/llm/llm_component.py22-44 fern/docs/pages/manual/llms.mdx34-47

使用示例

要使用特定的 LLM 模式,您需要创建或修改设置中的配置文件。

然后使用此配置文件运行 PrivateGPT。

对于云服务

运行方式

来源: fern/docs/pages/manual/llms.mdx1-234

有关 LLM 组件与系统其他部分集成的更多信息,请参阅核心组件服务页面。