告别重复工单分析:用 Skills 将 SOP 固化为可复用工具

告别繁琐工单分析!利用 Skills 打造AI助手,通过复用接口请求,实现内网数据自动采集与分析,提升效率。

原文标题:Skills?真的可以帮我干活了:把工单分析变成一个可复用的?Skill

原文作者:阿里云开发者

冷月清谈:

本文介绍了一种利用 Anthropic Skills 解决企业内网工单分析痛点的新方案。传统工单分析面临数据获取困难、高频重复、角色关注点各异等问题。该方案采用“Copy as fetch + agent-browser eval”策略,绕过直接操作浏览器页面的不稳定性和高成本,直接复用已验证的接口请求,稳定获取数据。通过将人工在 DevTools 中的隐性操作转化为 AI 可执行的显性 SOP,实现了工单数据的自动采集与分析,并输出结构化报告。此外,文章还对比了 Skills 和 Workflow 的优劣,强调了 Skills 在灵活性、可进化性和版本管理方面的优势。该方案的核心价值在于解放重复性的脑力劳动,降低 SOP 的搭建成本,提升工作效率。

怜星夜思:

1、你觉得这种'Copy as fetch + agent-browser eval'方案,在数据安全方面有哪些潜在风险?企业应该如何应对?
2、文章中提到Skills比Workflow更灵活,可定制化程度更高,但会不会也意味着需要更高的学习成本和维护成本?
3、如果让你来设计一个类似的Skills,你会考虑增加哪些功能或者优化哪些方面?

原文内容

Anthropic 刚推出 Skills [1]时,我非常兴奋。官方的态度也很明确:不要再执着于开发复杂 Agent,而是把精力放在 Skills 上。

但在认真研究了一圈官方和社区的 Skills 示例[2]后,我很快冷静下来—— 几乎没有一个 Skills 能直接在真实环境中跑起来。 当时我的判断是:这就是个玩具。

直到最近,Claude Code 2.1.3 版本[3]发布,将 commands 和 skills 进行了合并,解决了之前触发困难等问题。

特别是最近我关注的一位 AI 博主在介绍他的新项目时提到: 他最近最主要的工作就是帮企业把日常 SOP 沉淀成 Skills,一个 Skills 的收费高达五位数

让我意识到 Skills 价值已经逐步在被证明。

一句话总结我接下来做的事情: 我把一个需要登录内网、手动筛选、导出、分析的工单 SOP, 固化成了一个可复用、易扩展、稳定运行的 Skills

问题背景:为什么工单分析一直是痛点

最近一段时间,团队的产品的升级工单量明显上涨。 问题不在于"工单多",而在于工单分析的复杂度

工单分析有三个非常典型、也非常现实的特征:

1. 数据在内网 必须登录,且有严格的权限控制,无法通过公开 API 拉取。

2. 高频重复 每个产品、每个版本、每周都要重新做一遍。

3. 每个角色的关注点不一样 研发关心具体的技术问题,PD 关心提炼共性问题,产品化机会,TL 关心跨产品的横向对比。同一份数据,不同人要看不同的切面。


这恰好是 AI 非常擅长的事情,但前提是: 你得先把数据稳定地拿出来,还要能灵活适配不同角色的分析诉求。

注意:以下方案只讨论技术实现,不涉及任何数据安全或权限绕过问题。

传统思路的局限

无论是 Skills、Agent 还是 Workflow,本质都一样:拿到数据 → 交给模型分析

真正的难点只有一个:如何在企业内网、强登录态的情况下,稳定、低成本地获取数据。

最自然的想法,是让 AI 帮我"操作浏览器"。但我很快发现这条路走不通。

Playwright / playwright-mcp 的问题

我最早尝试的是 playwright-mcp[4],但很快遇到了几个致命问题:

1. Token 消耗极高 Playwright 需要生成大量页面 snapshot。

2. 稳定性差 页面中大量动态 DOM(例如时间选择器),元素定位极不稳定。

