microsoft/waza

GitHub: microsoft/waza

微软推出的 AI Agent 技能评估 CLI 框架,用于创建、测试和持续改进 Agent 技能的质量与有效性。

Stars: 627 | Forks: 31

# Waza 一个用于评估 AI Agent 技能的 Go CLI 工具 —— 搭建评估套件、运行基准测试并比较不同模型的结果。 📖 **[快速入门 / 文档](https://microsoft.github.io/waza/)** ## 安装说明 ### 二进制文件安装 (推荐) 使用安装脚本下载并安装最新的预编译二进制文件: ``` curl -fsSL https://raw.githubusercontent.com/microsoft/waza/main/install.sh | bash ``` 该脚本会自动检测你的操作系统和架构 (linux/darwin/windows, amd64/arm64),下载二进制文件,校验其校验和,并将其安装到 `/usr/local/bin` (如果没有写入权限,则安装到 `~/bin`)。 或者直接从 [最新发行版](https://github.com/microsoft/waza/releases/latest) 下载二进制文件。 ### 从源码安装 需要 Go 1.26+: 请注意,由于使用了 LFS 产物,你无法使用 `go install` 来安装 waza。要在常规发行版之外安装 waza,你需要克隆该代码库: ``` git clone https://github.com/microsoft/waza.git cd waza # 确保基于 git LFS 的 artifacts 可用(用于嵌入式 copilot 二进制文件) git lfs install git lfs pull go build -o waza ./cmd/waza ./waza ``` ### Azure Developer CLI (azd) 扩展 Waza 也可作为 [azd 扩展](https://learn.microsoft.com/azure/developer/azure-developer-cli/extensions/overview) 使用: ``` # 添加 waza 扩展 registry azd ext source add -n waza -t url -l https://raw.githubusercontent.com/microsoft/waza/main/registry.json # 安装扩展 azd ext install microsoft.azd.waza # 验证其是否正常工作 azd waza --help ``` 安装后,所有 waza 命令都可以通过 `azd waza` 使用。例如: ``` azd waza init my-eval --interactive azd waza run examples/code-explainer/eval.yaml -v ``` ## 更新通知 Waza 会在后台自动检查新版本。如果有可用更新,命令输出后会显示一条通知: ``` A newer version of waza is available: v0.24.0 → v0.28.0. Run: curl -fsSL ... | bash ``` 该检查是非阻塞的(绝不会减慢命令执行速度),会缓存 24 小时,并且可以通过 `--no-update-check` 或 `WAZA_NO_UPDATE_CHECK=1` 来禁用。 ## 快速入门 ### 新用户:5 分钟快速上手 查看 **[快速入门指南](docs/GETTING-STARTED.md)** 获取完整的操作演示: ``` # 初始化新项目 waza init my-project && cd my-project # 创建新 skill waza new skill my-skill # 在 skills/my-skill/SKILL.md 中定义 skill # 在 evals/my-skill/tasks/ 中编写评估 tasks # 在 evals/my-skill/fixtures/ 中添加测试 fixtures # 运行评估 waza run my-skill # 检查 skill 就绪状态 waza check my-skill ``` ### 所有命令 ``` # Build make build # 初始化项目 workspace waza init [directory] # 创建新 skill waza new skill skill-name # 基于现有 SKILL.md 创建新 eval scaffold waza new eval skill-name # 通过记录 prompt 运行生成 task YAML waza new task from-prompt "Explain this code and suggest fixes" evals/code-explainer/tasks/recorded-task.yaml # 检查 skill 是否准备好提交 waza check skills/my-skill # 从 SKILL.md 建议 eval suite waza suggest skills/my-skill --dry-run waza suggest skills/my-skill --apply # 注意:'generate' 可作为 'new' 的别名(有关 new 命令请参见下文) # 注意:支持 Custom agents (.agent.md) — 参见 https://microsoft.github.io/waza/guides/custom-agents/ # 运行评估(适用于 skills 和 custom agents) waza run examples/code-explainer/eval.yaml --context-dir examples/code-explainer/fixtures -v # 对先前 `waza run --output results.json ...` 的输出进行 Grade waza grade eval.yaml --results results.json # 跨 models 比较结果 waza compare results-gpt4.json results-sonnet.json # 生成 eval coverage 网格 waza coverage --format markdown # 统计 skill 文件中的 tokens 数 waza tokens count skills/ # 比较 skill token 预算与 main waza tokens compare main --skills --threshold 10 # 建议 token 优化方案 waza tokens suggest skills/ ``` ## 命令 ### `waza init [directory]` 初始化一个包含独立的 `skills/` 和 `evals/` 目录的 waza 项目工作区。该操作是幂等的 —— 只创建缺失的文件。 | 标志 | 描述 | |------|-------------| | `--no-skill` | 跳过首个技能创建提示 | 创建内容: - `skills/` — 技能定义目录 - `evals/` — 评估套件目录 - `.github/workflows/eval.yml` — 用于在 PR 上运行评估的 CI/CD 流水线 - `.gitignore` — Waza 特定的排除项 - `README.md` — 你的项目快速入门指南 **示例:** ``` waza init my-project # 可选交互式创建首个 skill waza init my-project --no-skill # 跳过 skill 创建提示 ``` ### `waza new skill ` 创建一个包含脚手架结构和评估套件的新技能。检测工作区上下文并调整输出。 | 标志 | 缩写 | 描述 | |------|-------|-------------| | `--template` | `-t` | 模板包 (即将推出) | **模式:** *项目模式* (检测到 `skills/` 目录): ``` project/ ├── skills/{skill-name}/SKILL.md └── evals/{skill-name}/ ├── eval.yaml ├── tasks/*.yaml └── fixtures/ ``` *独立模式* (未检测到 `skills/`): ``` {skill-name}/ ├── SKILL.md ├── evals/ │ ├── eval.yaml │ ├── tasks/*.yaml │ └── fixtures/ ├── .github/workflows/eval.yml ├── .gitignore └── README.md ``` **示例:** ``` # 在 project 模式下(在上文“Modes”部分有解释):创建 skills/code-explainer/SKILL.md + evals/code-explainer/ waza new skill code-explainer # 在 standalone 模式下(在上文“Modes”部分有解释):创建 code-explainer/ 自包含目录 waza new skill code-explainer ``` ### `waza new eval ` 从现有的 `SKILL.md` 脚手架生成一个评估套件 (从 `USE FOR` 和 `DO NOT USE FOR` 读取前置元数据触发提示)。 创建内容: - `evals//eval.yaml` - `evals//tasks/positive-trigger-1.yaml` - `evals//tasks/positive-trigger-2.yaml` - `evals//tasks/negative-trigger-1.yaml` | 标志 | 描述 | |------|-------------| | `--output ` | `eval.yaml` 的自定义路径 (任务在同级 `tasks/` 目录下生成) | **示例:** ``` # 默认输出位置 waza new eval code-explainer # 自定义 eval 路径 waza new eval code-explainer --output evals/custom-code-explainer/eval.yaml ``` ### `waza new task from-prompt ` 通过 Copilot 运行一个提示词,并根据观察到的行为 (响应文本、工具使用情况和调用的技能) 生成一个带有推断验证器的任务 YAML。 | 标志 | 描述 | |------|-------------| | `--model ` | 用于录制的 Copilot 模型 (默认: `claude-sonnet-4.5`) | | `--testname ` | 写入生成任务的测试名称和 ID (默认: `auto-generated-test`) | | `--tags ` | 附加到生成任务的逗号分隔标签 | | `--timeout ` | 提示词执行的最长时间 (默认: `5m`) | | `--overwrite` | 如果输出任务文件已存在则覆盖 | | `--root ` | 用于技能发现的根目录 (默认: `.`) | **示例:** ``` # 记录 prompt 并生成可复用的 task YAML waza new task from-prompt "Refactor this function for readability" evals/code-explainer/tasks/refactor-readability.yaml # 添加 metadata 并覆盖现有文件 waza new task from-prompt "Explain this diff and risks" evals/code-explainer/tasks/diff-analysis.yaml \ --testname diff-analysis \ --tags recorded,regression \ --overwrite ``` ### `waza run ` 从规格文件运行评估基准测试。 | 标志 | 缩写 | 描述 | |------|-------|-------------| | `--context-dir ` | | 夹具目录 (默认: 相对于规格文件的 `./fixtures`) | | `--output ` | `-o` | 将结果保存为 JSON | | `--output-dir ` | | 结构化输出目录;每次运行都会创建一个带 UTC 时间戳的 `` 子目录。与 `--output` 互斥。 | | `--verbose` | `-v` | 详细的进度输出 | | `--transcript-dir ` | | 保存每个任务的记录 JSON 文件 | | `--task ` | | 按名称/ID模式过滤任务 (可重复) | | `--parallel` | | 并发运行任务 | | `--workers ` | | 并发工作线程数 (默认: 4, 需要指定 `--parallel`) | | `--trials ` | | 将每个任务运行 `n` 次以检测不稳定性 (省略则使用 `config.trials_per_task`;如果提供,`n` 必须 >= 1) | | `--interpret` | | 打印通俗语言的结果解释 | | `--format ` | | 输出格式: `default` 或 `github-comment` (默认: `default`) | | `--cache` | | 启用结果缓存以加速重复运行 | | `--no-cache` | | 显式禁用结果缓存 | | `--cache-dir ` | | 缓存目录 (默认: `.waza-cache`) | | `--reporter ` | | 输出报告器: `json` (默认), `junit:` (可重复) | | `--baseline` | | A/B 测试模式 — 将每个任务运行两次 (无技能 = 基线, 有技能 = 正常) 并计算改进分数 | | `--discover` | | 自动技能发现 — 遍历目录树以查找 SKILL.md + eval.yaml (root/tests/evals) | | `--strict` | | 如果任何 SKILL.md 缺少评估覆盖则失败 (与 `--discover` 一起使用) | | `--suggest` | | 根据测试结果生成 Copilot 建议报告 (`mock` 引擎会发出确定性的虚假报告) | | `--output-dir ` | | 结构化输出目录;每次运行都会创建一个带 UTC 时间戳的子目录。与 `--output` 互斥。 | | `--tags ` | | 使用 glob 模式按标签过滤任务 (可重复) | | `--model ` | | 覆盖模型 (可重复,用于多模型比较) | | `--recommend` | | 在多模型运行后生成启发式建议 | | `--judge-model ` | | 用于 LLM-as-judge 评分器的模型 (覆盖执行模型) | | `--session-log` | | 启用会话事件日志记录 (NDJSON) | | `--session-dir ` | | 会话日志文件的目录 (默认: 当前目录) | | `--no-summary` | | 跳过为多技能运行写入组合的 summary.json | | `--update-snapshots` | | 更新或创建差异评分器快照文件以匹配当前输出 | | `--skip-graders` | | 跳过评分 (仅执行);稍后使用 `waza grade` 进行评分 | | `--keep-workspace` | | 在执行后保留临时工作区以便调试 | **结果缓存** 使用 `--cache` 启用缓存,以存储测试结果并在重复运行时跳过重新执行: ``` # 首次运行执行所有测试并缓存结果 waza run eval.yaml --cache # 第二次运行使用缓存结果(速度更快) waza run eval.yaml --cache # 在需要时清除缓存 waza cache clear ``` 缓存的结果会在以下情况自动失效: - 规格配置发生更改 (模型、超时、评分器等) - 任务定义发生更改 - 夹具文件发生更改 **注意:** 对于使用非确定性评分器 (`behavior`, `prompt`) 的评估,缓存会自动禁用。 **退出代码** `run` 命令使用退出代码来启用 CI/CD 集成: | 退出代码 | 条件 | 描述 | |-----------|-----------|-------------| | `0` | 成功 | 所有测试通过 | | `1` | 测试失败 | 一个或多个测试验证失败 | | `2` | 配置错误 | 无效的规格、文件缺失或运行时错误 | CI 使用示例: ``` # 如果任何测试失败则使 build 失败 waza run eval.yaml || exit $? # 捕获特定的 exit codes waza run eval.yaml EXIT_CODE=$? if [ $EXIT_CODE -eq 1 ]; then echo "Tests failed - check results" elif [ $EXIT_CODE -eq 2 ]; then echo "Configuration error" fi # 将结果发布为 PR 评论 (GitHub Actions) waza run eval.yaml --format github-comment > comment.md gh pr comment $PR_NUMBER --body-file comment.md # 生成用于 CI 测试报告的 JUnit XML waza run eval.yaml --reporter junit:results.xml # 同时输出 JSON 和 JUnit XML waza run eval.yaml -o results.json --reporter junit:results.xml ``` **注意:** `waza generate` 是 `waza new` 的别名。这两个命令都支持相同的功能,可以使用 `--output-dir` 标志指定自定义输出位置。 ### `waza compare [files...]` 并排比较来自多个评估运行的结果 —— 包含每个任务评分差异、通过率差异和汇总统计数据。 | 标志 | 缩写 | 描述 | |------|-------|-------------| | `--format ` | `-f` | 输出格式: `table` 或 `json` (默认: `table`) | ### `waza coverage [root]` 生成一个技能到评估的覆盖矩阵,显示哪些技能被完全覆盖、部分覆盖或缺少评估。 **注意**:完全覆盖需要任务 (通过 `tasks:` 或 `tasks_from:`) 和 2 种以上的评分器类型。覆盖率百分比仅反映完全覆盖的技能。 | 标志 | 缩写 | 描述 | |------|-------|-------------| | `--format ` | `-f` | 输出格式: `text`、`markdown` 或 `json` (默认: `text`) | | `--path ` | | 要扫描 skills/evals 的附加目录 (可重复) | ### `waza models` 列出可通过 Copilot SDK 用于评估的模型。显示模型 ID 和元数据,可在 `waza run`、`waza quality` 和其他命令中与 `--model` 标志一起使用。 需要通过 `copilot login` 进行身份验证。 | 标志 | 描述 | |------|-------------| | `--json` | 输出为 JSON | **示例:** ``` # 以表格格式列出可用 models waza models # 以 JSON 输出可用 models waza models --json ``` ### `waza cache clear` 清除所有缓存的评估结果,以强制在下次运行时重新执行。 | 标志 | 描述 | |------|-------------| | `--cache-dir ` | 要清除的缓存目录 (默认: `.waza-cache`) | ### `waza dev [skill-path]` 迭代评分并改进 SKILL.md 文件中的技能前置元数据。 使用 `--copilot` 生成一个非交互式的单次 markdown 报告,该报告: 1. 总结当前技能细节和 token 使用情况 2. 加载触发器测试提示词作为示例 (当 `trigger_tests.yaml` 存在时) 3. 请求 Copilot 提供改进技能选择的建议 4. 将报告打印到标准输出而不应用任何更改 当设置了 `--copilot` 时,迭代模式标志 (`--target`、`--max-iterations`、`--auto`) 将失效。 | 标志 | 描述 | |------|-------------| | `--target ` | 迭代模式的目标遵循级别: `low`、`medium`、`medium-high`、`high` (默认: `medium-high`) | | `--max-iterations ` | 迭代模式的最大改进迭代次数 (默认: 5) | | `--auto` | 在迭代模式下不提示直接应用改进 | | `--copilot` | 生成包含 Copilot 建议的非交互式 markdown 报告 | | `--model ` | 与 `--copilot` 一起使用的模型 | ### `waza check [skill-path]` 通过一份全面的就绪报告来检查技能是否已准备好提交。 执行五种类型的检查: 1. **合规性评分** — 验证前置元数据遵循程度 (低/中/中高/高) 2. **Token 预算** — 检查 SKILL.md 是否在 token 限制内 (可在 `.waza.yaml` 的 `tokens.limits` 中配置) 3. **评估套件** — 检查是否存在 eval.yaml 4. **规格合规性** — 根据 agentskills.io 规范验证技能 (前置元数据结构、必填字段、命名规则、目录匹配、描述长度、兼容性许可证和版本) 5. **咨询检查** — 检测质量和可维护性问题 (引用模块数量、复杂性分类、负向增量风险模式、过程式内容和过度具体化) 提供通俗语言的总结和改进技能的可执行后续步骤。 **示例输出:** ``` 🔍 Skill Readiness Check ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Skill: code-explainer 📋 Compliance Score: High ✅ Excellent! Your skill meets all compliance requirements. 📊 Token Budget: 450 / 500 tokens ✅ Within budget (50 tokens remaining). 🧪 Evaluation Suite: Found ✅ eval.yaml detected. Run 'waza run eval.yaml' to test. 📐 Spec Compliance (agentskills.io) ✅ spec-frontmatter Frontmatter structure valid with required fields ✅ spec-allowed-fields All frontmatter fields are spec-allowed ✅ spec-name Name follows spec naming rules ✅ spec-dir-match Directory name matches skill name ✅ spec-description Description is valid ✅ spec-license License field present ✅ spec-version metadata.version present 🔬 Advisory Checks ✅ module-count Found 2 reference modules (2-3 is optimal) ✅ complexity Complexity: detailed (350 tokens, 2 modules) ✅ negative-delta-risk No negative delta risk patterns detected ✅ procedural-content Description contains procedural language ✅ over-specificity No over-specificity patterns detected ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📈 Overall Readiness ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ Your skill is ready for submission! 🎯 Next Steps ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✨ No action needed! Your skill looks great. Consider: • Running 'waza run eval.yaml' to verify functionality • Sharing your skill with the community ``` **用法:** ``` # 检查当前目录 waza check # 检查特定 skill waza check skills/my-skill # 建议的工作流 waza check skills/my-skill # Check readiness waza dev skills/my-skill # Improve compliance if needed waza check skills/my-skill # Verify improvements ``` ### `waza quality ` 使用 LLM-as-Judge 跨五个维度评估技能内容质量: 清晰度、完整性、触发精度、范围覆盖和反模式。 | 标志 | 描述 | |------|-------------| | `--model ` | 用作评判的模型 (默认: 项目默认模型) | | `--format table\|json` | 输出格式 (默认: `table`) | | `--rubric ` | 自定义评分标准文件路径 (保留供将来使用) | **示例:** ``` # 评估 skill 质量(表格输出) waza quality skills/code-explainer # 用于 CI 集成的 JSON 输出 waza quality skills/code-explainer --format json # 使用特定 model 作为 judge waza quality skills/code-explainer --model gpt-4o ``` ### `waza suggest ` 使用 LLM 分析 `SKILL.md` 并生成建议的评估工件。 | 标志 | 描述 | |------|-------------| | `--model ` | 用于生成建议的模型 (默认: 项目默认模型) | | `--dry-run` | 将建议输出打印到标准输出 (默认) | | `--apply` | 将文件写入磁盘 | | `--output-dir ` | 输出目录 (默认: `/evals`) | | `--format yaml\|json` | 输出格式 (默认: `yaml`) | **示例:** ``` # 以 YAML 预览生成的 eval/task/fixture 文件 waza suggest skills/code-explainer --dry-run # 将生成的文件写入磁盘 waza suggest skills/code-explainer --apply # 输出 JSON 格式的 suggestion payload waza suggest skills/code-explainer --format json ``` ### `waza tokens count [paths...]` 计算 markdown 文件中的 token 数。路径可以是文件或目录 (递归扫描 `.md`/`.mdx`)。 | 标志 | 描述 | |------|-------------| | `--format ` | 输出格式: `table` 或 `json` (默认: `table`) | | `--sort ` | 排序方式: `tokens`、`name` 或 `path` (默认: `path`) | | `--min-tokens ` | 过滤掉低于 n 个 token 的文件 | | `--no-total` | 在表格输出中隐藏合计行 | ### `waza tokens compare [refs...]` 比较 git 引用之间的 markdown token 数量。 不带参数时,会比较 HEAD 和工作区。 带一个参数时,会比较该引用和工作区。 带两个参数时,会比较第一个引用和第二个引用。 | 标志 | 描述 | |------|-------------| | `--format ` | 输出格式: `table` 或 `json` (默认: `table`) | | `--show-unchanged` | 在输出中包含未更改的文件 | | `--strict` | 如果任何文件超过其绝对 token 限制,则以代码 1 退出 | | `--skills` | 仅比较已配置技能根目录下的 SKILL.md 文件 | | `--threshold ` | 当任何现有文件增加超过 n 百分比时失败 (0 = 禁用) | 使用 `--skills` 将比较范围限制在已配置技能根目录 (`skills/`、`.github/skills/` 以及来自 `.waza.yaml` 的 `paths.skills`) 下的 SKILL.md 文件。在技能模式下,默认的基础引用是 `origin/main` (回退到 `main`)。 使用 `--threshold` 进行 CI 门控 —— 新增文件免于阈值检查 (无基线),但仍受 `--strict` 绝对限制检查的约束。 ``` # 比较 HEAD 和 working tree 之间的所有 markdown tokens waza tokens compare # 在具备 CI 阈值的情况下,具有 skill 感知能力地与 main 进行比较 waza tokens compare main --skills --threshold 10 # 用于 CI pipelines 的 JSON 输出 waza tokens compare main --skills --threshold 10 --strict --format json ``` ### `waza tokens profile [skill-name | path]` 对 SKILL.md 文件进行结构分析 —— 报告 token 数量、段落数量、代码块数量和工作流步骤检测,并提供一行摘要和警告。 | 标志 | 描述 | |------|-------------| | `--format ` | 输出格式: `text` 或 `json` (默认: `text`) | | `--tokenizer ` | 分词器: `bpe` 或 `estimate` (默认: `bpe`) | **示例输出:** ``` 📊 my-skill: 1,722 tokens (detailed ✓), 8 sections, 4 code blocks ⚠️ no workflow steps detected ``` ### `waza tokens suggest [paths...]` 提供减少 markdown 文件中 token 使用量的建议。路径可以是文件或目录 (递归扫描 `.md`/`.mdx`)。 | 标志 | 描述 | |------|-------------| | `--format ` | 输出格式: `text` 或 `json` (默认: `text`) | | `--min-savings ` | 启发式建议的最小预估 token 节省量 | | `--copilot` | 启用 Copilot 驱动的建议 | | `--model ` | 与 `--copilot` 一起使用的模型 | ### `waza serve` 启动 waza 仪表板服务器以可视化评估结果。HTTP 服务器会自动在浏览器中打开,并扫描指定目录以查找 `.json` 结果文件。 (可选) 使用 `--tcp` 标志运行 JSON-RPC 2.0 服务器 (用于 IDE 集成),而不是 HTTP 仪表板。 | 标志 | 默认值 | 描述 | |------|---------|-------------| | `--port ` | `3000` | HTTP 服务器端口 | | `--no-browser` | `false` | 不自动打开浏览器 | | `--results-dir ` | `.` | 扫描结果文件的目录 | | `--tcp ` | (关) | 用于 JSON-RPC 的 TCP 地址 (例如, `:9000`);出于安全考虑默认为环回地址 | | `--tcp-allow-remote` | `false` | 允许 TCP 绑定到非环回地址 (⚠️ 无身份验证) | **示例:** 在端口 3000 启动 HTTP 仪表板: ``` waza serve ``` 在自定义端口启动 HTTP 仪表板并扫描结果目录: ``` waza serve --port 8080 --results-dir ./results ``` 启动仪表板但不自动打开浏览器: ``` waza serve --no-browser ``` 启动用于 IDE 集成的 JSON-RPC 服务器: ``` waza serve --tcp :9000 ``` **仪表板视图:** 仪表板显示的评估结果包括: - 任务级别的通过/失败状态 - 跨试验的分数分布 - 模型比较 - 汇总指标和趋势 有关仪表板和结果可视化的详细文档,请参阅 [docs/GUIDE.md](docs/GUIDE.md)。 ### `waza results` 管理存储在云端或本地存储中的评估结果。 #### `waza results list` 列出配置的云存储或本地结果目录中的所有评估运行。 | 标志 | 描述 | |------|-------------| | `--limit ` | 显示的最大结果数 (默认: 20) | | `--format ` | 输出格式: `table` 或 `json` (默认: `table`) | ``` # 列出最近的结果 waza results list # 使用自定义限制列出 waza results list --limit 20 # 以 JSON 输出 waza results list --format json ``` #### `waza results compare ` 并排比较两次评估运行。显示每个任务的评分差异、通过率差异和关键指标。 | 标志 | 描述 | |------|-------------| | `--format ` | 输出格式: `table` 或 `json` (默认: `table`) | ``` # 比较两次运行 waza results compare run-20250226-001 run-20250226-002 # 以 JSON 输出以供进一步处理 waza results compare run-20250226-001 run-20250226-002 --format json ``` ### `waza grade ` 对 Agent 输出运行评分器,而不执行 Agent。专为对以前的评估运行进行独立评分而设计。 | 标志 | 描述 | |------|-------------| | `--task ` | 要评分的任务 ID | | `--results ` | waza 运行输出 JSON 的路径 | | `--workspace ` | 基于文件的评分器的 Agent 工作区目录;必须指向 Agent 的实际工作区 (默认: `.`) | | `--judge-model ` | 用于提示词评分器的模型 | | `-o, --output ` | 写入完整的 EvaluationOutcome JSON (与 `waza compare` 兼容) | | `-v, --verbose` | 详细输出 | ``` waza run eval.yaml --output results.json waza grade eval.yaml --results results.json ``` ### `waza session list` 列出目录中的会话事件日志。 | 标志 | 描述 | |------|-------------| | `--dir ` | 搜索会话日志的目录 (默认: `.`) | ``` waza session list waza session list --dir ./sessions ``` ### `waza session view ` 从 NDJSON 事件日志渲染会话时间线。 ``` waza session view session-2025-06-15.ndjson ``` ## 云存储 Waza 可以自动将评估结果上传到 Azure Blob Storage,以便团队协作和历史跟踪。 ### 配置 在你的 `.waza.yaml` 中添加 `storage:` 部分: ``` storage: provider: azure-blob accountName: "myteamwaza" containerName: "waza-results" enabled: true ``` | 字段 | 描述 | 是否必填 | |-------|-------------|----------| | `provider` | 云提供商 (目前支持 `azure-blob`) | 是 | | `accountName` | Azure 存储账户名称 | 是 | | `containerName` | Blob 容器名称 (默认: `waza-results`) | 否 | | `enabled` | 启用/禁用上传 (配置后默认为 `true`) | 否 | ### 身份验证 Waza 使用 **DefaultAzureCredential** —— 它会按以下顺序自动检测并使用可用的凭证: 1. **环境变量** (`AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_TENANT_ID`) 2. **托管标识** (在 Azure 服务上) 3. **Azure CLI** (`az login`) 4. **Visual Studio Code** (如果已登录) 5. **Azure PowerShell** (如果已登录) 在大多数情况下,只需运行 `az login` 即可: ``` az login waza run eval.yaml # Results auto-upload to Azure Storage ``` ### 工作原理 1. **运行时自动上传:** 当配置了 `storage:` 时,`waza run` 会自动将结果上传到 Azure Blob Storage 2. **按技能组织:** 结果存储为 `{skill-name}/{run-id}.json` 3. **保留本地副本:** 结果也会在本地保存 (通过 `-o` 标志) 4. **列出远程结果:** 使用 `waza results list` 浏览上传的运行记录 5. **比较运行:** 使用 `waza results compare` 比较两个远程结果的差异 ### 示例工作流 ``` # 配置一次(编辑 .waza.yaml) cat > .waza.yaml <
标签:AI代理, AI效能分析, AI质量度量, azd扩展, Azure开发工具, DNS解析, EVTX分析, Go语言, LNA, 人工智能, 大模型评估, 威胁情报, 属性图, 开发框架, 开发者工具, 开源项目, 微软, 技能评估, 数据管道, 日志审计, 模型比较, 测试套件, 用户模式Hook绕过, 程序破解, 脚手架, 请求拦截, 软件工程