跳转到内容

模型

每个智能体最终都会调用一个 LLM。SDK 通过两个轻量接口抽象了模型:

  • Model – 知道如何针对特定 API 发起一次请求。
  • ModelProvider – 将人类可读的模型名称(例如 'gpt‑5.2')解析为 Model 实例。

在日常使用中,您通常只与模型名称交互,偶尔会用到 ModelSettings

为单个智能体指定模型
import { Agent } from '@openai/agents';
const agent = new Agent({
name: 'Creative writer',
model: 'gpt-5.2',
});

当初始化 Agent 时未指定模型,将使用默认模型。当前默认是为了兼容性与低延迟而选择的 gpt-4.1。如果您有权限,推荐将智能体设置为 gpt-5.2 以获得更高质量,同时显式保留 modelSettings

如果要切换到其他模型(如 gpt-5.2),有两种方式为您的智能体进行配置。

首先,如果希望对所有未设置自定义模型的智能体一致地使用某个模型,请在运行智能体之前设置 OPENAI_DEFAULT_MODEL 环境变量。

Terminal window
export OPENAI_DEFAULT_MODEL=gpt-5.2
node my-awesome-agent.js

其次,您可以为某个 Runner 实例设置默认模型。如果未为智能体设置模型,将使用该 Runner 的默认模型。

为 Runner 设置默认模型
import { Runner } from '@openai/agents';
const runner = new Runner({ model: 'gpt‑4.1-mini' });

当以这种方式使用任意 GPT-5.x 模型(如 gpt-5.2)时,SDK 会应用默认的 modelSettings。它会设置对大多数用例最合适的选项。若要调节默认模型的推理投入,请传入您自己的 modelSettings

自定义 GPT-5 默认设置
import { Agent } from '@openai/agents';
const myAgent = new Agent({
name: 'My Agent',
instructions: "You're a helpful agent.",
// If OPENAI_DEFAULT_MODEL=gpt-5.2 is set, passing only modelSettings works.
// It's also fine to pass a GPT-5.x model name explicitly:
model: 'gpt-5.2',
modelSettings: {
reasoning: { effort: 'high' },
text: { verbosity: 'low' },
},
});

为了降低延迟,推荐在 gpt-5.2 上使用 reasoning.effort: "none"。gpt-4.1 系列(包括 mini 与 nano 变体)同样是构建交互式智能体应用的可靠选择。

如果传入的是非 GPT-5 的模型名称且未提供自定义 modelSettings,SDK 将回退到与任意模型兼容的通用 modelSettings


默认的 ModelProvider 会使用 OpenAI API 解析名称。它支持两个不同的端点:

API用途调用 setOpenAIAPI()
Chat Completions标准聊天与函数调用setOpenAIAPI('chat_completions')
Responses新的以流式优先的生成式 API(工具调用、灵活输出)setOpenAIAPI('responses') (default)
设置默认 OpenAI 密钥
import { setDefaultOpenAIKey } from '@openai/agents';
setDefaultOpenAIKey(process.env.OPENAI_API_KEY!); // sk-...

如果需要自定义网络设置,您也可以通过 setDefaultOpenAIClient(client) 接入自有的 OpenAI 客户端。


ModelSettings 与 OpenAI 的参数一一对应,但不依赖特定提供方。

字段类型说明
temperaturenumber创造性与确定性的平衡。
topPnumber核采样。
frequencyPenaltynumber惩罚重复的 token。
presencePenaltynumber鼓励出现新 token。
toolChoice'auto' | 'required' | 'none' | string参见强制工具使用
parallelToolCallsboolean在支持的情况下允许并行函数调用。
truncation'auto' | 'disabled'token 截断策略。
maxTokensnumber响应中的最大 token 数。
storeboolean持久化响应以供检索/RAG 工作流使用。
reasoning.effort'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'针对 gpt-5.x 模型的推理投入。
text.verbosity'low' | 'medium' | 'high'针对 gpt-5.x 等模型的文本冗长度。

可在任一层级附加设置:

模型设置
import { Runner, Agent } from '@openai/agents';
const agent = new Agent({
name: 'Creative writer',
// ...
modelSettings: { temperature: 0.7, toolChoice: 'auto' },
});
// or globally
new Runner({ modelSettings: { temperature: 0.3 } });

