<НА ГЛАВНУЮ

Создание самоорганизующихся графов знаний 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

Switch to English