docs: expand lint scope batch52 (2 files)
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 1. Цілі системи памʼяті
|
||||
## 1. Цілі системи памʼяті
|
||||
|
||||
1. Зробити агентів **контекстними**: вони памʼятають діалоги, рішення, факти.
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 2. Рівні памʼяті
|
||||
## 2. Рівні памʼяті
|
||||
|
||||
## 2.1. Short-Term Memory (STM)
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 3. Простір памʼяті (Scopes)
|
||||
## 3. Простір памʼяті (Scopes)
|
||||
|
||||
Памʼять розділяється за обсягом:
|
||||
|
||||
@@ -128,9 +128,9 @@
|
||||
|
||||
---
|
||||
|
||||
# 4. Модель даних
|
||||
## 4. Модель даних
|
||||
|
||||
### Таблиці (логічно):
|
||||
### Таблиці (логічно)
|
||||
|
||||
- `agent_memory_events`
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
---
|
||||
|
||||
# 5. AgentMemoryAdapter (деталізація)
|
||||
## 5. AgentMemoryAdapter (деталізація)
|
||||
|
||||
Посилання на 12_agent_runtime_core.md:
|
||||
|
||||
@@ -183,41 +183,41 @@ export interface AgentMemoryAdapter {
|
||||
saveTurn(ctx: AgentContext, turn: AgentMessage): Promise<void>;
|
||||
appendFact(ctx: AgentContext, fact: string): Promise<void>;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
### 5.1. loadShortTerm
|
||||
|
||||
* Витягує останні `N` подій типу `kind = 'message'` зі scope `short_term` для:
|
||||
- Витягує останні `N` подій типу `kind = 'message'` зі scope `short_term` для:
|
||||
|
||||
* `agent_id`,
|
||||
- `agent_id`,
|
||||
|
||||
* `team_id`,
|
||||
- `team_id`,
|
||||
|
||||
* `channel_id` (якщо є).
|
||||
- `channel_id` (якщо є).
|
||||
|
||||
### 5.2. loadLongTerm
|
||||
|
||||
* Витягує список текстових фактів зі scope `long_term` (через `agent_memory_events` з `kind = 'fact'`).
|
||||
- Витягує список текстових фактів зі scope `long_term` (через `agent_memory_events` з `kind = 'fact'`).
|
||||
|
||||
### 5.3. saveTurn
|
||||
|
||||
* Записує повідомлення user/assistant як `message` (short-term).
|
||||
- Записує повідомлення user/assistant як `message` (short-term).
|
||||
|
||||
* Якщо увімкнено автоматичне ущільнення памʼяті — може переносити деякі фрагменти в mid-term.
|
||||
- Якщо увімкнено автоматичне ущільнення памʼяті — може переносити деякі фрагменти в mid-term.
|
||||
|
||||
### 5.4. appendFact
|
||||
|
||||
* Додає факт у long-term (як `kind = 'fact'`).
|
||||
- Додає факт у long-term (як `kind = 'fact'`).
|
||||
|
||||
* Додатково:
|
||||
- Додатково:
|
||||
|
||||
* рахує ембедінг (через окремий LLM/embedding API),
|
||||
- рахує ембедінг (через окремий LLM/embedding API),
|
||||
|
||||
* зберігає в `agent_memory_facts_vector`.
|
||||
- зберігає в `agent_memory_facts_vector`.
|
||||
|
||||
---
|
||||
|
||||
# 6. RAG (Retrieval-Augmented Generation)
|
||||
## 6. RAG (Retrieval-Augmented Generation)
|
||||
|
||||
### 6.1. Retrieval
|
||||
|
||||
@@ -227,9 +227,9 @@ export interface AgentMemoryAdapter {
|
||||
|
||||
2. Шукає релевантні факти у:
|
||||
|
||||
* `agent_memory_facts_vector`,
|
||||
- `agent_memory_facts_vector`,
|
||||
|
||||
* (опційно) Co-Memory документів (файли, wiki).
|
||||
- (опційно) Co-Memory документів (файли, wiki).
|
||||
|
||||
3. Обмежує контекст, наприклад Top-K = 5–10 фактів.
|
||||
|
||||
@@ -244,11 +244,11 @@ const memoryMsg: AgentMessage = {
|
||||
"LONG_TERM_MEMORY:\n" +
|
||||
retrievedFacts.map((f, i) => `- ${f.text}`).join("\n"),
|
||||
};
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 7. Перетікання памʼяті (compression / distillation)
|
||||
## 7. Перетікання памʼяті (compression / distillation)
|
||||
|
||||
Щоб памʼять не перетворювалась на хаос, потрібні періодичні "distillation jobs".
|
||||
|
||||
@@ -262,85 +262,85 @@ const memoryMsg: AgentMessage = {
|
||||
|
||||
3. Отримуємо:
|
||||
|
||||
* конспект (summary),
|
||||
- конспект (summary),
|
||||
|
||||
* витяг корисних фактів,
|
||||
- витяг корисних фактів,
|
||||
|
||||
* пропозиції правил.
|
||||
- пропозиції правил.
|
||||
|
||||
4. Записуємо:
|
||||
|
||||
* summary → mid-term,
|
||||
- summary → mid-term,
|
||||
|
||||
* факти → long-term (appendFact),
|
||||
- факти → long-term (appendFact),
|
||||
|
||||
* пропозиції → evolution suggestions.
|
||||
- пропозиції → evolution suggestions.
|
||||
|
||||
### 7.2. Видалення шуму
|
||||
|
||||
Після успішної дистиляції:
|
||||
|
||||
* можна частину короткої памʼяті чистити;
|
||||
- можна частину короткої памʼяті чистити;
|
||||
|
||||
* можна перевести непотрібні `message` у архів.
|
||||
- можна перевести непотрібні `message` у архів.
|
||||
|
||||
---
|
||||
|
||||
# 8. Контроль з боку користувача
|
||||
## 8. Контроль з боку користувача
|
||||
|
||||
У UI потрібно дати користувачу можливість:
|
||||
|
||||
1. Переглядати памʼять (принаймні long-term):
|
||||
|
||||
* список фактів,
|
||||
- список фактів,
|
||||
|
||||
* розділений по каналах / темах.
|
||||
- розділений по каналах / темах.
|
||||
|
||||
2. Видаляти факти:
|
||||
|
||||
* для конфіденційних даних,
|
||||
- для конфіденційних даних,
|
||||
|
||||
* при помилках.
|
||||
- при помилках.
|
||||
|
||||
3. Вимикати зберігання:
|
||||
|
||||
* «Не зберігати DM-переписку з агентом у довгострокову памʼять».
|
||||
- «Не зберігати DM-переписку з агентом у довгострокову памʼять».
|
||||
|
||||
4. Експортувати памʼять:
|
||||
|
||||
* для аудиту / переносу.
|
||||
- для аудиту / переносу.
|
||||
|
||||
---
|
||||
|
||||
# 9. Memory Scopes vs Agent Roles
|
||||
## 9. Memory Scopes vs Agent Roles
|
||||
|
||||
### Guide Agent (онбординг)
|
||||
|
||||
* short-term: поточна сесія онбордингу;
|
||||
- short-term: поточна сесія онбордингу;
|
||||
|
||||
* long-term: факти про те, як виглядає створена команда (не обовʼязково).
|
||||
- long-term: факти про те, як виглядає створена команда (не обовʼязково).
|
||||
|
||||
### Team Assistant
|
||||
|
||||
* short-term: останні діалоги в конкретному каналі;
|
||||
- short-term: останні діалоги в конкретному каналі;
|
||||
|
||||
* mid-term: summaries мітингів / сесій;
|
||||
- mid-term: summaries мітингів / сесій;
|
||||
|
||||
* long-term: знання про команду, процеси, словник.
|
||||
- long-term: знання про команду, процеси, словник.
|
||||
|
||||
### Meta-Agent
|
||||
|
||||
* працює на mid-/long-term даних:
|
||||
- працює на mid-/long-term даних:
|
||||
|
||||
* аналізує їх,
|
||||
- аналізує їх,
|
||||
|
||||
* пропонує зміни в правилах,
|
||||
- пропонує зміни в правилах,
|
||||
|
||||
* оновлює памʼять.
|
||||
- оновлює памʼять.
|
||||
|
||||
---
|
||||
|
||||
# 10. Псевдокод реалізації Adapter'а
|
||||
## 10. Псевдокод реалізації Adapter'а
|
||||
|
||||
```ts
|
||||
export class PgAgentMemoryAdapter implements AgentMemoryAdapter {
|
||||
@@ -398,11 +398,11 @@ export class PgAgentMemoryAdapter implements AgentMemoryAdapter {
|
||||
// TODO: обчислити embedding та зберегти у agent_memory_facts_vector
|
||||
}
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 11. RAG Implementation
|
||||
## 11. RAG Implementation
|
||||
|
||||
## 11.1. Embedding Generation
|
||||
|
||||
@@ -417,7 +417,7 @@ export async function generateEmbedding(text: string): Promise<number[]> {
|
||||
const result = await embeddings.embedQuery(text);
|
||||
return result;
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.2. Vector Search
|
||||
|
||||
@@ -448,7 +448,7 @@ export async function searchRelevantFacts(
|
||||
score: r.similarity,
|
||||
}));
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 11.3. Integration with runAgentTurn
|
||||
|
||||
@@ -479,11 +479,11 @@ export async function runAgentTurn(ctx: AgentContext): Promise<AgentTurnResult>
|
||||
|
||||
// ... решта логіки
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 12. Distillation Job Implementation
|
||||
## 12. Distillation Job Implementation
|
||||
|
||||
```ts
|
||||
export async function runDistillationJob(
|
||||
@@ -569,11 +569,11 @@ export async function runDistillationJob(
|
||||
},
|
||||
});
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 13. Database Schema
|
||||
## 13. Database Schema
|
||||
|
||||
## 13.1. agent_memory_events
|
||||
|
||||
@@ -594,7 +594,7 @@ CREATE TABLE agent_memory_events (
|
||||
INDEX idx_agent_channel (agent_id, channel_id),
|
||||
INDEX idx_created_at (created_at)
|
||||
);
|
||||
```
|
||||
```text
|
||||
|
||||
## 13.2. agent_memory_facts_vector
|
||||
|
||||
@@ -613,11 +613,11 @@ CREATE TABLE agent_memory_facts_vector (
|
||||
INDEX idx_agent_team (agent_id, team_id),
|
||||
INDEX idx_embedding USING ivfflat (embedding vector_cosine_ops)
|
||||
);
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 14. API Endpoints
|
||||
## 14. API Endpoints
|
||||
|
||||
## 14.1. GET /agents/{id}/memory
|
||||
|
||||
@@ -640,7 +640,7 @@ export async function getAgentMemory(req: Request, res: Response) {
|
||||
items: memory,
|
||||
});
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.2. DELETE /agents/{id}/memory/{memoryId}
|
||||
|
||||
@@ -657,7 +657,7 @@ export async function deleteMemoryItem(req: Request, res: Response) {
|
||||
|
||||
res.json({ success: true });
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
## 14.3. POST /agents/{id}/memory/distill
|
||||
|
||||
@@ -676,33 +676,33 @@ export async function triggerDistillation(req: Request, res: Response) {
|
||||
|
||||
res.json({ success: true });
|
||||
}
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 15. Інтеграція з еволюційним агентом (09)
|
||||
## 15. Інтеграція з еволюційним агентом (09)
|
||||
|
||||
Еволюційний агент:
|
||||
|
||||
* читає `agent_memory_events` (особливо з негативним фідбеком),
|
||||
- читає `agent_memory_events` (особливо з негативним фідбеком),
|
||||
|
||||
* агрегує логи,
|
||||
- агрегує логи,
|
||||
|
||||
* робить distillation,
|
||||
- робить distillation,
|
||||
|
||||
* створює пропозиції покращень.
|
||||
- створює пропозиції покращень.
|
||||
|
||||
Memory System → джерело для:
|
||||
|
||||
* аналізу діалогів,
|
||||
- аналізу діалогів,
|
||||
|
||||
* виявлення патернів,
|
||||
- виявлення патернів,
|
||||
|
||||
* побудови Train-to-Earn.
|
||||
- побудови Train-to-Earn.
|
||||
|
||||
---
|
||||
|
||||
# 16. Тестування
|
||||
## 16. Тестування
|
||||
|
||||
## 16.1. Unit Tests
|
||||
|
||||
@@ -733,15 +733,15 @@ describe("PgAgentMemoryAdapter", () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 17. Завдання для Cursor
|
||||
## 17. Завдання для Cursor
|
||||
|
||||
Приклад промта:
|
||||
|
||||
```
|
||||
```text
|
||||
You are a senior backend engineer.
|
||||
|
||||
Implement the Agent Memory System for MicroDAO using:
|
||||
@@ -769,25 +769,24 @@ Output:
|
||||
- list of modified files
|
||||
- diff
|
||||
- summary
|
||||
```
|
||||
```text
|
||||
|
||||
---
|
||||
|
||||
# 18. Результат
|
||||
## 18. Результат
|
||||
|
||||
Після впровадження цієї системи:
|
||||
|
||||
* агенти MicroDAO мають справжню багаторівневу памʼять;
|
||||
- агенти MicroDAO мають справжню багаторівневу памʼять;
|
||||
|
||||
* можна керувати тим, що саме вони памʼятають;
|
||||
- можна керувати тим, що саме вони памʼятають;
|
||||
|
||||
* можна будувати RAG, еволюційний аналіз, Train-to-Earn;
|
||||
- можна будувати RAG, еволюційний аналіз, Train-to-Earn;
|
||||
|
||||
* перехід до DAGI стає природним — через спільну колективну памʼять агентів.
|
||||
- перехід до DAGI стає природним — через спільну колективну памʼять агентів.
|
||||
|
||||
---
|
||||
|
||||
**Готово.**
|
||||
Це **повна специфікація системи пам'яті агентів**, готова до використання в Cursor.
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user