# Pydantic AI Toolsets：合并两个同名查询工具，给模型暴露清楚的命名空间

已运行真实Pydantic AI工具集和TestModel离线调用，验证前缀定义与各自返回数据。TestModel为合成提供方，没有真实LLM或付费调用。

## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 分清两个search的数据来源

databases.json把设备D-07与客户C-07放在不同集合。两者工具都叫search时，模型工具目录会有冲突，不能用看似相似的ID掩盖归属。

## 2. 先运行重名反例审计

audit.py检查negative-tool-names.json的两个search确实重复，再列出期望的devices_search与customers_search。它只检查作者输入，不代替SDK验证。

## 3. 建立两个FunctionToolset

run_sdk.py实际注册两个无参数只读search函数。装饰器分别绑定在devices和customers工具集上，返回各自数据，不能在一个函数里暗中猜数据源。

## 4. 用前缀组合工具集

将devices.prefixed("devices")和customers.prefixed("customers")传入CombinedToolset。前缀从模型可见定义中解决重名，原始函数名不必改。

## 5. 用离线TestModel核对真实定义

执行run_sdk.py，读取last_model_request_parameters.function_tools。只有出现两个不同完整名称且来源正确才算通过；本题TestModel是SDK合成测试提供方，不是语言模型。

## 6. 审查工具结果的业务ID

从实际TestModel输出找到设备与客户结果，各自核对D-07/C-07。完整工具名正确但函数返回错集合仍然算失败。

## 7. 换真实模型时另做选择验收

在自己的授权环境把模型替换为兼容provider，分别问设备与客户问题并保存实际tool_call。工具目录测试通过不证明真实模型一定选对工具。

## 官方依据

- Pydantic AI 官方文档或源码：https://raw.githubusercontent.com/pydantic/pydantic-ai/main/docs/toolsets.md
