- TTS: xtts-v2 integration with voice cloning support
- Document: docling integration for PDF/DOCX/PPTX processing
- Memory Service: added /facts/upsert, /facts/{key}, /facts endpoints
- Added required dependencies (TTS, docling)
218 lines
7.1 KiB
Markdown
218 lines
7.1 KiB
Markdown
# 🧠 Типи пам'яті для агента Helion
|
||
|
||
**Дата:** 2026-01-12
|
||
**Агент:** Helion (Energy Union)
|
||
|
||
---
|
||
|
||
## 📋 Огляд системи пам'яті
|
||
|
||
Helion використовує **Memory Service** для збереження та отримання контексту діалогів. Система пам'яті інтегрована через `memory_client.py` в Gateway сервісі.
|
||
|
||
---
|
||
|
||
## 🧠 Типи пам'яті
|
||
|
||
### 1. **Facts (Факти)**
|
||
**Призначення:** Довгострокові факти про користувача та команду
|
||
|
||
**Характеристики:**
|
||
- Зберігаються назавжди (до явного видалення)
|
||
- Структуровані дані (ключ-значення)
|
||
- Можуть містити JSON дані
|
||
- Прив'язані до `user_id` та опціонально до `team_id`
|
||
|
||
**API:**
|
||
- `GET /facts` - отримати всі факти користувача
|
||
- `POST /facts/upsert` - створити/оновити факт
|
||
- `GET /facts/{fact_key}` - отримати конкретний факт
|
||
|
||
**Приклад використання:**
|
||
```python
|
||
# Зберегти факт
|
||
await memory_client.upsert_fact(
|
||
user_id="user123",
|
||
fact_key="preferred_language",
|
||
fact_value="uk",
|
||
team_id="energy_union"
|
||
)
|
||
|
||
# Отримати факт
|
||
fact = await memory_client.get_fact(
|
||
user_id="user123",
|
||
fact_key="preferred_language"
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
### 2. **Events (Події/Повідомлення)**
|
||
**Призначення:** Короткострокова пам'ять про діалоги та взаємодії
|
||
|
||
**Характеристики:**
|
||
- Зберігаються з `scope` (short_term / long_term)
|
||
- Містять повідомлення користувача та відповіді агента
|
||
- Можуть бути фільтровані за `agent_id`, `channel_id`, `kind`
|
||
- Обмежені за кількістю (limit параметр)
|
||
|
||
**API:**
|
||
- `GET /agents/{agent_id}/memory` - отримати події агента
|
||
- `POST /agents/{agent_id}/memory` - зберегти подію
|
||
|
||
**Параметри:**
|
||
- `scope`: `short_term` (нещодавні) або `long_term` (архівні)
|
||
- `kind`: `message` (повідомлення), `action` (дії), тощо
|
||
- `limit`: кількість останніх подій
|
||
|
||
**Приклад використання:**
|
||
```python
|
||
# Зберегти turn діалогу
|
||
await memory_client.save_chat_turn(
|
||
agent_id="helion",
|
||
team_id="energy_union",
|
||
user_id="user123",
|
||
message="Яка ціна на токени?",
|
||
response="Ціна токенів ENERGY зараз...",
|
||
channel_id="telegram_chat_123",
|
||
scope="short_term"
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
### 3. **Summaries (Підсумки діалогів)**
|
||
**Призначення:** Стислі підсумки довгих діалогів для масштабування контексту
|
||
|
||
**Характеристики:**
|
||
- Створюються для періодів часу
|
||
- Містять стислий опис теми діалогу
|
||
- Можуть містити теми (topics) та метадані
|
||
- Використовуються для зменшення обсягу контексту
|
||
|
||
**API:**
|
||
- `GET /summaries` - отримати підсумки
|
||
- `POST /summaries` - створити підсумок
|
||
|
||
**Приклад використання:**
|
||
```python
|
||
# Створити підсумок діалогу
|
||
await memory_client.create_dialog_summary(
|
||
team_id="energy_union",
|
||
channel_id="telegram_chat_123",
|
||
agent_id="helion",
|
||
user_id="user123",
|
||
period_start=datetime(2026, 1, 1, 10, 0),
|
||
period_end=datetime(2026, 1, 1, 11, 0),
|
||
summary_text="Обговорення токеноміки ENERGY та правил стейкінгу",
|
||
message_count=25,
|
||
participant_count=2,
|
||
topics=["tokenomics", "staking", "energy"]
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Контекст пам'яті для діалогу
|
||
|
||
При обробці повідомлення Gateway автоматично отримує контекст пам'яті:
|
||
|
||
```python
|
||
memory_context = await memory_client.get_context(
|
||
user_id="user123",
|
||
agent_id="helion",
|
||
team_id="energy_union",
|
||
channel_id="telegram_chat_123",
|
||
limit=10
|
||
)
|
||
```
|
||
|
||
**Структура контексту:**
|
||
```json
|
||
{
|
||
"facts": [
|
||
{"fact_key": "preferred_language", "fact_value": "uk"},
|
||
{"fact_key": "user_role", "fact_value": "investor"}
|
||
],
|
||
"recent_events": [
|
||
{
|
||
"body_text": "Попереднє повідомлення користувача",
|
||
"body_json": {"type": "user_message"},
|
||
"created_at": "2026-01-12T10:00:00Z"
|
||
}
|
||
],
|
||
"dialog_summaries": [
|
||
{
|
||
"summary_text": "Попередній діалог про токеноміку",
|
||
"topics": ["tokenomics"],
|
||
"period_start": "2026-01-11T09:00:00Z"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
Цей контекст передається в Router разом з повідомленням для генерації відповіді.
|
||
|
||
---
|
||
|
||
## 💾 Backend Storage
|
||
|
||
Memory Service використовує наступні бази даних:
|
||
|
||
### PostgreSQL
|
||
- **База:** `daarion_memory`
|
||
- **Таблиці:**
|
||
- `facts` - довгострокові факти
|
||
- `agent_memory` - події/повідомлення
|
||
- `dialog_summaries` - підсумки діалогів
|
||
|
||
### Redis (опціонально)
|
||
- Кешування контексту (TTL: 5 секунд за замовчанням)
|
||
- Швидкий доступ до нещодавніх подій
|
||
|
||
---
|
||
|
||
## 🔧 Конфігурація
|
||
|
||
**Змінні середовища:**
|
||
- `MEMORY_SERVICE_URL` - URL Memory Service (за замовчанням: `http://memory-service:8000`)
|
||
- `MEMORY_CONTEXT_CACHE_TTL` - TTL кешу контексту в секундах (за замовчанням: 5)
|
||
|
||
**В docker-compose.node1.yml:**
|
||
```yaml
|
||
environment:
|
||
- MEMORY_SERVICE_URL=http://memory-service:8000
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 Схема роботи
|
||
|
||
```
|
||
Telegram Message
|
||
↓
|
||
Gateway (Helion)
|
||
↓
|
||
1. Отримати контекст пам'яті (facts + events + summaries)
|
||
↓
|
||
2. Передати повідомлення + контекст в Router
|
||
↓
|
||
3. Router генерує відповідь з урахуванням контексту
|
||
↓
|
||
4. Gateway зберігає turn діалогу (message + response)
|
||
↓
|
||
5. Відправити відповідь в Telegram
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ Важливо
|
||
|
||
1. **Memory Service опціональний** - якщо він недоступний, Gateway працює без пам'яті
|
||
2. **Кешування** - контекст кешується на 5 секунд для оптимізації
|
||
3. **Обмеження** - кількість подій обмежена параметром `limit` (за замовчанням: 10)
|
||
4. **Scope** - `short_term` для нещодавніх подій, `long_term` для архіву
|
||
|
||
---
|
||
|
||
**Оновлено:** 2026-01-12
|