【ACL 2026 Main】AgentMark: Utility-Preserving Behavioral Watermarking for Agents
See the code
AgentMark 是一个专注于 LLM Agent 行为水印 的实验与评测框架,实现了 Agent Mark 论文中提出的效用保持和分布保留水印算法。
智能体行为难管控?AgentMark提供一套全流程“行为鉴证工具箱”!
https://github.com/user-attachments/assets/c4e3f2c9-5939-490c-93d1-4b30b47c481e
如需更高清画质: → 在 Bilibili 观看体验
本项目旨在提供一套可复现、模块化且易于扩展的代码库,用于评估水印算法在复杂 Agent 任务中的性能、鲁棒性及隐蔽性。核心机制将 Agent 的决策过程分解为 规划行为 和 执行动作,通过在规划阶段进行分布保留采样来嵌入水印,从而在不影响下游任务效用的前提下实现可验证的版权保护。
🤖 平台首页![]() 快速接入与任务管理 |
⚔️ 水印对比模式![]() 对比有无水印 Agent 的行为差异 |
📄 实时日志![]() 实时查看 Agent 思考与执行过程 |
🛡️ 鲁棒性验证![]() 模拟日志丢失场景下的水印解码验证 |
AgentMark/
├── assets/ # 项目资源 (图片, PDF)
├── agentmark/ # 核心库:水印算法实现与 SDK
│ ├── core/ # 核心水印逻辑 (ECC, 采样)
│ ├── environments/ # 环境适配器 (ToolBench, ALFWorld)
│ ├── data/ # 比特流和配置数据
│ ├── proxy/ # 网关代理 (用于拦截工具调用)
│ └── sdk/ # 客户端 SDK (便于集成)
├── dashboard/ # 可视化仪表盘 (全栈)
│ ├── server/ # 后端服务 (FastAPI)
│ └── src/ # 前端源码 (React/Vite)
├── experiments/ # 实验实现
│ ├── toolbench/ # ToolBench API 工具调用实验
│ ├── alfworld/ # ALFWorld 具身智能实验
│ ├── oasis_watermark/ # 社交媒体实验 (Twitter/Reddit)
│ ├── rlnc_trajectory/ # RLNC 鲁棒性评测
│ └── semantic_rewriting/ # 语义重写鲁棒性测试
├── output/ # 实验输出 (日志, 预测结果)
├── docker-compose.yml # Docker Compose (开发)
├── docker-compose.prod.yml # Docker Compose (生产/一键部署)
├── environment.yml # Conda 环境配置 (Python 3.9)
├── requirements.txt # Python 依赖 (pip)
├── .env.example # 环境变量模板
├── LICENSE # MIT License
├── README.md # English README
└── README_zh.md # Chinese README
无需安装任何依赖,一行命令即可启动完整的 Web 可视化平台:
curl -fL https://raw.githubusercontent.com/Tooooa/AgentMark/main/docker-compose.prod.yml -o docker-compose.yml
docker-compose up -d
🎉 启动成功! 访问 http://localhost:8080 开始体验。
注意: 如需使用 LLM API,请先创建
.env文件:echo "DEEPSEEK_API_KEY=your_key_here" > .env
运行实验容器:
docker-compose up -d experiments
docker-compose exec experiments bash
手动拉取镜像:
docker pull toooa908/agentmark-backend:latest
docker pull toooa908/agentmark-frontend:latest
如果您需要修改代码或进行开发,请按以下步骤配置本地环境:
环境要求: Python 3.9+
# 创建并激活环境
conda env create -f environment.yml
conda activate AgentMark
# 或者手动安装
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入您的 API Key
Dashboard 提供了交互式的水印实验界面,包含实时对比、解码分析等功能。
由于 ToolBench API 检索需要加载缓存文件,为了免去长时间的索引构建过程,运行前端前必须下载预处理好的缓存文件。
retriever_cache.zip 文件。# 进入项目根目录
cd AgentMark
# 解压检索缓存到指定目录
unzip -o retriever_cache.zip -d experiments/toolbench/data/data/toolenv/tools
conda activate AgentMark
python dashboard/server/app.py
cd dashboard
npm install && npm run dev
http://localhost:5173。无需修改原有代码,只需将现有 Agent 的 API Base URL 指向网关地址,即可一键获得行为水印能力。这种模式特别适合开发者在不触动核心逻辑的情况下,快速为已有 Agent 系统增加版权保护与溯源功能。
conda activate AgentMark
export DEEPSEEK_API_KEY=sk-你的key
export TARGET_LLM_MODEL=deepseek-chat
export AGENTMARK_TOOL_MODE=proxy
uvicorn agentmark.proxy.server:app --host 0.0.0.0 --port 8001
在 网关代理终端 可看到实时日志:
[agentmark:scoring_request]:评分指令注入[agentmark:tool_calls_proxy]:网关构造的工具调用[watermark]:水印结果与可视化数据注意: 如果遇到
502 Bad Gateway,请设置export no_proxy=localhost,127.0.0.1,0.0.0.0。
AgentMark Proxy 支持所有基于 OpenAI Chat Completions API 的 Agent 框架(如 OpenAI Swarm、LangChain、AutoGen 等)。
/v1/chat/completions 接口的框架。只需配置 base_url 即可。提示: Chat Completions API 是无状态的,而 Assistants API 是有状态的。Proxy 基于无状态设计,因此仅支持前者。
详细的实验运行指南如下:
运行 ToolBench 实验前必须完成以下步骤:
data 文件夹放入 experiments/toolbench/data/ 目录下,确保结构如下:
experiments/toolbench/data/data/
├── test_query/
├── toolenv/tools/ # 包含所有工具分类 JSON
└── answer/
experiments/toolbench/| 模式 | 配置项 (use_local_model) | 说明 |
|---|---|---|
| API 模式 | false (默认) | 调用远程 LLM API (如 DeepSeek, OpenAI),水印通过行为采样嵌入 |
| 本地模式 | true | 加载本地模型 (如 Llama-3),结合 SynthID 文本水印算法 |
conda activate AgentMark
# 运行完整流水线 (包含基线/水印/评测)
python experiments/toolbench/scripts/run_pipeline.py
experiments/toolbench/configs/pipeline_config.json
common_config.use_local_model 为 true 或 falselocal_model_path 指向模型权重路径数据集在运行时会自动下载到 ~/.cache/alfworld,或手动运行:
alfworld-download
配置已预设在 experiments/alfworld/configs/base_config.yaml。
experiments/alfworld/pip install alfworld # 需在 AgentMark 环境基础上安装
conda activate AgentMark
# 运行完整流水线 (包含基线/水印/评测)
python experiments/alfworld/scripts/run_experiment.py --config experiments/alfworld/configs/config.json
experiments/alfworld/configs/config.json[!NOTE]
- 本目录下的
oasis/是 修改后的子依赖库,包含定制化的水印逻辑。- 请使用独立的
oasis(Python 3.10+) 环境运行。
环境安装:
# 1. 创建环境 (建议 Python 3.10+)
conda create -n oasis python=3.10 -y
conda activate oasis
# 2. 安装 Oasis 包
pip install camel-oasis
详细说明请参考 Oasis README。
简介: 模拟 Twitter 和 Reddit 上的用户行为与水印注入。
目录: experiments/oasis_watermark/
Twitter 实验:
experiments/oasis_watermark/twitter_watermark_experiment/cd experiments/oasis_watermark/twitter_watermark_experiment
# 需配置 config.py 或设置环境变量 DEEPSEEK_API_KEY
python run_experiment.py
# 运行评测
python evaluate_metrics_llm.py
Reddit 实验:
experiments/oasis_watermark/reddit_watermark_experiment/cd experiments/oasis_watermark/reddit_watermark_experiment
python run_experiment.py
# 运行评测
python evaluate_metrics_llm.py
r/TechFuture 社区中关于 AI 话题的讨论。experiments/rlnc_trajectory/| 脚本 | 功能 |
|---|---|
scripts/rlnc_step_erasure_eval.py | 擦除鲁棒性评测 (模拟不同丢包率) |
scripts/analyze_fpr.py | 误报率分析 - 模拟"未加水印"和"错误密钥"攻击场景 |
cd experiments/rlnc_trajectory
python scripts/rlnc_step_erasure_eval.py --config rlnc_eval_config.json
python scripts/analyze_fpr.py --config rlnc_fpr_config.json
rlnc_eval_config.json, rlnc_fpr_config.jsonexperiments/semantic_rewriting/cd experiments/semantic_rewriting
python scripts/robustness_test.py \
--task data/001_task_0.json \
--bits data/decoded_bits.json \
--steps 5
This project is licensed under the MIT License.
如果您在研究中使用了本项目,请引用我们的论文:
@article{huang2026agentmark,
title={AgentMark: Utility-Preserving Behavioral Watermarking for Agents},
author={Huang, Kaibo and Tan, Jin and Wei, Yukun and Li, Wanling and Zhang, Zipei and Tian, Hui and Yang, Zhongliang and Zhou, Linna},
journal={arXiv preprint arXiv:2601.03294},
year={2026}
}
8 commits
Python
80.0%
TypeScript
11.6%
MDX
5.5%
Jupyter Notebook
1.6%
【ACL 2026 Main】AgentMark: Utility-Preserving Behavioral Watermarking for Agents
See the code
AgentMark 是一个专注于 LLM Agent 行为水印 的实验与评测框架,实现了 Agent Mark 论文中提出的效用保持和分布保留水印算法。
智能体行为难管控?AgentMark提供一套全流程“行为鉴证工具箱”!
https://github.com/user-attachments/assets/c4e3f2c9-5939-490c-93d1-4b30b47c481e
如需更高清画质: → 在 Bilibili 观看体验
本项目旨在提供一套可复现、模块化且易于扩展的代码库,用于评估水印算法在复杂 Agent 任务中的性能、鲁棒性及隐蔽性。核心机制将 Agent 的决策过程分解为 规划行为 和 执行动作,通过在规划阶段进行分布保留采样来嵌入水印,从而在不影响下游任务效用的前提下实现可验证的版权保护。
🤖 平台首页![]() 快速接入与任务管理 |
⚔️ 水印对比模式![]() 对比有无水印 Agent 的行为差异 |
📄 实时日志![]() 实时查看 Agent 思考与执行过程 |
🛡️ 鲁棒性验证![]() 模拟日志丢失场景下的水印解码验证 |
AgentMark/
├── assets/ # 项目资源 (图片, PDF)
├── agentmark/ # 核心库:水印算法实现与 SDK
│ ├── core/ # 核心水印逻辑 (ECC, 采样)
│ ├── environments/ # 环境适配器 (ToolBench, ALFWorld)
│ ├── data/ # 比特流和配置数据
│ ├── proxy/ # 网关代理 (用于拦截工具调用)
│ └── sdk/ # 客户端 SDK (便于集成)
├── dashboard/ # 可视化仪表盘 (全栈)
│ ├── server/ # 后端服务 (FastAPI)
│ └── src/ # 前端源码 (React/Vite)
├── experiments/ # 实验实现
│ ├── toolbench/ # ToolBench API 工具调用实验
│ ├── alfworld/ # ALFWorld 具身智能实验
│ ├── oasis_watermark/ # 社交媒体实验 (Twitter/Reddit)
│ ├── rlnc_trajectory/ # RLNC 鲁棒性评测
│ └── semantic_rewriting/ # 语义重写鲁棒性测试
├── output/ # 实验输出 (日志, 预测结果)
├── docker-compose.yml # Docker Compose (开发)
├── docker-compose.prod.yml # Docker Compose (生产/一键部署)
├── environment.yml # Conda 环境配置 (Python 3.9)
├── requirements.txt # Python 依赖 (pip)
├── .env.example # 环境变量模板
├── LICENSE # MIT License
├── README.md # English README
└── README_zh.md # Chinese README
无需安装任何依赖,一行命令即可启动完整的 Web 可视化平台:
curl -fL https://raw.githubusercontent.com/Tooooa/AgentMark/main/docker-compose.prod.yml -o docker-compose.yml
docker-compose up -d
🎉 启动成功! 访问 http://localhost:8080 开始体验。
注意: 如需使用 LLM API,请先创建
.env文件:echo "DEEPSEEK_API_KEY=your_key_here" > .env
运行实验容器:
docker-compose up -d experiments
docker-compose exec experiments bash
手动拉取镜像:
docker pull toooa908/agentmark-backend:latest
docker pull toooa908/agentmark-frontend:latest
如果您需要修改代码或进行开发,请按以下步骤配置本地环境:
环境要求: Python 3.9+
# 创建并激活环境
conda env create -f environment.yml
conda activate AgentMark
# 或者手动安装
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入您的 API Key
Dashboard 提供了交互式的水印实验界面,包含实时对比、解码分析等功能。
由于 ToolBench API 检索需要加载缓存文件,为了免去长时间的索引构建过程,运行前端前必须下载预处理好的缓存文件。
retriever_cache.zip 文件。# 进入项目根目录
cd AgentMark
# 解压检索缓存到指定目录
unzip -o retriever_cache.zip -d experiments/toolbench/data/data/toolenv/tools
conda activate AgentMark
python dashboard/server/app.py
cd dashboard
npm install && npm run dev
http://localhost:5173。无需修改原有代码,只需将现有 Agent 的 API Base URL 指向网关地址,即可一键获得行为水印能力。这种模式特别适合开发者在不触动核心逻辑的情况下,快速为已有 Agent 系统增加版权保护与溯源功能。
conda activate AgentMark
export DEEPSEEK_API_KEY=sk-你的key
export TARGET_LLM_MODEL=deepseek-chat
export AGENTMARK_TOOL_MODE=proxy
uvicorn agentmark.proxy.server:app --host 0.0.0.0 --port 8001
在 网关代理终端 可看到实时日志:
[agentmark:scoring_request]:评分指令注入[agentmark:tool_calls_proxy]:网关构造的工具调用[watermark]:水印结果与可视化数据注意: 如果遇到
502 Bad Gateway,请设置export no_proxy=localhost,127.0.0.1,0.0.0.0。
AgentMark Proxy 支持所有基于 OpenAI Chat Completions API 的 Agent 框架(如 OpenAI Swarm、LangChain、AutoGen 等)。
/v1/chat/completions 接口的框架。只需配置 base_url 即可。提示: Chat Completions API 是无状态的,而 Assistants API 是有状态的。Proxy 基于无状态设计,因此仅支持前者。
详细的实验运行指南如下:
运行 ToolBench 实验前必须完成以下步骤:
data 文件夹放入 experiments/toolbench/data/ 目录下,确保结构如下:
experiments/toolbench/data/data/
├── test_query/
├── toolenv/tools/ # 包含所有工具分类 JSON
└── answer/
experiments/toolbench/| 模式 | 配置项 (use_local_model) | 说明 |
|---|---|---|
| API 模式 | false (默认) | 调用远程 LLM API (如 DeepSeek, OpenAI),水印通过行为采样嵌入 |
| 本地模式 | true | 加载本地模型 (如 Llama-3),结合 SynthID 文本水印算法 |
conda activate AgentMark
# 运行完整流水线 (包含基线/水印/评测)
python experiments/toolbench/scripts/run_pipeline.py
experiments/toolbench/configs/pipeline_config.json
common_config.use_local_model 为 true 或 falselocal_model_path 指向模型权重路径数据集在运行时会自动下载到 ~/.cache/alfworld,或手动运行:
alfworld-download
配置已预设在 experiments/alfworld/configs/base_config.yaml。
experiments/alfworld/pip install alfworld # 需在 AgentMark 环境基础上安装
conda activate AgentMark
# 运行完整流水线 (包含基线/水印/评测)
python experiments/alfworld/scripts/run_experiment.py --config experiments/alfworld/configs/config.json
experiments/alfworld/configs/config.json[!NOTE]
- 本目录下的
oasis/是 修改后的子依赖库,包含定制化的水印逻辑。- 请使用独立的
oasis(Python 3.10+) 环境运行。
环境安装:
# 1. 创建环境 (建议 Python 3.10+)
conda create -n oasis python=3.10 -y
conda activate oasis
# 2. 安装 Oasis 包
pip install camel-oasis
详细说明请参考 Oasis README。
简介: 模拟 Twitter 和 Reddit 上的用户行为与水印注入。
目录: experiments/oasis_watermark/
Twitter 实验:
experiments/oasis_watermark/twitter_watermark_experiment/cd experiments/oasis_watermark/twitter_watermark_experiment
# 需配置 config.py 或设置环境变量 DEEPSEEK_API_KEY
python run_experiment.py
# 运行评测
python evaluate_metrics_llm.py
Reddit 实验:
experiments/oasis_watermark/reddit_watermark_experiment/cd experiments/oasis_watermark/reddit_watermark_experiment
python run_experiment.py
# 运行评测
python evaluate_metrics_llm.py
r/TechFuture 社区中关于 AI 话题的讨论。experiments/rlnc_trajectory/| 脚本 | 功能 |
|---|---|
scripts/rlnc_step_erasure_eval.py | 擦除鲁棒性评测 (模拟不同丢包率) |
scripts/analyze_fpr.py | 误报率分析 - 模拟"未加水印"和"错误密钥"攻击场景 |
cd experiments/rlnc_trajectory
python scripts/rlnc_step_erasure_eval.py --config rlnc_eval_config.json
python scripts/analyze_fpr.py --config rlnc_fpr_config.json
rlnc_eval_config.json, rlnc_fpr_config.jsonexperiments/semantic_rewriting/cd experiments/semantic_rewriting
python scripts/robustness_test.py \
--task data/001_task_0.json \
--bits data/decoded_bits.json \
--steps 5
This project is licensed under the MIT License.
如果您在研究中使用了本项目,请引用我们的论文:
@article{huang2026agentmark,
title={AgentMark: Utility-Preserving Behavioral Watermarking for Agents},
author={Huang, Kaibo and Tan, Jin and Wei, Yukun and Li, Wanling and Zhang, Zipei and Tian, Hui and Yang, Zhongliang and Zhou, Linna},
journal={arXiv preprint arXiv:2601.03294},
year={2026}
}
8 commits
Python
80.0%
TypeScript
11.6%
MDX
5.5%
Jupyter Notebook
1.6%