资源、提示、工具契约与 Agent 接入:练习答案
练习解答
python
registry={'docs__search':('docs','search'),'tickets__search':('tickets','search')}
def resolve(name):
if name not in registry:raise ValueError('unknown tool')
return registry[name]
assert resolve('docs__search')==('docs','search')
assert resolve('tickets__search')==('tickets','search')
try:resolve('search')
except ValueError:pass
else:raise AssertionError('ambiguous tool accepted')
print('routing passed')注册时还应检查生成后的名字是否碰撞,不能认为拼接分隔符天然无冲突。
Host 回路变体
复制正文host.py为answer_host.py,删除专门拒绝reader访问tickets的两行,将bad输入循环只保留query=3一项;在failed调用之前增加:
python
ticket=await execute({**intent,'name':'tickets__search','call_id':'call-ticket'},'reader')
assert ticket['call_id']=='call-ticket'
assert 'tickets: public evidence' in ticket['output']
assert 'docs: public evidence' in output['output']
try:await execute({**intent,'name':'unknown__search'},'reader')
except KeyError:pass
else:raise AssertionError('unknown server accepted')原先executed只有docs的断言仍放在新增调用之前,因此正常通过;之后service-private仍isError=True。授权改变允许访问一个Server,不会取消该Server的数据范围约束。