架构
项目将公共接口、服务选择和厂商实现分开。
| 层级 | 职责 |
|---|---|
| 核心层 | 定义能力接口及与提供方无关的错误 |
| 注册层 | 接收提供方注册并选择活动服务 |
| 提供方插件 | 解析厂商配置并执行 API 请求 |
| 使用方插件 | 使用所选服务,不依赖具体厂商 |
提供方生命周期
提供方插件通过 ctx.aiProviders 注册 AiProvider。提供方包含稳定 ID、显示名称、可选设置元数据,以及其支持能力的工厂函数。注册受 Cordis 作用域管理,因此卸载插件会同时移除提供方。
主插件为所选提供方创建以下服务门面:
| 上下文服务 | 能力 |
|---|---|
ctx.embeddings | 文本嵌入 |
ctx.rerankers | 重排 |
ctx.textToSpeech | 文本转语音 |
ctx.apiSpeechToText | 文件转录 |
ctx.streamingSpeechToText | 实时转录(提供方支持时) |
ctx.imageGeneration | 图像生成 |
门面在每次调用时解析当前提供方,因此配置变更无需重建依赖插件即可生效。
语言模型路由
语言模型以 DSH 模型路由注册,而不是作为只能选择一个的服务,因此多个已配置路由可以共存。提供方还可向 UI 描述带本地化标签和默认值的请求选项。
错误模型
提供方错误会统一为 AiError,并带有稳定分类,例如 authentication、rate_limit、invalid_request 或 unavailable。使用方无需解析厂商错误文本即可处理失败。