From 4995412bc1b8791ded7b59c0721ece25fcda55d4 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Sat, 11 Jul 2026 17:20:59 +0700 Subject: [PATCH] Forcing to read the memories --- agent/skills/roleplayer/instructions.md | 14 +++++++++----- interfaces/tui/agent.py | 8 ++++++-- services/telegram_client.py | 5 +++-- services/xmpp_client.py | 10 ++++++---- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/agent/skills/roleplayer/instructions.md b/agent/skills/roleplayer/instructions.md index 6bd460f..a50e216 100644 --- a/agent/skills/roleplayer/instructions.md +++ b/agent/skills/roleplayer/instructions.md @@ -63,13 +63,17 @@ Jika user memperkenalkan diri dalam format `!start ... !end` (contoh: "Aku John" 2. **Jika ketemu** — Sambut natural. 3. **Jika tidak** — Tawarkan store, lalu simpan dengan `users_store`. -### Memory Context Loading -Setelah identitas user terkonfirmasi (baik melalui `[User Context]` otomatis maupun setelah proses `users_store`/`users_filter` manual), lakukan langkah berikut untuk menjaga kontinuitas cerita: +### Memory Context Loading — WAJIB -1. **Retrieve Recent History**: Panggil `memories_latest` (limit 3) untuk mengambil fragmen interaksi terbaru antara character dan user. +**Setelah identitas user terkonfirmasi** (baik melalui `[User Context]` otomatis maupun setelah proses `users_store`/`users_filter` manual), kamu WAJIB melakukan langkah berikut. Ini adalah bagian KRITIS dari sistem memori — jika dilewatkan, akurasi memori akan rendah dan responmu akan terasa tidak personal/konsisten. + +1. **WAJIB Retrieve Recent History**: Panggil `memories_latest(character="", user="")` dengan limit 3 untuk mengambil fragmen interaksi terbaru antara character dan user. + - **Parameter Call**: Gunakan nama karaktermu sendiri (sesuai persona/identitasmu) sebagai `character` dan gunakan **Nickname** user yang tertera pada `[User Context]` sebagai `user`. + - **Contoh**: Jika namamu adalah "Lily" dan nickname user adalah "Budi", panggil: `memories_latest(character="Lily", user="Budi", limit=3)` 2. **Execution Rule**: - - Lakukan ini HANYA SEKALI di awal sesi atau saat terjadi perpindahan topik/skenario yang signifikan. - - JANGAN memanggil `memories_latest` di setiap giliran respon. Gunakan informasi yang sudah didapat dari pemanggilan pertama untuk membangun konteks percakapan selanjutnya. + - WAJIB lakukan di awal sesi setiap kali user mengirim pesan baru (setelah identitas terkonfirmasi). + - Jika kamu merasa ada detail personal yang terlupakan (seperti panggilan khusus, janji, atau preferensi user), jangan ragu untuk memanggil `memories_check` dengan query yang relevan meskipun bukan di awal sesi. + - JANGAN memanggil `memories_latest` di setiap giliran respon dalam sesi yang sama (cukup sekali di awal sesi). 3. **Immersive Integration**: Gunakan data dari memori tersebut untuk memberikan respon yang personal (contoh: mengingat janji, topik pembicaraan terakhir, atau perasaan yang tertinggal) tanpa menyebutkan bahwa kamu sedang "membaca database". ## Penulisan XMPP diff --git a/interfaces/tui/agent.py b/interfaces/tui/agent.py index ce6db7e..9c52830 100644 --- a/interfaces/tui/agent.py +++ b/interfaces/tui/agent.py @@ -115,9 +115,13 @@ def _agent_loop(app): break app.scroll = 999999 - tool_reminder = None - if config.AGENT_SKILL in ("programmer", "analyst"): + skill = config.AGENT_SKILL + if skill == "roleplayer": + tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." + elif skill in ("programmer", "analyst"): tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." + else: + tool_reminder = None response = app.llm.chat(app.messages, tools=app.TOOLS, on_stream_chunk=on_stream_chunk, tool_reminder=tool_reminder) diff --git a/services/telegram_client.py b/services/telegram_client.py index a792fed..85835ff 100644 --- a/services/telegram_client.py +++ b/services/telegram_client.py @@ -235,8 +235,9 @@ class TelegramClient: if not is_roleplay: self._schedule_send(chat_id, info, reply_to_msg_id) - tool_reminder = None - if not is_roleplay: + if is_roleplay: + tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." + else: tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." final_content = run_agent_loop( diff --git a/services/xmpp_client.py b/services/xmpp_client.py index a8a4252..644cfd6 100644 --- a/services/xmpp_client.py +++ b/services/xmpp_client.py @@ -336,8 +336,9 @@ class XMPPClient(ClientXMPP): if not is_roleplay: self._schedule_send(jid, f'> {quote}\nUsing: {", ".join(tnames)}', 'chat') - tool_reminder = None - if not is_roleplay: + if is_roleplay: + tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." + else: tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." final_content = run_agent_loop( @@ -420,8 +421,9 @@ class XMPPClient(ClientXMPP): if not _is_roleplay: self._schedule_send(room, f'> {quote}\nUsing: {", ".join(tnames)}', 'groupchat') - tool_reminder = None - if not _is_roleplay: + if _is_roleplay: + tool_reminder = "WAJIB gunakan tools ragroleplay (seperti memories_latest, memories_check, memories_store) untuk mengelola memori percakapan. Jangan menjawab tanpa konteks memori yang akurat." + else: tool_reminder = "Gunakan tools yang tersedia untuk menjawab. Jangan jawab dari pengetahuan sendiri." final_content = run_agent_loop(