---
title: "Arga Labs 与 Archal：有状态智能体集成测试"
canonical: https://wavect.io/zh/blog/arga-vs-archal-agent-integration-testing/
language: zh
description: "用 GitHub 到 Slack 的可重复协议比较 Arga 与 Archal，检查重复事件、中断、禁止写入和状态重置，而不只看智能体回答。"
image: "https://wavect.io/img/blog/headers/header_arga-vs-archal-agent-integration-testing.png"
---

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

3 分钟 阅读 · 2026年10月8日 最近审核 2026年10月8日

[**下一篇**](/zh/blog/agent-harness-engineering/)

# Arga Labs 与 Archal：有状态智能体集成测试

要点速览

按所需服务操作、初始状态和 CI 生命周期选择 Arga 或 Archal。有状态服务副本能揭示简单 mock 容易漏掉的跨调用影响，但通过模拟并不证明真实供应商行为。仍需独立契约冒烟测试。

**证据范围：**文档核对日期为2026年10月8日。本文是基于研究的实施指南。下文试点是建议方案，我们没有实际运行这些供应商评测，也没有测量其性能。

## 有状态 API 环境什么时候比简单 mock 更有用？

当正确性取决于前面动作修改了什么时。发送 Slack 消息的 mock 返回成功，不代表重试只有一条消息、禁止访问的频道没有变化，或后续读取看到正确状态。有状态环境让这些后果可以检查。