agent-browser

更适合 Agent,但问题依旧存在

最近 vercel-labs 推出的 agent-browser [5]很火,5 天 7k star。 Rust CLI + 原生二进制,对 snapshot 做了大量优化,Token 消耗最多可降低 93%

agent-browser open <url>
agent-browser snapshot -i
agent-browser click @e1
agent-browser fill @e2 "text"
agent-browser close

但在实际使用中,我发现一个问题始终无法绕开:

只要是"让 AI 去操作页面",行为就一定不稳定。

退回到"固定 selector + 脚本"的方式当然稳定,但代价是:

  • 编写成本高

  • UI 变更后维护成本极高

const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('http://example.com');
await page.locator('.submit').click();
await browser.close();

于是问题变成了:

能不能既稳定,又不需要维护复杂 UI 脚本?


关键观察:SPA 页面本质上只是接口渲染

现在绝大多数企业后台系统都是 SPA 架构。 页面上的数据,本质都来自接口请求。

比如一次简单的搜索操作,就会触发 Ajax 请求:

我们做一个实验

1. 在 Chrome DevTools 的 Network 面板中,对某个请求执行 Copy as fetch

2. 将代码粘贴到 Console 中直接执行

Network 面板可以看到,请求被完整复现

关键结论

只要页面能正常渲染,就意味着对应接口在当前登录态下一定可复现。与其让 AI 学会"怎么点页面", 不如让 AI 直接执行已经被验证过的请求

新的解决方案:

Copy as fetch + agent-browser eval

最终方案非常克制,也非常工程化:

1. 使用 agent-browser open 打开目标页面 (登录问题由用户自行解决);

2. 在 DevTools Network 面板中 Copy as fetch,提前构造请求脚本;

3. 使用 agent-browser eval 执行该脚本,获取 JSON 数据;

4. 将数据交给大模型分析;

流程图

Skills 实现

细节请查看源码 order-analysis-skill[6]

目录结构

order-analysis-skill/
├── scripts/
│   ├── check-agent-browser.sh
│   ├── check-cdp.sh
│   └── order-analysis.js
└── SKILL.md


Skills 的关键价值

这个 Skills 的核心不在于"分析工单", 而在于:

它把"人类在 DevTools 里的隐性操作", 变成了 AI 可以稳定执行的显性 SOP。

SKILL.md 核心内容

---
name: order-analysis
description: 分析产品升级工单,识别共性问题并提出产品改进建议。通过 agent-browser工具 访问工单系统,提取工单数据,进行问题分类、趋势分析和根因定位,输出改进方案。
---

核心工作流程

步骤 1: 前置检查

执行以下两个检查脚本,确保环境准备就绪:

# 检查 Chrome Debug 模式
sh scripts/check-cdp.sh

# 检查 agent-browser 工具
sh scripts/check-agent-browser.sh

</code></pre>
   </div>
  </div>
  <p data-wct-cr-42><span><span data-wct-cr-12><br></span></span></p>
  <div data-wct-cr-19>
   <div data-wct-cr-27>
    <div data-wct-cr-28>
     <div data-wct-cr-29>
      <div data-wct-cr-30>
      </div>
     </div>
    </div>
    <div data-wct-cr-31>
     <div data-wct-cr-32>
      <p data-wct-cr-33><span data-wct-cr-34><strong><span>打开工单系统页面</span></strong></span></p>
     </div>
    </div>
   </div>
  </div>
  <div data-wct-cr-19>
   <div>
    <pre><code>agent-browser --cdp&nbsp;9222&nbsp;open&nbsp;"https://inner.example.com"
