Skip to content

本页是 OpenRouter Agent SDK callModel 函数的完整类型参考。涵盖 CallModelInput 全部参数(含 dynamic function 形式)、ModelResult 的七种消费方式(文本/流/工具调用)、tool() 创建工具的类型结构、TurnContext/ToolExecuteContext 上下文类型、StopCondition 停止条件以及 fromChatMessages/fromClaudeMessages 等格式转换函数。

callModel

typescript
function callModel(request: CallModelInput, options?: RequestOptions): ModelResult

使用 OpenResponses API 创建响应,支持多种消费模式。

CallModelInput

参数类型必填说明
modelstring | ((ctx: TurnContext) => string)是*模型 ID(如 "openai/gpt-5-nano"
modelsstring[]是*模型降级备选数组
inputOpenResponsesInput输入消息或字符串
instructionsstring | ((ctx: TurnContext) => string)系统级指令
toolsTool[]提供给模型的工具列表
maxToolRoundsMaxToolRounds工具执行轮次上限(已废弃)
stopWhenStopWhen停止条件
temperaturenumber | ((ctx: TurnContext) => number)采样温度(0-2)
maxOutputTokensnumber | ((ctx: TurnContext) => number)最大生成 token 数
topPnumberTop-p 采样
textResponseTextConfig文本格式配置
providerProviderPreferencesProvider 路由与配置
topKnumberTop-k 采样
metadataRecord<string, string>请求元数据
toolChoiceToolChoice工具选择配置
parallelToolCallsboolean是否并行调用工具
reasoningReasoningConfig推理配置
promptCacheKeystringPrompt 缓存键
previousResponseIdstring关联上一次响应的 ID
includestring[]响应中包含的额外字段
backgroundboolean是否在后台运行
safetyIdentifierstring用户安全标识
serviceTierstring服务等级偏好
truncationstring截断模式
pluginsPlugin[]启用的插件列表
userstring终端用户标识
sessionIdstring会话标识
storeboolean是否存储请求数据
contextContextInput<ToolContextMap>按工具名索引的上下文数据

*modelmodels 二选一必填。

ProviderPreferences

参数类型说明
allowFallbacksboolean主 provider 不可用时是否允许降级(默认 true)
requireParametersboolean仅使用支持所有请求参数的 provider
dataCollection"allow" | "deny"数据收集策略
orderstring[]自定义 provider 路由顺序
onlystring[]限定到特定 provider
ignorestring[]排除特定 provider
quantizationsstring[]按量化级别筛选
sortstring负载均衡策略(如 "throughput"
maxPriceobject最高价格限制
preferredMinThroughputnumber最低吞吐率偏好(tokens/s)
preferredMaxLatencynumber最高延迟偏好

RequestOptions

参数类型说明
timeoutnumber请求超时毫秒数
signalAbortSignal用于取消请求的 AbortSignal

ModelResult

对响应的封装,提供多种消费方式。

方法一览

getText()

typescript
getText(): Promise<string>

等待工具执行完毕后,获取最终文本内容。

getResponse()

typescript
getResponse(): Promise<OpenResponsesNonStreamingResponse>

获取完整响应,包含 usage 数据(inputTokensoutputTokenscachedTokens)。

getTextStream()

typescript
getTextStream(): AsyncIterableIterator<string>

以增量方式流式获取文本片段。

getReasoningStream()

typescript
getReasoningStream(): AsyncIterableIterator<string>

流式获取推理内容(适用于推理模型)。

getNewMessagesStream()

typescript
getNewMessagesStream(): AsyncIterableIterator<ResponsesOutputMessage | OpenResponsesFunctionCallOutput>

以 OpenResponses 格式流式获取累积消息快照。

getFullResponsesStream()

typescript
getFullResponsesStream(): AsyncIterableIterator<EnhancedResponseStreamEvent>

流式获取所有事件,含工具预备结果。

getToolCalls()

typescript
getToolCalls(): Promise<ParsedToolCall[]>

获取初始响应中的全部工具调用。

getToolCallsStream()

typescript
getToolCallsStream(): AsyncIterableIterator<ParsedToolCall>

工具调用完成时逐个流式推送。

getToolStream()

typescript
getToolStream(): AsyncIterableIterator<ToolStreamEvent>

流式获取工具增量与预备结果。

getContextUpdates()

typescript
getContextUpdates(): AsyncGenerator<ToolContextMap<TTools>>

每当工具调用 setContext() 时推送上下文快照,工具执行完毕后自动关闭。

cancel()

typescript
cancel(): Promise<void>

取消流及所有消费者。


Tool 类型体系

tool()

typescript
function tool<TInput, TOutput>(config: ToolConfig): Tool

创建带 Zod 类型校验的工具。

ToolConfig

参数类型必填说明
namestring工具名称
descriptionstring工具描述
inputSchemaZodObject输入参数 schema
outputSchemaZodType输出 schema
eventSchemaZodType事件 schema(触发 generator 模式)
contextSchemaZodObject工具所需的上下文数据 schema
executefunction | false执行函数,或 false 表示手动处理
nextTurnParamsNextTurnParamsFunctions修改下一轮参数的函数集合

Tool 联合类型

typescript
type Tool =
  | ToolWithExecute<ZodObject, ZodType>
  | ToolWithGenerator<ZodObject, ZodType, ZodType>
  | ManualTool<ZodObject, ZodType>;

ToolWithExecute:普通工具,execute 返回 Promise<Output>

ToolWithGenerator:流式工具,execute 返回 AsyncGenerator<Event>,需配合 eventSchema

ManualTool:无 execute 函数,工具调用需外部手动处理。


Context 类型

TurnContext

typescript
interface TurnContext {
  toolCall?: OpenResponsesFunctionToolCall;
  numberOfTurns: number;
  turnRequest?: OpenResponsesRequest;
}

ToolExecuteContext

传入工具 execute 函数的上下文,合并了 TurnContext 与工具专属上下文:

typescript
type ToolExecuteContext<TName, TContext> =
  TurnContext & {
    tools: {
      readonly [K in TName]: Readonly<TContext>;
    };
    setContext(partial: Partial<TContext>): void;
  };

ContextInput

上下文可以是静态值、同步函数或异步函数:

typescript
type ContextInput<T> =
  | T
  | ((turn: TurnContext) => T)
  | ((turn: TurnContext) => Promise<T>);

NextTurnParamsContext

nextTurnParams 函数接收到的当前请求上下文:

typescript
interface NextTurnParamsContext {
  input: OpenResponsesInput;
  model: string;
  models: string[];
  temperature: number | null;
  maxOutputTokens: number | null;
  topP: number | null;
  topK?: number | undefined;
  instructions: string | null;
}

Stream 事件类型

EnhancedResponseStreamEvent

typescript
type EnhancedResponseStreamEvent =
  | OpenResponsesStreamEvent
  | ToolPreliminaryResultEvent;

ToolStreamEvent

typescript
type ToolStreamEvent =
  | { type: 'delta'; content: string }
  | { type: 'preliminary_result'; toolCallId: string; result: unknown };

ParsedToolCall

typescript
interface ParsedToolCall {
  id: string;
  name: string;
  arguments: unknown;
}

ToolExecutionResult

typescript
interface ToolExecutionResult {
  toolCallId: string;
  toolName: string;
  result: unknown;
  preliminaryResults?: unknown[];
  error?: Error;
}

停止条件

StopWhen

typescript
type StopWhen = StopCondition | StopCondition[];

StopCondition

typescript
type StopCondition = (context: StopConditionContext) => boolean | Promise<boolean>;

StepResult

每轮执行的结果快照:

typescript
interface StepResult {
  stepType: 'initial' | 'continue';
  text: string;
  toolCalls: TypedToolCallUnion[];
  toolResults: ToolExecutionResultUnion[];
  response: OpenResponsesNonStreamingResponse;
  usage?: OpenResponsesUsage;
  finishReason?: string;
  warnings?: Warning[];
  experimental_providerMetadata?: Record<string, unknown>;
}

内置辅助函数

函数签名说明
stepCountIs(n: number) => StopCondition执行 n 轮后停止
hasToolCall(name: string) => StopCondition调用指定工具后停止
maxTokensUsed(n: number) => StopCondition消耗 n 个 token 后停止
maxCost(amount: number) => StopCondition达到费用上限后停止
finishReasonIs(reason: string) => StopCondition指定 finish reason 时停止

格式转换函数

函数签名说明
fromChatMessages(messages: Message[]) => OpenResponsesInputOpenAI Chat 格式 → OpenResponses
toChatMessage(response) => AssistantMessageOpenResponses 响应 → Chat 格式
fromClaudeMessages(messages: ClaudeMessageParam[]) => OpenResponsesInputAnthropic Claude 格式 → OpenResponses
toClaudeMessage(response) => ClaudeMessageOpenResponses 响应 → Claude 格式

常见问题

Q: modelmodels 有什么区别?

A: model 指定单一模型;models 是降级数组,前一个模型不可用时自动尝试下一个。两者必填其一。

Q: 什么时候用 getText() 而不是 getTextStream()

A: 不需要实时展示进度时用 getText() 更简洁;有 UI 展示需求或响应较长时用 getTextStream() 可以减少用户等待感知。

Q: ToolWithGenerator 和普通 ToolWithExecute 怎么选?

A: 需要向调用方实时推送工具执行中间状态(如搜索进度、文件处理百分比)时用 ToolWithGenerator;只需最终结果用 ToolWithExecute 即可。