使用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
相关产品推荐
相关产品推荐