</code></pre>
   </div>
  </div>
  <div data-wct-cr-19>
   <div data-wct-cr-27>
    <div data-wct-cr-28>
     <div data-wct-cr-29>
      <div data-wct-cr-30>
      </div>
     </div>
    </div>
    <div data-wct-cr-31>
     <div data-wct-cr-32>
      <p data-wct-cr-33><strong></strong></p>
      <p data-wct-cr-43><strong><span>准备输出目录</span></strong></p>
     </div>
    </div>
    <div data-wct-cr-41>
    </div>
   </div>
  </div>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-13>创建以时间命名的输出目录(格式:YYYYMMDD-HHMMSS):</span></span></span></p>
  <div data-wct-cr-19>
   <div>
    <pre><code>OUTPUT_DIR=".output/order-analysis/$(date +%Y%m%d-%H%M%S)"
mkdir&nbsp;-p&nbsp;"$OUTPUT_DIR"
</code></pre>
   </div><span><span><br></span></span>
  </div>
  <div data-wct-cr-19>
   <div data-wct-cr-27>
    <div data-wct-cr-28>
     <div data-wct-cr-29>
      <div data-wct-cr-30>
      </div>
     </div>
    </div>
    <div data-wct-cr-31>
     <div data-wct-cr-32>
      <p data-wct-cr-33><span data-wct-cr-34><strong><span>获取订单数据</span></strong></span></p>
     </div>
    </div>
   </div>
  </div>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-13>在浏览器中打开页面后,</span></span></span><span><span data-wct-cr-12><span data-wct-cr-16>在同一 shell 会话中</span></span></span><span><span data-wct-cr-12><span data-wct-cr-13>执行以下命令获取订单的所有JSON数据:</span></span></span></p>
  <div data-wct-cr-19>
   <div>
    <pre><code>agent-browser --cdp 9222&nbsp;eval&nbsp;"$(cat scripts/order-analysis.js)"&nbsp;&gt;&nbsp;"$OUTPUT_DIR/order.json"
</code></pre>
   </div>
  </div>
  <div data-wct-cr-19>
   <div data-wct-cr-27>
    <div data-wct-cr-28>
     <div data-wct-cr-29>
      <div data-wct-cr-30>
      </div>
     </div>
    </div>
    <div data-wct-cr-31>
     <div data-wct-cr-32>
      <p data-wct-cr-43><span data-wct-cr-34><strong><span>分析数据</span></strong></span></p>
     </div>
    </div>
   </div>
  </div>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-13>针对获取的订单数据,识别共性问题并提出产品改进建议,并将分析结果保存到</span></span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span></span><code><span><span data-wct-cr-12><span data-wct-cr-39>$OUTPUT_DI</span></span><span data-wct-cr-44><span data-wct-cr-39>R/order_rep</span></span><span data-wct-cr-12><span data-wct-cr-39>ort.md</span></span></span></code><span></span></p>
  <div data-wct-cr-19>
   <div data-wct-cr-20>
    <div data-wct-cr-21>
     <p data-wct-cr-22><span>agent-browser 使用方法</span></p>
    </div>
   </div>
  </div>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-13>使用</span></span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span></span><code><span><span data-wct-cr-44><span data-wct-cr-39>agent-browser</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>进行网页自动化操作。运行</span></span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span></span><code><span><span data-wct-cr-44><span data-wct-cr-39>agent-browser --help</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>查看所有命令。</span></span></span><span><span data-wct-cr-12><br></span></span></p>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-16>注意</span></span></span><span><span data-wct-cr-12><span data-wct-cr-16>:</span><span data-wct-cr-13>所有</span></span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span></span><code><span><span data-wct-cr-44><span data-wct-cr-39>agent-browser</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>命令应加上 --cdp 9222 参数,例如</span></span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span></span><code><span><span data-wct-cr-44><span data-wct-cr-39>agent-bro</span></span><span data-wct-cr-44><span data-wct-cr-39>wser --</span></span><span data-wct-cr-44><span data-wct-cr-39>cdp 9222 open https://www.baidu.com/\</span></span></span></code><span></span></p>
  <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>用法:</span></span></span></p>
  <p data-wct-cr-36><span></span><code><span><span data-wct-cr-12><span data-wct-cr-13>1.&nbsp;</span></span><span data-wct-cr-44><span data-wct-cr-39>agent-browser --cdp 9222 open &lt;url&gt;</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>- 访问指定页面</span></span></span></p>
  <p data-wct-cr-36><span></span><code><span><span data-wct-cr-12><span data-wct-cr-13>2.&nbsp;</span></span><span data-wct-cr-44><span data-wct-cr-39>agent-browser --cdp 9222 snapshot -i</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>- 获取可交互元素及其引用 (@e1, @e2)</span></span></span></p>
  <p data-wct-cr-36><span></span><code><span><span data-wct-cr-12><span data-wct-cr-13>3.&nbsp;</span></span><span data-wct-cr-44><span data-wct-cr-39>agent-browser --cdp 9222 click @e1</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>/</span></span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span></span><code><span><span data-wct-cr-44><span data-wct-cr-39>fill @e2 "text"</span></span></span></code><span><span data-wct-cr-12><span data-wct-cr-13>&nbsp;</span></span><span data-wct-cr-12><span data-wct-cr-13>- 通过引用与页面元素交互</span></span></span></p>
  <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>4. 页面变化后重新执行 snapshot</span></span><span data-wct-cr-12><br></span></span></p>
  <div data-wct-cr-19>
   <div>
    <pre><code>
