# Google ADK Artifacts：让 Agent 更新一张图，按版本找回上一次二进制结果

已实际运行Google ADK InMemoryArtifactService，保存两版作者PNG并按版本核对字节和不存在版本；未运行Agent生成图片，进程内服务不跨进程持久化。

## 运行

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

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

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

## 1. 准备两版真正不同的PNG

chart-versions.json只把第三点15改为23，chart-v0.png和chart-v1.png来自这两组作者数据。先查看图像和SHA，不能复制同一图片冒充版本变化。

## 2. 核对Artifact作用域

练习使用app=lesson、fictional-user和lesson-session，同名sales.png写在同一作用域。用户级文件命名规则与会话作用域应按当前ADK文档区分。

## 3. 保存第一版二进制结果

run_sdk.py使用真实InMemoryArtifactService和types.Part.from_bytes保存PNG，记录save_artifact返回的版本号。此处图片由作者绘制，不是Agent生成。

## 4. 用相同文件名保存第二版

第二张图仍叫sales.png，保存后得到新版本。原文件字节保留在fixtures，便于独立核对服务回读内容。

## 5. 按版本分别加载并比字节

调用load_artifact(version=0/1)并计算SHA。只有两个hash分别匹配对应PNG，才证明版本不是仅在页面上改了标签。

## 6. 验证不存在版本的行为

negative-version.json要求99，脚本应得到None并明确显示不存在，不能偷偷回退最新版本。所有结果保存在sdk-contract.json。

## 7. 换Agent工具时另测生成链路

把真正生成图片的工具接入Agent后，再核对工具写入与模型返回引用。本文的InMemory服务在进程退出后不会持久化，不把版本保存测试说成永久云存储或AI生图完成。

## 官方依据

- Google ADK 官方文档或源码：https://google.github.io/adk-docs/artifacts/
