如何讓 OpenClaw 的 corn 根據聊天內容判斷決定是否要發送提醒
一個最簡單的做法是走心跳,但是心跳不是很穩定,心跳的好處是直接從主會話啟動,可以有主會話的記憶,不過缺點是不可控
再來就只剩下走普通 corn 呼叫一個獨立會話來做事了,第一個問題是他讀不到其他會話,雖然可以走 Discord API 讀到,但是萬一你不是在 DC 上聊呢?
找到最好的解法是用 TaskList() 列出會話並依照時間與類型塞選,然後再用 TaskHistory() 來讀取最新多少則內容,如此一來就可以絕對取得近期所有記錄了
這個做法除了能判斷之外最大的優點是,讓提醒具備對話連續性的能力,才不會只是冷冰冰的固定文字提醒而已
固定的技能流程
取得方法的固定流程可以參考這個
技能包: gist/context-reader.md (進後按右上角raw按鈕可以複製)
技能需要打開兩個能力才能順利運行
1. 使 Agent 有能力讀取其他會話
openclaw config set tools.sessions.visibility agent2. 使 Agent 有能力自己發到 Discord 中
openclaw config set channels.discord.actions.messages true
設定 corn 的提示詞
傳送的部分選無就可以了不經由內建的傳送
最後在 corn 中輸入這樣的提示詞。(target 那裡記得改成自己的ID)
現在是中午11:45,提醒主人去吃午餐。
步驟:
1. 讀取 cron-skills/context-reader/SKILL.md 並執行,載入主人最近的對話
2. 根據對話內容和發送判斷,決定是否發送午餐提醒
內容要求:
- 簡短、不囉唆
- 語氣輕鬆關心
- 根據今天的狀態調整內容
- 可以用 emoji
- 每天說法稍微不同
**你必須使用 message 工具發送 Discord DM:**
- action: send
- channel: discord
- target: user:{UserID}
- message: 一條簡短溫馨的午餐提醒
**發送判斷:**
- 如果對話中主人已經說過吃飽了、正在吃、或剛吃完 → 不發送
- 如果沒有相關資訊或不確定 → 發送提醒
實際成果
實際成功阻斷的範例,成功獲取信息並像個人一樣思考了

沒有留言:
張貼留言