con un clic
add-provider
MindBot LLM Provider 开发指南——Provider 基类接口、Param 配置类、Factory 注册机制与完整代码模板
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
MindBot LLM Provider 开发指南——Provider 基类接口、Param 配置类、Factory 注册机制与完整代码模板
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
提供 MindBot 自身架构、配置、目录和能力边界的自说明知识包
MindBot 通道开发指南——BaseChannel 接口契约、注册机制、消息处理流程与完整代码模板
MindBot Skill 创建指南——通用创建流程参考 .agents/skills/skill-creator/,本 Skill 补充 mindbot 特有的格式、加载机制与存放规则
MindBot 工具开发指南——Tool 模型定义、handler 编写、ToolBackend 注册与 CapabilityFacade 执行路径
LLM 编码行为准则,减少常见编码错误——先思考再编码、简洁优先、精准修改、目标驱动执行
提供计算相关的功能,如sigmoid函数计算,数学表达式求值等。
| name | add-provider |
| description | MindBot LLM Provider 开发指南——Provider 基类接口、Param 配置类、Factory 注册机制与完整代码模板 |
| when_to_use | 添加新 Provider、接入新 LLM(如 Gemini、Claude、Mistral)、新增模型适配器 |
Provider 属于 L5 基础设施适配层,职责是封装不同 LLM API 为统一接口。上层(L2 编排层)通过 ProviderAdapter 调用,不感知具体实现。
继承 Provider 基类,实现 5 个抽象方法:
# src/mindbot/providers/base.py
class Provider(ABC):
@abstractmethod
async def chat(self, messages: list[Message], model: str | None = None,
tools: list[Tool] | None = None, **kwargs) -> ChatResponse:
"""同步对话补全"""
@abstractmethod
async def chat_stream(self, messages: list[Message], model: str | None = None,
tools: list[Any] | None = None, **kwargs) -> AsyncIterator[str]:
"""流式对话补全,yield 文本片段"""
@abstractmethod
async def embed(self, texts: list[str], **kwargs) -> list[list[float]]:
"""计算文本嵌入向量"""
@abstractmethod
def bind_tools(self, tools: list[Tool]) -> Self:
"""返回绑定了工具的新 Provider 实例(不可变模式)"""
@abstractmethod
def get_info(self) -> ProviderInfo:
"""返回 Provider 元数据"""
# 输入
from mindbot.context.models import Message, Role
# 输出
from mindbot.context.models import ChatResponse, FinishReason
# 工具
from mindbot.capability.backends.tooling.models import Tool
# 元数据
from mindbot.providers.base import ProviderInfo
src/mindbot/providers/my_provider/
├── __init__.py # 导出 MyProvider, MyProviderParam
├── param.py # 参数配置类
└── provider.py # Provider 实现
from dataclasses import dataclass
from mindbot.providers.param import BaseProviderParam
@dataclass
class MyProviderParam(BaseProviderParam):
model: str = "my-model-v1"
api_key: str = ""
base_url: str = "https://api.example.com/v1"
import copy
from typing import Any, AsyncIterator, Self
from mindbot.providers.base import Provider, ProviderInfo
from mindbot.context.models import ChatResponse, FinishReason, Message
from mindbot.capability.backends.tooling.models import Tool
class MyProvider(Provider):
def __init__(self, param: "MyProviderParam") -> None:
self._param = param
self._bound_tools: list[Tool] = []
async def chat(self, messages: list[Message], model: str | None = None,
tools: list[Tool] | None = None, **kwargs) -> ChatResponse:
# 1. 将 Message 列表转换为 API 请求格式
# 2. 调用 LLM API
# 3. 解析响应,返回 ChatResponse
return ChatResponse(
content="response text",
finish_reason=FinishReason.STOP,
)
async def chat_stream(self, messages: list[Message], model: str | None = None,
tools: list[Any] | None = None, **kwargs) -> AsyncIterator[str]:
# 1. 将 Message 列表转换为 API 请求格式
# 2. 调用 LLM streaming API
# 3. yield 每个文本片段
yield "response chunk"
async def embed(self, texts: list[str], **kwargs) -> list[list[float]]:
# 调用 embedding API
return [[0.0] * 768 for _ in texts]
def bind_tools(self, tools: list[Tool]) -> Self:
new = copy.copy(self)
new._bound_tools = list(tools)
return new
def get_info(self) -> ProviderInfo:
return ProviderInfo(
provider="my_provider",
model=self._param.model,
)
from mindbot.providers.my_provider.param import MyProviderParam
from mindbot.providers.my_provider.provider import MyProvider
__all__ = ["MyProvider", "MyProviderParam"]
在 src/mindbot/providers/__init__.py 中注册到工厂:
from mindbot.providers.factory import ProviderFactory
from mindbot.providers.my_provider import MyProvider, MyProviderParam
ProviderFactory.register("my_provider", MyProvider, MyProviderParam)
在 settings.json 的 endpoints 中添加:
{
"endpoints": {
"my_provider": {
"provider": "my_provider",
"api_key": "sk-xxx",
"base_url": "https://api.example.com/v1",
"models": {
"my-model-v1": {
"roles": ["chat", "tool"],
"max_tokens": 4096
}
}
}
}
}
providers/my_provider/ 目录,包含 param.py、provider.py、__init__.pyBaseProviderParambind_tools() 使用 copy 模式(不可变)providers/__init__.py 注册到 ProviderFactorytests/providers/test_my_provider.pytests/providers/conftest.py 中