OpenAIDecisions将这些决策作为LangChain Runnable暴露出来,因此您可以调用、批量处理或与其他可运行项组合它们。它接受字符串、结构化JSON和LangChain消息对象,并在LangSmith中记录跟踪和Token使用情况。用于执行专注的决策,例如路由请求、选择模型或检查工具调用是否安全运行。
在LangChain中间件中使用OpenAI决策来控制create_agent行为,包括使用自定义中间件对智能体状态进行分类。参见智能体中间件了解示例。
OpenAIDecisions及其中间件处于Beta阶段,并需要langchain-openai>=1.7.0。它们的API可能会未经通知而更改。安装
可选:设置要通过LangSmith LLM网关路由请求,设置
OPENAI_BASE_URL以使用兼容的网关或测试服务器。默认是OpenAI API端点。LANGSMITH_GATEWAY=true。网关请求使用LANGSMITH_GATEWAY_API_KEY或LANGSMITH_API_KEY进行身份验证:快速入门
创建一个带有决策模型的OpenAIDecisions实例,然后在每次调用时一起传递输入和命名问题。共享输入的问题在一个请求中回答:
predicates、choices、scores和refusals按类型分组。响应还包含回答的model、Tokenusage和OpenAIrequest_id。
请求input可以是字符串、JSON对象或数组,或LangChain消息。字符串和HumanMessage对象(包括文本和base64图像内容)原生发送。其他输入,如与系统、AI或工具消息的对话,或JSON对象,作为单个用户消息的JSON文本发送,base64图像保留为图像部分。
决策类型
每个问题都是三种类型中的一种:Predicate是唯一没有confidence的类型,因为概率就是答案。对于范围,使用Score而不是Predicate:概率为0.5意味着在“是”和“否”之间均等,而不是“中等”。
Score级别按从低到高的顺序排列,并从0开始索引。传递一个纯字符串表示仅标签的级别,或传递一个Level,其中包含label和description。返回的score是级别索引的概率加权平均值,因此它可能落在级别之间,并且legend将每个索引映射到其标签。
当模型拒绝回答问题时,答案在refusals上是一个RefusalAnswer,而不是类型化的答案。当可能拒绝时,在读取类型化答案之前检查缺失的键。
智能体中间件
该包包含两个Beta阶段的中间件,它们将OpenAI决策放在智能体的决策点。从langchain_openai.middleware导入它们。在使用它们之前,与OpenAI集成一起安装langchain:
这两个中间件都需要一个
model:决策模型名称,或配置的OpenAIDecisions实例。
模型路由
对您所有命名模型中的最新人类消息进行分类,并使用选定的模型处理运行中的每个模型调用。每个ModelChoice将模型与其选择它的标准配对:
model_route中,作为choice、probabilities和confidence的映射。当模型拒绝,或状态中没有人类消息时,model_route是None,并且模型调用使用智能体自己的模型。
工具风险网关
询问工具调用具有风险或授权不足的概率。概率为0.5或更高的调用返回错误ToolMessage,而不是运行工具。仅对您列出的工具进行分类。传递它们的名称或工具对象:
instructions以描述您自己的工具的风险。该中间件严格拒绝:拒绝会阻止调用,API错误会传播而不会运行工具。
自定义中间件
OpenAIDecisions直接接受LangChain消息对象,因此自定义中间件钩子可以在将其转换之前对智能体的对话状态进行分类。此示例在每次运行的开始时对对话进行一次分类,并将完整的ChoiceAnswer存储在智能体状态中:
before_model在每次工具结果后重新分类,或使用wrap_tool_call对拟议的操作进行分类。参见自定义中间件了解所有钩子和状态模式。
跟踪
OpenAI决策在LangSmith中跟踪,因此您可以在智能体的其余部分旁边检查决策和Token使用情况。参见
官方原文:src/oss/python/integrations/decision_models/openai.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。