## 延伸思考:Skills vs Workflow

正如[宝玉在他的文章](https://baoyu.io/blog/agent-skills-replace-workflow)中提到的:\*\*大部分 workflow 编排场景,都可以被 Agent + Skills 取代。\*\*
Workflow 很擅长 "跑固定流程",有确定性——节点 A 执行完一定是节点 B。但它也有硬伤:
*&nbsp; &nbsp;**不够灵活**:流程定死后,遇到输入变化就容易出错
&nbsp; &nbsp;&nbsp;
*&nbsp; &nbsp;**难以移植**:平台锁定效应明显,换个环境就得重来
&nbsp; &nbsp;&nbsp;
*&nbsp; &nbsp;**修改成本高**:改起来要小心翼翼怕影响其他节点
&nbsp; &nbsp;&nbsp;
而 Skills 以 Markdown 格式存在,意味着使用者只需要用自然语言进行简单修改,就能满足各个角色的不同诉求。
### Skills 的灵活性优势
**1. 自然语言编排**
不需要拖拽节点,用自然语言描述流程。条件分支、并行执行、错误处理,都可以用自然语言描述,Agent 能理解。
**2. 可持续进化**
这是 Skills 相比 Workflow 最大的优势。发现提示词不够好?让 AI 帮你改。流程可以优化?随时调整。你的 Skills 会越用越好,而不是搭完就放在那儿吃灰。
**3. 版本管理友好**
Skills 是纯文本文件,可以用 Git 管理版本,可以代码审查,可以在不同机器间同步。
### 不同数据源诉求
比如我是负责&nbsp;`API 网关`&nbsp;的研发,我只对&nbsp;`API 网关`&nbsp;的工单感兴趣,对于其他的数据不关注,但是我的老板的视角可能不太一样,他需要看到每个产品的横向对比。关注的数据源就很不一样。
只需要修改一行:
```javascript
const productName = "API 网关"; &nbsp;// 改成其他产品名,或留空获取全部


</code></pre>
   </div>
  </div>
  <div data-wct-cr-19>
   <div data-wct-cr-27>
    <div data-wct-cr-28>
     <div data-wct-cr-29>
      <div data-wct-cr-30>
      </div>
     </div>
    </div>
    <div data-wct-cr-31>
     <div data-wct-cr-32>
      <p data-wct-cr-43><span data-wct-cr-34><strong><span>对于分析结果的不同诉求</span></strong></span></p>
     </div>
    </div>
   </div>
  </div>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-13>拿到数据后,不同角色对于数据的关注点不一样,比如我作为前端,更关注的是哪些工单是体验问题的;PD 更关注的是有哪些共性的问题,需要通过产品化来解决, 只需要修改 SKILL.md 中的分析提示词即可。</span></span></span></p>
  <div data-wct-cr-45>
   <img src="https://raw.xinfinite.net/wct-cr-img/73bea59ea55f70e1fa061cec726bd114.png" alt="图片" data-wct-cr-46>
  </div>
  <div data-wct-cr-19>
   <div data-wct-cr-20>
    <div data-wct-cr-21>
     <p data-wct-cr-26><span>总结</span></p>
    </div>
   </div>
  </div>
  <p data-wct-cr-23><span><span data-wct-cr-12><span data-wct-cr-13>通过这个 Skills,原本需要:</span></span></span></p>
  <ul>
   <li>
    <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>打开内网系统</span></span></span></p></li>
   <li>
    <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>多次筛选、导出</span></span></span></p></li>
   <li>
    <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>人工分析</span></span></span></p></li>
  </ul>
  <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>现在变成了:</span></span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>1. 一条命令触发 Skills</span></span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>2. AI 自动完成数据采集与分析</span></span></span></p>
  <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>3. 输出结构化分析报告</span></span></span></p>
  <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>Skills 真正替换的不是"工作",而是</span></span></span><span><span data-wct-cr-12><span data-wct-cr-16>那些每次都要重新搭一遍的 SOP 脑力成本</span></span></span><span><span data-wct-cr-12><span data-wct-cr-13>。</span></span></span></p>
  <p data-wct-cr-47><span><span data-wct-cr-12><span data-wct-cr-16>源码地址:</span></span></span><span><span data-wct-cr-12><span data-wct-cr-13>order-analysis-skill</span></span></span></p>
  <p data-wct-cr-11><span><span data-wct-cr-13>https://github.com/heimanba/order-analysis-skill</span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>[1]</span></span><span><span data-wct-cr-13>https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview</span></span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>[2]</span></span><span><span data-wct-cr-13>https://github.com/anthropics/skills</span></span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>[3]</span></span><span><span data-wct-cr-13>https://github.com/anthropics/claude-code/releases/tag/v2.1.3</span></span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>[4]</span></span><span><span data-wct-cr-13>https://github.com/microsoft/playwright-mcp</span></span></span></p>
  <p data-wct-cr-36><span><span data-wct-cr-12><span data-wct-cr-13>[5]</span></span><span><span data-wct-cr-13>https://github.com/vercel-labs/agent-browser</span></span></span></p>
  <p data-wct-cr-11><span><span data-wct-cr-12><span data-wct-cr-13>[6]</span></span><span><span data-wct-cr-13>https://github.com/heimanba/order-analysis-skill</span></span></span></p>
 </div>
 <p data-wct-cr-48></p>
</div>
    </div>
</div>

我个人觉得,与其让 AI 自动修改提示词,不如让人工参与进来。可以定期组织团队成员对提示词进行评审,然后根据评审结果进行修改。这样可以确保提示词的质量和可维护性。

此外,还可以考虑建立一个提示词库,将常用的提示词收集起来,方便团队成员使用。

楼上说的很对,Copy as fetch 本质上是在模拟已经验证过的用户行为。所以权限问题是第一位的。另外,这种方法更适用于那些提供相对稳定 API 的 SPA 应用。如果内网系统频繁升级,接口变动大,这个方案的维护成本也会上升。所以需要评估收益和维护成本,看看是否划算,可以考虑增加一些健壮性设计,比如加入接口变更检测机制。

我提供一个更简单的思路,Skill只负责处理数据,不负责登录。让用户在运行Skill之前手动登录内网系统,然后Skill直接复用用户的登录态。这样Skill本身就不需要存储账号密码,也就避免了泄露风险。缺点是需要用户手动操作,自动化程度会降低。

从安全角度来说,直接用Copy as fetch 可能会暴露一些敏感信息,比如用户的Session ID。所以,在把脚本交给AI执行之前,最好Review一下,确保没有泄露风险。可以考虑把敏感信息抽出来,用环境变量或者其他安全的方式传递。

从开发成本的角度来看,如果团队已经有成熟的 Workflow 平台和开发经验,那使用 Workflow 可能更划算。但如果需要快速尝试新的想法,或者团队更熟悉自然语言编程,那 Skills 可能更合适。选择哪种方案,取决于团队的技术栈和业务需求。

我之前用GPT写过一个“菜谱推荐”的Skills,一开始的提示词是“根据用户已有的食材,推荐一道菜”。但实际效果很差,经常推荐一些很奇怪的组合。后来我让GPT自己分析失败的原因,它给出的建议是:1. 增加菜系限制;2. 考虑食材的搭配性;3. 给出更详细的烹饪步骤。然后我让GPT根据这些建议修改提示词,效果就好多了。AI在优化提示词方面,可以从逻辑、完整性、可执行性等方面入手,但最终还是要人工把关。

从技术角度看,'隐性操作显性化’的关键是可复现性。 只要是人能操作,并且操作过程能转化为可记录、可执行的代码,都有应用潜力。 比如自动化测试,可以先让测试人员手工操作一遍,然后记录下网络请求,生成测试脚本,后续就可以让AI自动执行测试了。 甚至是网络爬虫,也可以用这个思路避免频繁修改爬虫规则。

别忘了还有智能家居! 想象一下,可以通过’Copy as fetch’模拟你在APP上的操作,比如调节灯光、控制空调等,然后把这些操作变成一个个’Skill’,让Siri帮你控制家里的设备,岂不是更方便?

我个人更倾向于Skills,因为我比较讨厌被固定的流程束缚。 Workflow就像一条预设好的流水线,一旦需求发生变化,就要大改特改。 Skills更像积木,可以根据需要灵活组合,迭代也更容易。 不过,对于那些流程非常稳定、几乎不会变化的场景,比如财务报表的自动生成,Workflow可能更适合,毕竟更稳定可靠。

除了技术手段,完善的审计机制也很重要。 要记录下每个请求的来源、执行者、时间、参数等信息,方便日后追溯问题。 另外,可以考虑设立安全沙箱,让AI在沙箱环境中执行请求,即使出现问题,也不会影响到真实系统。

从另一个角度来看,这个问题也提醒我们,不能过度依赖AI。 AI只是工具,最终的决策权还是掌握在人手中。 在自动化执行敏感操作之前,最好还是人工review一下,确保没有问题。

评估和监控 Skills 的效果,要建立一套完整的指标体系,既要关注 Skills 本身的性能指标,也要关注 Skills 对业务的影响。具体可以考虑以下几个方面:

* 性能指标
* 准确率 (Accuracy): Skills 分析结果与人工分析结果的一致性。
* 召回率 (Recall): Skills 能够识别出的问题数量占实际问题总数的比例。
* 处理时间 (Processing Time): Skills 处理一个工单所需的时间。
* 资源消耗 (Resource Consumption): Skills 运行所需的计算资源、存储资源等。
* 业务指标
* 工单处理效率 (Ticket Resolution Rate): 使用 Skills 后,工单处理速度的提升。
* 问题发现率 (Issue Detection Rate): 使用 Skills 后,发现潜在问题的数量。
* 用户满意度 (User Satisfaction): 不同角色用户对 Skills 分析结果的满意程度。
* 成本降低 (Cost Reduction): 使用 Skills 后,人力成本或其他成本的降低。

除了指标,还可以使用 A/B 测试、用户反馈等方法来评估 Skills 的效果。同时,要建立一个持续改进的机制,定期回顾 Skills 的表现,并根据评估结果进行优化。

提示词的设计和管理确实是个挑战,既要保证 Skills 的灵活性,又要避免分析结果的偏差。可以考虑以下几个方面:

* 结构化提示词 (Structured Prompts): 使用结构化的格式来定义提示词,例如 JSON 或 YAML。这样可以方便管理和维护提示词。
* 版本控制 (Version Control): 使用 Git 等版本控制工具来管理提示词的版本,方便回溯和比较。
* 提示词模板 (Prompt Templates): 创建通用的提示词模板,并根据不同角色的需求进行定制。
* Prompt Engineering: 使用 Prompt Engineering 技术来优化提示词,例如 few-shot learning、chain-of-thought prompting 等。
* 自动化测试 (Automated Testing): 编写自动化测试用例来验证提示词的效果,确保分析结果的质量。

此外,还可以借鉴一些开源的 Prompt Engineering 工具,例如 Promptify、Haystack 等。

可以参考软件工程里的配置管理思想,把提示词当成代码来管理。每个角色对应一个配置文件,里面包含该角色需要的提示词。然后用Git来管理这些配置文件,每次修改都要经过代码审查。这样可以保证提示词的版本一致性,避免出现混乱。另外,可以建立一个提示词评审委员会,定期评审新增或修改的提示词,确保其符合规范和质量要求。

从技术角度来看,“Copy as fetch” 依赖于浏览器提供的开发者工具功能,而 agent-browser eval 则是执行 Javascript 代码。因此,如果应用程序未使用标准的 Web 技术(例如,使用 Flash 或原生客户端技术),或者其数据交互不依赖于 HTTP 请求,则此方法可能不适用。此外,作者也提到了 “登录问题由用户自行解决”, 这也引入了额外的复杂性,例如,session 管理和身份验证流程的自动化。

对于非标准 API 接口,可以考虑以下方法:
1. 逆向工程 (Reverse Engineering): 分析应用程序的网络流量,以确定数据传输的模式和协议。例如,可以使用 Wireshark 等工具来捕获和分析数据包。
2. 中间人代理 (Man-in-the-Middle Proxy): 设置一个代理服务器来拦截和修改应用程序与服务器之间的通信。可以使用 mitmproxy 或 Charles Proxy 等工具。
3. Hooking 技术: 拦截并修改应用程序的运行时行为。可以使用 Frida 等工具。
4. OCR (Optical Character Recognition): 如果只能通过图像界面获取数据,可以考虑使用 OCR 技术来识别屏幕上的文本。

以上方法需要在合规和法律允许的范围内进行,并且需要一定的技术水平。

这个问题问到了点子上!接口变动确实是这种方案的一大风险。我觉得可以从以下几个方面考虑应对策略:

1. 自动化测试和监控: 建立自动化测试流程,定期检测关键接口的返回数据结构是否发生变化。一旦发现变化,立即发出告警。
2. 版本控制和回滚: 将 Copy as fetch 得到的请求脚本纳入版本控制,一旦接口变更导致 Skills 无法正常工作,可以快速回滚到之前的版本。
3. 参数化配置: 尽量将请求脚本中的固定参数提取出来,放到配置文件中。这样,在接口变更时,只需要修改配置文件,而不需要修改整个脚本。
4. 利用 AI 自我修复尝试: 尝试使用 LLM 根据错误信息和新的接口文档自动调整 agent-browser eval 执行的脚本。虽然不一定完全靠谱,但可以作为辅助手段。
5. 兼容性设计: 在 Skills 的设计阶段,就考虑到接口可能发生变化的情况,预留一定的兼容性处理逻辑。例如,使用 try-except 语句捕获异常,并尝试使用备用方案。

可以参考BDD(Behavior Driven Development)的模式,通过自然语言描述行为,然后通过代码实现。例如:

Feature: 工单分析
Scenario: 分析API网关的工单
Given 已经登录内网系统
When 选择API网关产品
And 选择最近一周的时间范围
Then 生成工单分析报告

可以增加一个“置信度”的指标,评估AI对自身理解的把握程度。如果置信度过低,则需要人工介入。

可以引入Schema validation,在数据交给大模型分析之前,对数据的结构进行校验,如果Schema不符合预期,及时告警并且通知维护人员。