Runner 级别的设置会覆盖任何与之冲突的单个智能体设置。


智能体可以通过 prompt 参数进行配置,用于指示应使用的服务端存储提示词配置,以控制智能体行为。目前,该选项仅在使用 OpenAI 的 Responses API 时支持。

字段类型说明
promptIdstring提示词的唯一标识符。
versionstring期望使用的提示词版本。
variablesobject传入到提示词中的键/值变量对。值可以是字符串,或文本、图像、文件等内容输入类型。
带提示词的智能体
import { parseArgs } from 'node:util';
import { Agent, run } from '@openai/agents';
/*
NOTE: This example will not work out of the box, because the default prompt ID will not
be available in your project.
To use it, please:
1. Go to https://platform.openai.com/playground/prompts
2. Create a new prompt variable, `poem_style`.
3. Create a system prompt with the content:
Write a poem in {{poem_style}}
4. Run the example with the `--prompt-id` flag.
*/
const DEFAULT_PROMPT_ID =
'pmpt_6965a984c7ac8194a8f4e79b00f838840118c1e58beb3332';
const POEM_STYLES = ['limerick', 'haiku', 'ballad'];
function pickPoemStyle(): string {
return POEM_STYLES[Math.floor(Math.random() * POEM_STYLES.length)];
}
async function runDynamic(promptId: string) {
const poemStyle = pickPoemStyle();
console.log(`[debug] Dynamic poem_style: ${poemStyle}`);
const agent = new Agent({
name: 'Assistant',
prompt: {
promptId,
version: '1',
variables: { poem_style: poemStyle },
},
});
const result = await run(agent, 'Tell me about recursion in programming.');
console.log(result.finalOutput);
}
async function runStatic(promptId: string) {
const agent = new Agent({
name: 'Assistant',
prompt: {
promptId,
version: '1',
variables: { poem_style: 'limerick' },
},
});
const result = await run(agent, 'Tell me about recursion in programming.');
console.log(result.finalOutput);
}
async function main() {
const args = parseArgs({
options: {
dynamic: { type: 'boolean', default: false },
'prompt-id': { type: 'string', default: DEFAULT_PROMPT_ID },
},
});
const promptId = args.values['prompt-id'];
if (!promptId) {
console.error('Please provide a prompt ID via --prompt-id.');
process.exit(1);
}
if (args.values.dynamic) {
await runDynamic(promptId);
} else {
await runStatic(promptId);
}
}
main().catch((error) => {
console.error(error);
process.exit(1);
});

任何额外的智能体配置(如 tools 或 instructions)都会覆盖您在已存储提示词中配置的对应值。


实现自定义提供方很简单——实现 ModelProviderModel,并将该提供方传给 Runner 构造函数:

最小自定义提供方
import {
ModelProvider,
Model,
ModelRequest,
ModelResponse,
ResponseStreamEvent,
} from '@openai/agents-core';
import { Agent, Runner } from '@openai/agents';
class EchoModel implements Model {
name: string;
constructor() {
this.name = 'Echo';
}
async getResponse(request: ModelRequest): Promise<ModelResponse> {
return {
usage: {},
output: [{ role: 'assistant', content: request.input as string }],
} as any;
}
async *getStreamedResponse(
_request: ModelRequest,
): AsyncIterable<ResponseStreamEvent> {
yield {
type: 'response.completed',
response: { output: [], usage: {} },
} as any;
}
}
class EchoProvider implements ModelProvider {
getModel(_modelName?: string): Promise<Model> | Model {
return new EchoModel();
}
}
const runner = new Runner({ modelProvider: new EchoProvider() });
console.log(runner.config.modelProvider.getModel());
const agent = new Agent({
name: 'Test Agent',
instructions: 'You are a helpful assistant.',
model: new EchoModel(),
modelSettings: { temperature: 0.7, toolChoice: 'auto' },
});
console.log(agent.model);

如果您需要非 OpenAI 模型的现成适配器,请参阅Vercel 的 AI SDK 集成任意模型


使用 OpenAI 提供方时,您可以通过提供 API 密钥选择加入自动追踪导出:

追踪导出器
import { setTracingExportApiKey } from '@openai/agents';
setTracingExportApiKey('sk-...');

这会将追踪发送到 OpenAI dashboard,您可以在其中检查工作流的完整执行图。