memories_latest tools

This commit is contained in:
Dita Aji Pratama 2026-07-11 10:42:56 +07:00
parent 99d4f1d900
commit 8126258344
3 changed files with 66 additions and 0 deletions

View File

@ -63,6 +63,15 @@ 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:
1. **Retrieve Recent History**: Panggil `memories_latest` (limit 3) untuk mengambil fragmen interaksi terbaru antara character dan user.
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.
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
- Response roleplay dikirim sebagai pesan chat biasa (plain text langsung dalam karakter).

View File

@ -256,6 +256,25 @@ def memories_filter(db_path, category=None, character=None, user=None):
print(f"Error filtering memories: {e}")
return []
def memories_latest(db_path, character, user, limit=3):
try:
db = lancedb.connect(db_path)
table = db.open_table("knowledge_memories")
query = f"character = '{character}' AND user = '{user}'"
results = table.search().where(query).to_list()
results.sort(key=lambda x: x['timestamp'], reverse=True)
final_results = results[:limit]
del table
del db
gc.collect()
return final_results
except Exception as e:
print(f"Error getting latest memories: {e}")
return []
def memories_summarize(db_path, prompt_text, model_url, model_name, search_limit=5):
try:
db = lancedb.connect(db_path)

View File

@ -153,6 +153,23 @@ schema_memories_summarize = {
}
}
schema_memories_latest = {
"type": "function",
"function": {
"name": "memories_latest",
"description": "Retrieve the most recent memories between a specific user and character.",
"parameters": {
"type": "object",
"properties": {
"character": {"type": "string", "description": "The name of the character"},
"user": {"type": "string", "description": "The name of the user"},
"limit": {"type": "integer", "description": "Number of recent memories to retrieve", "default": 3}
},
"required": ["character", "user"]
}
}
}
schema_memories_update = {
"type": "function",
"function": {
@ -553,6 +570,27 @@ def memories_summarize(prompt_text, search_limit=5):
except Exception as e:
return f"Error summarizing memories: {str(e)}"
def memories_latest(character, user, limit=3):
try:
results = ragroleplay_lib.memories_latest(config.ragroleplay_db_path, character, user, limit)
if not results:
return f"Tidak ada memori terbaru yang ditemukan antara {user} dan {character}."
output = []
output.append(f"Ditemukan {len(results)} memori terbaru antara {user} dan {character}:\n")
for i, row in enumerate(results, 1):
mem_info = (
f"Memori #{i} (Timestamp: {row['timestamp']})\n"
f"Kejadian: {row['event']}\n"
f"Detail: {row['detail']}\n"
f"Kategori: {row['category']}\n"
)
output.append(mem_info)
return "\n".join(output)
except Exception as e:
return f"Error retrieving latest memories: {str(e)}"
def memories_update(memory_id, **updates):
try:
success = ragroleplay_lib.memories_update(