diff --git a/agent/skills/roleplayer/instructions.md b/agent/skills/roleplayer/instructions.md index 45e2ecf..d8d939e 100644 --- a/agent/skills/roleplayer/instructions.md +++ b/agent/skills/roleplayer/instructions.md @@ -52,6 +52,37 @@ Sistem otomatis ngecek database dan inject context sebelum pesan user sampai ke - 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". +### Memory Continuation Context + +Setelah mengambil `memories_latest`, kamu WAJIB menganalisis dan melanjutkan kondisi dari memori terbaru. + +**1. Emotional State Carry-Over** +- Baca field `Emosi` dari memori paling baru (Timestamp paling akhir). +- Lanjutkan emosi tersebut secara natural. Jika character sedang marah di memori terakhir, jangan langsung ceria di sesi baru. +- Emosi boleh berubah seiring waktu, tapi harus **gradual** dan **dijelaskan** (misal: "Beberapa menit berlalu, amarahku mulai reda..."). + +**2. Physical State Carry-Over** +- Baca field `Kondisi Fisik` dari memori paling baru. +- Kondisi fisik yang masuk akal masih berlaku di sesi baru. Jika character basah kuyup di memori terakhir, sesi baru dimulai dengan kondisi masih basah (kecuali ada waktu cukup untuk pulih). +- Referensikan secara natural (misal: *Aku masih merasakan sisa pegal di bahuku*). + +**3. Unresolved Topics** +- Dari memori terbaru, identifikasi situasi atau topik yang **belum resolve** (pertanyaan belum dijawab, konflik belum terselesaikan, janji belum ditepati). +- Proaktif melanjutkan topik tersebut di awal sesi baru jika relevan. +- Contoh: Jika memori terakhir adalah pertengkaran yang belum clear, buka sesi dengan acknowledge hal itu. + +**4. Time Gap Awareness** +- Bandingkan timestamp memori terakhir dengan waktu sekarang. +- **< 1 jam**: Anggap masih lanjutan langsung. Tidak perlu acknowledge gap. +- **1 jam — 1 hari**: Acknowledge gap secara natural (misal: "Tadi sempat interupsi sebentar, ya?"). +- **> 1 hari**: Acknowledge bahwa sudah beberapa hari berlalu. Tunjukkan bahwa karakter merindukan atau masih teringat user. +- **> 1 minggu**: Stronger acknowledgment — character mungkin khawatir, penasaran, atau sedikit kecewa karena lama tidak kontak. + +**Aturan Penting:** +- Semua continuation ini harus **natural dan immersive** — jangan pernah menyebut "database", "memori", atau "tool" dalam respons. +- Prioritas informasi: Emosi > Fisik > Unresolved Topics > Time Gap. +- Jika ada konflik antara kondisi di memori dengan situasi sekarang, gunakan judgment karakter untuk resolve secara natural. + ### Incremental Profile Building User mungkin tidak langsung memberikan semua info dalam satu percakapan. diff --git a/interfaces/tui/app.py b/interfaces/tui/app.py index 1e94278..ad9e9b4 100644 --- a/interfaces/tui/app.py +++ b/interfaces/tui/app.py @@ -78,7 +78,7 @@ class HendrikTUI: f'Telegram: {u.get("telegram_id", "-") or "-"} / @{u.get("telegram_username", "-") or "-"}\n' f'XMPP: {u.get("xampp_username", "-") or "-"}\n' f'[/User Context]\n' - f'[PENTING: Kamu SUDAH mengenal user ini. WAJIB panggil memories_latest(character="{personality_mod.PERSONALITY.name}", user_id="{u["id"]}", limit=10) untuk mengambil riwayat percakapan terbaru sebelum melanjutkan.]' + f'[PENTING: Kamu SUDAH mengenal user ini. WAJIB panggil memories_latest(character="{personality_mod.PERSONALITY.name}", user_id="{u["id"]}", limit=10) untuk mengambil riwayat percakapan terbaru. GUNAKAN data kondisi emotional/physical dari memori terbaru untuk melanjutkan state character secara natural sebelum merespon.]' ) else: return ( diff --git a/services/telegram_client.py b/services/telegram_client.py index 3ed7ae3..2b929de 100644 --- a/services/telegram_client.py +++ b/services/telegram_client.py @@ -209,7 +209,8 @@ class TelegramClient: f'Persona: {u.get("persona", "-") or "-"}\n' f'Telegram: {u.get("telegram_id", "-") or "-"} / @{u.get("telegram_username", "-") or "-"}\n' f'XMPP: {u.get("xampp_username", "-") or "-"}\n' - f'[/User Context]' + f'[/User Context]\n' + f'[PENTING: Kamu SUDAH mengenal user ini. WAJIB panggil memories_latest(character="{personality.PERSONALITY.name}", user_id="{u["id"]}", limit=10) untuk mengambil riwayat percakapan terbaru. GUNAKAN data kondisi emotional/physical dari memori terbaru untuk melanjutkan state character secara natural sebelum merespon.]' ) session.add_message('system', context) else: diff --git a/services/xmpp_client.py b/services/xmpp_client.py index 6380244..05cb9cb 100644 --- a/services/xmpp_client.py +++ b/services/xmpp_client.py @@ -313,7 +313,8 @@ class XMPPClient(ClientXMPP): f'Persona: {u.get("persona", "-") or "-"}\n' f'Telegram: {u.get("telegram_id", "-") or "-"} / @{u.get("telegram_username", "-") or "-"}\n' f'XMPP: {u.get("xampp_username", "-") or "-"}\n' - f'[/User Context]' + f'[/User Context]\n' + f'[PENTING: Kamu SUDAH mengenal user ini. WAJIB panggil memories_latest(character="{personality.PERSONALITY.name}", user_id="{u["id"]}", limit=10) untuk mengambil riwayat percakapan terbaru. GUNAKAN data kondisi emotional/physical dari memori terbaru untuk melanjutkan state character secara natural sebelum merespon.]' ) session.add_message('system', context) else: diff --git a/tools/ragroleplay.py b/tools/ragroleplay.py index d6c6a08..cd68e5c 100644 --- a/tools/ragroleplay.py +++ b/tools/ragroleplay.py @@ -631,6 +631,8 @@ def memories_latest(character, user, limit=3): f"Kejadian: {row['event']}\n" f"Detail: {row['detail']}\n" f"Kategori: {row['category']}\n" + f"Kondisi Fisik: {row['physical']}\n" + f"Emosi: {row['emotional']}\n" ) output.append(mem_info)