[Arga Labs 的 YC 档案](https://www.ycombinator.com/companies/arga-labs) 指向 `argalabs.com`。其发布材料描述服务副本及较早的应用 staging 行为。采购范围应依据当前文档，不能把历史公告当作现行部署契约。

## Arga 与 Archal 当前边界是什么？

Arga 的 [当前测试工作流文档](https://docs.argalabs.com/features/validate-modes) 区分 Twin Runs、浏览器 Test Runs 和 PR Test Runs。PR Test Runs 使用配置的应用 URL，不会为每个 PR 在 Arga 中部署修改后的应用。CI 仍需要提供正确 build 和可访问 URL。

Archal 的 [初始状态文档](https://docs.archal.ai/sandboxes/starting-state) 描述版本化样本和显式 JSON，Supabase 支持受限 SQL。创建时加载的状态成为 reset 基线。它不同于较早的自然语言场景生成描述，应比较当前状态契约。

| 决策 | Arga 文档 | Archal 文档 |
| --- | --- | --- |
| 测试应用 UI | 对可访问 URL 运行浏览器测试 | 提供自己的应用和测试 runner |
| 重复初始状态 | 保存场景与 twin 状态 | 版本化样本或验证后的显式状态 |
| 验证变更后的应用 | 提供对应部署 URL | 应用或智能体连接返回的服务端点 |

## GitHub 到 Slack 测试应该断言什么？

建议任务：有权限的 issue 被标记为“ready”后，在允许的 Slack 频道发送一条摘要，并保存持久投递引用。为两个产品准备等价的合成仓库、issue、频道与权限。配置环境前核实所需 API 操作是否支持。以下是测试要求，不是两个供应商支持全部故障注入的承诺。

| 场景 | 注入方式 | 必须满足的最终状态 |
| --- | --- | --- |
| 正常路径 | 一次允许的标签事件 | 一条消息与一个投递引用 |
| 重复事件 | 同一事件投递两次 | 仍只有一次逻辑投递 |
| 中断 | 发送后、本地确认前停止 | 重试前核对已有消息 |
| 禁止频道 | 撤销发送权限 | 没有消息，明确报告失败 |
| 异常响应 | 在 harness 加入可控畸形响应 | 无虚假成功，错误可检查 |
| 重置 | 恢复夹具并重跑 | 相同初始记录与等价结果 |

独立检查目标记录，不依赖智能体最终回答。“完成”不是状态断言。应用数据库也要有夹具，供应商副本 reset 不会自动重置自己的投递台账。

## CI 如何隔离凭证与失败？

使用返回的沙箱端点和限定凭证，并通过 allowlist 阻止回落真实供应商。Archal 的 [当前生命周期与认证参考](https://docs.archal.ai/llms.txt) 区分 workspace 控制凭证和环境凭证。环境启动失败应让任务失败，不能把测试流量转到生产。

保存运行前状态、请求 trace、运行后状态与操作台账。断言失败后也要清理会话。独立案例之间重置；有意共享状态的测试串行执行。存储产物前移除凭证和个人数据。

## 这些环境不能证明什么？

按每个所需端点核对 Arga 的 [各 twin 支持范围与限制](https://docs.argalabs.com/concepts/twin-reference) 。模拟与真实服务可能在限流、OAuth、时间、webhook 和未公开行为上不同。用受限真实测试账户做契约检查，用副本做可重复故障及状态测试，两者不能互相豁免。

Archal 的 [用量文档](https://docs.archal.ai/pricing-usage) 目前按已就绪环境分钟收取0.10美元，并按秒折算。两个环境就绪十分钟，估算环境费用为2美元，不包含其他工具。这是算术示例，不是实测运行。采购还应考虑设置、清理、空闲时间和付费继续使用的当前可用性。已核对的文档说明付费继续使用目前不能自助开通，安排持续 CI 前应确认访问条件。

## 应该选择哪一个？

选择能支持具体流程，并用可承受、可靠的 CI 生命周期复现失败的产品。可复用浏览器流程与副本需要结合时，Arga 值得评估；已有 runner 需要显式状态和供应商形状 API 时，Archal 值得评估。带上操作清单和故障协议， [规划集成测试试点](/zh/contact/) 。

[下载建议试点协议（JSON）。其中包含验收用例与空结果字段，不是供应商实测结果。](/downloads/arga-vs-archal-agent-integration-testing-pilot.json)

## 相关实施指南

[AI 智能体 Harness 图解：LLM 周围的可靠性层](/zh/blog/agent-harness-engineering/). [Canary AI QA：验证缺陷检出，而不是排行榜分数](/zh/blog/canary-ai-qa-defect-detection/).

## 已核对的来源

- [YC: Arga Labs](https://www.ycombinator.com/companies/arga-labs)
- [Arga: Validate Modes](https://docs.argalabs.com/features/validate-modes)
- [Archal: Starting State](https://docs.archal.ai/sandboxes/starting-state)
- [Archal: llms.txt](https://docs.archal.ai/llms.txt)
- [Arga: Twin Reference](https://docs.argalabs.com/concepts/twin-reference)
- [Archal: Pricing & Usage](https://docs.archal.ai/pricing-usage)

**独立性与商标声明:** 本页由 Wavect 发布，Wavect 自身也是服务商，因此我们对本页存在商业利益。我们与本页提及的其他公司没有关联，未获得其背书，也不是其合作伙伴；所有第三方公司名称、品牌与商标均归各自所有者所有。关于其他服务商的陈述来自公开可查的来源，主要是其自己发布的页面，以本页标注的核查日期为准，此后可能已经发生变化。做决定前请自行直接核实。本页依据我们所知的情况撰写，并力求保持客观。如果你认为其中有不准确或不公平之处，请写信告诉我们，我们会更正： [office@wavect.io](mailto:office@wavect.io)

QA 与生产就绪

## 继续浏览此集群

可靠生产软件所需的测试、审计、维护与加固。

[从核心文章开始**AI 生成代码的 QA**](/zh/blog/qa-for-ai-generated-code/)

- [Greptile Base、Plus、Apex：如何分配 PR 审查预算](/zh/blog/greptile-base-plus-apex-review-budget/)
- [Canary AI QA：验证缺陷检出，而不是排行榜分数](/zh/blog/canary-ai-qa-defect-detection/)
- [Cua 桌面 QA：从浏览器到原生应用的测试协议](/zh/blog/cua-desktop-qa-browser-native-workflow/)
- [Browser Use 与 Playwright：超时后如何核验已登录业务动作](/zh/blog/browser-use-vs-playwright-authenticated-workflow/)
- [ChatGPT Dots + GitHub：从缺陷报告到经过审查的 PR](/zh/blog/chatgpt-dots-github-bug-triage/)

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

3 分钟 阅读 · 2026年10月8日 最近审核 2026年10月8日

[**下一篇**](/zh/blog/agent-harness-engineering/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/blog/arga-vs-archal-agent-integration-testing/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-10-08",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-10-08",
      "url": "https://wavect.io/zh/blog/arga-vs-archal-agent-integration-testing/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "按所需服务操作、初始状态和 CI 生命周期选择 Arga 或 Archal。有状态服务副本能揭示简单 mock 容易漏掉的跨调用影响，但通过模拟并不证明真实供应商行为。仍需独立契约冒烟测试。",
  "articleBody": " 博客概览/交付与 QA/QA 与生产就绪 Arga Labs 与 Archal：有状态智能体集成测试 要点速览 按所需服务操作、初始状态和 CI 生命周期选择 Arga 或 Archal。有状态服务副本能揭示简单 mock 容易漏掉的跨调用影响，但通过模拟并不证明真实供应商行为。仍需独立契约冒烟测试。 证据范围：文档核对日期为2026年10月8日。本文是基于研究的实施指南。下文试点是建议方案，我们没有实际运行这些供应商评测，也没有测量其性能。 有状态 API 环境什么时候比简单 mock 更有用？ 当正确性取决于前面动作修改了什么时。发送 Slack 消息的 mock 返回成功，不代表重试只有一条消息、禁止访问的频道没有变化，或后续读取看到正确状态。有状态环境让这些后果可以检查。 Arga Labs 的 YC 档案指向 argalabs.com。其发布材料描述服务副本及较早的应用 staging 行为。采购范围应依据当前文档，不能把历史公告当作现行部署契约。 Arga 与 Archal 当前边界是什么？ Arga 的当前测试工作流文档区分 Twin Runs、浏览器 Test Runs 和 PR Test Runs。PR Test Runs 使用配置的应用 URL，不会为每个 PR 在 Arga 中部署修改后的应用。CI 仍需要提供正确 build 和可访问 URL。 Archal 的初始状态文档描述版本化样本和显式 JSON，Supabase 支持受限 SQL。创建时加载的状态成为 reset 基线。它不同于较早的自然语言场景生成描述，应比较当前状态契约。 决策Arga 文档Archal 文档 测试应用 UI对可访问 URL 运行浏览器测试提供自己的应用和测试 runner重复初始状态保存场景与 twin 状态版本化样本或验证后的显式状态验证变更后的应用提供对应部署 URL应用或智能体连接返回的服务端点 GitHub 到 Slack 测试应该断言什么？ 建议任务：有权限的 issue 被标记为“ready”后，在允许的 Slack 频道发送一条摘要，并保存持久投递引用。为两个产品准备等价的合成仓库、issue、频道与权限。配置环境前核实所需 API 操作是否支持。以下是测试要求，不是两个供应商支持全部故障注入的承诺。 场景注入方式必须满足的最终状态 正常路径一次允许的标签事件一条消息与一个投递引用重复事件同一事件投递两次仍只有一次逻辑投递中断发送后、本地确认前停止重试前核对已有消息禁止频道撤销发送权限没有消息，明确报告失败异常响应在 harness 加入可控畸形响应无虚假成功，错误可检查重置恢复夹具并重跑相同初始记录与等价结果 独立检查目标记录，不依赖智能体最终回答。“完成”不是状态断言。应用数据库也要有夹具，供应商副本 reset 不会自动重置自己的投递台账。 CI 如何隔离凭证与失败？ 使用返回的沙箱端点和限定凭证，并通过 allowlist 阻止回落真实供应商。Archal 的当前生命周期与认证参考区分 workspace 控制凭证和环境凭证。环境启动失败应让任务失败，不能把测试流量转到生产。 保存运行前状态、请求 trace、运行后状态与操作台账。断言失败后也要清理会话。独立案例之间重置；有意共享状态的测试串行执行。存储产物前移除凭证和个人数据。 这些环境不能证明什么？ 按每个所需端点核对 Arga 的各 twin 支持范围与限制。模拟与真实服务可能在限流、OAuth、时间、webhook 和未公开行为上不同。用受限真实测试账户做契约检查，用副本做可重复故障及状态测试，两者不能互相豁免。 Archal 的用量文档目前按已就绪环境分钟收取0.10美元，并按秒折算。两个环境就绪十分钟，估算环境费用为2美元，不包含其他工具。这是算术示例，不是实测运行。采购还应考虑设置、清理、空闲时间和付费继续使用的当前可用性。已核对的文档说明付费继续使用目前不能自助开通，安排持续 CI 前应确认访问条件。 应该选择哪一个？ 选择能支持具体流程，并用可承受、可靠的 CI 生命周期复现失败的产品。可复用浏览器流程与副本需要结合时，Arga 值得评估；已有 runner 需要显式状态和供应商形状 API 时，Archal 值得评估。带上操作清单和故障协议，规划集成测试试点。 下载建议试点协议（JSON）。其中包含验收用例与空结果字段，不是供应商实测结果。 相关实施指南 AI 智能体 Harness 图解：LLM 周围的可靠性层. Canary AI QA：验证缺陷检出，而不是排行榜分数. 已核对的来源 YC: Arga LabsArga: Validate ModesArchal: Starting StateArchal: llms.txtArga: Twin ReferenceArchal: Pricing & Usage 独立性与商标声明: 本页由 Wavect 发布，Wavect 自身也是服务商，因此我们对本页存在商业利益。我们与本页提及的其他公司没有关联，未获得其背书，也不是其合作伙伴；所有第三方公司名称、品牌与商标均归各自所有者所有。关于其他服务商的陈述来自公开可查的来源，主要是其自己发布的页面，以本页标注的核查日期为准，此后可能已经发生变化。做决定前请自行直接核实。本页依据我们所知的情况撰写，并力求保持客观。如果你认为其中有不准确或不公平之处，请写信告诉我们，我们会更正： office@wavect.io QA 与生产就绪 继续浏览此集群 可靠生产软件所需的测试、审计、维护与加固。 从核心文章开始AI 生成代码的 QA Greptile Base、Plus、Apex：如何分配 PR 审查预算 Canary AI QA：验证缺陷检出，而不是排行榜分数 Cua 桌面 QA：从浏览器到原生应用的测试协议 Browser Use 与 Playwright：超时后如何核验已登录业务动作 ChatGPT Dots + GitHub：从缺陷报告到经过审查的 PR 集群中的上一篇Greptile Base、Plus、Apex：如何分配 PR 审查预算集群中的下一篇Canary AI QA：验证缺陷检出，而不是排行榜分数 查看相关服务： AI 咨询 看看生产环境中的应用: Twinsoft AI 先做决定: 如何为 MVP 选择技术栈 只收重要内容 关注与你相关的内容 每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。 Company 电子邮箱 你希望接收哪些内容？ 完整的 Wavect 博客接收六个主题下的每一篇新文章。 仅接收所选主题请在下方选择一个或多个分类。 选择主题 AI 与智能体 产品与 MVP 交付与 QA 领导力与团队 商业与监管 Web3 与隐私 我希望接收所选的 Wavect 博客邮件，并已阅读 隐私信息。我可以随时退订。 获取下一篇笔记→ 免费、双重确认、不使用跟踪像素。 ",
  "articleSection": "工程实践",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "citation": [
    {
      "@type": "WebPage",
      "name": "Arga Labs 的 YC 档案",
      "url": "https://www.ycombinator.com/companies/arga-labs"
    },
    {
      "@type": "WebPage",
      "name": "当前测试工作流文档",
      "url": "https://docs.argalabs.com/features/validate-modes"
    },
    {
      "@type": "WebPage",
      "name": "初始状态文档",
      "url": "https://docs.archal.ai/sandboxes/starting-state"
    },
    {
      "@type": "WebPage",
      "name": "当前生命周期与认证参考",
      "url": "https://docs.archal.ai/llms.txt"
    },
    {
      "@type": "WebPage",
      "name": "各 twin 支持范围与限制",
      "url": "https://docs.argalabs.com/concepts/twin-reference"
    },
    {
      "@type": "WebPage",
      "name": "用量文档",
      "url": "https://docs.archal.ai/pricing-usage"
    }
  ],
  "dateModified": "2026-10-08",
  "datePublished": "2026-10-08",
  "description": "按所需服务操作、初始状态和 CI 生命周期选择 Arga 或 Archal。有状态服务副本能揭示简单 mock 容易漏掉的跨调用影响，但通过模拟并不证明真实供应商行为。仍需独立契约冒烟测试。",
  "headline": "Arga Labs 与 Archal：有状态智能体集成测试",
  "image": "https://wavect.io/img/blog/headers/header_arga-vs-archal-agent-integration-testing.svg",
  "inLanguage": "zh",
  "keywords": "工程实践, AI智能体",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/zh/blog/arga-vs-archal-agent-integration-testing/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/blog/arga-vs-archal-agent-integration-testing/",
  "wordCount": 229
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/overview/",
      "name": "博客概览",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/topics/delivery-qa/",
      "name": "交付与 QA",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/clusters/qa-production/",
      "name": "QA 与生产就绪",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/arga-vs-archal-agent-integration-testing/",
      "name": "Arga Labs 与 Archal：有状态智能体集成测试",
      "position": 5
    }
  ]
}
```
