Skip to main content
OpenAI Decisions API读取自然语言和图像,并返回类型化的答案和校准概率,而不是生成文本。 OpenAIDecisions将这些决策作为LangChain Runnable公开,因此您可以调用、批量处理或与其他可运行项组合它们。它接受字符串、结构化JSON和LangChain消息对象,并在LangSmith中记录跟踪和Token使用情况。用于执行专注的决策,例如路由请求、选择模型或检查工具调用是否安全运行。 在LangChain中间件中使用OpenAI决策来控制createAgent行为,包括使用自定义中间件对智能体状态进行分类。参见智能体中间件了解示例。
OpenAIDecisions及其中间件处于Beta阶段,需要@langchain/openai>=1.8.0。中间件还需要langchain>=1.6.0。它们的API可能会未经通知而更改。

设置

在OpenAI控制面板中创建API密钥并导出它:
可选:设置OPENAI_BASE_URL以使用兼容的网关或测试服务器。默认是OpenAI API端点。
要通过LangSmith LLM网关路由请求,设置LANGSMITH_GATEWAY=true。网关请求使用LANGSMITH_GATEWAY_API_KEY或LANGSMITH_API_KEY进行身份验证:

快速入门

创建一个带有决策模型的OpenAIDecisions实例,然后在每次调用中一起传递输入和命名问题。共享输入的问题在一个请求中回答:
答案按您提供的问句名称进行键控,它们的类型由问句推断:team.choice被类型化为"infra" | "billing"。每个问句要么收到其自身类型的答案,要么收到拒绝,因此在读取类型化字段之前请检查type。响应还包含model(回答者)、usage_metadata中的Token使用情况以及OpenAI的requestId。 请求input可以是字符串、JSON对象或数组,或LangChain消息。消息(包括系统消息、AI消息和工具消息)被原生地作为对话发送,工具调用和工具结果作为函数调用项。文本和图像内容被保留。其他内容,如文件或音频,被替换为占位符或省略。JSON对象和数组作为结构化JSON在一个用户消息中发送,它们内部的任何消息都以相同的方式转换。

决策类型

每个问句是三种类型中的一种: predicate是唯一没有confidence的类型,因为概率就是答案。对于范围,使用score而不是predicate:概率为0.5意味着在“是”和“否”之间均等,而不是“中等”。 score级别按从低到高的顺序排列,并从0开始索引。传递一个纯字符串表示仅标签的级别,或传递一个具有label和description的对象。返回的score是级别索引的概率加权平均值,因此它可能落在级别之间。probabilities中的每个条目都包含一个级别的索引作为value,其label和其probability。 当模型拒绝回答一个问句时,答案是RefusalAnswer,其中包含type: "refusal"而不是类型化的答案。

智能体中间件

langchain包包含两个Beta阶段的中间件,将OpenAI决策放在智能体的决策点。从langchain导入它们。在使用它们之前,与OpenAI集成一起安装langchain:
这两个中间件都需要一个model:一个配置好的OpenAIDecisions实例。

模型路由

对您所有命名模型中的最新人类消息进行分类,并使用选定的模型处理运行中的每个模型调用。每个选择都配对了一个模型及其选择的依据:
答案存储在智能体状态下的modelRoute作为具有choice、probabilities和confidence的对象。当模型拒绝,或状态中没有人类消息时,modelRoute是null,模型调用使用智能体自己的模型。

工具风险门控

询问工具调用具有风险或授权不足的概率。概率为0.5或更高的调用返回错误ToolMessage而不是运行工具。仅分类您列出的工具。传递它们的名称或工具对象:
覆盖instructions以描述您自己的工具的风险。中间件采用封闭策略:拒绝会阻止调用,API错误会传播而不会运行工具。
除非发送给OpenAI是可接受的,否则不要在工具参数或对话状态中放置秘密。此中间件拒绝风险调用。它不会请求批准。当您希望有人批准它们时,请将其与人工参与中间件配对。

自定义中间件

OpenAIDecisions直接接受LangChain消息对象,因此自定义中间件钩子可以在将其转换之前对智能体的对话状态进行分类。此示例在每次运行的开始时对对话进行一次分类,并将完整答案存储在智能体状态中:
使用与您的决策点匹配的任何生命周期钩子。例如,使用beforeModel在每次工具结果后重新分类,或使用wrapToolCall对拟议的操作进行分类。参见自定义中间件了解所有钩子和状态模式。

跟踪

OpenAI决策在LangSmith中跟踪,因此您可以在智能体的其余部分旁边检查决策和Token使用情况。

参见


官方原文:src/oss/javascript/integrations/decision_models/openai.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026