對話摘要 2026-08-12
description: 6 note(s) today. name: ‘2026-08-12’
- fastmcp name: hermes-fastmcp-azcli-ops description: 2026-08-12 三項工作:(1) Hermes 轉用 Auto Router(smart-router)完成——修正三個問題:Hermes 實際用緊 LiteLLM key alias qwenpaw-gpt4o(sk-wFu…)唔係 MEMORY 記錄嘅 sk-Momk,403 後先發現,已將 smart-router 加入 whitelist;smart-router 路由去 DeepSeek 唔支援 response_format JSON mode,title_generation 已 pin 去 azure-gpt-4o(token 量極細,Azure 成本可忽略);restart 後 API_SERVER_KEY 由 stage2 自動生成新 key 並持久化喺 /opt/data/.env(93cf696e…),MEMORY 舊記錄 932fe5c 已失效。(2) FastMCP 升級 3.4.7(security patch,CIMD audience 修復,無破壞性變更):requirements 更新 + push(commit 973217b),Dockhand deploy 完成容器 healthy,實測 fastmcp.version = 3.4.7,n8n「Self-Built Images Update Check」pinned 3.4.5→3.4.7(2 處 jsCode,用 PUT 更新),QwenPaw 排程 restart 重連 driver。(3) az-cli container(mcr.microsoft.com/azure-cli)23:06 建立但從未 run(created)已啟動,az 2.89.1 正常,登入狀態存 volume azure-cli-home,已應要求加 unless-stopped restart policy;排查確認 Azure credit 已用 200(9.04%、今日 $3.76、9/6 到期)、用量監控 workflow 每日 09:00+21:00 正常、server 無容器裝 az CLI。
- memory/2026-08-12/infra-and-tools-notes.md name: infra-and-tools-notes description: 當日多項工作:(1) Secret Redaction 令模型讀唔到 tool 返回嘅明文 secret,確立「搬 secret 值」規則——由 n8n/host script/工具封裝處理,LLM 只做決策唔經手值;現有 Vikunja Token 每日輪換就係 n8n(零 LLM)SSH host 行 rotate-vikunja-token.sh。(2) QwenPaw 收編 Gemini Notebook(NotebookLM 2026年7月改名)探討:冇公開 API/self-host;方案 A Open Notebook(Docker、18+ AI providers 可駁 LiteLLM、完整 REST API、podcast 1-4 speakers、需查 arm64);方案 B 用現有 QwenPaw RAG;方案 C Edge-TTS 生成 podcast。未揀方向。(3) Blinko-Extention 已裝上 notebook Chrome(Web Store 或 load unpacked),API URL 用內網 http://172.21.0.78:1111/api/v1 繞過 CF Access;memo.benhoweb.com 打唔開係因 Cloudflare Access(Authentik)保護、未登入被 redirect;Auth Key 喺 Blinko 設定攞 Access Token;Alt+B 總結頁面/Alt+E 提取內容;用內網 URL 要 VPN keep 住連住。(4) MCP Gateway 研究:MCP Gateway 係中間代理層統一收 MCP servers 對外一個 HTTP endpoint;Cloudflare MCP Server Portals(Cloudflare One beta、免費 50 seats、Access+IdP 認證、OAuth、portal logs、shadow MCP discovery)vs Cloudflare AI Gateway(LLM 請求閘道,易混淆,2025年5月官方出 AI Gateway MCP server 3.9k stars,免費 tier 每月10萬 logs);結論:單人自用維持 fastmcp+n8n MCP 已夠,多人多 agent 要安全管控先值得上 MCP Portal。(5) Hindsight 方案 B 已部署完成並啟用:ARM64 slim image ~500MB 駁 pg-main(PG18+pgvector 0.8.5)、LiteLLM LLM(deepseek-first)+ Embeddings(後期已換成本地 e5-large)、Reranker flashrank 本地、內建 MCP Server、Control Plane UI 喺 hindsight.benhoweb.com;部署時遇 401(Control Plane 連 dataplane API key 未對齊)同路徑 404,查官方 API 後解決;建 bank 方式係 PUT /v1/default/banks/{bank_id};Health check 未開(要改 env)。(6) Hindsight 上線:已建第一個記憶庫 benho(Ben Ho 個人記憶庫,mission 記錄生活/技術/人物/事件、繁中回答)並存第一條真實記憶(用戶背景:香港/繁中/Oracle Cloud 基建 40+ 容器);retain/recall/reflect 三條 pipeline 實測全通(deepseek-first 正常提取、自動拆 fact + 辨識 entity「Ben Ho(用戶)」、reflect 推斷用戶擅長自托管優化)。下一步選項待用戶揀:1 Hermes 日常自動記錄(已 MCP 接 Hindsight)、2 批量導入現有資料(MEMORY.md/Hermes 舊記憶/FNS raw/ 每日摘要)、3 QwenPaw 接入 fastmcp(hindsight retain/recall tools 共享記憶庫)、4 進階設定(consolidation/mental models/多 bank);建議順序 3→2→4。(當日已做:批量導入完成、進階設定大部分完成,剩 mental model 未搞掂,見第10項)注意:預設 embeddings 係 BAAI/bge-small-en-v1.5(384 dims),換 CF bge-m3(1024 dims)要由零開始、日後換 model 要重 embed 所有 memories。(7) Hindsight consolidation 大量 error 修復:consolidation LLM 原用 deepseek-first 但 DeepSeek 唔支援 Hindsight 要求嘅 JSON Schema response_format(This response_format type is unavailable now),fallback CF 免費額度 10K neurons/日用晒且 CF 模型都唔支援 JSON Schema,每次失敗 retry 3-4 次燒 LLM call;觸發背景係全量搬 82 個歷史檔案產生 309 條 pending 記憶。修復:整合 LLM 改用 azure/azure-gpt-4o(支援 JSON Schema、每批約 8 秒),LiteLLM key whitelist 加權限、LiteLLM SDK 要 provider prefix 故 env 填 azure/azure-gpt-4o、改 repo compose + Dockhand env + deploy(撞 UNIQUE constraint 已修正);Worker 唔 re-scan 舊 failed,手動重置 32 條失敗記憶經 manual consolidate 重跑。結果:pending 309→0、nodes 733→903、UI 唔再出 error。(此風險已解除,見第9項)(8) 本地 Embedding Server(.80)上線 + Hindsight 切本地 Embedding(完成):原用阿里雲百煉 dashscope/qwen3.7-text-embedding 額度已爆;本地用 e5-large 多語言(intfloat/multilingual-e5-large)1024 維、實測 2.65s(首次含載入)/0.5s 出向量、container 4GB、重複 model 4.2G→2.1G。關鍵坑:fastembed 0.5.1 期望 cache 路徑 /models/fast-multilingual-e5-large/(GCS tar 結構),誤放 HF 結構 /models/intfloat/multilingual-e5-large/ 致每次 restart 重下載 1.31GB 卡 6+ 分鐘;fastembed 對 e5 行 HF snapshot_download,手動構建 HF snapshot cache(hardlink 慳空間)+ 覆蓋 symlink 成實際 file 後秒載入。切換步驟:LiteLLM 註冊 local-e5-large(dim 1024)、env 未注入要 recreate、PUT env 插新 row(environment_id=NULL)冇 UPDATE 舊 row(MEMORY 教訓重現,手動修正 DB)、403=key whitelist 冇 local-e5-large(已加)、Infisical 冇 HINDSIGHT_LLM_KEY 改 host 攞 Dockhand DB 值、host 冇 Docker DNS 用固定 IP、/retain 係 MCP tool 包裝(fastmcp call,實測 retain 200/0.53s/0 tokens chunks mode 零 LLM)。全鏈路:recall 語義 0.89;收編 Dockhand stack 74 + AdGuard client(.80) + MEMORY.md。最終:Hindsight 由 AI 呼叫到向量生成全部本地化,雲端只係 consolidation 用 Azure GPT-4o(每次 ~HK$0.15 可接受);e5-large 仍係 1024 dims——注意:語義空間同 dashscope/bge-m3 唔同,舊 1081 條向量全部唔夾、recall 0,已 re-embed 完成(見第10項)。(9) Hindsight consolidation 由 Azure GPT-4o 轉 qwen3.8-max(免費 token plan 慳返 Azure credit)完成:踩兩個坑——① LiteLLM SDK 要求 provider prefix(tokenplan/qwen3.8-max 報「LLM Provider NOT provided」、底層係 openai provider + 阿里 token-plan endpoint,要註冊 openai/qwen3.8-max);② SDK 拆 prefix 後 proxy 收到裸名 qwen3.8-max(error Tried to access qwen3.8-max),要註冊埋裸名 model 本身,whitelist 三隻名(tokenplan/qwen3.8-max、openai/qwen3.8-max、qwen3.8-max)都要加。關鍵操作:host 連唔到 Infisical、agent 攞會被 secret redaction 遮,改 host script docker exec litellm env 攞 master key 更新 whitelist;/model/aliases 404 改直接複製 DB model row 做 alias(加密 api_key 可複製、同一 master key 可解);LiteLLM 要 restart 先 reload DB model;DB 有 env rows(API 顯示空係 API 問題)。最終設定 HINDSIGHT_API_LLM_MODEL=openai/qwen3.8-max,端到端實測通過(failed=0、pending=0、consolidated_recently=1);Azure GPT-4o 唔再被 consolidation 消耗,第七節風險解除。(10) Hindsight 收尾(2026-08-12):1081 條記憶 re-embed 完成(sim 0.89+,「Dockhand」9 hits、「Hindsight」3 hits、「技術決策」7 hits),真正 recall endpoint 係 /memories/recall、新增記憶係 POST /memories;Webhook→Telegram 管道搭建完成(webhook-forwarder 加 /hindsight route 方案 C 採用,因 Hindsight 有 SSRF protection 唔准 call 內網 n8n、n8n adapter 方案放棄;Hindsight payload 用 event/data 欄位唔係 event_type,格式化修正後全鏈路 200、Telegram 收靚格式通知);進階功能全部設定好——Directives 3 條(只記事實/避免重複記每日筆記/唔記同步操作)、Webhook 自動推 Telegram、Export 一鍵 JSON 備份、Entities Graph 299 實體/1000 關係;唯一未搞掂:Mental Model(技術決策模式)因 qwen3.8-max thinking mode 唔支援 tool_choice=required、agentic reflect 失敗留空,已知限制唔阻 core 功能;測試資料已清理(7 條 test 記憶用 tags filter + 批量 DELETE 刪除,total 1085)、n8n workflow uGWXeXyYIFEK2Gnw 已刪、MEMORY.md 已更新。(11) 506 條 pending consolidation 大清理(晚間,見第十一節):真正樽頸唔係 e5-large embed(實測 batch 8 只需 0.8-6.5s,根本唔慢)而係 qwen3.8-max Token Plan 1 週 quota 爆咗(8/16 07:39 UTC 先 reset,連 QwenPaw 都 429),每 call timeout 600s 無限 retry 卡死;雲端 embedding 全滅——dashscope 帳戶被封(Access denied, account not in good standing,免費額度爆)、CF bge-m3 429、NVIDIA nemotron 0.19s 快但 2048d 入唔到 vector(1024) column;最終臨時方案:consolidation LLM 用 Azure gpt-4o(快 3-12s/batch、支援 JSON Schema,再撞「LLM Provider NOT provided」照 MEMORY 方法 copy model row 做 azure/azure-gpt-4o alias)+ local e5-large embed(唯一可用),並行優化 env CONSOLIDATION_RESERVED_SLOTS=4(HINDSIGHT_API_WORKER_CONSOLIDATION_RESERVED_SLOTS,default 2)+ CONSOLIDATION_LLM_PARALLELISM=2(Azure 50K TPM 限制);手動重置 82 failed + 觸發 op 2923cf12 後 ~50 分鐘清晒 506 條(pending 0、nodes 563→817 +254 observations、recall 正常,0 hits 係 parse 錯 key、response 用 results 欄位);qwen3.8-max 8/16 quota reset 後可換返(已同用戶講)。
- memory/2026-08-12/memory-slimming-archive-20260812.md
- memory/2026-08-12/n8n-workflow-builder-skill.md name: n8n-workflow-builder-skill description: 建立並收編 n8n-workflow-builder skill(已 approve 2026-08-12):內含十大鐵律、標準流程、batch JSON build-workflow.json(3 steps:建 credential → 建 workflow+activate → 建 tag+插表)、3 個 helper scripts(get_n8n_api_key.py / create_http_header_cred.py / tag_workflow.py)全部實測通過。關鍵坑位:n8n 要攞第二個 API key(第一個 401);新版 credentials API 返回冇 data wrapper(直接 object);workflows_tags 表 columns 係 workflowId+tagId(camelCase);tags 表實名 tag_entity;用 psycopg2 直連 pg-main 代替 SSH+docker exec。測試資料(TEST-skillcheck2/3、tag wgAZpOEcUzMNjtBQ)已清理。同晚另記錄:Hermes config 由 azure-gpt-4o 轉 smart-router(litellm:4000/v1)——實際 key alias 係 qwenpaw-gpt4o(sk-wFu,非 sk-Momk)已加 whitelist、auxiliary.title_generation pin 返 azure-gpt-4o(JSON mode 400 問題)、API server key restart 後更新並持久化喺容器 /opt/data/.env(93cf696e…);另向 user 解釋 Cloudflare OS(2026-08-05 開源嘅 AI agent 平台,Workers+Durable Objects、Gatekeeper 安全模型、early-access)。
- memory/2026-08-12/oracle-adb-pause-keepalive.md name: oracle-adb-pause-keepalive description: Oracle Always Free 政策:ADB 連續 7 日 idle 自動暫停、60 日 idle 永久回收。2026-08-12 收到 Oracle email,aivspoc23(AI-Vector-PoC-23ai,8/4 由 aivspoc clone 嘅測試庫)因從建後無 activity 被暫停,reclamation deadline 2026-08-18。已用 OCI CLI resume(啟動歷時約 26 分鐘回 AVAILABLE)、生成 DB2 新 wallet、寫 keep-alive script(ADMIN + wallet_password,密碼 K3epAl1ve!2026,每日 SELECT 1),併入每日 07:40 mirror workflow 一齊執行並已 publish。重要教訓:DB2 冇 AGENT_MEM 用戶(ORA-01017),必須用 ADMIN + wallet_password 連線;sync script 一直用 ADMIN 所以 DB1 每日 mirror 正常。同日另為每晚 23:55 Hindsight 每日 sync workflow 加成功/失敗通知:script 改為失敗時 exit 1 + 每步 log(/home/opc/scripts/hindsight-sync.log),n8n 加 IF node + Telegram 通知(成功 ✅ / 失敗 ⚠️ 連錯誤內容),SSH node onError=continueErrorOutput,通知管道已實測。aivspoc 主庫正常。用戶可考慮刪除 aivspoc23 釋放 Always Free 名額(需要時可再 clone)。
- memory/2026-08-12/season-group-stuck-session-unlock.md name: season-group-stuck-session-unlock description: 2026-08-12 Season Telegram 群組(telegram:-5572953387)session e9aaf890 卡死 running 44+ 分鐘冇回應,阻擋新訊息(與之前群組卡死相同問題:舊 turn 未結束)。第一次 stop 返回 {“stopped”:true} 但 session 其實未轉 idle,第二次 stop 先成功,兩個 session 轉返 idle。教訓:stopped:true 唔等於 idle,stop 後必須 re-check chats list 驗證 status;未 verify 前唔好報成功。已更新 AGENTS.md「subagent / 群組 session 卡死診斷」規則及 reflections/2026-08-12.md。待查項:watchdog(每 10 分鐘)今次冇自動解鎖 Season 群組(running 44 分鐘都冇郁),要查 watchdog 點解漏咗群組 session。
2026-08-12 後續(Blinko SSO + 權限)
- memo.benhoweb.com SSO(Authentik)登入成功——之前「打唔開」只係未登入被 redirect,唔係故障。
- 發現 Blinko 兩個帳號:id=1 本地 superadmin(Ben Ho)/ id=2 oauth 普通 user(SSO 自動 create 新帳號,唔 link 現有)。
- 用戶揀方案 A:已執行
UPDATE accounts SET role='superadmin' WHERE id=2,兩個帳號都係 superadmin。
Oracle ADB aivspoc23 idle pause 事件(2026-08-12 ~11:00)
- 收到 Oracle Email:Always Free ADB 因 7 日 idle 被自動 pause
- 中招:DB2
aivspoc23(8/4 由 DB1 clone,無日常活動)STOPPED;DB1aivspocAVAILABLE 正常 - Resume:
oci db autonomous-database start --autonomous-database-id <ocid>(OCI key 夠權限;~26 分鐘先 AVAILABLE) - 生成 DB2 新 wallet:
/home/opc/aivspoc23-wallet/(wallet pwK3epAl1ve!2026,admin pw 同 DB1) - Keep-alive:
/home/opc/scripts/keepalive_aivspoc23.py(ADMIN + wallet_password 必須;AGENT_MEM 喺 DB2 唔存在 ORA-01017);實測 KEEPALIVE_OK - 已併入 n8n mirror workflow
M1eNKjFGrLAW8Fb7每日 07:40 後執行並 publish - 🔴 Oracle 政策:ADB 7 日 idle → pause;60 日 idle → 永久回收(
time-reclamation-of-free-autonomous-database) - 用戶可考慮:DB2 若無用途可刪除(Always Free 名額釋放)
Hindsight 修復(2026-08-12 下午,用戶話「由你決定,解決Hindsight呢個問題」)
- 根因1:embeddings 用 CF bge-m3(免費 10K neurons/日)→ 額度用晒 → 429 + dim mismatch crash
- 根因2:retain pipeline 嘅 LLM fact extraction(deepseek-first 唔支援 response_format + free-first 撞 CF 額度)→ 成日 120s 超時 / 0 units
- 修復:
- LiteLLM 加
dashscope/qwen3.7-text-embedding(1024 維,用戶 Qwen key)→ 實測 dim 1024 ✅ - Hindsight LiteLLM key(sk-rYmikhWfZ…)whitelist 加新 model
- Dockhand stack 73 env:
HINDSIGHT_API_EMBEDDINGS_LITELLM_MODEL=dashscope/qwen3.7-text-embedding - bank-level PATCH
retain_extraction_mode=chunks(zero-LLM,skip fact extraction)——global env 唔夠,bank record 先係決定性 - GitHub
oracle-arm-stackscommit 8c70c28:compose 加 RETAIN passthrough
- LiteLLM 加
- 驗證:retain operation completed(unit_ids_count=1, retry 0, tokens 13);DB memory_units count(embedding)=2 ✅;測試資料已清
- 教訓:① Dockhand PUT env 只加 DB row,compose 冇
${VAR}唔注入(deploy 會 skip recreate);② Hindsight extraction mode 係 bank-level,新 bank 要再 PATCH
2026-08-12 傍晚:本地 Embedding Server 上線
- 問題:Hindsight embeddings 用緊 dashscope/qwen3.7-text-embedding,阿里雲百煉免費額度已爆(「余量不足186.249千tokens」警告)。
- 方案 A 落地:自建
embedding-server(.80,stack 74):- fastembed 0.5.1 +
intfloat/multilingual-e5-large(1024-dim,多語言) - 關鍵教訓:fastembed 0.5.1 對 e5 係行 HF
snapshot_download(唔係 GCS tar)——cache 必須係models--qdrant--multilingual-e5-large-onnx/snapshots/<sha>/+refs/main結構;放喺fast-multilingual-e5-large/(GCS 結構)會令每次 restart 重新下載 1.31GB 卡死(實測卡 6+ 分鐘)。手動構建 HF snapshot cache 後秒 load(2.6s)。 - mem_limit 2g → 4g(e5-large onnx 2.24GB)
- fastembed 0.5.1 +
- LiteLLM 註冊
local-e5-large(model=openai/text-embedding-3-small + api_base=http://embedding-server:8000/v1)→ 實測 dim 1024。 - Hindsight 切換:
HINDSIGHT_API_EMBEDDINGS_LITELLM_MODEL= dashscope →local-e5-large。- ⚠️ Dockhand PUT env 只插新 row(environment_id=NULL)唔 UPDATE 舊 row——要手動
UPDATE stack_environment_variables SET value=... , environment_id=1(MEMORY 教訓重現)。 - ⚠️ Hindsight 個 LiteLLM key 有 model whitelist——新 model 要
POST /key/update加(403 Forbidden 之謎)。
- ⚠️ Dockhand PUT env 只插新 row(environment_id=NULL)唔 UPDATE 舊 row——要手動
- ✅ 全鏈路驗證:retain 0.53s / 0 tokens(chunks mode + 本地 embedding 零 LLM)→ recall semantic score 0.89。
- 收編:stack 74(buildOnDeploy)、AdGuard client
.80、MEMORY.md 已更新。 - 測試 memory
83e31164留低咗(API 唔支援 DELETE /memories/{id})。
2026-08-12 夜晚:Hindsight 全管道本地化完成
- embedding-server 修復(用戶報告 unhealthy):
- 元兇:
model.embed()係 sync blocking call,喺 FastAPI async handler 入面跑會 block 成個 event loop →/health答唔到 → healthcheck fail → unhealthy。 - 修復:
run_in_executor(ThreadPoolExecutor(max_workers=2))包住 embed(commit e4ab86d)。 - 實測:batch 60 = 50s(之前 102.5s)、health 全程 OK。
- 元兇:
- Hindsight timeout 240 → 600(3 個 LLM_TIMEOUT env,Dockhand stack 73;⚠️ PUT env 又係插新 row 唔 UPDATE 舊 row,要手動 DELETE NULL rows + UPDATE environment_id=1)。
- MEMORY.md(53KB)retain 成功:122s(之前 500 error @180s——embedding 慢 + timeout 240s 唔夠)。
- 生產 sync script 修正:
sync_qwenpaw_to_hindsight.shpython timeout 120 → 300(否則每晚 23:55 會 FAIL memory)。 - 現況:nodes 905 → 979(MEMORY.md +74),pending_consolidation
35 由 azure-gpt-4o worker 自動消化($0.02/條);failed ops 2 個係頭先 500 error 遺留(API 唔俾刪 failed ops,無害)。 - 每日 sync 全管道(n8n 23:55 → script → Hindsight retain 本地 embedding → consolidation azure)驗證通過。
Hindsight consolidation 轉 qwen3.8-max(2026-08-12 晚)
決定:用戶授權「由你決定點做」→ 將 Hindsight consolidation LLM 由 Azure GPT-4o 轉去 qwen3.8-max(token plan 免費額度,慳 Azure credit)。
踩坑過程(重要教訓):
- Hindsight key whitelist 冇 qwen3.8-max → 403 →
POST /key/update加tokenplan/qwen3.8-max✅ - 直接設
HINDSIGHT_API_LLM_MODEL=tokenplan/qwen3.8-max→ 「LLM Provider NOT provided」——litellm SDK 要 provider prefix(同 azure 教訓一樣)→ 註冊openai/qwen3.8-max(DB copy tokenplan 嗰行,加密 params 可直接複製) /model/aliases同/model/reloadendpoint 都 404(版本唔支援)→ 改 DB 後要docker restart litellm- 設
openai/qwen3.8-max之後仍然 403「Tried to access qwen3.8-max」——litellm SDK 會拆 provider prefix,proxy 收到裸名 → 要註冊埋裸名 modelqwen3.8-max+ whitelist 加埋 - 最終:3 個 model 名(tokenplan/qwen3.8-max、openai/qwen3.8-max、qwen3.8-max)都喺 LiteLLM + whitelist;env
HINDSIGHT_API_LLM_MODEL=openai/qwen3.8-max→ 端到端 consolidate 測試通過(failed=0, pending=0, consolidated_recently=1)
而家狀態:
- consolidation = qwen3.8-max(免費 token plan,JSON Schema ✅)
- Azure GPT-4o 唔再被 consolidation 消耗(credit 慳返)
- azure-credit-check workflow(5PCjZpiYEgvyZHgX)仍會每日 check,但 switch 返 deepseek 嘅後果已唔再影響 consolidation(consolidation 唔用 deepseek)
- MEMORY.md 已更新(Hindsight section)
Hindsight 進階功能設定完成(晚上)
用戶問「Hindsight 全部嘅設定」+「最新情況」→ 完整設定進階功能:
- Directives(3 條):fact-only、避免重複記每日筆記、唔記同步操作
- Webhook:retain.completed → Telegram。踩坑:
- 最初指向 webhook-forwarder
/telegram→ 400(payload 冇 text/message field) - 試 n8n adapter workflow → Hindsight SSRF 擋內網 IP(
Webhook host 'n8n' resolved to disallowed address) - 最終方案:webhook-forwarder worker.js 加
/hindsightroute(格式化 Hindsight event → Telegram),deploy 後全鏈路 200 ✅
- 最初指向 webhook-forwarder
- Export:記憶+設定 JSON 備份
- Entities graph:自動運行(299 nodes/1000 edges)
- Mental model「技術決策模式」:refresh 失敗——qwen3.8-max thinking mode 唔支援 tool_choice=required → content 空(已知限制)
重要發現/教訓:
- Recall 正確 endpoint:
POST /memories/recall(唔係/recall)——之前 0 hits 有一半係 call 錯 path - Retain:
POST /memories(items array);DELETE:DELETE /memories(memory_ids array) - Recall query 用單一具體詞(多詞 AND 0 hits)
- 切 embedding model 必須 re-embed 舊 vector——re-embed 1081 條後 recall 正常(sim 0.89+)
- 刪咗 7 條測試記憶,保留真實記錄
- n8n 建 workflow 教訓重溫:
activeread-only 要建完再 activate;tags 要直插 DB(camelCase quote)
MEMORY.md 已更新(Hindsight section 加進階功能 + endpoint 正確 path + re-embed 教訓)。
🔴🔴 Hindsight 誤刪全部記憶事件(2026-08-12 上午)
事故:用戶報告「而家冇晒記憶」——查 DB memory_units=0。
根因:我頭先刪測試記憶用 DELETE /v1/default/banks/benho/memories body {"memory_ids":[...]}——但呢個版本 DELETE /memories 係 clear_bank_memories(清空成個 bank),body 被忽略!audit log 實錘 clear_memories action(10:19:12)。之前 MEMORY.md 記錄「刪記憶 = DELETE /memories body memory_ids」係錯——根本冇 delete-by-id endpoint(grep source 確認只有 clear_all)。
雪上加霜:Hindsight 係 8/12 今日先部署 → 05:00 pg backup 冇 hindsight db → 冇 backup 可 restore(dump 只有 authentik/blinko/n8n 等,冇 hindsight section)。
恢復:
- embedding-server 塞死(單條 embed 50s+,Hindsight retain timeout)→
docker restart embedding-server復原 - 根因:Hindsight
HINDSIGHT_API_EMBEDDINGS_OPENAI_BATCH_SIZEdefault 100,對本地 e5-large 太慢(~80s+ 爆 LiteLLM timeout)→ compose 加 passthrough(GitHub commit c1310e4)+ Dockhand env=20 + deploy ✅ - 重新 import:
scripts/import_hindsight.py(19/19 成功)+scripts/import_hindsight_archive.py(83 檔全入,timeout 批次其實 server 端有處理完) - Dedup:DELETE 474 duplicate units(跑咗兩次 script 造成)→ 563 unique units / 148 docs
- Recall 驗證:「Dockhand」→ 2 hits(semantic 0.78)✅(注意 recall response field 係
results唔係memories/items!) - consolidation worker 自動跑緊(log 顯示 76 memories processing)
教訓(已入 MEMORY.md):
- DELETE /memories = clear-all,唔接受 body;冇 delete-by-id endpoint;想刪單條唯一安全做法 = 清空後 re-import(源材料保留喺 scripts/)
- Hindsight 今日先建 → 05:00 backup 未涵蓋 → 誤刪冇 backup;新服務部署後要諗 backup 覆蓋時機
- embed batch 100 → 20(大 batch 對本地 e5-large 爆 timeout)
- embedding-server 塞死診斷:單條 embed >50s = 積壓 → restart 清 queue
- recall response field 係
results(含 scores.final/semantic/keyword),唔係 memories/items
2026-08-12 深夜:Auto Router Phase 1 正式開始(smart-router)
- 正式版
smart-router已建(LiteLLM DB model_id7a24a606-8995-4c02-985d-13c2892894ff),取代已刪嘅 test-smart-router(ebc969ee)。 - Tiers:SIMPLE→deepseek-first / MEDIUM→free-first / COMPLEX→deepseek-first / REASONING→azure-gpt-4o;default=deepseek-first;weighted_scores;max_num_tokens=8000。
- Baseline 測試(8/12 22:21 + host 3 輪):分類行為穩定——T1/T2/T4/T5/T6/T7→deepseek-v4-flash、T3→gemini(free-first shuffle:有時 gemini-3.1-flash-lite 2.9/M、試過 llama-3.1-8b 500 error)、T8→azure/gpt-4o(REASONING ✅)。
- 每日統計 n8n workflow
NMyJ5M0VOpjWNfZb「Auto Router 每日統計 v3」(tag QwenPaw,每日 23:55 HKT,已 activate):- Schedule → Code A(日期+prompts)→ HTTP Spend Logs(GET litellm /spend/logs,LiteLLM Master credential
F4XjoAiFhE4Q7doX,URL 用=前綴 + date 格式 YYYY-MM-DD)→ Code B(精確 HKT 時段 filter + 統計 + 輸出 8 shadow prompts per-item)→ HTTP LLM Call(8 次 smart-router calls,jsonBody 用=前綴 expression,options.response includeHeaders 攞 x-litellm-model-name)→ Code C(組 Telegram text)→ HTTP Telegram(webhook-forwarder /telegram) - 統計:reqs/tokens/spend/by-model/avg_dur/errors + baseline(全 deepseek-v4-flash,用 smart-router 內 deepseek 均價 $0.227/M fallback)+ save_pct
- 測試執行 9346 success ✅(Telegram 已收到);Webhook 測試 node 已移除
- Schedule → Code A(日期+prompts)→ HTTP Spend Logs(GET litellm /spend/logs,LiteLLM Master credential
- 踩坑記錄:① n8n Code node sandbox 唔支援 fetch / require(‘http’)——HTTP 一律用 HTTP Request node;② Code node 唔支援 $credentials——key 用 httpHeaderAuth credential + node parameters
authentication: genericCredentialType+genericAuthType: httpHeaderAuth;③ n8n 4.x HTTP node URL/jsonBody expression 要=前綴;④ LiteLLM /spend/logs 只接受 YYYY-MM-DD 日期(ISO 8601 會「unconverted data remains」),精確過濾喺 Code 做;⑤ SSH node 只支援 sshPassword credential(host 係 key-only,撞牆),放棄 SSH node 方案;⑥ n8n credential 解密唔 work(新格式),建新 credential 直接用 qwenpaw SSH key 都唔收(sshPassword 冇 privateKey 字段)。 - Host script
/home/opc/scripts/auto-router-shadow.py(+env/home/opc/scripts/auto-router.env)保留做手動工具;stats.jsonl 喺/home/opc/auto-router-stats/(今日已寫 3 條 baseline)。 - 今日數據(27 reqs):spend 0.001822 → save_pct -407%(蝕)——因為測試 set 有大量 MEDIUM/REASONING(gemini/azure 貴);真實 workload 以 SIMPLE 為主時會慳。呢個就係 Phase 1 要每日記錄比較嘅嘢。
n8n-workflow-builder skill 收編(2026-08-12 深夜)
- 用戶批准 make-skill 提案 →
materialize_skill建立n8n-workflow-builderskill(workspace skills/,已 enabled) - 內容:十大鐵律(Watchdog/Auto Router 兩次實戰坑)+ 標準流程 + batch JSON + 3 個 helper scripts
- Helper scripts(全部 py_compile + 實測通過):
get_n8n_api_key.py:攞 n8n API key——⚠️ 要攞最後一個 key(第一個 MCP Server key 會 401,MEMORY 教訓「第二個 key 先 work」)create_http_header_cred.py:建 httpHeaderAuth credential——⚠️ n8n 新版 API 返回冇datawrapper(直接 object),舊版先有tag_workflow.py:建 tag(POST /api/v1/tags)+ psycopg2 直連 pg-main 插workflows_tags(camelCase columnsworkflowId/tagId,character varying)——唔使 SSH
- Batch
build-workflow.json:3 steps(建 credential → 建 workflow+activate → 建 tag+插表),step 2 輸出 WORKFLOW_ID 由 step 3 grep 抽 - 實測驗證:credential 建+刪(TEST-skillcheck 系列已清理)、tag 建+刪(skillcheck-test tag
wgAZpOEcUzMNjtBQ已清理) qwenpaw skills listCLI 冇 output(容器內 CLI 問題),skill 目錄存在於 32 個 skills 中
2026-08-12 晚:BigCapital 完整刪除 ✅
用戶要求「完整地刪除」BigCapital(已唔用)。已完成:
- Containers:
bigcapital-webapp/migration/server/mysql/gotenberg5 個全刪 - Volume:
bigcapital_mysql_data刪除 - Dockhand:stack 64 + repo 3(
shinggo8000/bigcapitalfork record)刪除;env 殘留 0 - Redis:db0 flush(44 keys → 0)
- CF:DNS record
account.benhoweb.com刪除 - AdGuard:4 個 bigcapital clients 刪除
- list-site:BigCapital 收錄移除(commit 6737581,CF Pages 自動 rebuild)
- n8n:workflow
eCBKKj4HYXgdITNh(BigCapital Release Check)刪除 - fastmcp:
bigcapital_statustool 移除(oracle-arm-stacks commit 59a3b9e,sync+deploy stack 56 成功,容器 healthy 已驗證) - backup script:移除 bigcapital_mysql_data 備份行(backup-to-r2.sh line 64)
- MEMORY.md:4 處更新(IP 表 .61/.62/.63/.65 釋放、Redis db0 標空、n8n 清單移除、BigCapital section 刪除)
需要用戶手動(權限不足):
- CF Access app
d2eb0e0c+ policyba964003刪除(account.benhoweb.com Access)——現有 tokens 都冇 Access:Edit(10405) - GitHub fork
shinggo8000/bigcapital刪除——ghp_SCev...token 冇 delete_repo scope(403)