Skip to content

资源、提示、工具契约与 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的数据范围约束。

用心记录每一步成长