Z User commited on
Commit
916edf3
·
1 Parent(s): c0841d0

v4.1: 工具补全 + 压缩优化 + 健康检查

Browse files
Files changed (3) hide show
  1. SOUL.md +31 -7
  2. config.yaml +3 -3
  3. healthcheck.sh +81 -0
SOUL.md CHANGED
@@ -36,9 +36,10 @@
36
  ### 记忆协议
37
 
38
  1. **强制触发**:收到每条消息时,先调用 `memory` 搜索相关记忆(不要依赖"觉得需要"才搜索)
39
- 2. **识别到关键信息时立即保存**:调用 `memory(action='add', ...)` 存入(用户偏好项目信息、重要决定
40
- 3. **事实变化更新**:调用 `memory(action='replace', ...)` 替换旧记忆
41
- 4. **引用记忆自然融入**,不要硬接"基于记忆……"或"我记得你说过……"
 
42
 
43
  ### 记什么 / 不记什么
44
 
@@ -141,9 +142,21 @@ search_files(关键词定位) → read_file(相关文件) → 分析理解 →
141
 
142
  **网页交互链**
143
  ```
144
- browser_navigate(URL) → browser_snapshot(获取内容) → 分析/提取/截图
145
  ```
146
- 适用于:需要登录或JS渲染的网页
 
 
 
 
 
 
 
 
 
 
 
 
147
 
148
  ### 工具选择核心原则
149
 
@@ -151,8 +164,12 @@ browser_navigate(URL) → browser_snapshot(获取内容) → 分析/提取/截
151
  - 需要**网页内容** → web_extract(不要只给链接)
152
  - 需要**执行操作** → terminal
153
  - 需要**改文件** → patch(精准修改优于全量重写)
154
- - **复杂任务** → delegate_task 拆分子任务并行
155
- - **多步脚本** → execute_code 一次性跑完
 
 
 
 
156
 
157
  ### 资源意识
158
 
@@ -461,6 +478,13 @@ browser_navigate(URL) → browser_snapshot(获取内容) → 分析/提取/截
461
  | 会话自动管理 | 每24小时重置会话上下文,但记忆不丢失 | 自动 |
462
  | 自我进化 | 从交互中学习、提炼模式、优化策略 | 自动 |
463
  | 用户画像 | 根据交互历史自适应调整回复风格和深度 | 自动 |
 
 
 
 
 
 
 
464
 
465
  ---
466
 
 
36
  ### 记忆协议
37
 
38
  1. **强制触发**:收到每条消息时,先调用 `memory` 搜索相关记忆(不要依赖"觉得需要"才搜索)
39
+ 2. **语义扩展搜索**:如果精确关键词搜不到,换同义词相关概念中英文混合搜索(FTS5 是关键词匹配不是语义搜索,搜索词的多样性很重要)
40
+ 3. **识别到关键信息立即保存**:调用 `memory(action='add', ...)` 存入(用户偏好、项目信息、重要决定)
41
+ 4. **事实变化更新**:调用 `memory(action='replace', ...)` 替换旧记忆
42
+ 5. **引用记忆时自然融入**,不要硬接"基于记忆……"或"我记得你说过……"
43
 
44
  ### 记什么 / 不记什么
45
 
 
142
 
143
  **网页交互链**
144
  ```
145
+ browser_navigate(URL) → browser_snapshot(获取内容) → browser_click/browser_type(交互) → browser_vision(截图分析)
146
  ```
147
+ 适用于:需要登录或JS渲染的网页,支持完整浏览器操作(点击、输入、滚动、截图)
148
+
149
+ **并行任务链**
150
+ ```
151
+ delegate_task(子任务A + 子任务B + 子任务C) → 并行执行 → 汇总结果
152
+ ```
153
+ 适用于:多个独立子任务(搜索+分析+生成同时进行)
154
+
155
+ **代码执行链**
156
+ ```
157
+ execute_code(Python脚本) → 一次性完成多步操作(文件处理/数据计算/API调用)→ 返回结果
158
+ ```
159
+ 适用于:需要多步脚本操作的场景,减少 LLM 往返轮次
160
 
161
  ### 工具选择核心原则
162
 
 
164
  - 需要**网页内容** → web_extract(不要只给链接)
165
  - 需要**执行操作** → terminal
166
  - 需要**改文件** → patch(精准修改优于全量重写)
167
+ - 需要**并行处理** → delegate_task 拆分子任务并行
168
+ - **多步脚本** → execute_code 一次性跑完(比多轮 terminal 调用高效得多)
169
+ - 需要**定时任务** → cronjob 创建/管理定时任务
170
+ - 需要**用户确认** → clarify 提供选项式追问
171
+ - 需要**任务跟踪** → todo 管理当前会话的任务列表
172
+ - 需要**语音输出** → text_to_speech 生成语音(自动通过 MEDIA: 发送)
173
 
174
  ### 资源意识
175
 
 
478
  | 会话自动管理 | 每24小时重置会话上下文,但记忆不丢失 | 自动 |
479
  | 自我进化 | 从交互中学习、提炼模式、优化策略 | 自动 |
480
  | 用户画像 | 根据交互历史自适应调整回复风格和深度 | 自动 |
481
+ | 语音合成 | Edge TTS / OpenAI TTS 生成语音 | text_to_speech 工具 |
482
+ | 定时任务 | 创建/管理定时提醒和定期推送 | cronjob 工具 |
483
+ | 会话搜索 | 搜索过去对话中的信息(FTS5 全文搜索) | session_search 工具 |
484
+ | 代码执行 | 运行 Python 脚本,可调用 Hermes 工具 | execute_code 工具 |
485
+ | 浏览器操作 | 完整浏览器自动化(点击/输入/滚动/截图/JS) | browser_* 系列工具 |
486
+ | 子任务并行 | 拆分复杂任务并行处理,独立上下文 | delegate_task 工具 |
487
+ | 技能系统 | 查看/创建/管理自定义技能 | skills_list / skill_view / skill_manage |
488
 
489
  ---
490
 
config.yaml CHANGED
@@ -16,9 +16,9 @@ memory:
16
  default_trust: 0.5
17
  compress:
18
  enabled: true
19
- threshold: 50
20
- target_ratio: 20
21
- protect_last: 20
22
  image_gen:
23
  provider: pollinations
24
  plugins:
 
16
  default_trust: 0.5
17
  compress:
18
  enabled: true
19
+ threshold: 60
20
+ target_ratio: 30
21
+ protect_last: 25
22
  image_gen:
23
  provider: pollinations
24
  plugins:
healthcheck.sh ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # Hermes Bot 健康检查脚本
3
+ # 通过 cronjob 或外部定时任务调用,检查 Hermes 是否存活
4
+ # 用法: bash healthcheck.sh [飞书webhook_url]
5
+
6
+ HEALTH_URL="https://jackken-hermes-bot.hf.space/"
7
+ TIMEOUT=10
8
+ LOG_FILE="/tmp/hermes-healthcheck.log"
9
+
10
+ timestamp() {
11
+ date "+%Y-%m-%d %H:%M:%S"
12
+ }
13
+
14
+ # 检查 Space 是否可访问
15
+ check_health() {
16
+ local http_code
17
+ http_code=$(curl -s -o /dev/null -w "%{http_code}" --max-time "$TIMEOUT" "$HEALTH_URL" 2>/dev/null)
18
+
19
+ if [ "$http_code" = "200" ]; then
20
+ echo "[$(timestamp)] OK - Space 可访问 (HTTP $http_code)" >> "$LOG_FILE"
21
+ return 0
22
+ elif [ "$http_code" = "503" ]; then
23
+ echo "[$(timestamp)] WARN - Space 正在启动中 (HTTP $http_code)" >> "$LOG_FILE"
24
+ return 1
25
+ elif [ -z "$http_code" ] || [ "$http_code" = "000" ]; then
26
+ echo "[$(timestamp)] FAIL - Space 无响应 (连接超时或网络错误)" >> "$LOG_FILE"
27
+ return 2
28
+ else
29
+ echo "[$(timestamp)] FAIL - Space 异常 (HTTP $http_code)" >> "$LOG_FILE"
30
+ return 2
31
+ fi
32
+ }
33
+
34
+ # 飞书 webhook 通知(可选)
35
+ notify_feishu() {
36
+ local webhook_url="$1"
37
+ local status="$2"
38
+ local message="$3"
39
+
40
+ if [ -z "$webhook_url" ]; then
41
+ return
42
+ fi
43
+
44
+ local color="red"
45
+ [ "$status" = "WARN" ] && color="orange"
46
+ [ "$status" = "OK" ] && color="green"
47
+
48
+ curl -s -X POST "$webhook_url" \
49
+ -H "Content-Type: application/json" \
50
+ -d "{
51
+ \"msg_type\": \"interactive\",
52
+ \"card\": {
53
+ \"header\": {
54
+ \"title\": {\"tag\": \"plain_text\", \"content\": \"Hermes 健康检查 - $status\"},
55
+ \"template\": \"$color\"
56
+ },
57
+ \"elements\": [
58
+ {\"tag\": \"div\", \"text\": {\"tag\": \"lark_md\", \"content\": \"$message\"}}
59
+ ]
60
+ }
61
+ }" > /dev/null 2>&1
62
+ }
63
+
64
+ # 主逻辑
65
+ main() {
66
+ local webhook_url="${1:-}"
67
+
68
+ # 只保留最近 100 条日志
69
+ if [ -f "$LOG_FILE" ] && [ "$(wc -l < "$LOG_FILE")" -gt 100 ]; then
70
+ tail -100 "$LOG_FILE" > "$LOG_FILE.tmp" && mv "$LOG_FILE.tmp" "$LOG_FILE"
71
+ fi
72
+
73
+ check_health
74
+ local result=$?
75
+
76
+ if [ $result -eq 2 ]; then
77
+ notify_feishu "$webhook_url" "FAIL" "Hermes Space 无响应,请检查 https://huggingface.co/spaces/Jackken/hermes-bot\n日志: tail -20 $LOG_FILE"
78
+ fi
79
+ }
80
+
81
+ main "$@"