Создание самоорганизующихся графов знаний Zettelkasten
Изучите передовой AI с системой памяти Zettelkasten в этом руководстве.
Обзор
В этом руководстве мы погружаемся в передовой AI, создавая систему памяти "Zettelkasten" — "живую" архитектуру, которая организует информацию, подобно человеку. Мы выходим за пределы стандартных методов поиска, создавая динамический граф знаний, где агент автономно разлагает входные данные на атомарные факты, связывает их семантически и даже "спит", чтобы консолидировать воспоминания в более высокие прозорливые идеи.
Используя Gemini от Google, мы реализуем надежное решение, которое учитывает реальные ограничения API, обеспечивая, что наш агент хранит данные и активно понимает развивающийся контекст наших проектов.
Основные библиотеки
Мы начинаем с импорта необходимых библиотек для управления графами и взаимодействия с AI. Ключевым моментом является определение надежной функции retry_with_backoff, которая автоматически обрабатывает ошибки ограничения скорости, что позволяет нашему агенту плавно приостанавливать и восстанавливаться.
!pip install -q -U google-generativeai networkx pyvis scikit-learn numpy
import os
import json
import uuid
import time
from dataclasses import dataclass, field
from typing import List
from sklearn.metrics.pairwise import cosine_similarity
import google.generativeai as genaiСтруктура MemoryNode
Мы определяем фундаментальную структуру MemoryNode, чтобы хранить наше содержимое, типы и векторные вложения в организованном классе данных. Затем мы инициализируем основной класс RobustZettelkasten, устанавливая сетевой граф и настраивая модель вложения Gemini.
@dataclass
class MemoryNode:
id: str
content: str
type: str
embedding: List[float] = field(default_factory=list)
timestamp: int = 0
class RobustZettelkasten:
def __init__(self):
self.graph = nx.Graph()
self.model = genai.GenerativeModel(MODEL_NAME)Поглощение информации
Мы создаем конвейер приема, который разлагает сложные пользовательские вводы на атомарные факты, предотвращая потерю информации. Мы сразу же встраиваем эти факты и используем нашего агента для определения и создания семантических связей с существующими узлами, эффективно строя граф знаний в реальном времени.
def add_memory(self, user_input):
self.step_counter += 1
facts = self._atomize_input(user_input)
for fact in facts:
emb = self._get_embedding(fact)
candidates = self._find_similar_nodes(emb)Консолидация памяти
Мы реализуем когнитивные функции нашего агента, позволяя ему "спать" и консолидация плотных кластеров памяти в более высокие прозорливые идеи. Мы также определяем логику запросов, которая перемещается по этим связанным путям, позволяя агенту разбирать сложные вопросы.
def consolidate_memory(self):
high_degree_nodes = [n for n, d in self.graph.degree() if d >= 2]
for main_node in high_degree_nodes:
cluster_content = [self.graph.nodes[n]['data'].content for n in cluster_ids]Визуализация
Мы завершаем добавлением метода визуализации, который создает интерактивный HTML-граф памяти нашего агента, позволяя нам проверять узлы и связи.
def show_graph(self):
net = Network(notebook=True)
for n, data in self.graph.nodes(data=True):
net.add_node(n, label=data.get('label', ''))Заключение
Активно связывая связанные концепции и размышляя в фазе "консолидации", мы решаем критическую проблему фрагментации контекста в длительных взаимодействиях AI. Эта система открывает возможности для построения более способных автономных агентов.
Switch Language
Read this article in English