在其他插件中使用服务
从 @dsh-ai-providers/core 导入公共类型,再通过 Cordis 注入声明每项运行时服务。使用方代码无需依赖具体厂商包。
服务列表、公共调用选项和稳定错误码请参阅核心契约参考。
import type { Context } from '@deepseek-ai/cordis'
import type {} from '@dsh-ai-providers/core'
export const inject = ['embeddings']
export function apply(ctx: Context) {
ctx.on('ready', async () => {
const {vectors} = await ctx.embeddings.embed(['第一份文档', '第二份文档'])
ctx.logger.info('received %d vectors', vectors.length)
})
}
如果缺少该能力时插件仍可运行,请使用可选注入:
export const inject = { optional: ['streamingSpeechToText'] }
所选服务负责处理凭据、端点和厂商传输细节。直接导入厂商包会绕过这条边界,也会让提供方选择失去作用。
选择必需注入或可选注入
如果缺少该服务时插件无法完成其公开功能,应使用必需注入。DSH 会据此控制启动顺序,并在依赖缺失时直接报告,而不是等到第一次调用才失败。只有在确有替代路径,或能彻底关闭相关功能时,才使用可选注入。
能力服务会标明当前的 provider 与 model。它们适合记录在诊断信息中,但不应成为分支到厂商专属请求代码的依据。若使用方确实需要某项厂商扩展,应明确声明该依赖,而不是假设当前选择的提供方支持它。
优先级与取消
支持的能力调用可接收公共调用选项:
const result = await ctx.rerankers.rerank(query, documents, {
priority: 'background',
signal: abortController.signal,
})
阻塞当前用户操作的工作使用前台优先级;索引、预取和维护任务使用后台优先级。当调用方具有明确的取消生命周期时,应传入 AbortSignal。
流
请完整消费或明确取消返回的流。流完成或被丢弃之前,并发门控会持续占用容量。
实时转录前先检查 ctx.streamingSpeechToText 是否存在。按照核心接口创建会话、依次发送音频块、消费转录事件,最后关闭或中止会话。
管理本地模型
ctx.aiModels 按 LLM 路由解析模型控制能力。运行时插件加载后,该服务就会存在,但每条路由可以支持不同的操作。显示控制项或发起调用前,先检查 operations()。
import type { Context } from '@deepseek-ai/cordis'
import type {} from '@dsh-ai-providers/core'
export const inject = ['aiModels']
export async function unloadWhenIdle(ctx: Context, route: string, model: string) {
if (!ctx.aiModels.operations(route).includes('unload')) return
await ctx.aiModels.unload(route, model)
}
可用方法为 status(route, model)、load(route, model) 和 unload(route, model),均可传入可选的 AbortSignal。status() 返回统一的状态;服务器报告内存用量时,结果还会包含 memoryBytes。
加载和卸载会改变提供方进程的状态,并不局限于发起调用的聊天。卸载模型可能中断正在使用同一模型的其他请求。应把这些调用绑定到明确的用户操作,或交给负责该服务器的调度器。不要在每次推理结束后自动卸载模型。
路由不存在时返回 not-configured。路由没有模型控制能力,或不支持所请求的操作时返回 unsupported。认证失败返回 rejected,传输和服务器故障返回 unavailable。
处理失败
捕获 AiError 并根据其分类处理。错误消息只用于诊断,不属于稳定 API。包装错误时应保留原始原因。
| 错误码 | 使用方应对方式 |
|---|---|
not-configured | 说明需要在设置中选择哪项能力。 |
invalid-input | 修正或报告调用方输入;原样重试无效。 |
unsupported | 关闭不受支持的选项,或要求兼容的提供方。 |
rejected | 简要显示配置、凭据、配额或模型错误。 |
unavailable | 仅在操作可安全重复时重试,最好加入退避。 |
cancelled | 若取消符合预期则安静结束,否则保留原始原因。 |
集成检查清单
- 只依赖
@dsh-ai-providers/core中的契约,不依赖厂商实现。 - 通过 Cordis 注入声明每项上下文服务。
- 从拥有请求生命周期的一方传入
signal。 - 将索引和维护调用标记为
background。 - 完整消费或取消流。
- 提供模型管理操作前,先检查
ctx.aiModels.operations(route)。 - 将加载和卸载视为共享服务器操作,而不是聊天清理步骤。
- 将返回的模型名、维度、令牌数、声音和媒体元数据视为提供方结果,而不是固定常量。
- 除成功路径外,还应测试
not-configured、取消、卸载和提供方失败。