OpenRouter Agent SDK:callModel 完整 API 参考

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

callModel

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

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

CallModelInput

参数 类型 必填 说明
model string | ((ctx: TurnContext) => string) 是* 模型 ID(如 "openai/gpt-5-nano")
models string[] 是* 模型降级备选数组
input OpenResponsesInput 是 输入消息或字符串
instructions string | ((ctx: TurnContext) => string) 否 系统级指令
tools Tool[] 否 提供给模型的工具列表
maxToolRounds MaxToolRounds 否 工具执行轮次上限(已废弃)
stopWhen StopWhen 否 停止条件
temperature number | ((ctx: TurnContext) => number) 否 采样温度(0-2)
maxOutputTokens number | ((ctx: TurnContext) => number) 否 最大生成 token 数
topP number 否 Top-p 采样
text ResponseTextConfig 否 文本格式配置
provider ProviderPreferences 否 Provider 路由与配置
topK number 否 Top-k 采样
metadata Record<string, string> 否 请求元数据
toolChoice ToolChoice 否 工具选择配置
parallelToolCalls boolean 否 是否并行调用工具
reasoning ReasoningConfig 否 推理配置
promptCacheKey string 否 Prompt 缓存键
previousResponseId string 否 关联上一次响应的 ID
include string[] 否 响应中包含的额外字段
background boolean 否 是否在后台运行
safetyIdentifier string 否 用户安全标识
serviceTier string 否 服务等级偏好
truncation string 否 截断模式
plugins Plugin[] 否 启用的插件列表
user string 否 终端用户标识
sessionId string 否 会话标识
store boolean 否 是否存储请求数据
context ContextInput<ToolContextMap> 否 按工具名索引的上下文数据

*model 和 models 二选一必填。

ProviderPreferences

参数 类型 说明
allowFallbacks boolean 主 provider 不可用时是否允许降级(默认 true)
requireParameters boolean 仅使用支持所有请求参数的 provider
dataCollection "allow" | "deny" 数据收集策略
order string[] 自定义 provider 路由顺序
only string[] 限定到特定 provider
ignore string[] 排除特定 provider
quantizations string[] 按量化级别筛选
sort string 负载均衡策略(如 "throughput")
maxPrice object 最高价格限制
preferredMinThroughput number 最低吞吐率偏好(tokens/s)
preferredMaxLatency number 最高延迟偏好

RequestOptions

参数 类型 说明
timeout number 请求超时毫秒数
signal AbortSignal 用于取消请求的 AbortSignal

ModelResult

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

方法一览

getText()

getText(): Promise<string>

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

getResponse()

getResponse(): Promise<OpenResponsesNonStreamingResponse>

获取完整响应,包含 usage 数据(inputTokens、outputTokens、cachedTokens)。

getTextStream()

getTextStream(): AsyncIterableIterator<string>

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

getReasoningStream()

getReasoningStream(): AsyncIterableIterator<string>

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

getNewMessagesStream()

getNewMessagesStream(): AsyncIterableIterator<ResponsesOutputMessage | OpenResponsesFunctionCallOutput>

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

getFullResponsesStream()

getFullResponsesStream(): AsyncIterableIterator<EnhancedResponseStreamEvent>

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

getToolCalls()

getToolCalls(): Promise<ParsedToolCall[]>

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

getToolCallsStream()

getToolCallsStream(): AsyncIterableIterator<ParsedToolCall>

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

getToolStream()

getToolStream(): AsyncIterableIterator<ToolStreamEvent>

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

getContextUpdates()

getContextUpdates(): AsyncGenerator<ToolContextMap<TTools>>

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

cancel()

cancel(): Promise<void>

取消流及所有消费者。


Tool 类型体系

tool()

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

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

ToolConfig

参数 类型 必填 说明
name string 是 工具名称
description string 否 工具描述
inputSchema ZodObject 是 输入参数 schema
outputSchema ZodType 否 输出 schema
eventSchema ZodType 否 事件 schema(触发 generator 模式)
contextSchema ZodObject 否 工具所需的上下文数据 schema
execute function | false 是 执行函数,或 false 表示手动处理
nextTurnParams NextTurnParamsFunctions 否 修改下一轮参数的函数集合

Tool 联合类型

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

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

ToolExecuteContext

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

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

ContextInput

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

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

NextTurnParamsContext

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

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

type EnhancedResponseStreamEvent =
  | OpenResponsesStreamEvent
  | ToolPreliminaryResultEvent;

ToolStreamEvent

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

ParsedToolCall

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

ToolExecutionResult

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

停止条件

StopWhen

type StopWhen = StopCondition | StopCondition[];

StopCondition

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

StepResult

每轮执行的结果快照:

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[]) => OpenResponsesInput OpenAI Chat 格式 → OpenResponses
toChatMessage (response) => AssistantMessage OpenResponses 响应 → Chat 格式
fromClaudeMessages (messages: ClaudeMessageParam[]) => OpenResponsesInput Anthropic Claude 格式 → OpenResponses
toClaudeMessage (response) => ClaudeMessage OpenResponses 响应 → Claude 格式

常见问题

Q: model 和 models 有什么区别?

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

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

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

Q: ToolWithGenerator 和普通 ToolWithExecute 怎么选?

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