mirror of
https://github.com/violettoolssite/CFspider.git
synced 2026-04-05 11:29:03 +08:00
docs: add skills documentation and system docs
This commit is contained in:
254
cfspider-browser/LEARNING_SYSTEM.md
Normal file
254
cfspider-browser/LEARNING_SYSTEM.md
Normal file
@@ -0,0 +1,254 @@
|
||||
# CFSpider 学习系统说明
|
||||
|
||||
## 系统架构
|
||||
|
||||
CFSpider 拥有像真人一样的学习和记忆系统,可以不断进化和提升。
|
||||
|
||||
```
|
||||
用户操作请求
|
||||
↓
|
||||
技能匹配(是否已学会)
|
||||
↓
|
||||
执行操作
|
||||
↓
|
||||
记录结果(成功/失败)
|
||||
↓
|
||||
学习记忆系统 ←→ 技能系统
|
||||
↓
|
||||
永久保存到磁盘
|
||||
```
|
||||
|
||||
## 学习记忆系统
|
||||
|
||||
### 记忆类型
|
||||
- **成功经验**: 记录成功的操作方法
|
||||
- **失败教训**: 记录失败的操作,避免重复
|
||||
- **操作技巧**: 从多次操作中总结的技巧
|
||||
|
||||
### 记忆强度
|
||||
- **100-80**: 非常清晰,随时能想起来
|
||||
- **80-60**: 清晰记忆,经常使用
|
||||
- **60-30**: 偶尔想不起来
|
||||
- **30-10**: 很难想起来,需要提示
|
||||
- **10-5**: 快忘了,但还有一点印象
|
||||
- **< 5**: 几乎忘了,但永远不会真正删除
|
||||
|
||||
### 遗忘曲线
|
||||
- 每天自动衰减 3-8 点强度(随机)
|
||||
- 情绪化记忆(失败教训)衰减速度减半
|
||||
- 经常使用的记忆衰减更慢
|
||||
- 强度很低的记忆有 5% 概率突然想起来
|
||||
|
||||
### 记忆强化
|
||||
- 每次成功使用 +5 点强度
|
||||
- 克服困难(从失败到成功)+15 点
|
||||
- 情绪化事件(特别成功或失败)标记为难忘
|
||||
- 突然想起来 +30 点(印象更深)
|
||||
|
||||
### 永久保存
|
||||
- 所有记忆永久保存,无容量限制
|
||||
- 文件位置: `%APPDATA%/cfspider-browser/learning-memory.json`
|
||||
- 30% 概率渐进保存(每次 1-3 条)
|
||||
- 强度很低的记忆也保留(可能被唤醒)
|
||||
|
||||
## 技能系统
|
||||
|
||||
### 技能来源
|
||||
|
||||
1. **内置技能**
|
||||
- 预定义的常见操作流程
|
||||
- 由开发者编写,经过优化
|
||||
- 示例: 必应搜索、点击搜索结果
|
||||
|
||||
2. **学习技能**
|
||||
- 从实际操作中自动生成
|
||||
- 条件: 成功 3 次 + 强度 >= 70
|
||||
- 自动提取触发词和步骤
|
||||
|
||||
### 技能升级条件
|
||||
|
||||
```
|
||||
学习记忆
|
||||
- 类型: success
|
||||
- 回忆次数: >= 3
|
||||
- 记忆强度: >= 70
|
||||
↓
|
||||
自动提升为技能
|
||||
↓
|
||||
技能生成
|
||||
- ID: user-{timestamp}-{random}
|
||||
- 名称: {domain}-{action}-{target}
|
||||
- 触发词: 从记忆中提取
|
||||
- 步骤: 从成功操作中总结
|
||||
- 初始成功率: 60 + (回忆次数 × 5)
|
||||
↓
|
||||
永久保存到 skills.json
|
||||
```
|
||||
|
||||
### 技能进化
|
||||
|
||||
```
|
||||
第1-5次使用
|
||||
- 使用预定义步骤
|
||||
- 成功率基于初始值
|
||||
↓
|
||||
第5-20次使用
|
||||
- 从每次操作中提取模式
|
||||
- 学习最佳选择器
|
||||
- 优化备选方案
|
||||
- 成功率持续调整
|
||||
↓
|
||||
第20次以上
|
||||
- 成功率稳定
|
||||
- 拥有多个学习模式
|
||||
- 选择器库丰富
|
||||
- 成为"专家级"技能
|
||||
```
|
||||
|
||||
### 技能优化
|
||||
|
||||
- **模式提取**: 记录成功的选择器和流程
|
||||
- **备选方案**: 失败时的备选方案加入技能
|
||||
- **成功率**: 移动平均(最近 20 次)
|
||||
- **优先级**: 高成功率 + 高使用次数 = 优先匹配
|
||||
|
||||
### 永久保存
|
||||
- 所有学会的技能永久保存
|
||||
- 文件位置: `%APPDATA%/cfspider-browser/skills.json`
|
||||
- 内置技能的学习数据也会保存
|
||||
- 不删除任何技能(除非用户手动删除)
|
||||
|
||||
## 智能纠错系统
|
||||
|
||||
### 短期错误记录(30分钟)
|
||||
- 记录本次会话的点击失败
|
||||
- 30 分钟后自动过期
|
||||
- 用于避免重复尝试同一错误
|
||||
|
||||
### 长期学习记忆(永久)
|
||||
- 记录深刻的失败教训
|
||||
- 永久保存,但强度会衰减
|
||||
- 失败 2 次以上会强烈警告
|
||||
|
||||
### 纠错流程
|
||||
|
||||
```
|
||||
第1次失败
|
||||
↓
|
||||
记录到短期错误(30分钟)
|
||||
↓
|
||||
第2次尝试同样操作
|
||||
↓
|
||||
警告:已失败1次
|
||||
↓
|
||||
第2次也失败
|
||||
↓
|
||||
创建长期记忆(永久)
|
||||
- 类型: error
|
||||
- 强度: 60(教训深刻)
|
||||
- 情绪化: true
|
||||
↓
|
||||
第3次尝试
|
||||
↓
|
||||
强烈警告并建议备选方案
|
||||
```
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 示例 1: 学会打开 GitHub
|
||||
|
||||
```
|
||||
Day 1 - 第1次
|
||||
用户: "打开 GitHub"
|
||||
-> 搜索 GitHub
|
||||
-> 点击第1个结果
|
||||
-> 成功到达 github.com
|
||||
-> 创建记忆(强度 40)
|
||||
|
||||
Day 2 - 第2次
|
||||
用户: "打开 GitHub"
|
||||
-> 回忆起来:"我记得怎么做"
|
||||
-> 重复操作
|
||||
-> 成功
|
||||
-> 强化记忆(强度 55)
|
||||
|
||||
Day 3 - 第3次
|
||||
用户: "打开 GitHub"
|
||||
-> 清晰记忆
|
||||
-> 执行操作
|
||||
-> 成功
|
||||
-> 强化记忆(强度 70)
|
||||
-> 自动提升为技能!
|
||||
|
||||
Day 4+
|
||||
用户: "打开 GitHub"
|
||||
-> 匹配到技能 "打开 GitHub"
|
||||
-> AI 看到技能提示
|
||||
-> 按照技能流程执行
|
||||
-> 更快更准确
|
||||
-> 技能成功率持续提升
|
||||
```
|
||||
|
||||
### 示例 2: 遗忘和回忆
|
||||
|
||||
```
|
||||
Day 1: 学会操作 A(强度 70)
|
||||
Day 10: 没用过(强度 40,衰减)
|
||||
Day 20: 没用过(强度 15,几乎忘了)
|
||||
Day 21:
|
||||
用户要求操作 A
|
||||
-> 想不起来了:"我靠,我忘记了..."
|
||||
-> 只有模糊记忆:"好像是点那个按钮..."
|
||||
-> 5% 概率突然想起来!
|
||||
-> "诶?我突然想起来了!"
|
||||
-> 强度恢复到 45
|
||||
-> 操作成功
|
||||
-> 强度变为 50
|
||||
```
|
||||
|
||||
## 技能文件格式
|
||||
|
||||
### Markdown 格式(易读易编辑)
|
||||
|
||||
技能文档位于 `src/services/skills/` 目录:
|
||||
- `bing-search.md`
|
||||
- `click-search-result.md`
|
||||
- `navigate-to-website.md`
|
||||
- `iqiyi-navigation.md`
|
||||
|
||||
### 代码格式(可执行)
|
||||
|
||||
技能数据位于 `src/services/builtinSkills.ts`,从 Markdown 解析而来。
|
||||
|
||||
## 数据文件
|
||||
|
||||
所有数据永久保存在用户目录:
|
||||
|
||||
```
|
||||
%APPDATA%/cfspider-browser/
|
||||
├── learning-memory.json # 学习记忆(无限制)
|
||||
├── skills.json # 技能数据(无限制)
|
||||
├── ai-config.json # AI 配置
|
||||
├── chat-sessions.json # 聊天历史
|
||||
├── history.json # 浏览历史
|
||||
├── rules.json # 爬取规则
|
||||
└── browser-settings.json # 浏览器设置
|
||||
```
|
||||
|
||||
## 统计数据
|
||||
|
||||
系统会追踪:
|
||||
- 每个技能的使用次数
|
||||
- 成功率(移动平均)
|
||||
- 学习到的模式数量
|
||||
- 记忆强度分布
|
||||
- 最常用的操作
|
||||
|
||||
## 未来展望
|
||||
|
||||
随着使用时间增长:
|
||||
- 技能库会越来越丰富
|
||||
- 每个网站都会有专门的操作技能
|
||||
- 失败的操作会被永久避免
|
||||
- 成功率会持续提升
|
||||
- 真正做到"越用越聪明"
|
||||
218
cfspider-browser/TESTING_GUIDE.md
Normal file
218
cfspider-browser/TESTING_GUIDE.md
Normal file
@@ -0,0 +1,218 @@
|
||||
# CFSpider 功能测试指南
|
||||
|
||||
## 快速开始
|
||||
|
||||
重启应用后,所有新功能即可使用。
|
||||
|
||||
## 测试场景
|
||||
|
||||
### 1. 精确元素定位测试
|
||||
|
||||
**场景**: 打开 GitHub
|
||||
|
||||
**步骤**:
|
||||
```
|
||||
用户: "打开 GitHub"
|
||||
AI:
|
||||
1. 搜索 GitHub
|
||||
2. scan_interactive_elements()
|
||||
-> 显示所有链接列表
|
||||
3. click_by_index(type="link", index=1)
|
||||
-> 精确点击第1个链接
|
||||
4. 到达 github.com
|
||||
```
|
||||
|
||||
**预期**:
|
||||
- 不会误点到 Copilot
|
||||
- 不会误点到图片搜索
|
||||
- 不会误点到翻页按钮
|
||||
|
||||
### 2. 学习记忆测试
|
||||
|
||||
**场景**: 重复操作学会技能
|
||||
|
||||
**步骤**:
|
||||
```
|
||||
Day 1: "打开淘宝" -> 成功
|
||||
Day 2: "打开淘宝" -> 成功(记忆强化)
|
||||
Day 3: "打开淘宝" -> 成功(自动生成技能)
|
||||
Day 4: "打开淘宝" -> 使用技能,更快
|
||||
```
|
||||
|
||||
**预期**:
|
||||
- 第3次成功后在 `skills.json` 中出现新技能
|
||||
- AI 会显示技能提示
|
||||
- 操作更快更准确
|
||||
|
||||
### 3. 遗忘与回忆测试
|
||||
|
||||
**场景**: 长时间不用会遗忘
|
||||
|
||||
**模拟**:
|
||||
```
|
||||
1. 修改 learning-memory.json 中某个记忆的 timestamp
|
||||
改为 30 天前
|
||||
2. 重启应用
|
||||
3. 尝试相同操作
|
||||
|
||||
预期反应:
|
||||
- "我靠,我忘记了..."
|
||||
- "我记得好像是...但不太确定了"
|
||||
- 5% 概率:"诶?我突然想起来了!"
|
||||
```
|
||||
|
||||
### 4. 自动关闭弹窗测试
|
||||
|
||||
**场景**: 访问爱奇艺或视频网站
|
||||
|
||||
**步骤**:
|
||||
```
|
||||
用户: "打开爱奇艺"
|
||||
AI: 打开网站
|
||||
-> 页面出现"浏览器版本过低"弹窗
|
||||
-> 2秒内自动点击"继续使用"
|
||||
-> 弹窗关闭
|
||||
```
|
||||
|
||||
**预期**:
|
||||
- 广告弹窗自动关闭
|
||||
- 版本提示自动关闭
|
||||
- 登录框不会被关闭
|
||||
|
||||
### 5. 智能登录测试
|
||||
|
||||
**场景**: 访问需要登录的网站
|
||||
|
||||
**步骤**:
|
||||
```
|
||||
用户: "打开 GitHub 并访问我的仓库"
|
||||
AI: 检测到需要登录
|
||||
-> detect_login(domain="github.com")
|
||||
-> request_login_choice()
|
||||
-> 显示选项
|
||||
|
||||
用户: "自动登录"
|
||||
AI: 提示输入账号密码
|
||||
|
||||
用户:
|
||||
账号: user@example.com
|
||||
密码: your_password
|
||||
|
||||
AI: 提取账号密码
|
||||
-> auto_login()
|
||||
-> 移动鼠标到用户名框
|
||||
-> 点击并输入
|
||||
-> 移动到密码框
|
||||
-> 点击并输入
|
||||
-> 点击登录按钮
|
||||
-> 保存到 credentials.json
|
||||
```
|
||||
|
||||
**预期**:
|
||||
- 自动填写流畅自然
|
||||
- 凭证加密保存
|
||||
- 下次直接使用
|
||||
|
||||
### 6. 思考行为测试
|
||||
|
||||
**场景**: 观察 AI 思考时的鼠标
|
||||
|
||||
**步骤**:
|
||||
```
|
||||
用户: "打开京东搜索手机"
|
||||
观察:
|
||||
- AI 开始思考时,鼠标变橙色
|
||||
- 鼠标持续不停地移动
|
||||
- 停顿很短(50-150ms)
|
||||
- 像真人思考时鼠标漫无目的移动
|
||||
```
|
||||
|
||||
**预期**:
|
||||
- 鼠标颜色:橙色(思考)、红色(错误)、绿色(正常)
|
||||
- 思考时几乎不停顿
|
||||
- 操作完成后继续思考
|
||||
|
||||
### 7. 技能匹配测试
|
||||
|
||||
**场景**: 技能自动匹配
|
||||
|
||||
**步骤**:
|
||||
```
|
||||
用户: "搜索 Python"
|
||||
AI:
|
||||
-> 匹配到技能:必应搜索
|
||||
-> 显示技能提示
|
||||
-> 按技能流程执行
|
||||
-> 更新技能使用次数和成功率
|
||||
```
|
||||
|
||||
**预期**:
|
||||
- 控制台显示:`[CFSpider] Matched skill: 必应搜索`
|
||||
- AI 按照技能步骤执行
|
||||
- skills.json 中成功率提升
|
||||
|
||||
## 检查文件
|
||||
|
||||
### 记忆文件
|
||||
```
|
||||
%APPDATA%/cfspider-browser/learning-memory.json
|
||||
```
|
||||
|
||||
查看内容:
|
||||
- 每个记忆的强度
|
||||
- 回忆次数
|
||||
- 时间戳
|
||||
|
||||
### 技能文件
|
||||
```
|
||||
%APPDATA%/cfspider-browser/skills.json
|
||||
```
|
||||
|
||||
查看内容:
|
||||
- 技能列表
|
||||
- 使用次数
|
||||
- 成功率
|
||||
- 学习到的模式
|
||||
|
||||
### 凭证文件
|
||||
```
|
||||
%APPDATA%/cfspider-browser/credentials.json
|
||||
```
|
||||
|
||||
查看内容:
|
||||
- 域名
|
||||
- 用户名
|
||||
- 加密的密码(不可读)
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 点击不准确
|
||||
- 检查是否使用了 `scan` + `click_by_index`
|
||||
- 如果还不准,使用 `visual_click`
|
||||
|
||||
### 思考时鼠标不动
|
||||
- 检查 VirtualMouse.tsx 的 fidget 模式
|
||||
- 停顿时间应该是 50-150ms
|
||||
|
||||
### 弹窗没有自动关闭
|
||||
- 检查控制台:`[CFSpider] Auto-clicking continue button`
|
||||
- 手动调用 `close_popup()` 工具
|
||||
|
||||
### 技能没有生成
|
||||
- 检查记忆强度是否 >= 70
|
||||
- 检查成功次数是否 >= 3
|
||||
- 查看 `learning-memory.json`
|
||||
|
||||
### 登录失败
|
||||
- 检查选择器是否正确
|
||||
- 使用 `scan_interactive_elements` 查找正确选择器
|
||||
- 检查账号密码格式
|
||||
|
||||
## 性能指标
|
||||
|
||||
使用一段时间后,应该看到:
|
||||
- 技能数量持续增长
|
||||
- 每个技能的成功率提升
|
||||
- 操作速度加快
|
||||
- 错误率降低
|
||||
- 记忆库积累丰富
|
||||
156
cfspider-browser/UPDATE_LOG.md
Normal file
156
cfspider-browser/UPDATE_LOG.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# CFSpider 更新日志
|
||||
|
||||
## 2026-01-29 重大更新
|
||||
|
||||
### 核心改进
|
||||
|
||||
#### 1. 元素定位修复
|
||||
- 修复 `scan_interactive_elements` 返回唯一选择器和精确坐标
|
||||
- 新增 `click_by_index` 工具,使用缓存坐标精确点击
|
||||
- 添加点击前验证,过滤翻页按钮、导航元素
|
||||
- 扫描结果缓存 30 秒,支持链接数量增加到 20 个
|
||||
|
||||
#### 2. 智能学习记忆系统
|
||||
- 永久保存所有学习记忆(无容量限制)
|
||||
- 记忆强度会衰减但永不删除
|
||||
- 5% 概率突然想起沉睡的记忆
|
||||
- 30% 概率渐进保存(模拟真人学习)
|
||||
- 成功 3 次 + 强度 >= 70 自动提升为技能
|
||||
|
||||
#### 3. 技能系统(Skills)
|
||||
- 创建独立的技能系统框架
|
||||
- 6 个预置技能(必应搜索、点击搜索结果、访问网站等)
|
||||
- 技能会随使用自动学习和优化
|
||||
- 从成功操作中提取最佳选择器
|
||||
- 技能永久保存,越用越熟练
|
||||
|
||||
#### 4. 智能登录系统
|
||||
- 自动检测登录页面和表单
|
||||
- 询问用户选择:自动登录 or 手动登录
|
||||
- 自动登录:模拟真人操作(移动鼠标、点击、输入)
|
||||
- 凭证加密存储在本地
|
||||
- 从用户消息中智能提取账号密码
|
||||
|
||||
#### 5. 自动关闭弹窗
|
||||
- 每 2 秒自动检测并关闭广告弹窗
|
||||
- 支持版本提示、会员升级、隐私政策等
|
||||
- 智能识别登录框,不会误关闭
|
||||
- 新增 `close_popup` 手动关闭工具
|
||||
|
||||
#### 6. 思考行为优化
|
||||
- 思考时鼠标持续移动(停顿 50-150ms)
|
||||
- 像真人一样在屏幕上漫无目的地移动
|
||||
- 操作完成后自动恢复思考模式
|
||||
- 失败时触发 panic 模式,然后继续思考
|
||||
|
||||
#### 7. 智能纠错增强
|
||||
- 短期错误记录(30分钟过期)
|
||||
- 长期学习记忆(永久保存)
|
||||
- 错误不会再犯(记录失败元素)
|
||||
- 失败 2 次强烈警告并建议备选方案
|
||||
|
||||
#### 8. 搜索引擎优化
|
||||
- 切换到国内版必应(cn.bing.com)
|
||||
- 无 Copilot 广告干扰
|
||||
- 三重 Copilot 过滤(候选生成、过滤、最终验证)
|
||||
- 修复主域名评分(支持无 www 前缀)
|
||||
- 过滤图片搜索、山寨网站
|
||||
|
||||
#### 9. AI 服务预设扩展
|
||||
- 新增 GitHub Models(使用 GitHub PAT)
|
||||
- 新增 NVIDIA NIM(支持 Kimi-K2.5、DeepSeek-V3.2)
|
||||
- AI 请求超时增加到 180 秒
|
||||
- User-Agent 更新到 Edge 144(真实版本)
|
||||
|
||||
### 数据文件
|
||||
|
||||
所有数据永久保存在:`%APPDATA%/cfspider-browser/`
|
||||
|
||||
| 文件 | 说明 | 容量限制 |
|
||||
|------|------|---------|
|
||||
| `learning-memory.json` | 学习记忆 | 无限制(永久保存) |
|
||||
| `skills.json` | 技能数据 | 无限制(永久保存) |
|
||||
| `credentials.json` | 登录凭证 | 无限制(加密存储) |
|
||||
| `ai-config.json` | AI 配置 | - |
|
||||
| `chat-sessions.json` | 聊天历史 | - |
|
||||
| `history.json` | 浏览历史 | - |
|
||||
| `rules.json` | 爬取规则 | - |
|
||||
|
||||
### 技能文档
|
||||
|
||||
位于 `src/services/skills/`:
|
||||
- `README.md` - 技能系统说明
|
||||
- `bing-search.md` - 必应搜索
|
||||
- `click-search-result.md` - 点击搜索结果
|
||||
- `navigate-to-website.md` - 访问网站
|
||||
- `iqiyi-navigation.md` - 爱奇艺导航
|
||||
- `auto-login.md` - 智能登录
|
||||
|
||||
### 新增工具
|
||||
|
||||
| 工具 | 说明 | 用途 |
|
||||
|------|------|------|
|
||||
| `click_by_index` | 精确索引点击 | 配合 scan 使用,不会点错 |
|
||||
| `close_popup` | 关闭弹窗 | 手动关闭顽固弹窗 |
|
||||
| `detect_login` | 检测登录 | 识别登录页面和表单 |
|
||||
| `request_login_choice` | 询问登录方式 | 让用户选择自动/手动 |
|
||||
| `auto_login` | 自动登录 | 智能填写并提交表单 |
|
||||
|
||||
### 使用流程改进
|
||||
|
||||
**之前(容易点错)**:
|
||||
```
|
||||
用户: "打开爱奇艺"
|
||||
AI: 搜索 -> click_text("爱奇艺") -> 误点到翻页
|
||||
```
|
||||
|
||||
**现在(精确定位)**:
|
||||
```
|
||||
用户: "打开爱奇艺"
|
||||
AI: 搜索 -> scan_interactive_elements()
|
||||
-> 看到 "3. 爱奇艺官网 -> iqiyi.com"
|
||||
-> click_by_index(type="link", index=3)
|
||||
-> 精确点击第3个链接
|
||||
-> 成功!学习这个经验
|
||||
-> 3次后自动形成"打开爱奇艺"技能
|
||||
```
|
||||
|
||||
### 学习成长示例
|
||||
|
||||
```
|
||||
Day 1: 第1次打开 GitHub
|
||||
-> 创建记忆(强度 40)
|
||||
|
||||
Day 2: 第2次打开 GitHub
|
||||
-> 强化记忆(强度 55)
|
||||
-> AI:"这个我有印象~"
|
||||
|
||||
Day 3: 第3次打开 GitHub
|
||||
-> 强化记忆(强度 70)
|
||||
-> 自动提升为技能!
|
||||
|
||||
Day 4+: 使用技能
|
||||
-> 匹配到"打开 GitHub"技能
|
||||
-> AI 看到技能提示
|
||||
-> 按最优流程执行
|
||||
-> 更快更准确
|
||||
|
||||
Day 30: 很久没用了
|
||||
-> 记忆强度降低到 15
|
||||
-> AI:"我靠,我忘记了..."
|
||||
-> 5% 概率突然想起来:"诶?我突然想起来了!"
|
||||
```
|
||||
|
||||
### 破坏性变更
|
||||
- 无
|
||||
|
||||
### 兼容性
|
||||
- Electron 28+
|
||||
- Windows 10+
|
||||
- Node.js 18+
|
||||
|
||||
### 下一步计划
|
||||
- 更多网站特定技能(京东、淘宝、B站等)
|
||||
- 验证码智能处理
|
||||
- 表单智能填写
|
||||
- 购物流程自动化
|
||||
176
cfspider-browser/src/services/skills/README.md
Normal file
176
cfspider-browser/src/services/skills/README.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# CFSpider 技能系统
|
||||
|
||||
## 概述
|
||||
|
||||
技能系统让 AI 像真人一样学习和掌握操作流程。通过重复成功的操作,AI 会自动将经验升级为可复用的技能。
|
||||
|
||||
## 技能类型
|
||||
|
||||
### 内置技能
|
||||
预定义的常见操作流程,开箱即用:
|
||||
- `bing-search.md` - 必应搜索
|
||||
- `click-search-result.md` - 点击搜索结果
|
||||
- `navigate-to-website.md` - 访问网站
|
||||
- `iqiyi-navigation.md` - 爱奇艺导航
|
||||
|
||||
### 学习技能
|
||||
AI 从实际操作中学习并自动生成的技能:
|
||||
- 当某个操作成功 3 次以上且记忆强度 >= 70
|
||||
- 自动提升为技能,保存到 `skills.json`
|
||||
- 技能会包含触发词、操作步骤、成功率
|
||||
|
||||
## 学习流程(像真人一样学习)
|
||||
|
||||
### 从零开始学会一个操作
|
||||
|
||||
```
|
||||
第1次操作(成功)
|
||||
↓
|
||||
创建学习记忆
|
||||
- 强度: 40
|
||||
- 类型: success
|
||||
- 记录: 操作方法、选择器
|
||||
- 30%概率保存到磁盘
|
||||
|
||||
第2次成功
|
||||
↓
|
||||
强化记忆
|
||||
- 强度: 55 (+15)
|
||||
- 回忆次数: 2
|
||||
- 可能保存到磁盘
|
||||
|
||||
第3次成功
|
||||
↓
|
||||
强化记忆 + 达到提升条件
|
||||
- 强度: 70 (+15)
|
||||
- 回忆次数: 3
|
||||
↓
|
||||
自动提升为技能!
|
||||
↓
|
||||
技能生成
|
||||
- 名称: "domain-action-target"
|
||||
- 触发词: 从记忆中提取
|
||||
- 步骤: 从成功操作中总结
|
||||
- 初始成功率: 60 + (回忆次数 × 5)
|
||||
- 永久保存到 skills.json
|
||||
|
||||
第4次及以后
|
||||
↓
|
||||
使用技能执行(更快更准)
|
||||
- 技能成功率持续提升
|
||||
- 学习新的模式和选择器
|
||||
- 优化备选方案
|
||||
```
|
||||
|
||||
### 记忆永不丢失
|
||||
|
||||
- 记忆强度会衰减,但**永远不会被删除**
|
||||
- 强度 > 60: 清晰记忆,随时能用
|
||||
- 强度 30-60: 偶尔想不起来
|
||||
- 强度 10-30: 很难想起来
|
||||
- 强度 5-10: 需要提示才能想起
|
||||
- 强度 < 5: 几乎忘了,但有 5% 概率**突然想起来**
|
||||
|
||||
### 突然回忆机制
|
||||
|
||||
```
|
||||
[记忆强度 3, 快忘了]
|
||||
↓
|
||||
相关操作触发
|
||||
↓
|
||||
5% 概率突然想起来!
|
||||
↓
|
||||
"诶?我突然想起来了!"
|
||||
↓
|
||||
强度恢复 +30
|
||||
- 新强度: 33
|
||||
- 重新变成可用记忆
|
||||
```
|
||||
|
||||
## 技能进化
|
||||
|
||||
### 初期(0-5次使用)
|
||||
- 使用预定义的步骤
|
||||
- 成功率基于初始值
|
||||
|
||||
### 成长期(5-20次使用)
|
||||
- 从每次操作中提取模式
|
||||
- 学习最佳选择器和流程
|
||||
- 自动优化步骤的备选方案
|
||||
|
||||
### 成熟期(20次以上)
|
||||
- 成功率稳定
|
||||
- 拥有多个学习到的模式
|
||||
- 选择器优先使用成功率最高的
|
||||
|
||||
## 技能文件格式
|
||||
|
||||
每个技能用 Markdown 描述,便于阅读和编辑:
|
||||
|
||||
```markdown
|
||||
# 技能名称
|
||||
|
||||
## 基本信息
|
||||
- ID: skill-id
|
||||
- 触发词: 关键词列表
|
||||
- 适用域名: 域名列表
|
||||
|
||||
## 操作步骤
|
||||
1. 动作类型
|
||||
2. 目标选择器
|
||||
3. 备选方案
|
||||
|
||||
## 学习模式
|
||||
记录已知的成功模式和常见问题
|
||||
```
|
||||
|
||||
## 持久化(永久保存)
|
||||
|
||||
- 学习记忆: `%APPDATA%/cfspider-browser/learning-memory.json`
|
||||
- 技能数据: `%APPDATA%/cfspider-browser/skills.json`
|
||||
- 自动保存: 30% 概率渐进保存
|
||||
- **容量限制**: 无限制(永久保存,像真人一辈子都会)
|
||||
- **遗忘机制**: 记忆强度会衰减,但永远不会真正删除
|
||||
- 强度高:清晰记忆,随时能想起来
|
||||
- 强度低:很难想起来,但记忆永远在
|
||||
- 突然回忆:即使快忘了,也有 5% 概率突然想起来
|
||||
|
||||
## 示例
|
||||
|
||||
### 学习过程
|
||||
```
|
||||
用户: "打开 GitHub"
|
||||
1. 搜索 GitHub -> 成功 ✓ [创建记忆]
|
||||
2. 点击第1个结果 -> 成功 ✓ [强化记忆]
|
||||
3. 再次"打开 GitHub" -> 成功 ✓ [提升为技能]
|
||||
|
||||
自动生成技能:
|
||||
- 名称: "bing.com-click-GitHub"
|
||||
- 触发词: ["github", "click"]
|
||||
- 步骤: scan -> click_by_index(type="link", index=1)
|
||||
- 成功率: 75%
|
||||
```
|
||||
|
||||
### 技能使用
|
||||
```
|
||||
用户: "打开 GitHub"
|
||||
-> 匹配到技能 "bing.com-click-GitHub"
|
||||
-> AI 看到技能提示,按照已知流程执行
|
||||
-> 操作更快更准确
|
||||
```
|
||||
|
||||
## 技能优化
|
||||
|
||||
技能会自动从失败中学习:
|
||||
- 记录失败的选择器,下次跳过
|
||||
- 将成功的新选择器添加为备选
|
||||
- 调整步骤顺序以提高成功率
|
||||
|
||||
## 未来扩展
|
||||
|
||||
计划添加的技能:
|
||||
- 京东/淘宝购物流程
|
||||
- 社交媒体发帖
|
||||
- 表单自动填写
|
||||
- 视频网站操作
|
||||
- 登录认证流程
|
||||
81
cfspider-browser/src/services/skills/auto-login.md
Normal file
81
cfspider-browser/src/services/skills/auto-login.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# 智能登录技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `auto-login`
|
||||
- **名称**: 智能登录
|
||||
- **描述**: 检测登录需求,智能处理自动登录或手动登录
|
||||
- **触发词**: 登录, login, 注册, signup
|
||||
- **适用域名**: * (通用)
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 检测登录需求
|
||||
- **动作**: verify
|
||||
- **工具**: detect_login(domain="{domain}")
|
||||
- **说明**: 检测是否在登录页面或需要登录
|
||||
|
||||
### 步骤 2: 询问用户选择
|
||||
- **动作**: verify
|
||||
- **工具**: request_login_choice(domain="{domain}", has_saved_credentials={has_saved})
|
||||
- **说明**: 让用户选择自动登录或手动登录
|
||||
- **条件**: 如果检测到需要登录
|
||||
|
||||
### 步骤 3a: 自动登录
|
||||
- **动作**: input
|
||||
- **工具**: auto_login(domain, username_selector, password_selector, submit_selector, save_credentials=true)
|
||||
- **说明**: 自动填写账号密码并提交
|
||||
- **备选方案**:
|
||||
- 如果没有保存账号,提示用户提供
|
||||
- 如果选择器错误,使用 scan_interactive_elements 查找
|
||||
|
||||
### 步骤 3b: 手动登录
|
||||
- **动作**: wait
|
||||
- **说明**: 等待用户手动登录完成
|
||||
- **成功标志**: 页面 URL 或标题变化
|
||||
|
||||
### 步骤 4: 验证登录成功
|
||||
- **动作**: verify
|
||||
- **成功标志**: URL 不再包含 login/signin,或页面标题变化
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 常见登录表单选择器
|
||||
- 用户名/邮箱:
|
||||
- `input[type="email"]`
|
||||
- `input[name*="user"]`
|
||||
- `input[name*="email"]`
|
||||
- `input[placeholder*="用户"]`
|
||||
- `input[placeholder*="邮箱"]`
|
||||
|
||||
- 密码:
|
||||
- `input[type="password"]`
|
||||
|
||||
- 提交按钮:
|
||||
- `button[type="submit"]`
|
||||
- `button:contains("登录")`
|
||||
- `button:contains("Login")`
|
||||
|
||||
### 网站特殊处理
|
||||
|
||||
**GitHub**:
|
||||
- 用户名: `#login_field`
|
||||
- 密码: `#password`
|
||||
- 提交: `input[type="submit"]`
|
||||
|
||||
**京东/淘宝**:
|
||||
- 多种登录方式(手机号、扫码)
|
||||
- 需要验证码
|
||||
|
||||
**爱奇艺/腾讯视频**:
|
||||
- 扫码登录为主
|
||||
- 账号密码登录需要切换
|
||||
|
||||
### 安全说明
|
||||
- 密码使用简单 XOR 加密存储
|
||||
- 保存在用户本地(credentials.json)
|
||||
- 不上传到任何服务器
|
||||
- 用户可选择不保存
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 70%
|
||||
- 自动登录成功后学习选择器,提升到 90%+
|
||||
49
cfspider-browser/src/services/skills/baidu-search.md
Normal file
49
cfspider-browser/src/services/skills/baidu-search.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# 百度搜索技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `baidu-search`
|
||||
- **名称**: 百度搜索
|
||||
- **描述**: 在百度搜索引擎上搜索关键词
|
||||
- **触发词**: 搜索, 百度, 查找, 找一下, 查
|
||||
- **适用域名**: baidu.com
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 定位搜索框
|
||||
- **动作**: scan
|
||||
- **说明**: 扫描页面找到搜索框
|
||||
|
||||
### 步骤 2: 输入搜索关键词
|
||||
- **动作**: input
|
||||
- **目标**: `#kw, input[name="wd"], input[id="kw"]`
|
||||
- **值**: `{query}`
|
||||
- **备选方案**:
|
||||
- `input[type="text"]`
|
||||
- `.s_ipt`
|
||||
|
||||
### 步骤 3: 点击搜索按钮
|
||||
- **动作**: click
|
||||
- **目标**: `#su, input[type="submit"], #su_btn`
|
||||
- **备选方案**:
|
||||
- 按回车键
|
||||
- `#index-bn`
|
||||
- **可选**: true
|
||||
|
||||
### 步骤 4: 等待结果加载
|
||||
- **动作**: wait
|
||||
- **值**: 1500
|
||||
- **成功标志**: URL包含 `/s?wd=`
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 已知模式
|
||||
- 百度搜索框 ID 为 `kw` 或 `input[name="wd"]`
|
||||
- 搜索按钮 ID 为 `su`
|
||||
- 结果在 `.result` 容器中
|
||||
|
||||
### 常见问题
|
||||
- 广告较多,需要准确识别真实搜索结果
|
||||
- 可能有反爬虫验证码
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 90%
|
||||
49
cfspider-browser/src/services/skills/bing-search.md
Normal file
49
cfspider-browser/src/services/skills/bing-search.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# 必应搜索技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `bing-search`
|
||||
- **名称**: 必应搜索
|
||||
- **描述**: 在必应搜索引擎上搜索关键词
|
||||
- **触发词**: 搜索, 查找, 找一下, search, 查, 百度一下
|
||||
- **适用域名**: bing.com, cn.bing.com
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 定位搜索框
|
||||
- **动作**: scan
|
||||
- **说明**: 扫描页面找到搜索框
|
||||
|
||||
### 步骤 2: 输入搜索关键词
|
||||
- **动作**: input
|
||||
- **目标**: `#sb_form_q, input[name="q"], textarea[name="q"]`
|
||||
- **值**: `{query}`
|
||||
- **备选方案**:
|
||||
- `input[type="search"]`
|
||||
- `.search-box input`
|
||||
|
||||
### 步骤 3: 点击搜索按钮
|
||||
- **动作**: click
|
||||
- **目标**: `#sb_form_go, #search_icon, button[type="submit"]`
|
||||
- **备选方案**:
|
||||
- 按回车键
|
||||
- `form button`
|
||||
- **可选**: true
|
||||
|
||||
### 步骤 4: 等待结果加载
|
||||
- **动作**: wait
|
||||
- **值**: 1500
|
||||
- **成功标志**: URL包含 `/search?q=`
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 已知模式
|
||||
- 必应国内版(cn.bing.com)无 Copilot 干扰
|
||||
- 搜索框 ID 固定为 `sb_form_q`
|
||||
- 搜索按钮可能不可见(可直接回车)
|
||||
|
||||
### 常见问题
|
||||
- 搜索框未聚焦:先点击搜索框再输入
|
||||
- 搜索结果未加载:等待时间不够,增加到 2 秒
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 95%
|
||||
55
cfspider-browser/src/services/skills/click-search-result.md
Normal file
55
cfspider-browser/src/services/skills/click-search-result.md
Normal file
@@ -0,0 +1,55 @@
|
||||
# 点击搜索结果技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `click-search-result`
|
||||
- **名称**: 点击搜索结果
|
||||
- **描述**: 在搜索引擎结果页面中点击指定的链接
|
||||
- **触发词**: 打开, 点击, 进入, 访问
|
||||
- **适用域名**: bing.com, cn.bing.com, baidu.com, google.com
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 扫描搜索结果
|
||||
- **动作**: scan
|
||||
- **说明**: 使用 scan_interactive_elements 扫描所有可点击链接
|
||||
|
||||
### 步骤 2: 识别目标链接
|
||||
- **动作**: verify
|
||||
- **说明**: 根据关键词匹配正确的搜索结果
|
||||
- **过滤规则**:
|
||||
- 排除 Copilot/AI 相关链接
|
||||
- 排除图片搜索结果
|
||||
- 排除山寨网站(github-cn.com等)
|
||||
- 排除翻页导航(下一页、上一页)
|
||||
- 优先选择主域名(github.com > docs.github.com)
|
||||
|
||||
### 步骤 3: 精确点击
|
||||
- **动作**: click
|
||||
- **目标**: `click_by_index(type="link", index={index})`
|
||||
- **备选方案**:
|
||||
- `visual_click("{target_name}")`
|
||||
- `click_text("{target_domain}")`
|
||||
|
||||
### 步骤 4: 验证跳转
|
||||
- **动作**: verify
|
||||
- **成功标志**: URL 包含目标域名
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 已知模式
|
||||
- 必应搜索结果通常在 `.b_algo` 容器中
|
||||
- 第一个结果往往最准确(如果域名匹配)
|
||||
- cite 标签显示真实 URL(可用于验证)
|
||||
|
||||
### 常见错误
|
||||
- **误点到 Copilot**: URL 包含 copilot、sydney 的全部排除
|
||||
- **误点到图片搜索**: URL 包含 /images/ 的排除
|
||||
- **误点到翻页按钮**: 文本包含"下一页"的排除
|
||||
|
||||
### 纠错策略
|
||||
- 如果误跳转,记录失败链接,下次自动跳过
|
||||
- 如果 click_text 失败 2 次以上,改用 click_by_index
|
||||
- 如果都失败,使用 visual_click 视觉定位
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 85%
|
||||
49
cfspider-browser/src/services/skills/github-navigation.md
Normal file
49
cfspider-browser/src/services/skills/github-navigation.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# GitHub 导航技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `github-navigation`
|
||||
- **名称**: GitHub 导航
|
||||
- **描述**: 在 GitHub 上搜索仓库、浏览代码
|
||||
- **触发词**: 搜索仓库, 找项目, search, 查找代码
|
||||
- **适用域名**: github.com
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 定位搜索框
|
||||
- **动作**: scan
|
||||
- **说明**: GitHub 搜索框通常在页面顶部
|
||||
|
||||
### 步骤 2: 输入搜索关键词
|
||||
- **动作**: input
|
||||
- **目标**: `input[name="q"], .header-search-input, [aria-label="Search GitHub"]`
|
||||
- **值**: `{query}`
|
||||
|
||||
### 步骤 3: 点击搜索或回车
|
||||
- **动作**: click
|
||||
- **目标**: `button[type="submit"]`
|
||||
- **备选方案**: 按回车键
|
||||
|
||||
### 步骤 4: 等待结果
|
||||
- **动作**: wait
|
||||
- **值**: 2000
|
||||
- **成功标志**: URL 包含 `/search?`
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 已知模式
|
||||
- GitHub 使用动态类名
|
||||
- 搜索框 placeholder: "Search or jump to..."
|
||||
- 仓库结果在列表中,每个有星标数
|
||||
|
||||
### 页面特征
|
||||
- 深色/浅色主题切换
|
||||
- 响应式布局
|
||||
- 使用 Primer 设计系统
|
||||
|
||||
### 常见操作
|
||||
- 搜索仓库: `/search?q=xxx&type=repositories`
|
||||
- 查看代码: 点击文件名
|
||||
- 克隆仓库: 点击 "Code" 按钮
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 85%
|
||||
49
cfspider-browser/src/services/skills/iqiyi-navigation.md
Normal file
49
cfspider-browser/src/services/skills/iqiyi-navigation.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# 爱奇艺导航技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `iqiyi-navigation`
|
||||
- **名称**: 爱奇艺导航
|
||||
- **描述**: 在爱奇艺网站上导航和搜索视频
|
||||
- **触发词**: 搜索视频, 找电影, 看剧, 播放
|
||||
- **适用域名**: iqiyi.com
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 定位搜索框
|
||||
- **动作**: scan
|
||||
- **目标**: `input[class*="search"], .search-input`
|
||||
|
||||
### 步骤 2: 输入搜索关键词
|
||||
- **动作**: input
|
||||
- **目标**: `.search-input, input[placeholder*="搜索"]`
|
||||
- **值**: `{query}`
|
||||
|
||||
### 步骤 3: 点击搜索按钮
|
||||
- **动作**: click
|
||||
- **目标**: `.search-btn, button[class*="search"]`
|
||||
- **备选方案**: 按回车键
|
||||
|
||||
### 步骤 4: 等待结果
|
||||
- **动作**: wait
|
||||
- **值**: 2000
|
||||
- **成功标志**: URL 包含 `/search/`
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 页面特征
|
||||
- 爱奇艺使用大量动态类名
|
||||
- 搜索框通常在页面顶部
|
||||
- 视频结果使用卡片布局
|
||||
|
||||
### 常见元素
|
||||
- 搜索框: `.search-input`, `input[placeholder*="搜"]`
|
||||
- 搜索按钮: `.search-btn`
|
||||
- 视频卡片: `.site-piclist_pic`, `.qy-mod-link`
|
||||
- 播放按钮: `.play-btn`
|
||||
|
||||
### 注意事项
|
||||
- 页面加载可能较慢,需要足够的等待时间
|
||||
- 广告弹窗可能出现,需要识别并关闭
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 80%
|
||||
68
cfspider-browser/src/services/skills/navigate-to-website.md
Normal file
68
cfspider-browser/src/services/skills/navigate-to-website.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# 访问网站技能
|
||||
|
||||
## 基本信息
|
||||
- **ID**: `navigate-to-website`
|
||||
- **名称**: 访问网站
|
||||
- **描述**: 通过搜索引擎搜索并访问目标网站官网
|
||||
- **触发词**: 打开, 进入, 访问, 去, 跳转到
|
||||
- **适用域名**: * (通用)
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 步骤 1: 检查当前状态
|
||||
- **动作**: verify
|
||||
- **说明**: 检查是否已经在目标网站或搜索引擎
|
||||
|
||||
### 步骤 2: 导航到搜索引擎(如需要)
|
||||
- **动作**: navigate
|
||||
- **目标**: `https://cn.bing.com`
|
||||
- **可选**: true
|
||||
- **条件**: 如果当前不在搜索引擎
|
||||
|
||||
### 步骤 3: 搜索网站名称
|
||||
- **动作**: input
|
||||
- **目标**: `#sb_form_q`
|
||||
- **值**: `{site_name}`
|
||||
|
||||
### 步骤 4: 点击搜索
|
||||
- **动作**: click
|
||||
- **目标**: `#sb_form_go`
|
||||
|
||||
### 步骤 5: 扫描搜索结果
|
||||
- **动作**: scan
|
||||
- **说明**: 使用 scan_interactive_elements
|
||||
|
||||
### 步骤 6: 点击官网链接
|
||||
- **动作**: click
|
||||
- **目标**: `click_by_index(type="link", index={index})`
|
||||
- **验证**:
|
||||
- 链接 href 包含目标域名
|
||||
- 链接文本包含"官网"或网站名称
|
||||
|
||||
### 步骤 7: 确认到达
|
||||
- **动作**: verify
|
||||
- **成功标志**: URL 包含目标域名
|
||||
|
||||
## 学习模式
|
||||
|
||||
### 网站映射表
|
||||
常见网站的官方域名:
|
||||
- GitHub -> github.com
|
||||
- 京东 -> jd.com
|
||||
- 淘宝 -> taobao.com
|
||||
- 爱奇艺 -> iqiyi.com
|
||||
- YouTube -> youtube.com
|
||||
- 哔哩哔哩 -> bilibili.com
|
||||
|
||||
### 域名识别规则
|
||||
- 主域名优先(www.github.com > docs.github.com)
|
||||
- 排除子域名:home., account., login., passport.
|
||||
- 排除山寨域名:-cn.com, .cn(对于国际网站)
|
||||
|
||||
### 纠错策略
|
||||
- 如果点击后到达错误网站,记录并返回重试
|
||||
- 如果搜索无结果,尝试英文名称
|
||||
- 如果已在目标网站,跳过导航步骤
|
||||
|
||||
## 成功率
|
||||
- 初始成功率: 90%
|
||||
Reference in New Issue
Block a user