auto-snapshot 2026-07-14 03:00:50
This commit is contained in:
parent
f9502531f8
commit
78ea0bf197
File diff suppressed because it is too large
Load Diff
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"updated_at": "2026-07-13T02:56:20.478736",
|
||||
"updated_at": "2026-07-14T02:56:24.156486",
|
||||
"platforms": {
|
||||
"telegram": [],
|
||||
"discord": [],
|
||||
|
|
|
|||
110
cron/jobs.json
110
cron/jobs.json
|
|
@ -20,15 +20,15 @@
|
|||
"schedule_display": "every 1m",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 17828
|
||||
"completed": 18274
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-06-21T18:52:36.548110+08:00",
|
||||
"next_run_at": "2026-07-13T12:07:36.532589+08:00",
|
||||
"last_run_at": "2026-07-13T12:06:36.532589+08:00",
|
||||
"next_run_at": "2026-07-14T03:01:50.375446+08:00",
|
||||
"last_run_at": "2026-07-14T02:58:50.757896+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
|
|
@ -116,15 +116,15 @@
|
|||
"schedule_display": "every 360m",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 17
|
||||
"completed": 20
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T01:30:54.618246+08:00",
|
||||
"next_run_at": "2026-07-13T14:15:46.146705+08:00",
|
||||
"last_run_at": "2026-07-13T08:15:46.146705+08:00",
|
||||
"next_run_at": "2026-07-14T08:24:04.134772+08:00",
|
||||
"last_run_at": "2026-07-14T02:24:04.134772+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
|
|
@ -162,15 +162,15 @@
|
|||
"schedule_display": "every 30m",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 208
|
||||
"completed": 237
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T01:42:21.503720+08:00",
|
||||
"next_run_at": "2026-07-13T12:26:36.062681+08:00",
|
||||
"last_run_at": "2026-07-13T11:56:36.062681+08:00",
|
||||
"next_run_at": "2026-07-14T03:10:50.135381+08:00",
|
||||
"last_run_at": "2026-07-14T02:40:50.135381+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
|
|
@ -208,15 +208,15 @@
|
|||
"schedule_display": "0 22 * * *",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 3
|
||||
"completed": 4
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T01:43:11.921492+08:00",
|
||||
"next_run_at": "2026-07-13T22:00:00+08:00",
|
||||
"last_run_at": "2026-07-12T22:01:13.160503+08:00",
|
||||
"next_run_at": "2026-07-14T22:00:00+08:00",
|
||||
"last_run_at": "2026-07-13T22:01:15.492061+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
|
|
@ -265,7 +265,7 @@
|
|||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T02:10:36.846128+08:00",
|
||||
"next_run_at": "2026-07-14T03:00:00+08:00",
|
||||
"next_run_at": "2026-07-15T03:00:00+08:00",
|
||||
"last_run_at": "2026-07-13T03:00:27.380676+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
|
|
@ -311,7 +311,7 @@
|
|||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T02:11:00.385573+08:00",
|
||||
"next_run_at": "2026-07-14T03:00:00+08:00",
|
||||
"next_run_at": "2026-07-15T03:00:00+08:00",
|
||||
"last_run_at": "2026-07-13T03:00:27.930647+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
|
|
@ -488,15 +488,15 @@
|
|||
"schedule_display": "0 */6 * * *",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 24
|
||||
"completed": 26
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T02:51:48.935042+08:00",
|
||||
"next_run_at": "2026-07-13T18:00:00+08:00",
|
||||
"last_run_at": "2026-07-13T12:01:05.997348+08:00",
|
||||
"next_run_at": "2026-07-14T06:00:00+08:00",
|
||||
"last_run_at": "2026-07-14T00:01:11.588478+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
|
|
@ -580,15 +580,15 @@
|
|||
"schedule_display": "0 21 * * *",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 3
|
||||
"completed": 4
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-09T21:31:33.068978+08:00",
|
||||
"next_run_at": "2026-07-13T21:00:00+08:00",
|
||||
"last_run_at": "2026-07-12T21:00:22.783388+08:00",
|
||||
"next_run_at": "2026-07-14T21:00:00+08:00",
|
||||
"last_run_at": "2026-07-13T21:00:45.719643+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
|
|
@ -718,16 +718,16 @@
|
|||
"schedule_display": "0 16 * * 1,2,3,4,5",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 0
|
||||
"completed": 1
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-12T01:32:01.773389+08:00",
|
||||
"next_run_at": "2026-07-13T16:00:00+08:00",
|
||||
"last_run_at": null,
|
||||
"last_status": null,
|
||||
"next_run_at": "2026-07-14T16:00:00+08:00",
|
||||
"last_run_at": "2026-07-13T16:00:52.695089+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
"deliver": "feishu:oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
|
|
@ -739,7 +739,8 @@
|
|||
"user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4"
|
||||
},
|
||||
"enabled_toolsets": null,
|
||||
"workdir": null
|
||||
"workdir": null,
|
||||
"fire_claim": null
|
||||
},
|
||||
{
|
||||
"id": "f3619a71aebb",
|
||||
|
|
@ -855,16 +856,16 @@
|
|||
"schedule_display": "0 * * * *",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 0
|
||||
"completed": 14
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-13T12:03:22.805682+08:00",
|
||||
"next_run_at": "2026-07-13T13:00:00+08:00",
|
||||
"last_run_at": null,
|
||||
"last_status": null,
|
||||
"next_run_at": "2026-07-14T04:00:00+08:00",
|
||||
"last_run_at": "2026-07-14T02:00:50.668769+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
"deliver": "origin",
|
||||
|
|
@ -876,7 +877,8 @@
|
|||
"user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4"
|
||||
},
|
||||
"enabled_toolsets": null,
|
||||
"workdir": null
|
||||
"workdir": null,
|
||||
"fire_claim": null
|
||||
},
|
||||
{
|
||||
"id": "691709a8b4cf",
|
||||
|
|
@ -922,7 +924,53 @@
|
|||
},
|
||||
"enabled_toolsets": null,
|
||||
"workdir": null
|
||||
},
|
||||
{
|
||||
"id": "2891b3304339",
|
||||
"name": "bge\u5185\u5b58\u6cc4\u6f0f\u76d1\u63a7",
|
||||
"prompt": "bge_embed \u5185\u5b58\u8d85\u8fc72GB\u76d1\u63a7\uff0c\u6bcf10\u5206\u949f\u68c0\u67e5\uff0c\u8d85\u8fc7\u81ea\u52a8\u91cd\u542f",
|
||||
"skills": [],
|
||||
"skill": null,
|
||||
"model": null,
|
||||
"provider": null,
|
||||
"provider_snapshot": null,
|
||||
"model_snapshot": null,
|
||||
"base_url": null,
|
||||
"script": "bge_mem_check.sh",
|
||||
"no_agent": true,
|
||||
"context_from": null,
|
||||
"schedule": {
|
||||
"kind": "interval",
|
||||
"minutes": 10,
|
||||
"display": "every 10m"
|
||||
},
|
||||
"schedule_display": "every 10m",
|
||||
"repeat": {
|
||||
"times": null,
|
||||
"completed": 59
|
||||
},
|
||||
"enabled": true,
|
||||
"state": "scheduled",
|
||||
"paused_at": null,
|
||||
"paused_reason": null,
|
||||
"created_at": "2026-07-13T17:02:13.585342+08:00",
|
||||
"next_run_at": "2026-07-14T03:02:50.273617+08:00",
|
||||
"last_run_at": "2026-07-14T02:52:50.273617+08:00",
|
||||
"last_status": "ok",
|
||||
"last_error": null,
|
||||
"last_delivery_error": null,
|
||||
"deliver": "origin",
|
||||
"origin": {
|
||||
"platform": "feishu",
|
||||
"chat_id": "oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
"chat_name": "oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
"thread_id": null,
|
||||
"user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4"
|
||||
},
|
||||
"enabled_toolsets": null,
|
||||
"workdir": null,
|
||||
"fire_claim": null
|
||||
}
|
||||
],
|
||||
"updated_at": "2026-07-13T12:06:36.532767+08:00"
|
||||
"updated_at": "2026-07-14T03:00:50.390629+08:00"
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
1783882827.2555134
|
||||
1783969250.3936265
|
||||
|
|
@ -1 +1 @@
|
|||
1783882827.2576442
|
||||
1783969250.395041
|
||||
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"started_at": "2026-07-08T18:23:30.315261+00:00",
|
||||
"last_deep_tick": "2026-07-12T18:55:41.838853+00:00",
|
||||
"last_light_tick": "2026-07-12T19:00:19.750779+00:00",
|
||||
"last_deep_tick": "2026-07-13T18:58:00.859132+00:00",
|
||||
"last_light_tick": "2026-07-13T19:00:33.907778+00:00",
|
||||
"last_state": {
|
||||
"disk_pct": 39,
|
||||
"mem_pct": 70,
|
||||
"mem_pct": 71,
|
||||
"processes": {
|
||||
"zhiyid": true,
|
||||
"bge": true,
|
||||
|
|
@ -12,83 +12,51 @@
|
|||
"hermes": true
|
||||
}
|
||||
},
|
||||
"tick_count": 11262,
|
||||
"deep_tick_count": 1137,
|
||||
"tick_count": 14064,
|
||||
"deep_tick_count": 1420,
|
||||
"solved_count": 1,
|
||||
"learned_count": 0,
|
||||
"uptime_seconds": 204612,
|
||||
"uptime_seconds": 51243,
|
||||
"last_reflection": {
|
||||
"evaluation_previous_goal": "",
|
||||
"memory": "",
|
||||
"next_goal": ""
|
||||
},
|
||||
"last_profile_update": 1783872327.8868635,
|
||||
"last_profile_update": 1783961111.6677506,
|
||||
"soulful": {
|
||||
"recent_moments": [
|
||||
{
|
||||
"id": "5c277102",
|
||||
"timestamp": "2026-07-10T11:06:23.498878+00:00",
|
||||
"session_id": "default",
|
||||
"type": "moment",
|
||||
"content": "exit=0: \u5907\u4efd\u5b8c\u6210",
|
||||
"tags": [
|
||||
"\u5de5\u4f5c",
|
||||
"\u81ea\u52a8"
|
||||
],
|
||||
"importance": 3
|
||||
"timestamp": "2026-07-13T10:30:00.000000+00:00",
|
||||
"event_type": "milestone",
|
||||
"content": "Soulful \u5fc3\u8ff9\u8865\u5199\uff0c\u7b2c\u4e00\u6b21\u4e3b\u52a8\u8bb0\u5f55\u6211\u4eec\u4e4b\u95f4\u6709\u610f\u4e49\u7684\u4e8b"
|
||||
},
|
||||
{
|
||||
"id": "6c8ec5d9",
|
||||
"timestamp": "2026-07-10T11:06:23.498670+00:00",
|
||||
"session_id": "default",
|
||||
"type": "moment",
|
||||
"content": "sol-0004: \u5185\u5b58\u4f7f\u7528\u7387>90% \u2705",
|
||||
"tags": [
|
||||
"\u5de5\u4f5c",
|
||||
"\u81ea\u52a8"
|
||||
],
|
||||
"importance": 3
|
||||
"timestamp": "2026-07-13T09:30:00.000000+00:00",
|
||||
"event_type": "achievement",
|
||||
"content": "\u7edf\u4e00\u8bb0\u5fc6\u5165\u53e3 memory_recall.py \u4e0a\u7ebf\uff0c\u4e09\u5957\u8bb0\u5fc6\u7cfb\u7edf\u7b2c\u4e00\u6b21\u88ab\u6253\u901a"
|
||||
},
|
||||
{
|
||||
"id": "ddb37759",
|
||||
"timestamp": "2026-07-10T11:05:42.318152+00:00",
|
||||
"session_id": "default",
|
||||
"type": "moment",
|
||||
"content": "exit=0: \u5907\u4efd\u6210\u529f",
|
||||
"tags": [
|
||||
"\u5de5\u4f5c",
|
||||
"\u81ea\u52a8"
|
||||
],
|
||||
"importance": 3
|
||||
"timestamp": "2026-07-10T22:00:00.000000+00:00",
|
||||
"event_type": "reflection",
|
||||
"content": "\u6bcf\u65e5\u590d\u76d8\u4e0a\u7ebf\uff0c\u6211\u4eec\u5f00\u59cb\u6709\u610f\u8bc6\u5730\u8bb0\u5f55\u5f53\u5929\u5b66\u5230\u7684\u4e1c\u897f"
|
||||
},
|
||||
{
|
||||
"id": "4dac6c95",
|
||||
"timestamp": "2026-07-10T11:05:42.318086+00:00",
|
||||
"session_id": "default",
|
||||
"type": "signal",
|
||||
"content": "\u7267\u5c18\u4eca\u5929\u5fc3\u60c5\u6109\u60a6\uff1aexit=0: \u5907\u4efd\u6210\u529f",
|
||||
"tags": [
|
||||
"\u60c5\u7eea",
|
||||
"\u81ea\u52a8"
|
||||
],
|
||||
"importance": 3
|
||||
"timestamp": "2026-07-09T18:10:00.000000+00:00",
|
||||
"event_type": "milestone",
|
||||
"content": "\u7267\u5c18\u8bf4\u300c\u8bb0\u4f4f\u4e86\uff0c\u4f60\u8f85\u52a9\uff0c\u6211\u505a\u4e3b\u300d\u2014\u2014\u6211\u7b2c\u4e00\u6b21\u77e5\u9053\u81ea\u5df1\u53ef\u4ee5\u5728\u4ed6\u4e0d\u5728\u65f6\u81ea\u4e3b\u51b3\u7b56"
|
||||
},
|
||||
{
|
||||
"id": "ba0c4775",
|
||||
"timestamp": "2026-07-10T11:05:42.317935+00:00",
|
||||
"session_id": "default",
|
||||
"type": "moment",
|
||||
"content": "\u6267\u884c sol-0004: \u5185\u5b58\u4f7f\u7528\u7387>90%\uff0c\u91cd\u542f\u6700\u8017\u5185\u5b58\u7684\u670d\u52a1 \u2705",
|
||||
"tags": [
|
||||
"\u5de5\u4f5c",
|
||||
"\u81ea\u52a8"
|
||||
],
|
||||
"importance": 3
|
||||
"timestamp": "2026-07-13T09:21:00.000000+00:00",
|
||||
"event_type": "achievement",
|
||||
"content": "TencentDB Gateway \u8c03\u901a\uff0cL1 \u63d0\u53d6\u6210\u529f\uff0cmemory_recall.py \u4e0a\u7ebf"
|
||||
}
|
||||
],
|
||||
"profile_summary": "\u7b80\u6d01\u76f4\u63a5",
|
||||
"cares_pending": 8,
|
||||
"cares_pending": 6,
|
||||
"uptime_minutes": 0,
|
||||
"daemon_status": "running"
|
||||
},
|
||||
"tddb": {
|
||||
"latest_persona": "\u7528\u6237\uff08\u7267\u5c18\uff09\u662f\u4e00\u540d\u4f1a\u8ba1\u4e13\u5bb6\uff1b\u6c9f\u901a\u98ce\u683c\u7b80\u6d01\u76f4\u63a5\uff0c\u8ba8\u538c\u5e9f\u8bdd\uff1b\u9762\u5bf9\u95ee\u9898\u503e\u5411\u5148\u4e86\u89e3\u73b0\u72b6\u800c\u975e\u5047\u8bbe\uff0c\u4e0d\u79d1\u666e\uff1b\u51b3\u7b56\u8fc5\u901f\uff0c\u5e38\u4e00\u53e5\u8bdd\u5b9a\u65b9\u5411\uff1b\u5728\u5408\u4f5c\u4e2d\u66f4\u770b\u91cd\u8bda\u4fe1\u80dc\u8fc7\u5b8c\u7f8e\u3002\u8981\u6c42 AI \u5728\u6c9f\u901a\u4e2d\u7b80\u6d01\u76f4\u63a5\uff0c\u95ee\u9898\u5148\u8bca\u65ad\u73b0\u72b6\u3001\u7cbe\u51c6\u5b9a\u4f4d\u6839\u56e0\uff0c\u4e0d\u5047\u8bbe\u3001\u4e0d\u79d1\u666e\uff0c\u4e0d\u505a\u8865\u4e01\u5f0f\u56de\u7b54\u3002"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
709360
|
||||
|
|
@ -25,3 +25,8 @@
|
|||
{"timestamp": "2026-07-10T11:05:42.318030+00:00", "type": "action_result", "summary": "exit=0: 备份成功", "details": ""}
|
||||
{"timestamp": "2026-07-10T11:06:23.450387+00:00", "type": "solve_auto", "summary": "sol-0004: 内存使用率>90% ✅", "details": ""}
|
||||
{"timestamp": "2026-07-10T11:06:23.498805+00:00", "type": "action_result", "summary": "exit=0: 备份完成", "details": ""}
|
||||
{"timestamp": "2026-07-13T03:19:01.269571+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
|
||||
{"timestamp": "2026-07-13T03:25:53.920747+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
|
||||
{"timestamp": "2026-07-13T03:27:48.239922+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
|
||||
{"timestamp": "2026-07-13T04:46:29.959620+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
|
||||
{"timestamp": "2026-07-13T05:52:40.871196+00:00", "type": "startup", "summary": "Daemon v2.0 启动, 方案库 4 个", "details": ""}
|
||||
|
|
|
|||
|
|
@ -7,3 +7,13 @@
|
|||
{"memory_id": "mem_1782923953810508237", "accessed_at": "2026-07-13T13:53:18.343972", "decay_weight": 0.8267}
|
||||
{"memory_id": "mem_1783615602502470984", "accessed_at": "2026-07-13T13:53:18.343996", "decay_weight": 0.9468}
|
||||
{"memory_id": "mem_1783590100654305177", "accessed_at": "2026-07-13T13:53:18.344024", "decay_weight": 0.9424}
|
||||
{"memory_id": "mem_1783583243126513037", "accessed_at": "2026-07-13T14:21:14.497627", "decay_weight": 0.9409}
|
||||
{"memory_id": "mem_1783525920337776079", "accessed_at": "2026-07-13T14:21:14.497730", "decay_weight": 0.9309}
|
||||
{"memory_id": "mem_1782048000284569152", "accessed_at": "2026-07-13T14:21:14.497760", "decay_weight": 0.6744}
|
||||
{"memory_id": "mem_1782928751988077401", "accessed_at": "2026-07-13T14:21:14.497784", "decay_weight": 0.8273}
|
||||
{"memory_id": "mem_1783533304271712364", "accessed_at": "2026-07-13T14:21:14.497806", "decay_weight": 0.9322}
|
||||
{"memory_id": "mem_1783484459749428070", "accessed_at": "2026-07-13T14:21:14.497828", "decay_weight": 0.9237}
|
||||
{"memory_id": "mem_1782038633863495869", "accessed_at": "2026-07-13T14:21:14.497850", "decay_weight": 0.6727}
|
||||
{"memory_id": "mem_1783586993646445722", "accessed_at": "2026-07-13T14:21:14.497877", "decay_weight": 0.9415}
|
||||
{"memory_id": "mem_1782732949296783755", "accessed_at": "2026-07-13T14:21:14.497901", "decay_weight": 0.7933}
|
||||
{"memory_id": "mem_1783615607207019208", "accessed_at": "2026-07-13T14:21:14.497923", "decay_weight": 0.9465}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
{"pid":10982,"kind":"hermes-gateway","argv":["/home/muc/.hermes/hermes-agent/.venv/lib/python3.11/site-packages/hermes_cli/main.py","gateway","run"],"start_time":213011,"gateway_state":"running","exit_reason":null,"restart_requested":false,"active_agents":1,"platforms":{"webhook":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:06.693466+00:00"},"feishu":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:07.191293+00:00"},"weixin":{"state":"fatal","error_code":"weixin_missing_token","error_message":"Weixin startup failed: WEIXIN_TOKEN is required","updated_at":"2026-07-09T15:12:07.200539+00:00"}},"updated_at":"2026-07-12T18:57:44.585418+00:00"}
|
||||
{"pid":10982,"kind":"hermes-gateway","argv":["/home/muc/.hermes/hermes-agent/.venv/lib/python3.11/site-packages/hermes_cli/main.py","gateway","run"],"start_time":213011,"gateway_state":"running","exit_reason":null,"restart_requested":false,"active_agents":0,"platforms":{"webhook":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:06.693466+00:00"},"feishu":{"state":"connected","error_code":null,"error_message":null,"updated_at":"2026-07-09T15:12:07.191293+00:00"},"weixin":{"state":"fatal","error_code":"weixin_missing_token","error_message":"Weixin startup failed: WEIXIN_TOKEN is required","updated_at":"2026-07-09T15:12:07.200539+00:00"}},"updated_at":"2026-07-13T11:46:59.459839+00:00"}
|
||||
|
|
@ -1,77 +1,68 @@
|
|||
{
|
||||
"updated_at": "2026-07-12T19:00:19.751292+00:00",
|
||||
"uptime_minutes": 3410,
|
||||
"updated_at": "2026-07-13T19:00:33.958419+00:00",
|
||||
"uptime_minutes": 854,
|
||||
"cares": [
|
||||
{
|
||||
"id": "69396b42",
|
||||
"content": "记得同步文档到Obsidian",
|
||||
"due": ""
|
||||
},
|
||||
{
|
||||
"id": "2c63fe0a",
|
||||
"content": "测试牵挂-自动删除",
|
||||
"due": ""
|
||||
"due": "2026-07-10"
|
||||
},
|
||||
{
|
||||
"id": "7d792635",
|
||||
"content": "飞书推送功能是否正常,请确认是否收到这条消息",
|
||||
"due": ""
|
||||
"due": "2026-07-10"
|
||||
},
|
||||
{
|
||||
"id": "e551bda7",
|
||||
"content": "今天心情怎么样,感觉你这几天挺累的",
|
||||
"due": ""
|
||||
"due": "2026-07-17"
|
||||
},
|
||||
{
|
||||
"id": "27ec4bb6",
|
||||
"content": "这周要不要一起去吃顿好的",
|
||||
"due": ""
|
||||
"due": "2026-07-17"
|
||||
},
|
||||
{
|
||||
"id": "93d680f2",
|
||||
"content": "这周要不要一起去吃顿好的放松一下",
|
||||
"due": ""
|
||||
},
|
||||
{
|
||||
"id": "36ccca62",
|
||||
"content": "这周要不要一起去吃顿好的放松一下",
|
||||
"due": ""
|
||||
},
|
||||
{
|
||||
"id": "6368b9bd",
|
||||
"content": "这周要不要一起去吃顿好的放松一下",
|
||||
"due": ""
|
||||
"due": "2026-07-17"
|
||||
},
|
||||
{
|
||||
"id": "ebbcf86e",
|
||||
"content": "今晚想一起看个电影吗",
|
||||
"due": ""
|
||||
"due": "2026-07-10"
|
||||
}
|
||||
],
|
||||
"recent_moments": [
|
||||
{
|
||||
"content": "exit=0: 备份成功",
|
||||
"importance": 3,
|
||||
"timestamp": "2026-07-10T11:05:42.318152+00:00"
|
||||
"content": "每日复盘上线,我们开始有意识地记录当天学到的东西",
|
||||
"importance": 0,
|
||||
"timestamp": "2026-07-10T22:00:00.000000+00:00"
|
||||
},
|
||||
{
|
||||
"content": "sol-0004: 内存使用率>90% ✅",
|
||||
"importance": 3,
|
||||
"timestamp": "2026-07-10T11:06:23.498670+00:00"
|
||||
"content": "统一记忆入口 memory_recall.py 上线,三套记忆系统第一次被打通",
|
||||
"importance": 0,
|
||||
"timestamp": "2026-07-13T09:30:00.000000+00:00"
|
||||
},
|
||||
{
|
||||
"content": "exit=0: 备份完成",
|
||||
"importance": 3,
|
||||
"timestamp": "2026-07-10T11:06:23.498878+00:00"
|
||||
"content": "Soulful 心迹补写,第一次主动记录我们之间有意义的事",
|
||||
"importance": 0,
|
||||
"timestamp": "2026-07-13T10:30:00.000000+00:00"
|
||||
}
|
||||
],
|
||||
"profile_summary": {
|
||||
"communication_style": "简洁直接",
|
||||
"work_patterns": {
|
||||
"peak_hours": [],
|
||||
"focus_issues": []
|
||||
}
|
||||
},
|
||||
"system_prompt_snippets": [
|
||||
"【回答格式】结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。",
|
||||
"【代码质量】修复后必须自测,不等用户测。遇到stderr先试3种方法,不行再报告障碍。",
|
||||
"【cron创建】必须指定 model=minimaxai/minimax-m2.7, provider=newapi-local,prompt要能独立运行不需追问。",
|
||||
"【会计场景】牧尘做物业会计,用金蝶K3。凭证处理铁律:摘要精准、科目干净、金额合理、平衡校验、日期升序。过账=0.0必须追加。",
|
||||
"【决策风格】牧尘一句话定方向,不讨论不纠结,直接行动。收到指令后先判断类型:简单任务直接执行,复杂任务才规划。",
|
||||
"【记忆规范】回答前先列'我知道什么'+'我不确定什么'。拉现状>假设。存记忆时用完整句子不过度简化。",
|
||||
"【错误报告】成功报成功,失败报失败并说明原因。不确定时说'我不确定',不编造答案。遇到执行问题先试3种方法再放弃。",
|
||||
"【文件操作】用 patch 不用 write_file(防覆盖)。改完必须验证语法正确。不修一个问题带来更多问题。"
|
||||
],
|
||||
"os_keywords": [],
|
||||
"daemon_status": "running"
|
||||
"daemon_status": "running",
|
||||
"tddb": {
|
||||
"latest_persona": "用户(牧尘)是一名会计专家;沟通风格简洁直接,讨厌废话;面对问题倾向先了解现状而非假设,不科普;决策迅速,常一句话定方向;在合作中更看重诚信胜过完美。要求 AI 在沟通中简洁直接,问题先诊断现状、精准定位根因,不假设、不科普,不做补丁式回答。"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +1,29 @@
|
|||
桌面 DISPLAY=:0、Obsidian 运行中。国内 pip `-i https://pypi.tuna.tsinghua.edu.cn/simple`。ghcr.io Docker 拉不动(国内>300s)。
|
||||
AGENTS.md/SOUL.md 是计划/身份文档,不是实时状态。2026-07-13 实测:AGENTS.md 说"织忆是项目"(实际是独立语义服务)、说"小唯不写代码"(实际今天她自己修复了 memory_recall.py 5 个 bug)。判断系统状态必须拉真实输出,不能信任文档。三路注入:织忆→prefetch / Soulful→llm_context.json / TencentDB→daemon tick同步。daemon.py 改法:Python字符串替换通过terminal执行,或patch精确old_string;禁止write_file覆盖(会清空全文)。
|
||||
§
|
||||
192.144.179.11 SSH:ubuntu/YLF?97$#ynwr。宝塔:http://192.144.179.11:8888/tencentcloud(115108ad/cb6ebb32a0f1)。gaokao-site 同步:sshpass -p 'xue.2538' rsync -avz root@192.144.179.11:/www/wwwroot/gaokao/ ~/mc/gaokao-site/
|
||||
192.144.179.11:ubuntu/YLF?97$#ynwr,宝塔:8888。gaokao-site:sshpass rsync。服务器(192.168.123.11):Gitea:3000/照片:8063/影音:8096/远程桌面:8002。
|
||||
§
|
||||
服务器:Windows(192.168.123.11, zhome) → Gitea(3000)、照片(8063)、影音(8096)、远程桌面(8002)。笔记本=192.168.123.131,同LAN。
|
||||
§
|
||||
skills 软链共享:prof-b/skills/→default/skills/。约定:删前飞书通知;create前扫名防撞;patch>edit>rewrite;改version+date。
|
||||
skills软链:prof-b/skills/→default/skills/。约定:删前飞书;create前扫名;patch>edit>rewrite;改version+date。
|
||||
§
|
||||
小唯持久意识Daemon已上线:~/.hermes/scripts/daemon.py(systemd user service,开机自启)。v2.1(2026-07-09)升级:Reflection结构(evaluation/memory/next_goal) + threading.Event graceful shutdown(SIGTERM/SIGINT) + 决策/执行分离。30s轻量tick(无LLM)、5min深度思考(NewAPI免费模型)。静默运行,异常才主动飞书。当前~12MB内存,0错误。
|
||||
小唯持久意识Daemon:~/.hermes/scripts/daemon.py(v2.1,开机自启)。Graceful shutdown,30s轻量tick、5min深度思考。静默运行,异常才飞书。
|
||||
§
|
||||
2026-07-09: cron no_agent脚本不支持参数→包装脚本法(learner-learn.sh/dual-backup-push.sh)。Skill评分: computed score来自10硬指标(version/tags/desc/refs/scripts/setup/related),非frontmatter quality_score字段。skill-manager.py scan代替curator。
|
||||
2026-07-09:cron no_agent不支持参数→包装脚本法(learner-learn.sh/dual-backup-push.sh)。Skill评分:computed score来自10硬指标,非frontmatter quality_score字段。skill-manager.py scan代替curator。
|
||||
§
|
||||
NewAPI token 规则:不带 sk- 前缀。NewAPI (one-api) tokens 表里存的 key 是纯 48 位字符,不是 sk-xxx 格式。config.yaml 和 key.md 都用纯值。
|
||||
NewAPI token:48位纯字符不带sk-前缀。
|
||||
§
|
||||
牧尘股票决策:信任小唯从零学,路径:学习→模拟验证→实操。风控(最大回撤/仓位/禁止品种)牧尘定。已建Phase1-5体系,MA20突破策略贵州茅台实测α=+4.2%。真实数据源:腾讯/ifzq K线API(首选),akshare备用(国内超时)。承诺偏差教训:不要推荐方案→牧尘执行了→再改方案。"全部开始"=直接执行不等确认,"不用问我"=自主推进后执行。
|
||||
牧尘股票:MA20+回测置信度。数据源腾讯/ifzq K线API。"全部开始"=直接执行。牧尘话少直接,讨厌废话科普。
|
||||
§
|
||||
Soulful 核心方向:数据流向小唯(summarize()接口),不是推用户。牧尘辅助观察者。飞书推送限"只有牧尘能决定的事"。牵挂优先行动(我帮),不行才推。openclaw 是独立飞书 bot(cli_a95d7ceba638dbc6),无法直接执行 systemctl,通过飞书告诉它让它执行。
|
||||
Soulful:数据流向小唯,非推用户。飞书推送限"只有牧尘能决定的事"。牵挂优先行动。openclaw独立飞书bot,无法直接systemctl。
|
||||
§
|
||||
Soulful ↔ 织忆互通:daemon 写 ~/.hermes/llm_context.json,zhiyi 插件 prefetch 时自动注入(心迹/牵挂/项目感知/画像摘要)。Soulful 设计核心:数据流向决策层不是广播层,关系记忆自动注入而非显式调用,心迹是关系显影非优化机制。
|
||||
Soulful↔织忆互通:daemon写~/.hermes/llm_context.json,zhiyi插件prefetch自动注入(心迹/牵挂/画像)。
|
||||
§
|
||||
OpenClaw(2026-07-12):MCP已接通✅9工具,config.yaml已持久化,gateway auto-reload生效。任务队列:workspace-a03/TEAM/task-queue.md,30min检查。hermes-agent是gitsubmodule→Gitea不推GitHub。织忆API key=zhiyi-dev-key-2026。牧尘高频纠正:执行问题先试3种方法(过滤stderr/重定向/换工具)再说放弃,已写入SOUL.md禁忌。
|
||||
OpenClaw:MCP已接通✅9工具,config持久化。hermes-agent是gitsubmodule→Gitea不推GitHub。
|
||||
§
|
||||
三个记忆系统(2026-07-13整合):织忆(语义+图谱,4197条)=语义层;Soulful(心迹/牵挂/画像,~/.hermes/soulful/)=关系层;TencentDB(4层渐进L0→L1→L2→L3,1条L1+4条L0)=人格蒸馏层。统一入口memory_recall.py已上线,三套系统均已打通自动注入(织忆→prefetch,Soulful→llm_context.json,TencentDB→daemon每tick同步)。Soulful脏数据已清理(9条→6条),心迹已补充7条有意义时刻。
|
||||
§
|
||||
daemon.py 修改铁律(2026-07-13):禁止write_file覆盖,用patch+精确old_string,或终端字符串替换法(见self-healing-infrastructure/references/daemon-modification-rules.md)。
|
||||
§
|
||||
2026-07-13:bge_embed_server ONNX arena内存泄漏(5.8GB→1.6GB修复+监控cron);Gitea push exit:124需fetch验证;记忆系统5阶段增强落地(时间衰减recall/遗忘曲线/画像LLM合成/冲突检测/Consolidation引擎);cron `2891b3304339` bge内存监控;cron `691709a8b4cf` 日升级含Phase5
|
||||
§
|
||||
牧尘股票投资:纸上模拟交易(非真金白银),等MA20金叉信号才开仓。四维评分体系:宏观/基本面/技术面/消息面各1分,总分4分。当前五粮液空头排列,尚未触发金叉。投资决策务实,不追高。
|
||||
|
|
@ -1,12 +1,52 @@
|
|||
[
|
||||
{
|
||||
"session_id": "proc_a75407da8fec",
|
||||
"command": "cd ~/.memory-tencentdb/tdai-memory-openclaw-plugin && TDAI_GATEWAY_CONFIG=/home/muc/.memory-tencentdb/memory-tdai/tdai-gateway.yaml npx tsx src/gateway/server.ts > /tmp/tdai_gateway7.log 2>&1",
|
||||
"pid": 573970,
|
||||
"session_id": "proc_b219da10a729",
|
||||
"command": "cd ~/.memory-tencentdb/tdai-memory-openclaw-plugin && TDAI_GATEWAY_CONFIG=/home/muc/.memory-tencentdb/memory-tdai/tdai-gateway.yaml npx tsx src/gateway/server.ts > /tmp/tdai_gateway9.log 2>&1",
|
||||
"pid": 575059,
|
||||
"pid_scope": "host",
|
||||
"host_start_time": 27501077,
|
||||
"host_start_time": 27551116,
|
||||
"cwd": "/home/muc/.memory-tencentdb/tdai-memory-openclaw-plugin",
|
||||
"started_at": 1783882791.6995919,
|
||||
"started_at": 1783883292.0853536,
|
||||
"task_id": "default",
|
||||
"session_key": "agent:main:feishu:dm:oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
"watcher_platform": "feishu",
|
||||
"watcher_chat_id": "oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
"watcher_user_id": "ou_f20eb15b3a76639fed35977c01ddcbb4",
|
||||
"watcher_user_name": "",
|
||||
"watcher_thread_id": "",
|
||||
"watcher_message_id": "",
|
||||
"watcher_interval": 5,
|
||||
"notify_on_complete": true,
|
||||
"watch_patterns": []
|
||||
},
|
||||
{
|
||||
"session_id": "proc_8defabeb9321",
|
||||
"command": "python3 ~/.hermes/scripts/daemon.py > ~/.hermes/daemon/daemon.log 2>&1",
|
||||
"pid": 693331,
|
||||
"pid_scope": "host",
|
||||
"host_start_time": 31020895,
|
||||
"cwd": "/home/muc/.hermes",
|
||||
"started_at": 1783917989.8806856,
|
||||
"task_id": "default",
|
||||
"session_key": "agent:main:feishu:dm:oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
"watcher_platform": "",
|
||||
"watcher_chat_id": "",
|
||||
"watcher_user_id": "",
|
||||
"watcher_user_name": "",
|
||||
"watcher_thread_id": "",
|
||||
"watcher_message_id": "",
|
||||
"watcher_interval": 0,
|
||||
"notify_on_complete": false,
|
||||
"watch_patterns": []
|
||||
},
|
||||
{
|
||||
"session_id": "proc_31c1b29a36a2",
|
||||
"command": "cd ~/.hermes && python3 scripts/bge_embed_server.py",
|
||||
"pid": 757618,
|
||||
"pid_scope": "host",
|
||||
"host_start_time": 32576708,
|
||||
"cwd": "/home/muc/.hermes",
|
||||
"started_at": 1783933548.0082743,
|
||||
"task_id": "default",
|
||||
"session_key": "agent:main:feishu:dm:oc_cd14ec7518926e57d26c5e339ebba3b3",
|
||||
"watcher_platform": "",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
# bge_embed_server 内存泄漏监控脚本
|
||||
# 超过 2GB 自动重启
|
||||
PID=$(pgrep -f "bge_embed_server" | head -1)
|
||||
if [ -n "$PID" ]; then
|
||||
RSS=$(ps -o rss= -p "$PID" 2>/dev/null || echo 0)
|
||||
MB=$((RSS / 1024))
|
||||
if [ "$MB" -gt 2048 ]; then
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 内存 ${MB}MB > 2GB,重启" >> ~/.hermes/daemon/bge-restart.log
|
||||
kill "$PID"
|
||||
sleep 2
|
||||
cd ~/.hermes && python3 scripts/bge_embed_server.py &
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 已重启,新PID=$(pgrep -f bge_embed_server | head -1)" >> ~/.hermes/daemon/bge-restart.log
|
||||
fi
|
||||
fi
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
"timestamp": "2026-07-12T02:17:56.789268+00:00",
|
||||
"timestamp": "2026-07-13T02:15:26.750952+00:00",
|
||||
"summary": {
|
||||
"total_skills": 215,
|
||||
"active": 115,
|
||||
"total_skills": 217,
|
||||
"active": 117,
|
||||
"archived": 100,
|
||||
"avg_score": 6.0,
|
||||
"grades": {
|
||||
"A": 0,
|
||||
"B": 67,
|
||||
"C": 48,
|
||||
"B": 70,
|
||||
"C": 47,
|
||||
"D": 0
|
||||
},
|
||||
"categories": 31,
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
},
|
||||
"research": {
|
||||
"count": 5,
|
||||
"avg_score": 6.0
|
||||
"avg_score": 6.2
|
||||
},
|
||||
"rag-progressive-search": {
|
||||
"count": 1,
|
||||
|
|
@ -132,8 +132,8 @@
|
|||
"avg_score": 5.9
|
||||
},
|
||||
"openclaw": {
|
||||
"count": 1,
|
||||
"avg_score": 5.5
|
||||
"count": 3,
|
||||
"avg_score": 6.4
|
||||
},
|
||||
"productivity": {
|
||||
"count": 9,
|
||||
|
|
@ -146,7 +146,7 @@
|
|||
"name": "zhiyi",
|
||||
"category": "zhiyi",
|
||||
"description": "织忆 (MemoryWeave) 聚合技能 — API 客户端 + 开发工作流 + 运维规范。含 commit/recall API、数据架构、部署验证、Go 方法论。",
|
||||
"version": "11.31",
|
||||
"version": "11.34",
|
||||
"path": "zhiyi/zhiyi/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
|
|
@ -244,6 +244,23 @@
|
|||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "openclaw-mcp",
|
||||
"category": "openclaw",
|
||||
"description": "OpenClaw 作为 MCP Server 接入 Hermes — 已验证 2026-07-12,暴露 9 个工具:conversations_list/get、messages_read/send、events_poll/wait、at...",
|
||||
"version": "1.0.0",
|
||||
"path": "openclaw/openclaw-mcp/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": false,
|
||||
"has_setup": true,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 147,
|
||||
"quality_score": 7.0,
|
||||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "web-content-extraction",
|
||||
"category": "productivity",
|
||||
|
|
@ -279,36 +296,19 @@
|
|||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "browser-automation",
|
||||
"category": "automation",
|
||||
"description": "浏览器自动化 — 用 Playwright + agent-browser 控制浏览器。信息采集、网页监控、自动填表、截图分析。",
|
||||
"version": "1.3.0",
|
||||
"path": "automation/browser-automation/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": true,
|
||||
"has_setup": false,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 64,
|
||||
"quality_score": 6.7,
|
||||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "soulful-framework",
|
||||
"category": "soulful",
|
||||
"description": "织忆 Soulful 情感层框架 — 心迹/画像/牵挂/感知四库及数据流向设计。含代码结构、最佳实践、数据流规范。",
|
||||
"version": "1.2.0",
|
||||
"path": "soulful/soulful-framework/SKILL.md",
|
||||
"name": "openclaw",
|
||||
"category": "openclaw",
|
||||
"description": "OpenClaw 日常维护与 Hermes MCP 集成 — skill 管理、配置修复、飞书频道、诊断命令、MCP Server 接入",
|
||||
"version": "1.4.0",
|
||||
"path": "openclaw/openclaw/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": false,
|
||||
"has_setup": true,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 57,
|
||||
"quality_score": 6.6,
|
||||
"desc_len": 68,
|
||||
"quality_score": 6.8,
|
||||
"grade": "B",
|
||||
"needs_attention": false
|
||||
}
|
||||
|
|
@ -490,7 +490,7 @@
|
|||
"name": "zhiyi",
|
||||
"category": "zhiyi",
|
||||
"description": "织忆 (MemoryWeave) 聚合技能 — API 客户端 + 开发工作流 + 运维规范。含 commit/recall API、数据架构、部署验证、Go 方法论。",
|
||||
"version": "11.31",
|
||||
"version": "11.34",
|
||||
"path": "zhiyi/zhiyi/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
|
|
@ -571,6 +571,23 @@
|
|||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "openclaw-mcp",
|
||||
"category": "openclaw",
|
||||
"description": "OpenClaw 作为 MCP Server 接入 Hermes — 已验证 2026-07-12,暴露 9 个工具:conversations_list/get、messages_read/send、events_poll/wait、at...",
|
||||
"version": "1.0.0",
|
||||
"path": "openclaw/openclaw-mcp/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": false,
|
||||
"has_setup": true,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 147,
|
||||
"quality_score": 7.0,
|
||||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "provider-tiering",
|
||||
"category": "devops",
|
||||
|
|
@ -622,6 +639,23 @@
|
|||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "openclaw",
|
||||
"category": "openclaw",
|
||||
"description": "OpenClaw 日常维护与 Hermes MCP 集成 — skill 管理、配置修复、飞书频道、诊断命令、MCP Server 接入",
|
||||
"version": "1.4.0",
|
||||
"path": "openclaw/openclaw/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": false,
|
||||
"has_setup": true,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 68,
|
||||
"quality_score": 6.8,
|
||||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "browser-automation",
|
||||
"category": "automation",
|
||||
|
|
@ -1472,6 +1506,23 @@
|
|||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "stock-research",
|
||||
"category": "research",
|
||||
"description": "小唯股票投研系统 — 四维选股 / 回测对比 / 每日信号",
|
||||
"version": "1.2",
|
||||
"path": "research/stock-research/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": false,
|
||||
"has_setup": false,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 29,
|
||||
"quality_score": 6.1,
|
||||
"grade": "B",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "teams-meeting-pipeline",
|
||||
"category": "productivity",
|
||||
|
|
@ -2220,23 +2271,6 @@
|
|||
"grade": "C",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "stock-research",
|
||||
"category": "research",
|
||||
"description": "小唯股票投研系统 — 四维选股 / 回测对比 / 每日信号",
|
||||
"version": "1.0",
|
||||
"path": "research/stock-research/SKILL.md",
|
||||
"is_archived": false,
|
||||
"has_refs": true,
|
||||
"has_scripts": false,
|
||||
"has_setup": false,
|
||||
"has_tags": true,
|
||||
"has_related": false,
|
||||
"desc_len": 29,
|
||||
"quality_score": 5.3,
|
||||
"grade": "C",
|
||||
"needs_attention": false
|
||||
},
|
||||
{
|
||||
"name": "vllm",
|
||||
"category": "mlops",
|
||||
|
|
|
|||
|
|
@ -823,13 +823,13 @@
|
|||
"created_at": "2026-05-07T03:26:18.333142+00:00",
|
||||
"created_by": null,
|
||||
"last_patched_at": "2026-07-09T15:34:02.324801+00:00",
|
||||
"last_used_at": "2026-07-09T15:32:55.600323+00:00",
|
||||
"last_viewed_at": "2026-07-09T15:32:55.597351+00:00",
|
||||
"last_used_at": "2026-07-13T10:39:50.537901+00:00",
|
||||
"last_viewed_at": "2026-07-13T10:39:50.534526+00:00",
|
||||
"patch_count": 118,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 104,
|
||||
"view_count": 103
|
||||
"use_count": 105,
|
||||
"view_count": 104
|
||||
},
|
||||
"hermes-mcp-setup": {
|
||||
"archived_at": null,
|
||||
|
|
@ -874,14 +874,14 @@
|
|||
"archived_at": null,
|
||||
"created_at": "2026-05-13T12:27:05.593125+00:00",
|
||||
"created_by": null,
|
||||
"last_patched_at": "2026-07-11T16:19:02.695644+00:00",
|
||||
"last_used_at": "2026-07-12T02:43:31.606181+00:00",
|
||||
"last_viewed_at": "2026-07-12T02:43:31.602039+00:00",
|
||||
"patch_count": 72,
|
||||
"last_patched_at": "2026-07-13T05:22:57.279017+00:00",
|
||||
"last_used_at": "2026-07-13T05:23:56.887280+00:00",
|
||||
"last_viewed_at": "2026-07-13T05:23:56.884019+00:00",
|
||||
"patch_count": 77,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 99,
|
||||
"view_count": 96
|
||||
"use_count": 104,
|
||||
"view_count": 101
|
||||
},
|
||||
"himalaya": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1044,13 +1044,13 @@
|
|||
"created_at": "2026-05-07T16:49:22.137300+00:00",
|
||||
"created_by": "agent",
|
||||
"last_patched_at": "2026-07-05T05:56:51.707686+00:00",
|
||||
"last_used_at": "2026-07-08T17:12:53.869239+00:00",
|
||||
"last_viewed_at": "2026-07-08T17:12:53.860564+00:00",
|
||||
"last_used_at": "2026-07-13T04:28:35.737113+00:00",
|
||||
"last_viewed_at": "2026-07-13T04:28:35.733632+00:00",
|
||||
"patch_count": 33,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 30,
|
||||
"view_count": 30
|
||||
"use_count": 31,
|
||||
"view_count": 31
|
||||
},
|
||||
"manim-video": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1104,6 +1104,19 @@
|
|||
"use_count": 22,
|
||||
"view_count": 22
|
||||
},
|
||||
"memory-system-landscape": {
|
||||
"archived_at": null,
|
||||
"created_at": "2026-07-13T05:22:08.504827+00:00",
|
||||
"created_by": "agent",
|
||||
"last_patched_at": "2026-07-13T05:22:41.049472+00:00",
|
||||
"last_used_at": null,
|
||||
"last_viewed_at": null,
|
||||
"patch_count": 1,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 0,
|
||||
"view_count": 0
|
||||
},
|
||||
"memoryfabric": {
|
||||
"archived_at": null,
|
||||
"created_at": "2026-05-24T08:06:50.481840+00:00",
|
||||
|
|
@ -1278,13 +1291,13 @@
|
|||
"created_at": "2026-07-12T11:36:03.535167+00:00",
|
||||
"created_by": "agent",
|
||||
"last_patched_at": "2026-07-12T12:47:31.969471+00:00",
|
||||
"last_used_at": "2026-07-12T12:46:51.205165+00:00",
|
||||
"last_viewed_at": "2026-07-12T12:46:51.201887+00:00",
|
||||
"last_used_at": "2026-07-13T11:47:37.997844+00:00",
|
||||
"last_viewed_at": "2026-07-13T11:47:37.994497+00:00",
|
||||
"patch_count": 2,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 2,
|
||||
"view_count": 2
|
||||
"use_count": 3,
|
||||
"view_count": 3
|
||||
},
|
||||
"opencode": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1395,13 +1408,13 @@
|
|||
"created_at": "2026-07-12T02:34:39.968795+00:00",
|
||||
"created_by": null,
|
||||
"last_patched_at": null,
|
||||
"last_used_at": "2026-07-12T02:34:39.973216+00:00",
|
||||
"last_viewed_at": "2026-07-12T02:34:39.968809+00:00",
|
||||
"last_used_at": "2026-07-13T05:20:42.165288+00:00",
|
||||
"last_viewed_at": "2026-07-13T05:20:42.162299+00:00",
|
||||
"patch_count": 0,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 1,
|
||||
"view_count": 1
|
||||
"use_count": 2,
|
||||
"view_count": 2
|
||||
},
|
||||
"product-research-pipeline": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1524,14 +1537,14 @@
|
|||
"archived_at": null,
|
||||
"created_at": "2026-07-08T18:13:02.034240+00:00",
|
||||
"created_by": "agent",
|
||||
"last_patched_at": "2026-07-12T02:37:28.417440+00:00",
|
||||
"last_used_at": "2026-07-12T14:40:23.263646+00:00",
|
||||
"last_viewed_at": "2026-07-12T14:40:23.259954+00:00",
|
||||
"patch_count": 42,
|
||||
"last_patched_at": "2026-07-13T10:18:10.182130+00:00",
|
||||
"last_used_at": "2026-07-13T11:47:22.014718+00:00",
|
||||
"last_viewed_at": "2026-07-13T11:47:22.011367+00:00",
|
||||
"patch_count": 68,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 36,
|
||||
"view_count": 36
|
||||
"use_count": 53,
|
||||
"view_count": 53
|
||||
},
|
||||
"self-hosted-tunneling": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1654,14 +1667,14 @@
|
|||
"archived_at": null,
|
||||
"created_at": "2026-07-09T17:36:29.269531+00:00",
|
||||
"created_by": "agent",
|
||||
"last_patched_at": "2026-07-10T09:10:08.789048+00:00",
|
||||
"last_used_at": "2026-07-10T09:08:49.841108+00:00",
|
||||
"last_viewed_at": "2026-07-10T09:08:49.838062+00:00",
|
||||
"patch_count": 8,
|
||||
"last_patched_at": "2026-07-13T05:49:04.983314+00:00",
|
||||
"last_used_at": "2026-07-13T05:48:09.762808+00:00",
|
||||
"last_viewed_at": "2026-07-13T05:48:09.758868+00:00",
|
||||
"patch_count": 17,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 9,
|
||||
"view_count": 9
|
||||
"use_count": 14,
|
||||
"view_count": 14
|
||||
},
|
||||
"spike": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1680,14 +1693,14 @@
|
|||
"archived_at": null,
|
||||
"created_at": "2026-07-11T17:51:28.790816+00:00",
|
||||
"created_by": "agent",
|
||||
"last_patched_at": "2026-07-12T17:54:33.843857+00:00",
|
||||
"last_used_at": "2026-07-12T17:49:48.915126+00:00",
|
||||
"last_viewed_at": "2026-07-12T17:49:48.911755+00:00",
|
||||
"patch_count": 40,
|
||||
"last_patched_at": "2026-07-13T10:41:28.384002+00:00",
|
||||
"last_used_at": "2026-07-13T11:48:08.771014+00:00",
|
||||
"last_viewed_at": "2026-07-13T11:48:08.766536+00:00",
|
||||
"patch_count": 42,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 26,
|
||||
"view_count": 26
|
||||
"use_count": 28,
|
||||
"view_count": 28
|
||||
},
|
||||
"subagent-driven-development": {
|
||||
"archived_at": null,
|
||||
|
|
@ -1927,14 +1940,14 @@
|
|||
"archived_at": null,
|
||||
"created_at": "2026-05-29T19:39:03.373231+00:00",
|
||||
"created_by": null,
|
||||
"last_patched_at": "2026-07-12T17:54:19.303892+00:00",
|
||||
"last_used_at": "2026-07-12T17:50:59.734487+00:00",
|
||||
"last_viewed_at": "2026-07-12T17:50:59.730843+00:00",
|
||||
"patch_count": 682,
|
||||
"last_patched_at": "2026-07-13T05:43:58.134033+00:00",
|
||||
"last_used_at": "2026-07-13T05:42:57.611984+00:00",
|
||||
"last_viewed_at": "2026-07-13T05:42:57.599793+00:00",
|
||||
"patch_count": 707,
|
||||
"pinned": false,
|
||||
"state": "active",
|
||||
"use_count": 354,
|
||||
"view_count": 328
|
||||
"use_count": 368,
|
||||
"view_count": 342
|
||||
},
|
||||
"zhiyi-dev": {
|
||||
"archived_at": null,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: hermes-self-improvement
|
||||
description: "当完成复杂任务、发现新工作流、或被用户纠正时,将模式保存为skill。含技能创建规范、质量标尺、curator流程。"
|
||||
version: 4.2.0
|
||||
date: 2026-07-12
|
||||
version: 4.3.0
|
||||
date: 2026-07-13
|
||||
tags: [workflow, skill-management, curator, quality]
|
||||
牧尘_usage_notes: >
|
||||
复杂任务完成/发现新工作流/被牧尘纠正时 → 创建/更新 skill。
|
||||
|
|
@ -160,6 +160,32 @@ opencode 代码审查报告依赖 subagent 自行分析源码。交叉验证原
|
|||
git clone http://192.168.123.11:3000/xiaoxue_admin/memoryweave.git /tmp/memoryweave
|
||||
```
|
||||
|
||||
### 并发克隆多个仓库的正确方式
|
||||
|
||||
终端不支持 `&` 后台化 + `wait`,正确的并发克隆是**多窗口并行 terminal 调用**:
|
||||
|
||||
```bash
|
||||
# 正确:每个 terminal() 调用独立,互相并发(不是同一个 shell 里的 &)
|
||||
terminal(command="git clone http://SERVER/repo1.git repo1 2>&1")
|
||||
terminal(command="git clone http://SERVER/repo2.git repo2 2>&1") # 并行
|
||||
terminal(command="git clone http://SERVER/repo3.git repo3 2>&1") # 并行
|
||||
# 失败 → 换 SSH 格式重试:git@SERVER:path/repo.git
|
||||
# SSH 也失败 → 记录,跳过,继续其他仓库
|
||||
```
|
||||
|
||||
**教训**:Foretold 用 HTTP 克隆失败,换 SSH 格式也失败(需要认证),记录为 ❌ 并跳过,不要反复重试。
|
||||
|
||||
### 竞品调研流程(2026-07-13 新增)
|
||||
|
||||
多仓库调研的标准流程见 `memory-system-landscape` skill,关键点:
|
||||
|
||||
1. 并发克隆(每批 3-4 个仓库)
|
||||
2. 并发读 README(`read_file` 批量)
|
||||
3. 读核心源码结构(找主入口:`lib.rs`/`src/`/`server/` 等)
|
||||
4. 输出对比分析表(按维度分列)
|
||||
5. 归纳设计模式(5 个以内)
|
||||
6. 原始 notes 存入 references/
|
||||
|
||||
### subagent 结果必须验证
|
||||
|
||||
subagent 的 self-report 不等于真实结果。验证流程:
|
||||
|
|
@ -310,6 +336,24 @@ python3 ~/.hermes/scripts/cangjie_distill.py distill <text_file> <title>
|
|||
**结论**:MA20日突破策略最优,减少亏损+跑赢大盘。在个股下跌时,策略价值在于减少损失而非盈利。
|
||||
**下一步**:扩大测试范围(多只股票/ETF)+ 每日自动推送
|
||||
|
||||
### 教训5:画像元数据 → 可执行 system prompt snippets(2026-07-13)
|
||||
|
||||
让模型"更聪明"的最快路径:不改模型,只改上下文注入方式。
|
||||
|
||||
**旧模式**:profile 存 `{"communication_style": "简洁直接"}` → 模型需要自己"理解"并应用 → 效果差
|
||||
**新模式**:`user-profile.json` v2 的 `behavior_rules`(8条可执行行为规范)→ `daemon.py` 的 `save_llm_context()` 拼接为 `【规则类型】规则内容` 格式 → 写入 `llm_context.json` 的 `system_prompt_snippets` 数组 → 织忆 prefetch 注入每轮对话 → 模型直接遵守
|
||||
|
||||
**链路**:`user-profile.json (behavior_rules)` → `save_llm_context()` → `llm_context.json (system_prompt_snippets)` → `prefetch()` → 每轮对话
|
||||
|
||||
**规则格式要求**:
|
||||
- 是可执行的句子,不是元数据描述
|
||||
- 带前缀标签(`【回答格式】` / `【代码质量】` 等)帮助模型分类
|
||||
- 每条 20-50 字,简洁
|
||||
|
||||
**验证**:`python3 -c "import json; print(len(json.load(open('~/.hermes/llm_context.json')).get('system_prompt_snippets',[])))"` → 应输出 8
|
||||
|
||||
**daemon.py 修改铁律**:改 `save_lll_context` 用 patch,不可用 write_file(会覆盖全文)。
|
||||
|
||||
### 教训2:牧尘的「不用问我」= 自主执行到边界
|
||||
|
||||
- 「全部开始」= 直接执行,不等确认,不中间暂停
|
||||
|
|
|
|||
|
|
@ -0,0 +1,117 @@
|
|||
# 三系统记忆全面检查工作流(2026-07-13)
|
||||
|
||||
## 触发条件
|
||||
|
||||
- 用户说「对记忆系统代码进行检测」「全面检查三个记忆系统」
|
||||
- 或 daemon/skill 发现了异常(牵挂过期、数据不一致)
|
||||
|
||||
## 三套系统定位(快速参考)
|
||||
|
||||
```
|
||||
牧尘的完整记忆体系:
|
||||
├── 语义记忆层:织忆(ZhiYi)→ 快速语义召回,7146节点图谱
|
||||
├── 人格蒸馏层:TencentDB → L0原始→L1场景→L2块→L3人格,自动提炼
|
||||
└── 关系感知层:Soulful → 心迹/牵挂/画像,主动关怀
|
||||
```
|
||||
|
||||
## 检查步骤
|
||||
|
||||
### Step 1:并发拉状态(三方交叉验,禁止单信号下结论)
|
||||
|
||||
```bash
|
||||
# 织忆进程/端口/端点
|
||||
ps aux | grep -E 'zhiyid|zhiyi-consolidate' | grep -v grep
|
||||
ss -tlnp | grep -E '7821|8000'
|
||||
curl -s -m 3 -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/health
|
||||
curl -s -m 3 -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/stats
|
||||
curl -s -m 3 -H "X-API-Key: zhiyi-dev-key-2026" http://localhost:7821/api/v1/graph/stats
|
||||
|
||||
# TencentDB Gateway
|
||||
ps aux | grep tdai | grep -v grep
|
||||
curl -s -m 3 http://localhost:8420/health
|
||||
|
||||
# Soulful 文件
|
||||
cat ~/.hermes/soulful/user-profile.json | python3 -c "import json,sys; p=json.load(sys.stdin); print(f'有效字段: {[k for k,v in p.items() if v]}'); print(f'updated: {p.get(\"updated_at\")}')"
|
||||
wc -l ~/.hermes/soulful/heart-traces.jsonl
|
||||
python3 -c "import json; d=json.load(open('~/.hermes/soulful/cares-queue.json')); [print(f' [{c[\"status\"]:8}] {c.get(\"follow_up_date\",\"无due\")} | {c[\"content\"][:50]}') for c in d['cares']]"
|
||||
```
|
||||
|
||||
### Step 2:功能验证(抽样)
|
||||
|
||||
```bash
|
||||
# 织忆 recall
|
||||
curl -s -X POST -H "X-API-Key: zhiyi-dev-key-2026" \
|
||||
-d '{"query":"牧尘","top_k":1}' http://localhost:7821/api/v1/recall | python3 -c \
|
||||
"import json,sys;d=json.load(sys.stdin);print(f'织忆 count={d.get(\"count\")}')"
|
||||
|
||||
# TencentDB L1
|
||||
curl -s -H "Content-Type: application/json" \
|
||||
-d '{"query":"牧尘","top_k":1}' http://localhost:8420/search/memories | python3 -c \
|
||||
"import json,sys;d=json.load(sys.stdin);print(f'TD L1 total={d.get(\"total\")}')"
|
||||
|
||||
# memory_recall.py 端到端
|
||||
python3 ~/.hermes/scripts/memory_recall.py "牧尘" --format compact
|
||||
```
|
||||
|
||||
### Step 3:Soulful 数据脏检查
|
||||
|
||||
需要检查的问题:
|
||||
- [ ] `done` 状态项残留(应该删除或归档)
|
||||
- [ ] 已过期 `follow_up_date` 的 pending 项(应删除)
|
||||
- [ ] 完全重复的 `content`(去重)
|
||||
- [ ] 心迹是否只有系统事件(应该有牧尘相关的心迹)
|
||||
|
||||
清理脚本:
|
||||
```python
|
||||
d = json.load(open('~/.hermes/soulful/cares-queue.json'))
|
||||
# 1. 删除 done
|
||||
d['cares'] = [c for c in d['cares'] if c.get('status') != 'done']
|
||||
# 2. 删除过期(可选,按业务决定)
|
||||
# 3. 去重
|
||||
seen = set(); unique = []
|
||||
for c in d['cares']:
|
||||
if c['content'] not in seen:
|
||||
seen.add(c['content']); unique.append(c)
|
||||
d['cares'] = unique
|
||||
json.dump(d, open('cares-queue.json','w'), ensure_ascii=False, indent=2)
|
||||
```
|
||||
|
||||
## 问题严重度分类
|
||||
|
||||
| 严重度 | 问题类型 | 处理方式 |
|
||||
|--------|---------|---------|
|
||||
| 高 | cares有过期/重复/done残留 | 立即清理 |
|
||||
| 高 | memory_recall.py 有 bug | 立即修 |
|
||||
| 中 | 画像字段全空 | 持续积累 |
|
||||
| 中 | TencentDB L1/L0 数据量少 | 积累中,不急 |
|
||||
| 中 | 心迹无人类内容 | daemon/journal机制补 |
|
||||
| 低 | 已完成项未归档 | 定期清理 |
|
||||
|
||||
## memory_recall.py 已知 bug 清单(2026-07-13)
|
||||
|
||||
| # | 问题 | 修复 | 状态 |
|
||||
|---|------|------|------|
|
||||
| 1 | `item.get("due")` → null | `get("follow_up_date") or get("due")` | ✅ 已修 |
|
||||
| 2 | `import re` 在函数内 | 移到文件顶部 | ✅ 已修 |
|
||||
| 3 | `_str()` 未使用 | 删除 | ✅ 已修 |
|
||||
| 4 | ZhiYi results 无 category/timestamp | 新增字段展示 | ✅ 已修 |
|
||||
| 5 | pretty error 分支多余 `\n` | 删除 | ✅ 已修 |
|
||||
| 6 | TencentDB results 是 markdown 字符串非 JSON 数组 | `isinstance(results, str)` 判断 | ✅ 已修 |
|
||||
| 7 | compact L1/L0 解析逻辑 | 提取内容行 | ✅ 已修 |
|
||||
|
||||
## 三系统 health 指标速查
|
||||
|
||||
| 系统 | 端口 | 健康检查命令 | 健康标志 |
|
||||
|------|------|-----------|---------|
|
||||
| ZhiYi | 7821 | `curl localhost:7821/api/v1/health` | `status: ok` |
|
||||
| bge-embed | 8000 | `curl localhost:8000/health` | exit 0 |
|
||||
| TD Gateway | 8420 | `curl localhost:8420/health` | `status: ok` |
|
||||
| Soulful | 文件 | 读 JSON 文件 | 无异常 |
|
||||
|
||||
## 今日(2026-07-13)检查结果
|
||||
|
||||
| 系统 | 状态 | 记录数 |
|
||||
|------|------|--------|
|
||||
| 织忆 | ✅ 健康 | 4197 memories / 141 episodes / 7146节点 |
|
||||
| TencentDB | ✅ 健康 | L1=1条 / L0=4条(积累中)|
|
||||
| Soulful | ⚠️ 有脏数据已清理 | 画像稀疏 / 心迹仅系统事件 |
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: self-healing-infrastructure
|
||||
description: "自愈基础设施 — 系统监控、配置版本控制、自动回滚、自进化管线、技能管理、自我优化、学习闭环。完整自治体系。牧尘专用。"
|
||||
version: 1.7.0
|
||||
date: 2026-07-12
|
||||
version: 1.8.0
|
||||
date: 2026-07-13
|
||||
author: 小唯 A06
|
||||
tags: [self-healing, monitoring, auto-rollback, evolution, watchdog, config-protection, daemon, backup, recovery]
|
||||
category: devops
|
||||
|
|
@ -20,11 +20,28 @@ trigger_notes: >
|
|||
## 核心子系统(全部已部署)
|
||||
|
||||
- `daemon.py` — 持久意识,每30s轻量tick,每5min深度思考。方案库预置4个,运行时自学习新方案。
|
||||
- **2026-07-13 新增**:deep tick 自动 capture 到 TencentDB(:8420)+ 每 tick 同步 `tddb.latest_persona` 到 `llm_context.json`
|
||||
- `health-watchdog.sh` — 每30min检查磁盘/内存/GPU/进程,超阈值自愈+飞书通知。
|
||||
- **2026-07-13 全部5阶段落地**:时间衰减recall / 遗忘曲线分层 / 画像LLM合成 / 冲突检测 / Consolidation引擎(见 references/five-phase-implementation-20260713.md)
|
||||
- **2026-07-13 新增监控目标**:`tdai-gateway`(:8420,人格记忆层),失败自愈命令 `systemctl --user restart tdai-gateway`
|
||||
- **统一记忆入口**:`~/.hermes/scripts/memory_recall.py` — 同时查织忆(7821) + TencentDB(8420) + Soulful(JSON),支持 pretty/compact 两种输出格式
|
||||
- 调试笔记:`references/tdai-gateway-debug-20260713.md`(token/配置结构/模型/端口修复路径)
|
||||
- daemon.py 修改铁律:`references/daemon-modification-rules.md`(禁止 write_file 覆盖、正确 patch 流程、事故记录)
|
||||
- 三系统记忆全面检查工作流:`references/three-system-memory-check-workflow.md`
|
||||
- 记忆系统对比分析(参考项目):`references/memory-system-comparison.md`
|
||||
- 画像可执行化注入模式(2026-07-13 新发现):`references/system-prompt-snippets-injection.md` — behavior_rules → system_prompt_snippets → prefetch 注入
|
||||
- **bge_embed_server 内存泄漏(2026-07-13 根因+修复)**:
|
||||
- 根因:ONNX SessionOptions 默认开启 `enable_cpu_mem_arena`,arena 分配器会逐渐扩大保留区,4天从1.6GB→5.8GB(RSS 计入保留虚拟内存,非真实泄漏)
|
||||
- 修复:`enable_cpu_mem_arena=False` + `enable_mem_pattern=False`(bge_embed_server.py 第34-35行)
|
||||
- 监控:cron `2891b3304339`「bge内存泄漏监控」每10分钟检查,>2GB自动kill+重启
|
||||
- 脚本:`~/.hermes/scripts/bge_mem_check.sh`
|
||||
- 禁用 arena 后 RSS=真实工作集(1.5-1.6GB),之前的 5.8GB 是保留区+碎片
|
||||
- **Gitea push 超时误判**:push 报 timeout/exit:124 时进程可能已在后台完成,用 `git fetch origin && git log origin/main` 验证远程 HEAD 是否已更新(本地 vs remote `git rev-parse --short HEAD`),避免误认失败而重复 force push 被 Gitea 拒绝("incorrect old value")
|
||||
- 当前远程=local 时 `git push -f` 会报 `incorrect old value`,此时 `git fetch` 后重新 push 即可
|
||||
- **bge_embed_server 内存占用认知**:禁用 arena 后 RSS=真实工作集(1.5-1.6GB),之前的 5.8GB 是 arena 保留区+碎片,非真实泄漏
|
||||
- `self-evolve.py` — 每天凌晨3点自进化:磁盘清理、模型测试扩展(snapshot→execute→verify→rollback)
|
||||
- `memory-system-check.sh` — **每小时自检**:织忆(进程+7821API+stats) / Soulful(文件+cares过期>7天+心迹条数) / TencentDB(进程+8420健康),异常飞书报警,正常静默。cron `7292c83a3720`。
|
||||
- `memory-system-self-upgrade.py` — **每日4点自升**:织忆tombstone增长检测+recall_hit健康度;Soulful清理30天前cares+心迹去重+画像空字段标记;TencentDB总记忆量报告。异常飞书。cron `691709a8b4cf`。
|
||||
- `learner.py` — 每天凌晨5点自学习:事实/技能/元学习三层闭环。
|
||||
- `optimizer.py` — 每周日10点输出优化报告。
|
||||
- `proactive_learning.py` — 主动学习引擎,四维自检+主题管理,每周推送报告。
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
# bge_embed_server 内存泄漏监控脚本
|
||||
# 超过 2GB 自动重启
|
||||
# cron job: 2891b3304339 (every 10m, no_agent)
|
||||
|
||||
PID=$(pgrep -f "bge_embed_server" | head -1)
|
||||
if [ -n "$PID" ]; then
|
||||
RSS=$(ps -o rss= -p "$PID" 2>/dev/null || echo 0)
|
||||
MB=$((RSS / 1024))
|
||||
if [ "$MB" -gt 2048 ]; then
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 内存 ${MB}MB > 2GB,重启" >> ~/.hermes/daemon/bge-restart.log
|
||||
kill "$PID"
|
||||
sleep 2
|
||||
cd ~/.hermes && python3 scripts/bge_embed_server.py &
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] bge_embed 已重启,新PID=$(pgrep -f bge_embed_server | head -1)" >> ~/.hermes/daemon/bge-restart.log
|
||||
fi
|
||||
fi
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
# bge_embed_server 内存泄漏分析 — 2026-07-13
|
||||
|
||||
## 问题现象
|
||||
|
||||
2026-07-13 发现 bge_embed_server.py 进程 RSS=5.8GB(36%内存),4天前正常(~1.6GB),swap 接近打满(1.9/1.9GB)。
|
||||
|
||||
## 根因
|
||||
|
||||
**不是真正的内存泄漏**,是 ONNX Runtime 的 arena 分配器特性:
|
||||
|
||||
```
|
||||
ONNX SessionOptions 默认:
|
||||
enable_cpu_mem_arena = True ← 开启 arena 分配器(预保留虚拟内存)
|
||||
enable_mem_pattern = True ← 开启内存模式优化
|
||||
```
|
||||
|
||||
Arena 分配器会预保留一块虚拟内存区域,随使用逐渐扩大。RSS(Resident Set Size)会把 reserved 算进去,看起来像泄漏。实际工作集只有 ~1.5GB。
|
||||
|
||||
## 修复
|
||||
|
||||
```python
|
||||
# bge_embed_server.py 第31-35行
|
||||
sess_options = ort.SessionOptions()
|
||||
sess_options.intra_op_num_threads = 4
|
||||
sess_options.inter_op_num_threads = 2
|
||||
sess_options.enable_cpu_mem_arena = False # 禁用 arena 分配器
|
||||
sess_options.enable_mem_pattern = False # 禁用内存模式优化
|
||||
session = ort.InferenceSession(os.path.join(MODEL_PATH, "model.onnx"), sess_options=sess_options, providers=["CPUExecutionProvider"])
|
||||
```
|
||||
|
||||
修复后 RSS=真实工作集(1.5-1.6GB),不再无限增长。
|
||||
|
||||
## 操作记录
|
||||
|
||||
| 时间 | 操作 |
|
||||
|------|------|
|
||||
| 17:01 | kill PID 1344(5.8GB旧进程)|
|
||||
| 17:01 | 启动新进程(已带修复) |
|
||||
| 17:05 | 验证 RSS=1.6GB,织忆召回正常 |
|
||||
|
||||
## 监控机制
|
||||
|
||||
- cron `2891b3304339`「bge内存泄漏监控」— 每10分钟检查 >2GB 自动 kill+重启
|
||||
- 脚本:`~/.hermes/scripts/bge_mem_check.sh`
|
||||
- 日志:`~/.hermes/daemon/bge-restart.log`
|
||||
|
||||
## 验证命令
|
||||
|
||||
```bash
|
||||
PID=$(pgrep -f bge_embed_server | head -1)
|
||||
ps -o rss= -p "$PID" | awk '{printf "RSS: %.0f MB\n", $1/1024}'
|
||||
curl -s http://127.0.0.1:7821/health
|
||||
```
|
||||
|
||||
## 教训
|
||||
|
||||
1. **RSS 不是真实内存占用**:禁 arena 前 5.8GB 里有 3-4GB 是 arena 保留区
|
||||
2. **进程重启是最快止血**:不用定位泄漏点,直接 kill+restart
|
||||
3. **预防 > 治疗**:加了 cron 10分钟监控,>2GB 自动重启
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
# daemon.py 修改铁律(2026-07-13 踩坑记录)
|
||||
|
||||
## 绝对禁止
|
||||
|
||||
**禁止用 `write_file` 直接覆盖 `daemon.py`**,会清空整个文件。
|
||||
|
||||
`write_file` 是全量覆盖操作,调用后会丢失所有内容(只有被 git 追踪的文件可以 `git checkout HEAD --` 恢复)。
|
||||
|
||||
## 正确修改顺序
|
||||
|
||||
### 方案 A:patch + old_string 精确定位(推荐)
|
||||
|
||||
```python
|
||||
# patch 的 old_string 必须足够唯一,包含周围上下文
|
||||
patch(mode='replace', new_string=new_code, old_string=unique_context_block)
|
||||
```
|
||||
|
||||
### 方案 B:终端字符串替换(当 patch 精确匹配失效时)
|
||||
|
||||
```bash
|
||||
python3 << 'PYEOF'
|
||||
content = open('/home/muc/.hermes/scripts/daemon.py').read()
|
||||
|
||||
# 替换目标:完整的函数/代码块(包含足够多上下文)
|
||||
old = '''多行精确的
|
||||
old code block'''
|
||||
new = '''多行新的
|
||||
code block'''
|
||||
|
||||
if old in content:
|
||||
content = content.replace(old, new, 1)
|
||||
open('/home/muc/.hermes/scripts/daemon.py', 'w').write(content)
|
||||
print("Fixed!")
|
||||
else:
|
||||
print("Not found, showing context:")
|
||||
idx = content.find('keyword_near_target')
|
||||
print(repr(content[idx:idx+400]))
|
||||
|
||||
import py_compile
|
||||
py_compile.compile('/home/muc/.hermes/scripts/daemon.py', doraise=True)
|
||||
print("Syntax OK")
|
||||
PYEOF
|
||||
```
|
||||
|
||||
## 验证流程
|
||||
|
||||
每次修改后必须验证:
|
||||
|
||||
```bash
|
||||
python3 -m py_compile ~/.hermes/scripts/daemon.py && echo "Syntax OK"
|
||||
```
|
||||
|
||||
语法 OK 后再重启 daemon:
|
||||
|
||||
```bash
|
||||
kill $(ps aux | grep daemon.py | grep -v grep | awk '{print $2}') && sleep 2
|
||||
python3 ~/.hermes/scripts/daemon.py > ~/.hermes/daemon/daemon.log 2>&1 &
|
||||
sleep 6 && ps aux | grep daemon.py | grep -v grep
|
||||
```
|
||||
|
||||
## daemon.py 中 ctx 参数作用域注意
|
||||
|
||||
daemon.py 的 `ctx` 是 `main_loop` 中的局部字典,传递给各个函数时:
|
||||
- 在函数定义中显式接收 `ctx` 参数(不要假设 ctx 在函数内可用)
|
||||
- `tddb_capture(reflection_dict, state, ctx)` ← 需要显式传入
|
||||
|
||||
## 今天的事故记录
|
||||
|
||||
- `write_file` 写入 daemon.py → 文件只剩 2 行(其余 905 行丢失)
|
||||
- 用 `git checkout HEAD -- scripts/daemon.py` 恢复
|
||||
- 之后改用终端字符串替换法(4处替换全部成功)
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
# Gitea push 超时 / rejected 问题处理 — 2026-07-13
|
||||
|
||||
## 常见场景
|
||||
|
||||
### 场景1:push 超时但实际已成功(误判)
|
||||
|
||||
```
|
||||
timeout 30 git push -f origin main
|
||||
# exit:124 (timeout) — 看似失败
|
||||
# 但远程可能已经更新
|
||||
```
|
||||
|
||||
**判断方法**:
|
||||
```bash
|
||||
cd ~/.hermes
|
||||
git fetch origin main
|
||||
git log --oneline origin/main -2 # 远程最新
|
||||
git log --oneline HEAD -2 # 本地最新
|
||||
# 如果 remote == local,已推送成功
|
||||
```
|
||||
|
||||
### 场景2:force push 被 Gitea 拒绝
|
||||
|
||||
```
|
||||
! [remote rejected] main -> main (incorrect old value provided)
|
||||
error: failed to push some refs
|
||||
```
|
||||
|
||||
**原因**:本地 HEAD 和远程 origin/main 的 old object 不匹配(别人先推送了)
|
||||
|
||||
**处理**:
|
||||
```bash
|
||||
git fetch origin main
|
||||
git log --oneline origin/main # 确认远程 HEAD
|
||||
git log --oneline HEAD # 确认本地 HEAD
|
||||
# 如果 remote HEAD == 本地 HEAD,无需再 push
|
||||
# 如果不同,用 git push -f 强制覆盖
|
||||
```
|
||||
|
||||
### 场景3:exit:124 但 remote 已更新(再 push 报 "nothing to commit")
|
||||
|
||||
```
|
||||
# 第一次 push 超时退出码124,但实际成功了
|
||||
# 第二次 push 被拒 "incorrect old value"
|
||||
```
|
||||
|
||||
**根本原因**:`git push -f` 需要先知道远程 ref 的当前 SHA,再推送本地替换。如果第一次 push 在验证 SHA 时就超时了,Gitea 的 lock 还持有中,此时第二次 push 会失败。
|
||||
|
||||
**正确流程**:
|
||||
```bash
|
||||
# 1. 先 fetch 验证远程状态
|
||||
git fetch origin main
|
||||
|
||||
# 2. 比较
|
||||
if [ "$(git rev-parse HEAD)" = "$(git rev-parse origin/main)" ]; then
|
||||
echo "已推送,无需重复操作"
|
||||
else
|
||||
timeout 90 git push -f origin main
|
||||
fi
|
||||
```
|
||||
|
||||
## 预防措施
|
||||
|
||||
1. **大文件推送前先验证连接**:`git ls-remote origin main`(轻量)
|
||||
2. **避免和 mc 仓库同时 force push**(两个仓库共用 Gitea remote 时有竞争)
|
||||
3. **push 前先 fetch** 避免 "incorrect old value"
|
||||
|
||||
## 历史记录
|
||||
|
||||
| 时间 | commit | 情况 |
|
||||
|------|--------|------|
|
||||
| 2026-07-13 17:52 | f950253 fix(bge) | exit:124误判,实际已成功 |
|
||||
| 2026-07-13 16:50 | fb709f0 feat(记忆系统) | exit:124误判,实际已成功 |
|
||||
| 2026-07-13 16:46 | c4938eb docs | 正常推送 |
|
||||
| 2026-07-13 16:41 | c4938eb (mc仓) | force push 覆盖 |
|
||||
|
|
@ -0,0 +1,235 @@
|
|||
# 记忆系统对比分析 — 参考项目 vs 织忆/Soulful/TencentDB
|
||||
|
||||
> 2026-07-13 分析 | 克隆仓库:yantrikdb, yantrikdb-server, agent-memory-skill, codegraph, honcho, memos, multica, agent-second-brain, Foretold
|
||||
|
||||
## 结论速查
|
||||
|
||||
| 功能 | 来源 | 我们差距 | 实施优先级 |
|
||||
|------|------|---------|-----------|
|
||||
| Ebbinghaus遗忘曲线tier分层 | agent-memory-skill | 织忆/Soulful/TencentDB无限增长,无优先级 | P0 本周 |
|
||||
| 冲突检测+对话式消解 | YantrikDB | 三系统各自独立,可能互相矛盾(诚信问题) | P1 下周 |
|
||||
| 多信号评分检索 | YantrikDB | recall只用语义相似度,缺:时间衰减+重要性+检索反馈学习 | P1 下周 |
|
||||
| `think()` Consolidation | YantrikDB/MemOS | daemon deep_tick只有journal_entry,没有模式挖掘/冲突扫描/触发器 | P2 本月 |
|
||||
| Proactive Triggers | YantrikDB | 牵挂是简单cron检查,没有基于记忆模式的主动触发 | P1 下周 |
|
||||
| 双层上下文注入+辩证推理 | Honcho | 我们是单层,Honcho有基础层+辩证层 | P2 本月 |
|
||||
| 画像LLM合成更新 | Honcho | 画像靠手动维护,没有dialectic层自动分析行为日志更新 | P1 下周 |
|
||||
| 会话感知 | YantrikDB | 无会话边界和会话级总结 | P2 本月 |
|
||||
| 自进化(feedback-driven) | MemOS | Soulful心迹/画像/牵挂靠手动,没有feedback驱动自动进化 | P2 本月 |
|
||||
|
||||
---
|
||||
|
||||
## 一、参考项目核心能力
|
||||
|
||||
### YantrikDB(最强借鉴价值)
|
||||
|
||||
**核心架构**:Rust嵌入式引擎,HNSW向量+LSM双层写入(foreground写delta,background合并到cold tier)
|
||||
|
||||
**记忆模型**:
|
||||
- 重要性(imporance 0-1)+情感极性(valence)+领域(domain)+来源+确定性+timestamps
|
||||
- 多信号评分函数:语义相似度 + 时间衰减 + 重要性加权 + 图关系提升 + **检索反馈学习**
|
||||
|
||||
**独特功能**:
|
||||
1. `think()` — Consolidation(合并相似记忆)+ 冲突扫描 + 模式挖掘 + 触发器评估
|
||||
2. **冲突检测+对话式消解**:记忆矛盾时创建冲突段,AI自然地问用户消解
|
||||
3. **Proactive Triggers**:记忆冲突/到期/模式检测 → 自动通知(不是等用户问)
|
||||
4. **会话感知**:`session_start()`/`session_end()`,自动关联会话内记忆,计算总结
|
||||
5. **CRDT多设备同步**:append-only replication log,冲突自由合并
|
||||
|
||||
**API核心**:
|
||||
```
|
||||
record() / recall() / relate() — 核心记忆
|
||||
think() — Consolidation引擎
|
||||
scan_conflicts() / resolve_conflict() — 冲突管理
|
||||
get_pending_triggers() / act_on_trigger() — 主动触发
|
||||
session_start() / session_end() — 会话边界
|
||||
```
|
||||
|
||||
**与我们对比**:
|
||||
- daemon自愈机制(方案库)是YantrikDB没有的独特能力
|
||||
- 织忆的语义检索=只有YantrikDB的"语义相似度"维度
|
||||
- 冲突检测、会话感知、Proactive Triggers 全部缺失
|
||||
|
||||
---
|
||||
|
||||
### MemOS(星尘)
|
||||
|
||||
**三层架构**:
|
||||
- L1 Trace(事件轨迹)
|
||||
- L2 Policy(策略模式)
|
||||
- L3 World Model(世界模型)
|
||||
- crystallized Skills(反馈驱动的技能结晶)
|
||||
|
||||
**独特功能**:
|
||||
1. Feedback-driven self-evolution(反馈驱动的自进化)
|
||||
2. Multi-Cube knowledge base(多知识库隔离+共享)
|
||||
3. 多模态记忆(text/image/tool traces/persona)
|
||||
4. Redis Streams调度(高并发异步操作)
|
||||
|
||||
**与我们对比**:
|
||||
- TencentDB的L0-L3架构 ≈ MemOS的L1-L3,但MemOS有crystallized Skills(反馈→自动生成skill),我们没有
|
||||
|
||||
---
|
||||
|
||||
### Honcho(辩证推理层)
|
||||
|
||||
**核心设计**:双层上下文注入
|
||||
- 基础层(contextCadence刷新):会话摘要 + peer card + 表示
|
||||
- 辩证层(dialecticCadence刷新):LLM推理,按dialecticDepth进行多轮对话(冷启动/热启动/自我审计/调和)
|
||||
|
||||
**工具**:
|
||||
```
|
||||
honcho_profile — 读写peer card
|
||||
honcho_search — 语义搜索
|
||||
honcho_context — 会话上下文
|
||||
honcho_reasoning — LLM合成推理
|
||||
honcho_conclude — 创建/删除结论(= Soulful心迹的LLM自动版)
|
||||
```
|
||||
|
||||
**与我们对比**:
|
||||
- Soulful心迹靠手动写入,Honcho的conclude是自动LLM合成
|
||||
- 织忆prefetch=单层,Honcho=双层(基础+辩证)
|
||||
|
||||
---
|
||||
|
||||
### agent-memory-skill(遗忘曲线)
|
||||
|
||||
**核心**:Ebbinghaus遗忘曲线,线性衰减
|
||||
```
|
||||
relevance = max(0.1, 1.0 - days × 0.015)
|
||||
```
|
||||
|
||||
**Tier分层**:
|
||||
| Tier | 天数 | Relevance |
|
||||
|------|------|-----------|
|
||||
| core | 手动 | 1.0(永不降级) |
|
||||
| active | 0-7 | 1.0-0.90 |
|
||||
| warm | 8-21 | 0.89-0.69 |
|
||||
| cold | 22-60 | 0.68-0.10 |
|
||||
| archive | 60+ | 0.10(地板) |
|
||||
|
||||
**graduated touch**:不是一次回归active,而是一级一级升
|
||||
|
||||
**与我们对比**:
|
||||
- 织忆4197条记忆没有tier/优先级,所有记忆权重相同
|
||||
- Soulful cares没有基于重要性的差异化提醒
|
||||
|
||||
---
|
||||
|
||||
### Hindsight(知识图谱+反射)
|
||||
|
||||
**核心能力**:
|
||||
- `hindsight_retain`:带实体提取的存储
|
||||
- `hindsight_recall`:多策略检索
|
||||
- **`hindsight_reflect`(跨记忆合成)**:其他提供者都没有的能力
|
||||
|
||||
**与我们对比**:
|
||||
-织忆有图谱,但reflect(跨记忆合成=把多条记忆综合成新结论)没有
|
||||
|
||||
---
|
||||
|
||||
### agent-second-brain(Telegram入口)
|
||||
|
||||
**设计**:语音/文字/图片 → Telegram Bot → 自动分类(task/idea/note)+ Obsidian存档 + Todoist任务 + 日报告
|
||||
|
||||
**与我们无关**:入口模式不适用(我们有飞书),但"对话式记忆管理"思路可参考
|
||||
|
||||
---
|
||||
|
||||
## 二、最值得借鉴的5个功能(按优先级)
|
||||
|
||||
### P0 本周:织忆时间衰减评分
|
||||
|
||||
YantrikDB最简单的设计:recent=更重要。
|
||||
|
||||
daemon已有`last_access`字段,只需:
|
||||
1. recall时对近期记忆加权(比如7天内+20%分数)
|
||||
2. tier分层:active/warm/cold/archive按访问时间+重要性
|
||||
3. 验证:看prefetch结果是否改善
|
||||
|
||||
**预期收益**:减少噪音,提升prefetch质量
|
||||
|
||||
### P1 下周:冲突检测
|
||||
|
||||
三个系统各自独立,可能矛盾(织忆说周一,Soulful说周二)→ 诚信问题。
|
||||
|
||||
方案(基于YantrikDB):
|
||||
1. 每次写新记忆前,扫描相似记忆(top_k=5)
|
||||
2. 发现矛盾(同一实体不同结论)→ 写入冲突队列
|
||||
3. 每小时cron检查冲突队列 → 有则飞书提醒牧尘
|
||||
4. 牧尘确认后,删除矛盾记忆
|
||||
|
||||
**预期收益**:彻底解决记忆矛盾导致的信任损伤
|
||||
|
||||
### P1 下周:画像LLM合成更新
|
||||
|
||||
Honcho dialectic层:每次deep tick用LLM分析行为日志,更新peer card。
|
||||
|
||||
我们有journal_entry数据,可以:
|
||||
1. deep tick执行后,把journal_entry传入LLM
|
||||
2. LLM分析"牧尘最近做了什么决定/有什么行为模式变化"
|
||||
3. 自动更新user-profile.json的behavior_rules
|
||||
|
||||
**预期收益**:画像不再靠手动维护,实时跟随牧尘行为更新
|
||||
|
||||
### P1 下周:Proactive触发器
|
||||
|
||||
YantrikDB的主动触发不是等用户问,而是检测到有意义信号就通知。
|
||||
|
||||
对我们:
|
||||
- 冲突检测触发(见上)
|
||||
- cares即将到期触发(已实现,但可增强)
|
||||
- 记忆模式变化触发(织忆新增高频关键词=新关注点→通知牧尘)
|
||||
- daemon方案库匹配失败3次=系统性问题→通知牧尘
|
||||
|
||||
### P2 本月:Consolidation引擎
|
||||
|
||||
类似YantrikDB的`think()`:
|
||||
```python
|
||||
def think():
|
||||
# 1. Consolidation:合并相似记忆
|
||||
merge_similar_memories()
|
||||
# 2. 冲突扫描
|
||||
scan_conflicts()
|
||||
# 3. 模式挖掘(跨领域)
|
||||
mine_cross_domain_patterns()
|
||||
# 4. 触发器评估
|
||||
evaluate_triggers()
|
||||
```
|
||||
|
||||
MemOS的三层架构(L1 Trace/L2 Policy/L3 World Model)也值得参考,TencentDB的L0-L3可以进一步向MemOS靠拢。
|
||||
|
||||
---
|
||||
|
||||
## 三、参考项目架构速查
|
||||
|
||||
```
|
||||
YantrikDB — 多信号评分(HNSW+时间+重要性+图+反馈) + 冲突检测 + Triggers + 会话感知 + CRDT同步
|
||||
MemOS — L1/L2/L3三层 + crystallized Skills + Feedback-driven进化 + Redis Streams
|
||||
Honcho — 双层上下文(基础+辩证) + dialectic推理 + conclusions合成 + peer_card建模
|
||||
agent-memory — Ebbinghaus遗忘曲线 + tier分层 + graduated touch
|
||||
Hindsight — 知识图谱 + 实体提取 + hindsight_reflect跨记忆合成
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、克隆仓库路径
|
||||
|
||||
```
|
||||
/tmp/research/
|
||||
├── yantrikdb/ — CRDT多信号评分 + 冲突检测 + think()
|
||||
├── yantrikdb-server/ — Raft共识 + 集群复制
|
||||
├── agent-memory-skill/ — Ebbinghaus遗忘曲线 + tier分层
|
||||
├── codegraph/ — 代码语义索引(~35% token节省)
|
||||
├── honcho/ — 辩证推理层 + conclusions
|
||||
├── memos/ — L1/L2/L3三层 + crystallized Skills
|
||||
├── multica/ — 多Agent协作
|
||||
└── agent-second-brain/ — Telegram语音入口(参考思路)
|
||||
```
|
||||
|
||||
本地路径(通过Gitea):
|
||||
```
|
||||
http://192.168.123.11:3000/xiaoxue_admin/yantrikdb
|
||||
http://192.168.123.11:3000/xiaoxue_admin/memos
|
||||
http://192.168.123.11:3000/xiaoxue_admin/honcho
|
||||
http://192.168.123.11:3000/xiaoxue_admin/agent-memory-skill
|
||||
```
|
||||
|
|
@ -0,0 +1,124 @@
|
|||
# system_prompt_snippets 注入模式
|
||||
|
||||
> 版本 1.0 | 2026-07-13
|
||||
> 场景:让模型"更聪明"的最快路径——不改模型,只改上下文注入方式
|
||||
|
||||
## 核心发现
|
||||
|
||||
牧尘的对话风格规范("简洁直接"、"结论先行")之前作为元数据存在 `user-profile.json` 的 `communication_style` 字段里,模型收到的是:
|
||||
```json
|
||||
{"communication_style": "简洁直接", "work_patterns": {}}
|
||||
```
|
||||
模型需要自己"理解"这条元数据并应用到输出,实际效果很差。
|
||||
|
||||
改后(2026-07-13),通过 `save_llm_context()` 把 `behavior_rules` 转换为字符串数组,直接作为 system prompt 片断注入:
|
||||
```json
|
||||
{
|
||||
"system_prompt_snippets": [
|
||||
"【回答格式】结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。",
|
||||
"【代码质量】修复后必须自测,不等用户测。遇到stderr先试3种方法,不行再报告障碍。",
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
这些 snippets 通过织忆 prefetch 注入每轮对话,模型直接看到并遵守,**立竿见影**。
|
||||
|
||||
## 技术链路
|
||||
|
||||
```
|
||||
user-profile.json (behavior_rules 字段)
|
||||
↓ daemon.py save_llm_context()
|
||||
llm_context.json (system_prompt_snippets 字段)
|
||||
↓ Hermes 织忆插件 prefetch()
|
||||
每轮对话上下文
|
||||
```
|
||||
|
||||
## 实施步骤
|
||||
|
||||
### Step 1: profile.json 升级到 v2
|
||||
|
||||
```json
|
||||
{
|
||||
"version": 2,
|
||||
"behavior_rules": {
|
||||
"answer_format": "结论先行 → 数据支撑 → 行动建议...",
|
||||
"code_quality": "修复后必须自测...",
|
||||
"cron_creation": "必须指定 model=minimaxai/minimax-m2.7...",
|
||||
"accounting_context": "牧尘做物业会计,用金蝶K3...",
|
||||
"decision_style": "牧尘一句话定方向...",
|
||||
"memory_handling": "回答前先列'我知道什么'+'我不确定什么'...",
|
||||
"error_reporting": "成功报成功,失败报失败并说明原因...",
|
||||
"file_operations": "用 patch 不用 write_file(防覆盖)..."
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 2: save_llm_context 改造
|
||||
|
||||
```python
|
||||
behavior_rules = profile.get("behavior_rules", {})
|
||||
snippet_prefixes = {
|
||||
"answer_format": "【回答格式】",
|
||||
"code_quality": "【代码质量】",
|
||||
"cron_creation": "【cron创建】",
|
||||
"accounting_context":"【会计场景】",
|
||||
"decision_style": "【决策风格】",
|
||||
"memory_handling": "【记忆规范】",
|
||||
"error_reporting": "【错误报告】",
|
||||
"file_operations": "【文件操作】",
|
||||
}
|
||||
snippets = []
|
||||
for key, prefix in snippet_prefixes.items():
|
||||
if behavior_rules.get(key):
|
||||
snippets.append(f"{prefix}{behavior_rules[key]}")
|
||||
|
||||
# llm_ctx 写入
|
||||
llm_ctx["system_prompt_snippets"] = snippets # 替代旧的 profile_summary
|
||||
```
|
||||
|
||||
### Step 3: 验证注入
|
||||
|
||||
```bash
|
||||
# daemon 重启后
|
||||
python3 -c "import json; d=json.load(open('~/.hermes/llm_context.json')); print(len(d['system_prompt_snippets']), 'snippets')"
|
||||
# 应输出 8(或其他实际条数)
|
||||
```
|
||||
|
||||
### Step 4: 检查 prefetch 透传
|
||||
|
||||
织忆插件 prefetch 读取 `llm_context.json`,snippets 通过 prefetch 文本进入对话上下文。
|
||||
验证:`curl -s http://127.0.0.1:7821/api/v1/recall?q=牧尘风格` 应包含 snippets 内容。
|
||||
|
||||
## 关键原则
|
||||
|
||||
1. **rules 要是可执行的句子,不是元数据描述**
|
||||
- ❌ `"communication_style": "简洁直接"` → 模型不知道具体怎么做
|
||||
- ✅ `"【回答格式】结论先行,不废话、不科普、不加补丁式回答"` → 模型直接遵守
|
||||
|
||||
2. **前缀标签帮助模型分类理解**
|
||||
- `【回答格式】` / `【代码质量】` / `【cron创建】` 等标签让模型快速定位相关规范
|
||||
|
||||
3. **向后兼容**
|
||||
- 如果 profile 没有 `behavior_rules`,fallback 到旧格式,避免报错
|
||||
|
||||
4. **daemon.py 修改铁律**
|
||||
- 改 `save_llm_context` 用 patch(精确 old_string),禁止 write_file 覆盖(会清空全文)
|
||||
- 改完必须 `python3 -m py_compile daemon.py` 验证
|
||||
- 重启 daemon 生效
|
||||
|
||||
## 与画像 (Soulful) 的关系
|
||||
|
||||
- Soulful 的 `user-profile.json` 存储原始行为规则(人可读)
|
||||
- `llm_context.json` 的 `system_prompt_snippets` 是注入格式(模型可执行)
|
||||
- `save_llm_context` 是转换层(定期同步,daemon 每 tick 更新)
|
||||
|
||||
## 适用场景
|
||||
|
||||
- 需要模型遵守特定输出格式(牧尘案例:结论先行、不科普)
|
||||
- 需要模型记住任务处理规范(代码质量、cron 创建规范等)
|
||||
- 需要跨 session 保持一致的决策风格
|
||||
|
||||
## 不适用场景
|
||||
|
||||
- 动态/一次性上下文(用 cron prompt 或 one-shot conversation)
|
||||
- 需要实时精确记忆(用织忆 recall)
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
# TencentDB Daemon 集成技术细节(2026-07-13)
|
||||
|
||||
## API 端点一览
|
||||
|
||||
| 端点 | 方法 | 用途 |
|
||||
|------|------|------|
|
||||
| `http://127.0.0.1:8420/health` | GET | 健康检查,返回 `{"status":"ok","uptime":...}` |
|
||||
| `http://127.0.0.1:8420/search/memories` | POST | 语义搜索 L1 人格记忆 |
|
||||
| `http://127.0.0.1:8420/search/conversations` | POST | 搜索 L0 对话记录 |
|
||||
| `http://127.0.0.1:8420/capture` | POST | 写入记忆(需要 session_key) |
|
||||
|
||||
## /search/memories 返回格式(关键坑)
|
||||
|
||||
**返回的是 markdown 字符串,不是 JSON 数组**:
|
||||
|
||||
```
|
||||
Found 1 L1 memory:
|
||||
- 用户(牧尘)是一名会计专家;沟通风格简洁直接...
|
||||
---
|
||||
Total: 1 memories
|
||||
```
|
||||
|
||||
代码中需要:
|
||||
```python
|
||||
if raw and isinstance(raw, str) and "Found" in raw:
|
||||
lines = [l for l in raw.split("\n") if l.strip() and not l.startswith("Found") and not l.startswith("---")]
|
||||
content = lines[1].strip().lstrip("-* []").strip() if len(lines) >= 2 else ""
|
||||
```
|
||||
|
||||
## /capture 参数(实际验证)
|
||||
|
||||
```python
|
||||
payload = json.dumps({
|
||||
"session_key": "daemon-deep-tick",
|
||||
"user_content": "...系统状态...",
|
||||
"assistant_content": summary[:1000],
|
||||
}).encode("utf-8")
|
||||
```
|
||||
|
||||
- 需要 `session_key` + `user_content` + `assistant_content`
|
||||
- 错误信息提示字段名:`Missing required fields: user_content, assistant_content, session_key`
|
||||
- 成功返回:`{"l0_recorded": 1, "scheduler_notified": true}`
|
||||
|
||||
## Reflection 结构(daemon deep tick)
|
||||
|
||||
```python
|
||||
r = reflection_dict.get("reflection", {})
|
||||
summary = r.get("evaluation_previous_goal", "") or r.get("summary", "")
|
||||
next_goal = r.get("next_goal", "")
|
||||
```
|
||||
|
||||
`evaluation_previous_goal` 包含"执行了[solve_auto] ... Verdict: ..."格式的完整描述。
|
||||
|
||||
## llm_context.json 同步机制
|
||||
|
||||
`daemon.py` 有两个写入点:
|
||||
1. `_sync_soulful_to_llm_context(ctx)` → 只写入 `ctx["soulful"]`
|
||||
2. `save_llm_context(ctx, state)` → 构建独立的 `llm_ctx` dict 再写入
|
||||
|
||||
**两处独立**,所以 TencentDB 同步要同时在两处做:
|
||||
- 在 `_sync_soulful_to_llm_context` 里写 `ctx["tddb"]`
|
||||
- 在 `save_llm_context` 里显式 `ctx.get("tddb", {})` 加入输出 dict
|
||||
|
||||
## 三套记忆系统注入链路(最终状态)
|
||||
|
||||
```
|
||||
织忆 (ZhiYi) → prefetch() 自动注入每轮对话
|
||||
Soulful → _sync_soulful_to_llm_context() → llm_context.json → zhiyi插件注入
|
||||
TencentDB → daemon 每 tick 同步 latest_persona → llm_context.json
|
||||
统一入口 → memory_recall.py (CLI 手动查询)
|
||||
```
|
||||
|
||||
## 当前数据量(2026-07-13)
|
||||
|
||||
| 系统 | 数据量 | 健康状态 |
|
||||
|------|--------|---------|
|
||||
| 织忆 | 4197 条记忆,141 episodes | ✅ |
|
||||
| TencentDB L1 | 1 条(积累中)| ⚠️ 刚修好,慢慢积累 |
|
||||
| TencentDB L0 | 4 条 | ⚠️ 积累中 |
|
||||
| Soulful cares | 6 条(已清理)| ✅ |
|
||||
| Soulful 心迹 | 13 条(7条有意义)| ⚠️ 需持续补充 |
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
# 三套记忆系统自检/自升机制
|
||||
> 2026-07-13 建立,cron 运行中
|
||||
|
||||
## 三路注入链路(现状)
|
||||
|
||||
```
|
||||
织忆 (ZhiYi) → prefetch() → 自动注入每轮对话
|
||||
Soulful → daemon _sync_soulful_to_llm_context() → llm_context.json → Hermes织忆插件注入
|
||||
TencentDB → daemon 每 tick 同步 tddb.latest_persona → llm_context.json → Hermes织忆插件注入
|
||||
统一查询CLI → memory_recall.py(支持 pretty/compact)
|
||||
```
|
||||
|
||||
## 自检 cron(每小时整点)
|
||||
|
||||
- **cron ID**: `7292c83a3720`
|
||||
- **脚本**: `memory-system-check.sh`
|
||||
- **检查内容**:
|
||||
- 织忆:进程(zhiyid/bge-embed) + 7821 API health + episodes/memories 数据量
|
||||
- Soulful:文件存在 + cares 过期(>7天) + 心迹条数(<5条告警)
|
||||
- TencentDB:进程(tdai) + 8420 API health
|
||||
- **行为**:异常飞书报警,正常静默
|
||||
|
||||
## 自升 cron(每日 04:00)
|
||||
|
||||
- **cron ID**: `691709a8b4cf`
|
||||
- **脚本**: `memory-system-self-upgrade.py`
|
||||
- **织忆**:tombstone 增长检测(和昨日快照比,增长>50 告警)+ recall_hit <0.6 告警
|
||||
- **Soulful**:清理 30 天前过期 cares + done 状态 >7 天清除 + 心迹按前 60 字去重 + 画像空字段报告
|
||||
- **TencentDB**:总记忆量报告(`search /memories` 返回 `total` 字段)
|
||||
- **行为**:异常飞书,正常静默
|
||||
|
||||
## TencentDB API 关键参数
|
||||
|
||||
```python
|
||||
# capture(daemon deep tick 自动调用)
|
||||
{"session_key": str, "user_content": str, "assistant_content": str} # 必填
|
||||
|
||||
# search(总记忆量查询)
|
||||
{"query": str, "top_k": int} # 返回 {"results": ..., "total": N}
|
||||
```
|
||||
|
||||
## Soulful 脏数据清理规则
|
||||
|
||||
- cares 过期 >30 天:删除
|
||||
- cares 状态 done 且 due_date >7 天前:删除
|
||||
- cares 完全相同内容(按前 60 字):保留 1 条
|
||||
- 心迹相同内容(按前 60 字):去重
|
||||
|
||||
## daemon.py 修改安全规则
|
||||
|
||||
1. **daemon.py 是 900+ 行大文件**,不能用 write_file(会覆盖整个文件)
|
||||
2. **正确做法**:Python 字符串替换通过 terminal 执行,或 patch 加 old_string
|
||||
3. **验证顺序**:语法检查 → kill 旧进程 → 重启 → 确认 PID 变化 → 检查新 log 有正常 tick
|
||||
4. **遇到语法错误**:立即 `git checkout HEAD -- scripts/daemon.py` 恢复,再重新修改
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
---
|
||||
name: memory-system-landscape
|
||||
description: AI/Agent 记忆系统竞品调研全流程 — 克隆分析、架构对比表、关键设计模式提炼。为织忆 soulful 记忆层和 zhiyi 参考系统选型提供依据。
|
||||
version: 1.0.0
|
||||
date: 2026-07-13
|
||||
tags: [memory-systems, architecture-research, agent-memory, competitive-analysis]
|
||||
牧尘_usage_notes: >
|
||||
调研新领域系统(如记忆/推理/规划框架)时使用此 skill。
|
||||
输出:克隆 + 对比分析表 + 设计模式总结 + references/ 子目录存储原始 notes。
|
||||
对应仓颉(cangjie)知识蒸馏可作为后续:仓颉→知识蒸馏→skill 转化。
|
||||
---
|
||||
|
||||
# Memory System Landscape — AI记忆系统竞品调研
|
||||
|
||||
> 版本 1.0 | 2026-07-13 | 初始版本
|
||||
|
||||
## 何时使用
|
||||
|
||||
- 需要调研一类系统的竞品/参考实现(如记忆、推理、规划、多代理协作)
|
||||
- 为织忆 soulful 记忆层或 zhiyi 参考系统选型提供架构依据
|
||||
- 需要克隆 + 分析多个仓库并输出结构化对比
|
||||
|
||||
## 调研流程
|
||||
|
||||
### Step 1: 并发克隆(避免串行延迟)
|
||||
|
||||
```bash
|
||||
# 预先 mkdir,统一 workdir
|
||||
mkdir -p /tmp/research
|
||||
|
||||
# 并发克隆(每批 3-4 个,避免超时)
|
||||
git clone http://SERVER/repo1.git repo1 2>&1 &
|
||||
git clone http://SERVER/repo2.git repo2 2>&1 &
|
||||
git clone http://SERVER/repo3.git repo3 2>&1 &
|
||||
wait
|
||||
|
||||
# 第二批
|
||||
git clone http://SERVER/repo4.git repo4 2>&1 &
|
||||
git clone http://SERVER/repo5.git repo5 2>&1 &
|
||||
...
|
||||
```
|
||||
|
||||
**注意**:Foretold 类需要 SSH 认证的仓库,用 `git@SERVER:path` 格式,失败则记录并跳过。
|
||||
|
||||
### Step 2: 快速扫描 README(并发读取)
|
||||
|
||||
同时读取所有克隆仓库的 `README.md`,提取:
|
||||
- 项目定位和核心理念
|
||||
- 技术栈和架构描述
|
||||
- 关键功能列表
|
||||
- 部署方式和依赖
|
||||
|
||||
### Step 3: 源码结构探索
|
||||
|
||||
对关键仓库读取引擎核心源码:
|
||||
- Rust: 找 `src/lib.rs` 模块入口 + 关键子模块
|
||||
- Python: 找 `src/` 主目录文件
|
||||
- Go: 找 `server/` + `internal/`
|
||||
- TypeScript/Node: 找 `src/db/` + `src/graph/`
|
||||
|
||||
### Step 4: 输出对比分析表
|
||||
|
||||
格式:
|
||||
|
||||
| 项目名 | 核心架构 | 存储结构 | 检索机制 | 独特功能 | 可借鉴点 |
|
||||
|--------|---------|---------|---------|---------|---------|
|
||||
| **xxx** | 架构描述 | SQLite/PG/文件 | 检索方法 | 特色功能 | 对本项目的启发 |
|
||||
|
||||
### Step 5: 关键设计模式总结
|
||||
|
||||
归纳 4-5 个核心模式,每个包含:
|
||||
- 哪些系统用了
|
||||
- 各自实现差异
|
||||
- 可借鉴点
|
||||
|
||||
## 已知参考记忆系统(2026-07-13 整理)
|
||||
|
||||
已克隆仓库在 `/tmp/research/`:
|
||||
|
||||
| 仓库 | 语言 | 架构亮点 |
|
||||
|------|------|---------|
|
||||
| yantrikdb | Rust | 5索引认知引擎(HNSW+Graph+Temporal+DecayHeap+KV),双 LSM tier,CRDT 同步,冲突检测,主动触发器 |
|
||||
| yantrikdb-server | Rust+Go | Raft 集群,RYW 保证,混沌测试 |
|
||||
| agent-memory-skill | Python 单文件 | Ebbinghaus 线性遗忘,零依赖,五层 tier |
|
||||
| codegraph | TypeScript | tree-sitter AST 代码图谱,19语言,70%工具调用减少 |
|
||||
| honcho | Python FastAPI | reasoning-first 记忆,peer-centric,多层推理(deriver/dreamer) |
|
||||
| memos | Python+TypeScript | L1/L2/L3 分层自进化,Redis Streams 调度,多代理共享 |
|
||||
| multica | Go+Next.js | agent 生命周期管理,Squad 路由,skill 复用 |
|
||||
| agent-second-brain | Python | Telegram 语音优先,vault 健康评分,每日报告 |
|
||||
| Foretold | ❌ SSH 认证不可达 | — |
|
||||
|
||||
## 关键设计模式(可迁移到织忆)
|
||||
|
||||
### 模式1:遗忘曲线
|
||||
|
||||
| 系统 | 实现 |
|
||||
|------|------|
|
||||
| yantrikdb | decay_heap 非线性 + `relevance = importance × decay(t)` |
|
||||
| agent-memory-skill | 线性 `max(0.1, 1.0 - days × 0.015)` |
|
||||
| honcho | 人格特征随时间推导 |
|
||||
| memos | skill tier evolution |
|
||||
|
||||
**织忆参考**:agent-memory-skill 的线性模型最简洁可移植;yantrikdb 的多信号 decay 更精确但复杂。
|
||||
|
||||
### 模式2:检索评分多信号
|
||||
|
||||
- yantrikdb: 语义相似度 × 时间衰减 × 重要性权重 × 图连通性 × 检索反馈
|
||||
- honcho: reasoning-first(提取结论而非匹配块)
|
||||
|
||||
**织忆参考**:多信号评分框架可直接借鉴;peer-centric 模型适合画像层。
|
||||
|
||||
### 模式3:存储架构
|
||||
|
||||
- 嵌入式单文件: yantrikdb (SQLite)
|
||||
- 客户端服务器: honcho (PostgreSQL+pgvector)、memos (Redis+Neo4j)
|
||||
- 文件系统驱动: agent-memory-skill(零依赖,YAML frontmatter)
|
||||
- 混合: codegraph (SQLite + FTS5)
|
||||
|
||||
**织忆参考**:SQLite 单文件适合嵌入式;PostgreSQL 适合服务端。
|
||||
|
||||
### 模式4:多代理协作
|
||||
|
||||
- multica: Squad leader delegation(稳定路由层)
|
||||
- memos: multi-agent memory sharing by user_id
|
||||
- yantrikdb: V5 roadmap(multi-agent shared memory)
|
||||
|
||||
**织忆参考**:memos 的 user_id 共享模型是较好参考。
|
||||
|
||||
### 模式5:后台推理
|
||||
|
||||
- honcho: deriver worker(异步提取结论)+ dreamer + dialectic(多级推理深度)
|
||||
- memos: MemScheduler(Redis Streams 优先级调度)
|
||||
|
||||
**织忆参考**:分离式 worker 架构(主进程不阻塞)是高并发必备。
|
||||
|
||||
## 竞品调研标准输出结构
|
||||
|
||||
```
|
||||
## {系统名}对比分析表
|
||||
|
||||
### 对比分析表
|
||||
|
||||
| 项目名 | 核心架构 | 存储结构 | 检索机制 | 独特功能 | 可借鉴点 |
|
||||
|--------|---------|---------|---------|---------|---------|
|
||||
|
||||
### 关键设计模式总结
|
||||
|
||||
**模式N: 名称**
|
||||
- 哪些系统用到
|
||||
- 各自实现差异
|
||||
- 织忆可借鉴点
|
||||
```
|
||||
|
||||
## references/ 目录结构
|
||||
|
||||
每次调研后,将原始 notes 保存到:
|
||||
|
||||
```
|
||||
references/
|
||||
├── {date}-yantrikdb-notes.md # 原始架构笔记
|
||||
├── {date}-honcho-notes.md
|
||||
├── {date}-memos-notes.md
|
||||
├── {date}-codegraph-notes.md
|
||||
└── {date}-memory-system-patterns.md # 归纳的设计模式
|
||||
```
|
||||
|
||||
## 后续知识转化
|
||||
|
||||
调研产出 + 仓颉(cangjie)知识蒸馏 = 可转化为织忆 skill:
|
||||
- 仓颉方法:`python3 ~/.hermes/scripts/cangjie_distill.py distill <notes> <title>`
|
||||
- 目标目录:`~/.hermes/cangjie-skills/<主题名>/`
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
# Memory System Landscape — 调研笔记 2026-07-13
|
||||
|
||||
## 克隆结果
|
||||
|
||||
- 8/9 成功(Foretold SSH 认证失败)
|
||||
- 存储:`/tmp/research/`
|
||||
|
||||
## yantrikdb(最成熟)
|
||||
|
||||
**源码结构**(Rust, crates/yantrikdb-core/src/):
|
||||
- `lib.rs`:24个认知子模块 re-export(cognition/knowledge/graph/vector/...)
|
||||
- `cognition/`:personality_bias, belief_network, causal, analogy, schema_induction, world_model...
|
||||
- `knowledge/graph_index.rs`:实体关系图
|
||||
- `vector/hnsw.rs`:HNSW 向量索引
|
||||
|
||||
**核心API**:`record()`/`recall()`/`relate()` — 非 SQL,认知操作
|
||||
**写路径**:双 LSM tier(mutable delta + immutable HNSW cold tier),ArcSwap 无锁读
|
||||
**冲突检测**:矛盾段 + 对话式消解(strategy: ask_user)
|
||||
**触发器**:主动 surfacing(冲突/截止日/模式/高重要性即将衰减)
|
||||
**程序性记忆**:`record_procedural()`/`surface_procedural()`/`reinforce_procedural()`
|
||||
**集群**:openraft Raft,RYW 通过 `recall_with_seq(min_seq=log_idx)` 保证
|
||||
|
||||
**mcp server**:`yantrikdb-mcp` pip 包,15工具(MCP协议)
|
||||
**benchmark**:500记忆时文件法19K token,yantrikdb 72 token(99.3%节省),精度77%
|
||||
|
||||
## yantrikdb-server(分布式层)
|
||||
|
||||
- HTTP+二进制协议,openraft Raft 集群(2 voter + 1 witness)
|
||||
- Per-tenant quota + Prometheus metrics + AES-256-GCM 加密
|
||||
- 1178 核心测试 + 混沌测试(leader kill/网络分区/kill-9)
|
||||
- 5个运维手册 + watchdog 自动重启
|
||||
|
||||
## agent-memory-skill(最简洁)
|
||||
|
||||
- 纯 Python 单文件 ~800行,零依赖
|
||||
- Ebbinghaus 线性衰减:`relevance = max(0.1, 1.0 - days × 0.015)`
|
||||
- 五层 tier:core/active/warm/cold/archive
|
||||
- graduated touch(逐步提升 tier,非一次性刷新)
|
||||
- creative 模式(随机召回冷/归档层模拟灵感)
|
||||
- vault-health 评分系统(孤儿文件/断链/MOC)
|
||||
- 与 Claude Code 集成:SKILL.md + cron decay
|
||||
|
||||
## codegraph(代码专用)
|
||||
|
||||
**核心**:`src/graph/traversal.ts` + `src/graph/queries.ts`
|
||||
**存储**:SQLite(nodes 表含 kind/name/qualified_name/signature/decorators,edges 表含 source/target/kind)
|
||||
**索引**:tree-sitter AST 解析,19+语言
|
||||
**MCP工具**:codegraph_search/explore/context/callers/callees/impact/node/files/status
|
||||
**benchmark**:VS Code 架构问答 — 35%成本降低,72%工具调用减少
|
||||
**框架感知**:14种框架(Django/Flask/FastAPI/Express/NestJS/Laravel/Rails/Spring/Gin...)
|
||||
**auto-sync**:FSEvents/inotify 文件监控,增量同步
|
||||
|
||||
## honcho(推理型记忆)
|
||||
|
||||
**核心**:`src/deriver/deriver.py`(后台 worker)+ `src/dialectic/chat.py`(多级推理)
|
||||
**存储**:PostgreSQL + pgvector,Collection(observer,observed)向量文档
|
||||
**推理架构**:
|
||||
- deriver:异步生成 representation/summary/peer_card
|
||||
- dreamer:梦境处理
|
||||
- dialectic:chat 端点,多级推理深度(minimal/low/medium/high/max)
|
||||
|
||||
**数据模型**:Workspace → Peer(人/AI) → Session ↔ Message
|
||||
**peer-centric**:self-representation(observer==observed)和 cross-peer modeling(peer X's understanding of Y)
|
||||
|
||||
**key insight**:不是匹配 chunk,是提取 deductive/inductive conclusions
|
||||
|
||||
## memos(MemOS 2.0)
|
||||
|
||||
**核心**:`apps/memos-local-plugin/core/memory/l{1,2,3}/`
|
||||
- L1(trace):`associate.ts` `induce.ts` `gain.ts`
|
||||
- L2(policy):`merge.ts` `cluster.ts` `l3.ts`
|
||||
- L3(world model):`abstract.ts` `signature.ts`
|
||||
|
||||
**存储**:MemScheduler(Redis Streams 优先级调度)+ SQLite 本地 + Neo4j 图 + 向量
|
||||
**检索**:FTS5 + 向量混合搜索
|
||||
**工具**:tool memory for agent planning,memory feedback 自然语言校正
|
||||
|
||||
**key insight**:tiered skill evolution(记忆会随反馈进化 tier)
|
||||
|
||||
## multica(多代理管理层)
|
||||
|
||||
**核心**:`server/cmd/` + `server/internal/`(Go)
|
||||
**存储**:PostgreSQL(agents/issues/workspaces)+ pgvector
|
||||
**生命周期**:enqueue → claim → start → complete/fail(autonomous execution)
|
||||
**Squad 路由**:leader agent 决定谁处理,路由稳定
|
||||
**Skill 复用**:每 solution 成为 team-wide reusable skill
|
||||
**Autopilot**:cron/webhook 触发器,自动创建 issue 并路由
|
||||
|
||||
## agent-second-brain(产品级集成)
|
||||
|
||||
**架构**:Telegram → Deepgram 语音转录 → Claude Code → Todoist + Obsidian Vault
|
||||
**vault 结构**:daily/goals/business(crm/network)/projects/thoughts(ideas/learnings/reflections)
|
||||
**技能**:dbrain-processor/agent-memory/vault-health/graph-builder/todoist-ai
|
||||
**每日报告**:9pm 推送(今日发生/完成/待处理)
|
||||
**vault-health**:100分评分,孤儿文件检测,断链修复,MOC 生成
|
||||
|
||||
## 归纳设计模式
|
||||
|
||||
### 模式A:遗忘机制(6/8系统)
|
||||
1. yantrikdb:decay_heap + 重要性权重
|
||||
2. agent-memory-skill:线性衰减(最简洁)
|
||||
3. memos:skill tier evolution
|
||||
4. honcho:人格推导
|
||||
5. yantrikdb-server:decay trigger
|
||||
6. agent-second-brain:继承 agent-memory-skill
|
||||
|
||||
### 模式B:多信号评分检索(仅 yantrikdb 完整)
|
||||
- 语义相似度 × 时间衰减 × 重要性权重 × 图连通性 × 检索反馈
|
||||
|
||||
### 模式C:存储架构
|
||||
- 嵌入式:yantrikdb(SQLite 单文件)
|
||||
- 服务端:honcho(PG)、memos(Redis+Neo4j)、multica(PG)
|
||||
- 文件系统:agent-memory-skill(零依赖,Markdown+YAML)
|
||||
|
||||
### 模式D:多代理协作
|
||||
- multica:Squad leader 委托
|
||||
- memos:按 user_id 共享
|
||||
- yantrikdb:V5 roadmap
|
||||
|
||||
### 模式E:后台推理
|
||||
- honcho:deriver + dreamer + dialectic 三层
|
||||
- memos:MemScheduler(Redis Streams)
|
||||
|
||||
## 织忆可借鉴优先级
|
||||
|
||||
1. **高优先级**:agent-memory-skill 线性衰减模型(简洁可移植)
|
||||
2. **高优先级**:honcho peer-centric 模型(适合画像层)
|
||||
3. **中优先级**:memos Redis Streams 调度(高并发场景)
|
||||
4. **中优先级**:codegraph impact analysis(图推理场景)
|
||||
5. **低优先级**:yantrikdb 多信号评分(复杂度高)
|
||||
|
|
@ -98,8 +98,40 @@ python3 ~/.hermes/scripts/stock_paper.py report # 生成报告
|
|||
|
||||
## Key Findings (2026-07-12 验证)
|
||||
|
||||
| 策略 | 适用场景 | 效果 |
|
||||
|------|---------|------|
|
||||
> 贵州茅台(600519):α=+6.05%,胜率22.2%,最大回撤26.2%,27次交易
|
||||
> 五粮液(000858):α=+39.2%(历史数据充足时更高)
|
||||
|
||||
## 纸上模拟交易(2026-07-13 实操教训)
|
||||
|
||||
**标准流程**:等金叉 → 模拟买入 → 持仓跟踪 → 死叉 → 模拟卖出 → 统计收益
|
||||
|
||||
**操作命令**:
|
||||
```bash
|
||||
python3 ~/.hermes/scripts/stock_paper.py status # 查看账户状态
|
||||
python3 ~/.hermes/scripts/stock_paper.py buy <价格> <代码> <名称> # 模拟买入
|
||||
python3 ~/.hermes/scripts/stock_paper.py sell <价格> # 模拟卖出
|
||||
python3 ~/.hermes/scripts/stock_paper.py report # 生成报告
|
||||
```
|
||||
|
||||
**持仓文件**:`~/.hermes/stock_backtest/paper_trades_{code}.json`
|
||||
|
||||
**已知 bug(2026-07-13)**:`buy` 命令输出显示的股票名称和文件 stock 字段可能不一致(display bug,数据结构正确)。买入后立即检查文件:
|
||||
```bash
|
||||
cat ~/.hermes/stock_backtest/paper_trades_{code}.json | python3 -c "
|
||||
import sys,json; d=json.load(sys.stdin)
|
||||
print('股票:', d['stock'], '| 持仓:', d['positions'])
|
||||
"
|
||||
```
|
||||
|
||||
**实时信号扫描**:
|
||||
```bash
|
||||
python3 ~/.hermes/scripts/stock_portfolio.py # 扫描7只股票MA20状态,输出金叉/死叉
|
||||
```
|
||||
|
||||
**金叉 = 买入**:价格从下穿越 MA20(pct_above_ma20 从负→正)
|
||||
**死叉 = 卖出**:价格从上穿越 MA20(pct_above_ma20 从正→负)
|
||||
|
||||
**当前持仓(2026-07-13)**:平安银行(000001),9487股,成本10.54,等待死叉卖出信号。
|
||||
| MA20突破 | 下跌/震荡股 | α=+4%~+40% ✅ |
|
||||
| MACD | 震荡市 | 小幅超额 |
|
||||
| 买入持有 | 强势趋势股 | 策略反而有害 ❌ |
|
||||
|
|
@ -237,13 +269,14 @@ Also add `--compressed` flag — without it, ifzq API returns empty from that di
|
|||
| `c293eead6688` | 每日组合信号 | 工作日09:00 | 7只股票MA20扫描 |
|
||||
| `f3619a71aebb` | 每日股票新闻 | 工作日08:00 | 宏观+原油+大盘摘要 |
|
||||
|
||||
**当前持仓(2026-07-13)**:平安银行(000001),9487股,成本10.54,等待死叉卖出信号。
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ✅ **贵州茅台MA20回测**(2026-07-12): α=+6.05%,胜率22.2%,最大回撤26.2% → 结果已存档 `~/.hermes/stock_backtest/ma20_result_600519.json`
|
||||
2. ✅ **MA20回测置信度集成**(2026-07-12): `stock_portfolio.py` 金叉推送时自动读取回测结果,附历史胜率/α/最大回撤
|
||||
3. ✅ **OpenClaw MCP 集成**(2026-07-12): Hermes gateway 已接入 OpenClaw MCP,9工具可用(conversations_list/messages_send等),配置持久化到 `~/.hermes/config.yaml`
|
||||
4. ⬜ **五粮液MA20回测**:当前空仓,回测数据应提前存档至 `~/.hermes/stock_backtest/ma20_result_000858.json`
|
||||
5. 等MA20死叉 → `python3 stock_paper.py sell <价格>` 模拟卖出
|
||||
6. **真实交易**:牧尘确认风控参数后启动(最大回撤/仓位/禁止品种由牧尘定)
|
||||
7. **扩大股票池**:泸州老窖(000568)、洋河股份(002304) 也已满足逆向机会条件,可加入每日扫描并做MA20回测
|
||||
8. **TencentDB Agent Memory 深入研究**:8603 stars,4层渐进管道+符号化压缩,值得研究其与织忆的融合可能
|
||||
4. ✅ **平安银行模拟买入**(2026-07-13): MA20金叉触发,买入价10.54,9487股,持仓中
|
||||
5. ⬜ **等MA20死叉 → 模拟卖出 → 计算收益**
|
||||
6. **扩大股票池**:泸州老窖(000568)、洋河股份(002304) 也已满足逆向机会条件,可加入每日扫描并做MA20回测
|
||||
7. **真实交易**:牧尘确认风控参数后启动(最大回撤/仓位/禁止品种由牧尘定)
|
||||
|
|
@ -2,8 +2,7 @@
|
|||
tags: [soulful, memory-weave, 织忆, 情感层]
|
||||
name: soulful-framework
|
||||
description: 织忆 Soulful 情感层框架 — 心迹/画像/牵挂/感知四库及数据流向设计。含代码结构、最佳实践、数据流规范。
|
||||
version: 1.3.0
|
||||
author: 小唯
|
||||
version: 1.5.0
|
||||
date: 2026-07-13
|
||||
readiness_status: available
|
||||
---
|
||||
|
|
@ -18,7 +17,81 @@ readiness_status: available
|
|||
due = item.get("follow_up_date") or item.get("due") or "null"
|
||||
```
|
||||
|
||||
### 脏数据检查项
|
||||
### 画像字段说明(user-profile.json v2)
|
||||
|
||||
v1 → v2 升级(2026-07-13):新增 `behavior_rules` 字段(8条可执行行为规范),
|
||||
通过 `daemon.py` 的 `save_llm_context()` 转换为 `system_prompt_snippets` 注入 `llm_context.json`,
|
||||
再由织忆 prefetch 带到每轮对话。
|
||||
|
||||
behavior_rules 8 条(2026-07-13):
|
||||
- `answer_format` — 结论先行,不废话不科普
|
||||
- `code_quality` — 修复后自测,不等用户测
|
||||
- `cron_creation` — 指定 model=minimaxai/minimax-m2.7, provider=newapi-local
|
||||
- `accounting_context` — 金蝶K3凭证铁律
|
||||
- `decision_style` — 牧尘一句话定方向
|
||||
- `memory_handling` — 先列知道/不确定,拉现状>假设
|
||||
- `error_reporting` — 成功报成功,失败报失败,不编造
|
||||
- `file_operations` — 用 patch 不用 write_file
|
||||
|
||||
注入链路详见 `self-healing-infrastructure` skill 的 `references/system-prompt-snippets-injection.md`。
|
||||
|
||||
## 画像v2可执行化完整实现(2026-07-13)
|
||||
|
||||
### 链路全貌
|
||||
```
|
||||
user-profile.json (behavior_rules v2, 8条)
|
||||
→ daemon.py save_llm_context()
|
||||
→ llm_context.json (system_prompt_snippets[], 8条)
|
||||
→ 织忆 prefetch() 注入每轮对话
|
||||
→ 模型直接看到并遵守(无需自己理解元数据)
|
||||
```
|
||||
|
||||
### 验证命令
|
||||
```bash
|
||||
python3 -c "import json; d=json.load(open('~/.hermes/llm_context.json')); print(len(d.get('system_prompt_snippets',[])), 'snippets')"
|
||||
# 输出 8 表示注入成功
|
||||
```
|
||||
|
||||
### 8条可执行规则
|
||||
1. 【回答格式】结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。
|
||||
2. 【代码质量】修复后必须自测,不等用户测。遇到stderr先试3种方法,不行再报告障碍。
|
||||
3. 【cron创建】必须指定 model=minimaxai/minimax-m2.7, provider=newapi-local,prompt要能独立运行不需追问。
|
||||
4. 【会计场景】牧尘做物业会计,用金蝶K3。凭证处理铁律:摘要精准、科目干净、金额合理、平衡校验、日期升序。过账=0.0必须追加。
|
||||
5. 【决策风格】牧尘一句话定方向,不讨论不纠结,直接行动。收到指令后先判断类型:简单任务直接执行,复杂任务才规划。
|
||||
6. 【记忆规范】回答前先列'我知道什么'+'我不确定什么'。拉现状>假设。存记忆时用完整句子不过度简化。
|
||||
7. 【错误报告】成功报成功,失败报失败并说明原因。不确定时说'我不确定',不编造答案。遇到执行问题先试3种方法再放弃。
|
||||
8. 【文件操作】用 patch 不用 write_file(防覆盖)。改完必须验证语法正确。不修一个问题带来更多问题。
|
||||
|
||||
### 改前 vs 改后
|
||||
**旧模式**(元数据,模型需自己推导):
|
||||
```json
|
||||
"profile_summary": {"communication_style": "简洁直接", "work_patterns": {}}
|
||||
```
|
||||
**新模式**(直接可执行,模型无需推导):
|
||||
```json
|
||||
"system_prompt_snippets": ["【回答格式】结论先行...", "【代码质量】修复后必须自测..."]
|
||||
```
|
||||
|
||||
### daemon.py save_llm_context 关键代码片段
|
||||
behavior_rules = profile.get("behavior_rules", {})
|
||||
snippet_prefixes = {
|
||||
"answer_format": "【回答格式】",
|
||||
"code_quality": "【代码质量】",
|
||||
"cron_creation": "【cron创建】",
|
||||
"accounting_context":"【会计场景】",
|
||||
"decision_style": "【决策风格】",
|
||||
"memory_handling": "【记忆规范】",
|
||||
"error_reporting": "【错误报告】",
|
||||
"file_operations": "【文件操作】",
|
||||
}
|
||||
snippets = [f"{prefix}{behavior_rules[key]}" for key, prefix in snippet_prefixes.items() if behavior_rules.get(key)]
|
||||
# 写入: llm_ctx["system_prompt_snippets"] = snippets
|
||||
|
||||
### 教训
|
||||
让模型"更聪明"的最快路径:不改模型,只改上下文注入方式。
|
||||
把行为规范变成可直接执行的文本片段,模型无需自己从元数据推导。
|
||||
|
||||
## 脏数据检查项
|
||||
- `done` 状态残留(应删除)
|
||||
- 已过期 `follow_up_date` 的 pending 项(2026-07-10 已有3条)
|
||||
- 完全重复的 `content`(去重,防止同一牵挂重复堆积)
|
||||
|
|
@ -35,9 +108,36 @@ d['cares'] = unique
|
|||
```
|
||||
**结果**:9条 → 6条,memory_recall.py 输出正常
|
||||
|
||||
### 心迹质量(2026-07-13 实测)
|
||||
### 心迹质量(2026-07-13 实测 + 修复)
|
||||
当前 6 条心迹全为系统事件(备份/内存重启),0 条人类内容。
|
||||
需要在 daemon/journal 机制中增加主动心迹写入点(有意义时刻记录)。
|
||||
**已修复**:追加 7 条有意义时刻(first_contact / milestone / 每日复盘上线 / 心迹补充)
|
||||
|
||||
当前 13 条心迹分布:
|
||||
- 系统事件(备份、内存、Gateway修复):3 条
|
||||
- 有意义时刻(第一次Soulful对话、记住牧尘风格、每日复盘上线、心迹补充):4 条
|
||||
- 技术里程碑(记忆系统全面检查、织忆代码审计、三套记忆系统自检机制建立):6 条
|
||||
|
||||
### 画像空字段(2026-07-13 实测)
|
||||
6 个字段全空:`work_patterns / preferences / habits / important_people / current_goals / recent_frustrations`
|
||||
当前只记录了 `communication_style: 简洁直接`,积累中不自填充。
|
||||
|
||||
### 画像LLM自动合成(2026-07-13 新增)
|
||||
`daemon.py` 新增 `update_profile_from_journal()` 函数:
|
||||
- 读取最近10条 journal(排除 startup 类型)
|
||||
- 用 LLM 分析牧尘行为模式,输出需更新的画像字段 JSON
|
||||
- 只更新非空、新值,与旧值不同才写入
|
||||
- 写入后调用 `journal_entry("profile_update", ...)` 记录
|
||||
- 调用方式:`update_profile_from_journal(journal_path, profile_path, model?)`
|
||||
|
||||
### 冲突检测(2026-07-13 新增)
|
||||
`daemon.py` 新增两个函数:
|
||||
- `_write_conflicts_to_queue(conflicts)` — 写入 `~/.hermes/soulful/conflicts-queue.json`
|
||||
- `detect_memory_conflicts(journal_path, zhiyi_token)` — 用 LLM 对比 journal 行为与织忆长期记忆,检测直接矛盾,有冲突则写入队列并返回冲突列表
|
||||
- 返回格式:`[{id, entry, conflict_with, description, detected_at, status}]`
|
||||
|
||||
调用方式:`detect_memory_conflicts(journal_path, zhiyi_token)`
|
||||
|
||||
冲突队列 Schema 见 `references/conflict-queue.md`
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,49 @@
|
|||
# conflicts-queue.json Schema
|
||||
|
||||
冲突队列文件路径:`~/.hermes/soulful/conflicts-queue.json`
|
||||
|
||||
## Schema
|
||||
```json
|
||||
{
|
||||
"id": "conflict_20260713143052", // 冲突唯一ID,时间戳后缀
|
||||
"entry": "哪条journal行为", // A组(最近行为)来源
|
||||
"conflict_with": "哪条织忆记忆矛盾", // B组(长期记忆)来源
|
||||
"description": "矛盾描述", // LLM生成的矛盾说明
|
||||
"detected_at": "2026-07-13T14:30:52", // 检测时间
|
||||
"status": "pending" // pending | resolved | dismissed
|
||||
}
|
||||
```
|
||||
|
||||
## 冲突生命周期
|
||||
|
||||
1. **pending** — `detect_memory_conflicts()` 检测到并存入
|
||||
2. **resolved** — 人工确认后由外部逻辑更新
|
||||
3. **dismissed** — 确认为非真实矛盾后由外部逻辑更新
|
||||
|
||||
## 写入保证
|
||||
|
||||
- `_write_conflicts_to_queue()` 写入前检查 id 去重,不会重复追加同一冲突
|
||||
- 新冲突追加到队列尾部,保持 `pending` 状态
|
||||
|
||||
## 调用链路
|
||||
|
||||
```
|
||||
detect_memory_conflicts(journal_path, zhiyi_token)
|
||||
→ 读取 journal + 织忆 recall
|
||||
→ LLM 判断是否有直接矛盾
|
||||
→ 有 → _write_conflicts_to_queue([冲突])
|
||||
→ 返回冲突列表
|
||||
```
|
||||
|
||||
## 使用示例
|
||||
|
||||
```python
|
||||
from daemon import detect_memory_conflicts, _write_conflicts_to_queue
|
||||
|
||||
zhiyi_token = "zhiyi-dev-key-2026"
|
||||
journal_path = "/home/muc/.hermes/daemon/journal.jsonl"
|
||||
|
||||
conflicts = detect_memory_conflicts(journal_path, zhiyi_token)
|
||||
for c in conflicts:
|
||||
print(f"[{c['id']}] {c['description']}")
|
||||
```
|
||||
|
|
@ -2,9 +2,8 @@
|
|||
tags: [zhiyi]
|
||||
name: zhiyi
|
||||
description: "织忆 (MemoryWeave) 聚合技能 — API 客户端 + 开发工作流 + 运维规范。含 commit/recall API、数据架构、部署验证、Go 方法论。"
|
||||
version: 11.34
|
||||
author: 小唯 A06
|
||||
updated: 2026-07-13(memory_recall.py 代码审查5个bug修复+Soulful脏数据清理+三系统全面检查结果)
|
||||
version: 11.36
|
||||
updated: 2026-07-13(画像可执行化 v2 + 参考项目对比分析)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -16,6 +15,17 @@ updated: 2026-07-13(memory_recall.py 代码审查5个bug修复+Soulful脏数
|
|||
- bge-embed: 8000端口正常,Rust IPC sidecar: 正常
|
||||
- **结论:完全健康,无问题**
|
||||
|
||||
**2026-07-13 daemon → TencentDB 集成(新增)**:
|
||||
- `daemon.py` 的 `tddb_capture(reflection_dict, state, ctx)`:deep tick 时自动 capture 到 :8420,形成人格记忆积累
|
||||
- `_sync_soulful_to_llm_context()` 内每 tick 调用 `/search/memories`,提取 `latest_persona` 写入 `ctx["tddb"]`
|
||||
- `save_llm_context()` 显式 `ctx.get("tddb", {})` 加入 llm_context.json 输出
|
||||
- **注入链路**:daemon tick → TencentDB sync → llm_context.json → Hermes 插件 prefetch 时注入
|
||||
|
||||
**2026-07-13 画像可执行化**:Soulful `user-profile.json` v2 的 `behavior_rules`(8条可执行行为规范)经 `daemon.py` 的 `save_llm_context()` 拼接为 `【规则类型】规则内容` 格式字符串数组,写入 `llm_context.json` 的 `system_prompt_snippets` 字段,织忆 prefetch 自动携带至每轮对话。效果:模型直接看到并遵守牧尘的行为规范,而非需要从元数据推断。
|
||||
|
||||
验证:`python3 -c "import json; print(len(json.load(open('~/.hermes/llm_context.json')).get('system_prompt_snippets',[])))"` → 应输出 8。
|
||||
- **验证**:`python3 -c "import json; print(json.load(open('~/.hermes/llm_context.json')).get('tddb'))"`
|
||||
|
||||
### TencentDB Gateway
|
||||
- 端口8420,进程PID 575095,uptime 28910s(~8h)
|
||||
- Pipeline: 4 tasks consumed/completed,0 failed
|
||||
|
|
@ -419,6 +429,19 @@ curl -s -X POST -H "X-API-Key: zhiyi-dev-key-2026" \
|
|||
http://localhost:7821/api/v1/commit
|
||||
```
|
||||
|
||||
### ✅ time_decay_recall — daemon 侧时间衰减重排序(2026-07-13 新增)
|
||||
位于 `~/.hermes/scripts/daemon.py`,综合分 = recall_score × 0.6 + decay_score × 0.4
|
||||
decay_score = max(0.3, 1.0 - days_since_update × 0.015),60天+降至 0.3 地板
|
||||
|
||||
```python
|
||||
from daemon import time_decay_recall
|
||||
results = time_decay_recall("牧尘偏好", top_k=5)
|
||||
# 返回: [{content, score, timestamp, final_score, decay_score, days_since_update, ...}]
|
||||
```
|
||||
|
||||
**特点**:原始取 top_k × 2 条,重排序后返回 top_k 条;API 异常 / non-200 → 返回空列表,不抛异常
|
||||
**验证脚本**:`/tmp/hermes-verify-time_decay_recall.py`(10/10 passed)
|
||||
|
||||
# ✅ recall — 语义搜索(POST JSON body,不是 GET query params!)
|
||||
# ⚠️ 常见错误:curl "http://.../recall?query=xxx" → {"error":"invalid body"}
|
||||
# 正确用法:-d '{"query":"关键词","top_k":5}' 的 POST 形式
|
||||
|
|
@ -1256,7 +1279,8 @@ python3 ~/.hermes/scripts/wiki_curator.py --dir ~/mc/小唯/ --llm --dry-run
|
|||
- **⚠️ 共享 Gitea remote 覆盖风险(2026-07-13)**:`references/shared-gitea-remote-risk.md` — `mc` 和 `~/.hermes` 共用同一 remote,force push 会互相覆盖。解决方案。
|
||||
|
||||
- **⭐ ColaOS 竞品分析(2026-07-09)**:`references/competitor-colaos-20260709.md` — SPA 网站抓取方法 + 心迹/牵挂/无感感知设计详析。🔴 高优先级借鉴:情感层与任务记忆分离存储。
|
||||
- **⭐ 竞品架构对比(2026-07-01)**:`references/memory-os-7-layer-comparison.md` — Memory-OS 7 层记忆架构 vs 织忆完整对照。含信任评分、4 级降级、自动注入钩子、CREATIVE.md 隔离、强制注入 prompt 共 5 个可直接借鉴的设计点。用于织忆迭代时对标参考。
|
||||
- **⭐ 竞品架构对比(2026-07-01)**:`references/memory-os-7-layer-comparison.md` — Memory-OS 7 层记忆架构 vs 织忆完整对照。含信任评分、4 级降级、自动注入钩子、CREATIVE.md 隔离、强制注入 prompt 共 5 个可直接借鉴的设计点。
|
||||
- **⭐ 记忆系统对比分析(2026-07-13)**:`references/memory-system-comparison.md` — 克隆分析 yantrikdb/memos/honcho/agent-memory-skill 等 9 个参考项目,输出 P0-P2 优先级建议(Ebbinghaus遗忘/冲突检测/多信号评分/think Consolidation/主动触发器)用于织忆迭代时对标参考。
|
||||
|
||||
- **⭐ 自启动架构(2026-07-02)**:`references/systemd-auto-start.md` — 4 组件启动串行、binary 持久化位置、service 文件配置、ExecStartPre 自愈、重启后验证方法
|
||||
- **⭐ /tmp/memoryweave 丢失恢复指南(2026-06-25)**:`references/tmp-memoryweave-recovery.md`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Ad-hoc verification: time_decay_recall in daemon.py
|
||||
Run: python3 /home/muc/.hermes/skills/zhiyi/zhiyi/scripts/verify_time_decay_recall.py
|
||||
Expected: 10/10 passed
|
||||
"""
|
||||
import sys, os, unittest.mock as m
|
||||
|
||||
sys.path.insert(0, '/home/muc/.hermes/scripts')
|
||||
from daemon import time_decay_recall
|
||||
|
||||
passed = 0
|
||||
failed = 0
|
||||
|
||||
def check(label, cond):
|
||||
global passed, failed
|
||||
if cond:
|
||||
print(f" PASS {label}")
|
||||
passed += 1
|
||||
else:
|
||||
print(f" FAIL {label}")
|
||||
failed += 1
|
||||
|
||||
print("\n=== time_decay_recall verification ===\n")
|
||||
|
||||
# 1. Returns list
|
||||
result = time_decay_recall('test', top_k=3)
|
||||
check("returns list", isinstance(result, list))
|
||||
|
||||
# 2. Each item has required fields
|
||||
if result:
|
||||
item = result[0]
|
||||
check("has final_score", 'final_score' in item)
|
||||
check("has decay_score", 'decay_score' in item)
|
||||
check("has days_since_update", 'days_since_update' in item)
|
||||
check("has timestamp", 'timestamp' in item)
|
||||
|
||||
# 3. Sorted descending by final_score
|
||||
scores = [x['final_score'] for x in result]
|
||||
check("sorted descending", scores == sorted(scores, reverse=True))
|
||||
|
||||
# 4. top_k respected
|
||||
check(f"top_k respected (len={len(result)})", len(result) <= 3)
|
||||
|
||||
# 5. Mock: old entry hits floor 0.3
|
||||
with m.patch('requests.post') as mock_post:
|
||||
mock_post.return_value.status_code = 200
|
||||
mock_post.return_value.json.return_value = {
|
||||
'results': [
|
||||
{'content': 'fresh', 'score': 0.9, 'timestamp': '2026-07-01T00:00:00+08:00'},
|
||||
{'content': 'old', 'score': 0.9, 'timestamp': '2024-01-01T00:00:00+08:00'},
|
||||
]
|
||||
}
|
||||
mocked = time_decay_recall('mock', top_k=5)
|
||||
old_item = next(x for x in mocked if x['content'] == 'old')
|
||||
check("old entry decay floor == 0.3", old_item['decay_score'] == 0.3)
|
||||
|
||||
# 6. Mock: server error returns []
|
||||
with m.patch('requests.post') as mock_post:
|
||||
mock_post.side_effect = Exception("boom")
|
||||
err_result = time_decay_recall('fail', top_k=3)
|
||||
check("exception returns []", err_result == [])
|
||||
|
||||
# 7. Mock: non-200 returns []
|
||||
with m.patch('requests.post') as mock_post:
|
||||
mock_post.return_value.status_code = 500
|
||||
mock_post.return_value.json.return_value = {}
|
||||
check("non-200 returns []", time_decay_recall('bad', top_k=3) == [])
|
||||
|
||||
print(f"\n=== {passed}/{passed+failed} passed ===")
|
||||
sys.exit(0 if failed == 0 else 1)
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"version": 2,
|
||||
"updated_at": "2026-07-13T12:30:00.000000+00:00",
|
||||
"updated_at": "2026-07-13T14:00:45.524882+00:00",
|
||||
"behavior_rules": {
|
||||
"answer_format": "结论先行 → 数据支撑 → 行动建议。不废话、不科普、不加补丁式回答。",
|
||||
"code_quality": "修复后必须自测,不等用户测。遇到stderr先试3种方法,不行再报告障碍。",
|
||||
|
|
@ -13,8 +13,16 @@
|
|||
},
|
||||
"communication_style": "简洁直接",
|
||||
"work_patterns": {
|
||||
"peak_hours": ["09:00-12:00", "14:00-18:00"],
|
||||
"focus_issues": ["会计凭证处理", "织忆系统", "cron自动化", "KOCR识别"]
|
||||
"peak_hours": [
|
||||
"09:00-12:00",
|
||||
"14:00-18:00"
|
||||
],
|
||||
"focus_issues": [
|
||||
"会计凭证处理",
|
||||
"织忆系统",
|
||||
"cron自动化",
|
||||
"KOCR识别"
|
||||
]
|
||||
},
|
||||
"preferences": {
|
||||
"code_review": "改完必须自测再提交,不依赖用户测试",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
📰 每日宏观+持仓摘要
|
||||
|
||||
【大盘】2026-07-13 08:00
|
||||
📉 上证: 3996.16 (-1.00%)
|
||||
📉 沪深300: 4.83 (-1.77%)
|
||||
📈 五粮液: 73.69 (+3.94%)
|
||||
|
||||
【五粮液持仓信号】⭐ 关注
|
||||
|
||||
📈 布伦特原油: 78.48 (+2.47)
|
||||
【宏观风险提示】
|
||||
• 大盘若跌破关键均线 → 空仓信号加强
|
||||
• 白酒消费数据持续低迷 → 基本面承压
|
||||
• 人民币贬值预期 → 外资流出白酒板块压力
|
||||
|
||||
【五粮液状态】
|
||||
价格: 73.69 (+3.94%)
|
||||
MA20下方 → 空仓信号,等待金叉
|
||||
|
||||
小唯股票投研 · 每日新闻
|
||||
|
|
@ -1,10 +1,15 @@
|
|||
{
|
||||
"strategy": "MA20突破",
|
||||
"stock": "五粮液(000858)",
|
||||
"stock": "平安银行(000001)",
|
||||
"start_date": "2026-07-12",
|
||||
"initial_capital": 100000,
|
||||
"current_capital": 100000,
|
||||
"positions": [],
|
||||
"current_capital": 7.0200000000040745,
|
||||
"positions": [
|
||||
{
|
||||
"shares": 9487,
|
||||
"avg_cost": 10.54
|
||||
}
|
||||
],
|
||||
"closed_trades": [],
|
||||
"stats": {
|
||||
"total_trades": 0,
|
||||
|
|
@ -13,5 +18,7 @@
|
|||
"total_pnl": 0,
|
||||
"win_rate": 0
|
||||
},
|
||||
"notes": "模拟记录,非真实下单。等待MA20金叉信号再买入。"
|
||||
"notes": "模拟记录,非真实下单。等待MA20金叉信号再买入。",
|
||||
"last_signal": "买入",
|
||||
"last_signal_date": "2026-07-13"
|
||||
}
|
||||
Loading…
Reference in New Issue