外部提供者
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 支持两种类型的外部提供者
远程提供者:与外部服务(例如云 API)通信的提供者
内联提供者:在 Llama Stack 进程内部本地运行的提供者
已知外部提供者
以下是可与 Llama Stack 一起使用的已知外部提供者列表
名称 |
描述 |
API |
类型 |
仓库 |
---|---|---|---|---|
KubeFlow 训练 |
使用 KubeFlow 训练模型 |
训练后 |
远程 |
|
KubeFlow Pipelines |
使用 KubeFlow Pipelines 训练模型 |
训练后 |
内联 和 远程 |
|
RamaLama |
使用 RamaLama 推理模型 |
推理 |
远程 |
|
TrustyAI LM-Eval |
使用 TrustyAI LM-Eval 评估模型 |
评估 |
远程 |
远程提供者规范
当您需要与外部服务通信时,会使用远程提供者。以下是一个自定义 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()
函数
config
:提供者配置类的实例deps
:API 依赖项的字典
此函数必须返回实现该 API 所需协议的提供者适配器类实例。
示例
async def get_adapter_impl(
config: OllamaImplConfig, deps: Dict[Api, Any]
) -> OllamaInferenceAdapter:
return OllamaInferenceAdapter(config)
内联提供者
内联提供者必须在其模块中暴露一个接受两个参数的 get_provider_impl()
函数
config
:提供者配置类的实例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 提供者的完整示例
首先,创建提供者包
mkdir -p llama-stack-provider-ollama
cd llama-stack-provider-ollama
git init
uv init
编辑
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"]
创建提供者规范
# /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: []
安装提供者
uv pip install -e .
配置 Llama Stack 以使用外部提供者
external_providers_dir: /etc/llama-stack/providers.d/
现在提供者将以 remote::custom_ollama
类型在 Llama Stack 中可用。
最佳实践
包命名:为您的提供者包使用前缀
llama-stack-provider-
以使其易于识别。版本管理:保持您的提供者包版本与您使用的 Llama Stack 版本兼容。
依赖项:在您的提供者包中仅包含最低限度的所需依赖项。
文档:在您的提供者包中包含清晰的文档,说明
安装要求
配置选项
使用示例
任何限制或已知问题
测试:在您的提供者包中包含测试,以确保其与 Llama Stack 正确协同工作。您可以参考集成测试指南了解更多信息。执行您正在开发的提供者类型的测试。
故障排除
如果您的外部提供者未能加载
检查
external_providers_dir
路径是否正确且可访问。验证 YAML 文件格式是否正确。
确保所有必需的 Python 包已安装。
检查 Llama Stack 服务器日志是否有任何错误消息 - 使用
LLAMA_STACK_LOGGING=all=debug
开启调试日志以获取更多信息。验证提供者包是否已安装在您的 Python 环境中。