Model 与 Provider
文档API 参考
LIGHTER / DOCUMENTATION

Model 与 Provider API

用法见直接调用 Model、内置 Provider与自定义 Provider。

Model

new Model(provider: Provider)

成员 类型或签名 说明
provider readonly Provider 构造时传入的 Provider
invoke() invoke(request: ModelRequest, hooks?): Promise<AssistantMessage> 一次调用,返回完整助手消息
stream() stream(request: ModelRequest, hooks?): AsyncGenerator<ProviderStreamEvent> 转发 Provider 流式事件

hooks 是可选对象,可含 beforeModel?: BeforeModelHook 和 afterModel?: AfterModelHook。两个方法都会等待相应钩子执行;流式 afterModel 仅处理完整的 message 事件。

Model 不添加默认系统提示词,不执行工具,不维护循环,也不把异常包装为 Agent 结果。Provider 或钩子异常会向调用方抛出。

请求类型

ModelRequest 是 ProviderRequest 的类型别名:

字段 类型 必填 说明
messages BaseMessages 是 本次发送的完整上下文
toolSpecs ToolSpec[] 否 供模型了解的工具定义;不包含执行函数

Provider 接口

import type {
  AssistantMessage, ProviderRequest, ProviderStreamEvent,
} from "@yong_xie/lighter";

interface Provider {
  readonly name: string;
  invoke(request: ProviderRequest): Promise<AssistantMessage>;
  stream(request: ProviderRequest): AsyncGenerator<ProviderStreamEvent>;
}

调用 Provider 的方法会绕过 Model 钩子。Provider 自身负责识别不完整或失败响应并抛出错误。

ProviderStreamEvent

type 其他字段 含义
text_delta text: string 文本增量
reasoning_delta text: string 推理或摘要增量,按能力与配置提供
message message: AssistantMessage 完整助手消息,包含完整文本及工具调用

Provider 的流在正常结束前应产生一次完整 message 事件。Agent 会用它推进循环;Model 直接转发,不额外验证是否缺失。

OpenAIProvider

new OpenAIProvider(apiKey, modelID, options?: OpenAIProviderOptions)
参数 类型 说明
apiKey string API key
modelID OpenAI SDK 的 ResponseCreateParamsNonStreaming["model"] 去除空值后的类型 模型 ID
options.reasoning OpenAI SDK 的 ResponseCreateParamsNonStreaming["reasoning"] 推理选项,可省略
options.maxOutputTokens number 映射为 max_output_tokens,可省略

options 默认 {},name 为 "openai",使用 Responses API,固定发送 store: false。推理文本来自摘要,原生上下文的保留规则见 Provider 指南。

ClaudeProvider

new ClaudeProvider(apiKey: string, modelID: string, options?: ClaudeProviderOptions)
选项 类型 默认值或约束
maxOutputTokens number 默认 8192,必须是正的安全整数
thinking Anthropic SDK 的 MessageCreateParamsNonStreaming["thinking"] 默认不传入;能力取决于模型

options 默认 {},name 为 "claude"。thinking.type 为 "enabled" 时,budget_tokens 必须是至少 1024 且小于 maxOutputTokens 的安全整数,否则构造时抛出 ModelError("...", "invalid_request")。

系统消息被合并到请求的 system 字段。当前接受 end_turn、tool_use、stop_sequence、refusal 结束原因;其他结束原因作为 bad_response 抛出,并在 responseStatus 中保留,包括达到输出上限、pause_turn 等情况。

DeepSeekProvider

new DeepSeekProvider(apiKey: string, modelID: "deepseek-flash" | "deepseek-v4-pro")

name 为 "deepseek"。地址固定为 https://api.deepseek.com,使用 OpenAI SDK 的 Responses 接口,没有公开的第三个选项参数。

模型 ID 类型描述的是当前代码接受的值,不能作为真实服务兼容性的证明。

三个内置 Provider 均实现相同的 invoke() 与 stream()。OpenAIProviderOptions 和 ClaudeProviderOptions 是公开导出类型;内部模型 ID 类型别名不单独导出。