Skip to content

消息、内容、上下文与能力矩阵:练习答案 ​

答案用于核对,不是正文首次实验的前置。先运行每篇正文中的完整代码,再把变体单独保存。

练习解答 ​

输入封装与跨平台映射 ​

为 Part 增加 call_id: str | None = None,并在 validate 中加入:

python
if part.type == 'tool_result' and not part.call_id:
    raise ValueError('tool result needs call id')

文本适配器应显式返回:

python
def map_for_text_only_provider(request):
    unsupported = [part.type for m in request.messages for part in m.parts
                   if part.type in {'image', 'file'}]
    if unsupported:
        return {'status': 'unsupported_content', 'types': sorted(set(unsupported))}
    return {'status': 'ready'}

重试沿用 task_id,因为它仍是同一业务目标;每次实际生成使用新的 call_id,这样日志可以区分新调用与重放。

上下文窗口与历史裁剪 ​

第一题的固定输入为 24、输出预留为 20,窗口按正文 pack 的 remaining 计算;先放最新 42-token 工具轮,再放 28-token 轮,若安全策略轮属于不可删除的固定输入,应先从预算中扣除,不能将它作为普通历史混入。第二题要求 tool_pair 同时保留调用 ID 与来源版本;第三题的摘要至少保存 source_message_ids、summary_model_version、created_at 和 open_questions,摘要文本不能替代原始证据。

多模态输入与能力矩阵 ​

能力矩阵应把 (provider, model, api_version, region, auth_mode) 作为键,值记录文本、图片、文件、工具、结构化、流式和缓存的验证状态。未知键抛 LookupError,缺失能力抛 ValueError。图片不支持时返回结构化降级结果,例如:

python
{'status': 'degraded', 'mode': 'ocr', 'degraded': True,
 'source_id': 'upload-7', 'source_version': 'sha256:...'}

不能返回普通回答,因为那会隐藏模型没有看到图片这一事实。验证记录应附实际输入、响应状态、SDK 与 API 版本、区域、认证模式和时间。

返回章节导读

用心记录每一步成长