Skip to content

Provider 接口

向 GodeX 添加新的 LLM 提供商需要声明一个包含能力、响应/流访问器和可选 hooks 的 ProviderSpec,并连接 HTTP 客户端。Bridge 内核处理路由、会话管理、兼容性规划和 SSE 编码 — 提供商只处理协议差异和 HTTP 调用。

核心接口

ProviderCapabilities

能力以不可变集合和标志声明。它们告诉 Bridge 内核提供商支持什么,以便规划兼容性决策。

能力字段

字段类型描述
parameters.supportedSet<string>提供商接受的请求参数
tools.supportedSet<string>提供商可处理的工具类型
tools.degradedMap<string, string>降级到其他类型的工具类型
tools.maxToolsnumber每个请求的最大工具数
toolChoice.supportedSet<string>提供商支持的 tool_choice 模式
responseFormats.supportedSet<string>响应格式类型
reasoning.effort"none" | "boolean" | "native"提供商如何处理推理力度
streaming.usageboolean提供商是否在流块中返回使用量

响应访问器

Spec 声明类型化访问器,使 bridge 可以读取提供商响应而无需知道具体类型:

ts
interface ChatCompletionResponseAccessor<TResponse> {
  firstChoice(response: TResponse): unknown | undefined;
  finishReason(response: TResponse): string | undefined;
  outputText(response: TResponse): string;
  usage(response: TResponse): ResponseUsage | null;
}

Provider Hooks

Hooks 允许提供商特定行为而不污染 bridge 内核:

Hook调用时机用途
patchRequestbridge 构建 Chat Completions 请求后为提供商特定差异转换请求
normalizeResponse收到同步响应后规范化提供商响应形状
normalizeChunk收到流块后规范化提供商块形状

注册

src/providers/builtin.ts 中注册提供商定义:

ts
const MY_PROVIDER_DEFINITION = createProviderDefinition(
  "myprovider",
  createMyProviderEdge,
);

Registrar 遍历 godex.yaml 中所有配置的提供商,通过 spec 字段匹配工厂,构建 ProviderEdge 实例。没有匹配工厂的提供商列在不支持列表中。

消息与工具映射