You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OpenAI Multi Agent SDK,如何为Dict类型设置additionalProperties为false?

解决Dict类型additionalProperties错误的方法

方法一:用Pydantic模型替代原生Dict(推荐)

原生Dict类型会自动生成带additionalProperties: true的Schema,违反OpenAI要求。改用Pydantic BaseModel明确定义结构,自动生成合规Schema:

from pydantic import BaseModel, ConfigDict
from typing import Union

# 定义输入数据模型,禁止额外属性
class FilterInput(BaseModel):
    model_config = ConfigDict(extra='forbid')  # 对应additionalProperties: false
    # 可根据实际需求添加具体字段,如:patient_id: str, diagnosis: str

# 定义输出数据模型
class FilterOutput(BaseModel):
    model_config = ConfigDict(extra='forbid')
    # 添加实际返回的字段,如:filtered_results: list[dict]

@function_tool
def filter_data(input_data_str: FilterInput, key: str, operator: str, value: Union[str,int]) -> FilterOutput:
    # 函数业务逻辑
    pass

方法二:手动修改工具的Schema配置

如果必须保留Dict类型,可以在初始化Agent前,手动修改工具的Schema参数:

# 获取filter_data的工具实例
filter_tool = filter_data.as_tool()

# 修改输入参数中的对象类型Schema
for prop in filter_tool.parameters["properties"].values():
    if prop.get("type") == "object":
        prop["additionalProperties"] = False

# 修改返回值的对象类型Schema
if filter_tool.return_schema.get("type") == "object":
    filter_tool.return_schema["additionalProperties"] = False

# 初始化Agent时使用修改后的工具
orchestrator = Agent(
    name="Orchestrator",
    model="o4-mini",
    instructions=ORCHESTRATOR_PROMPT,
    tools=[ patient_query, get_current_date, filter_tool ]
)

方法三:升级Pydantic并设置全局严格模式

若使用旧版Pydantic(v1.x),先升级到v2.x,再设置全局配置禁止额外属性:

from pydantic import ConfigDict

# 全局配置:所有模型默认禁止额外属性
BaseModel.model_config = ConfigDict(extra='forbid')

内容的提问来源于stack exchange,提问作者Learner_101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:42:31