外部提供者

Llama Stack 支持存在于主代码库之外的外部提供者。这使您能够

  • 独立创建和维护您自己的提供者

  • 与他人共享提供者,而无需贡献到主代码库

  • 将特定于提供者的代码与 Llama Stack 核心代码分离

配置

要启用外部提供者,您需要在 Llama Stack 配置中配置 external_providers_dir。此目录应包含您的外部提供者规范

external_providers_dir: /etc/llama-stack/providers.d/

目录结构

外部提供者目录应遵循此结构

providers.d/
  remote/
    inference/
      custom_ollama.yaml
      vllm.yaml
    vector_io/
      qdrant.yaml
    safety/
      llama-guard.yaml
  inline/
    inference/
      custom_ollama.yaml
      vllm.yaml
    vector_io/
      qdrant.yaml
    safety/
      llama-guard.yaml

这些目录中的每个 YAML 文件都为该特定 API 定义了一个提供者规范。

提供者类型

Llama Stack 支持两种类型的外部提供者

  1. 远程提供者:与外部服务(例如云 API)通信的提供者

  2. 内联提供者:在 Llama Stack 进程内部本地运行的提供者

已知外部提供者

以下是可与 Llama Stack 一起使用的已知外部提供者列表

名称

描述

API

类型

仓库

KubeFlow 训练

使用 KubeFlow 训练模型

训练后

远程

llama-stack-provider-kft

KubeFlow Pipelines

使用 KubeFlow Pipelines 训练模型

训练后

内联 远程

llama-stack-provider-kfp-trainer

RamaLama

使用 RamaLama 推理模型

推理

远程

ramalama-stack

TrustyAI LM-Eval

使用 TrustyAI LM-Eval 评估模型

评估

远程

llama-stack-provider-lmeval

远程提供者规范

当您需要与外部服务通信时,会使用远程提供者。以下是一个自定义 Ollama 提供者的示例

adapter:
  adapter_type: custom_ollama
  pip_packages:
  - ollama
  - aiohttp
  config_class: llama_stack_ollama_provider.config.OllamaImplConfig
  module: llama_stack_ollama_provider
api_dependencies: []
optional_api_dependencies: []

适配器配置

adapter 部分定义了如何加载和配置提供者

  • adapter_type:此适配器的唯一标识符

  • pip_packages:提供者所需的 Python 包列表

  • config_class:配置类的完整路径

  • module:包含提供者实现的 Python 模块

内联提供者规范

内联提供者在 Llama Stack 进程内部本地运行。以下是一个自定义向量存储提供者的示例

module: llama_stack_vector_provider
config_class: llama_stack_vector_provider.config.VectorStoreConfig
pip_packages:
  - faiss-cpu
  - numpy
api_dependencies:
  - inference
optional_api_dependencies:
  - vector_io
provider_data_validator: llama_stack_vector_provider.validator.VectorStoreValidator
container_image: custom-vector-store:latest  # optional

内联提供者字段

  • module:包含提供者实现的 Python 模块

  • config_class:配置类的完整路径

  • pip_packages:提供者所需的 Python 包列表

  • api_dependencies:此提供者依赖的 Llama Stack API 列表

  • optional_api_dependencies:此提供者可以使用的可选 Llama Stack API 列表

  • provider_data_validator:可选的提供者数据验证器

  • container_image:可选的容器镜像,用于替代 pip 包

所需实现

远程提供者

远程提供者必须在其模块中暴露一个接受两个参数的 get_adapter_impl() 函数

  1. config:提供者配置类的实例

  2. deps:API 依赖项的字典

此函数必须返回实现该 API 所需协议的提供者适配器类实例。

示例

async def get_adapter_impl(
    config: OllamaImplConfig, deps: Dict[Api, Any]
) -> OllamaInferenceAdapter:
    return OllamaInferenceAdapter(config)

内联提供者

内联提供者必须在其模块中暴露一个接受两个参数的 get_provider_impl() 函数

  1. config:提供者配置类的实例

  2. deps:API 依赖项的字典

示例

async def get_provider_impl(
    config: VectorStoreConfig, deps: Dict[Api, Any]
) -> VectorStoreImpl:
    impl = VectorStoreImpl(config, deps[Api.inference])
    await impl.initialize()
    return impl

依赖项

提供者包必须安装在系统上。例如

$ uv pip show llama-stack-ollama-provider
Name: llama-stack-ollama-provider
Version: 0.1.0
Location: /path/to/venv/lib/python3.10/site-packages

示例:自定义 Ollama 提供者

以下是创建和使用自定义 Ollama 提供者的完整示例

  1. 首先,创建提供者包

mkdir -p llama-stack-provider-ollama
cd llama-stack-provider-ollama
git init
uv init
  1. 编辑 pyproject.toml

[project]
name = "llama-stack-provider-ollama"
version = "0.1.0"
description = "Ollama provider for Llama Stack"
requires-python = ">=3.10"
dependencies = ["llama-stack", "pydantic", "ollama", "aiohttp"]
  1. 创建提供者规范

# /etc/llama-stack/providers.d/remote/inference/custom_ollama.yaml
adapter:
  adapter_type: custom_ollama
  pip_packages: ["ollama", "aiohttp"]
  config_class: llama_stack_provider_ollama.config.OllamaImplConfig
  module: llama_stack_provider_ollama
api_dependencies: []
optional_api_dependencies: []
  1. 安装提供者

uv pip install -e .
  1. 配置 Llama Stack 以使用外部提供者

external_providers_dir: /etc/llama-stack/providers.d/

现在提供者将以 remote::custom_ollama 类型在 Llama Stack 中可用。

最佳实践

  1. 包命名:为您的提供者包使用前缀 llama-stack-provider- 以使其易于识别。

  2. 版本管理:保持您的提供者包版本与您使用的 Llama Stack 版本兼容。

  3. 依赖项:在您的提供者包中仅包含最低限度的所需依赖项。

  4. 文档:在您的提供者包中包含清晰的文档,说明

    • 安装要求

    • 配置选项

    • 使用示例

    • 任何限制或已知问题

  5. 测试:在您的提供者包中包含测试,以确保其与 Llama Stack 正确协同工作。您可以参考集成测试指南了解更多信息。执行您正在开发的提供者类型的测试。

故障排除

如果您的外部提供者未能加载

  1. 检查 external_providers_dir 路径是否正确且可访问。

  2. 验证 YAML 文件格式是否正确。

  3. 确保所有必需的 Python 包已安装。

  4. 检查 Llama Stack 服务器日志是否有任何错误消息 - 使用 LLAMA_STACK_LOGGING=all=debug 开启调试日志以获取更多信息。

  5. 验证提供者包是否已安装在您的 Python 环境中。