rony-llm-agent/pkg/rag/README.md

2 KiB

pkg/rag

Retrieval-Augmented Generation: memoria, embeddings, y búsqueda semántica.

Responsabilidad

Proveer memoria persistente y búsqueda semántica sobre el contenido del agente.

Componentes

Tipo Qué guarda Persistencia
Working Mensajes de la sesión actual RAM
Episodic Eventos pasados (qué hice el día X) Vector DB
Semantic Conocimiento consolidado Vector DB (curado)
Procedural Patrones de uso (workflows) Vector DB (auto-aprendido)

API pública

type Memory interface {
    Add(ctx context.Context, fragment Fragment) error
    Search(ctx context.Context, query string, topK int) ([]Fragment, error)
    Forget(ctx context.Context, id string) error
}

type Fragment struct {
    ID         string
    Content    string
    Vector     []float32
    Metadata   map[string]string
    Timestamp  time.Time
    ProjectID  string
}

type Embedder interface {
    Embed(ctx context.Context, text string) ([]float32, error)
    Dimensions() int
}

Backends

Backend Cuándo usar
ChromaDB embedded Default. Simple, suficiente para <100k docs
Qdrant embedded Si necesitas >100k docs o queries muy rápidas
SQLite + sqlite-vec Si quieres zero-dependency (sin CGO con modernc.org/sqlite)

Embeddings

Provider Modelo Dimensiones
Ollama nomic-embed-text 768
Ollama bge-m3 1024
Local ONNX all-MiniLM-L6-v2 384

Uso

import "github.com/VictorVargas/rony-llm-agent/pkg/rag"
import "github.com/VictorVargas/rony-llm-agent/pkg/rag/backends/chroma"

backend, _ := chroma.New(chroma.Config{
    Path: "~/.local/share/rony/chroma",
})

memory := rag.New(rag.Config{
    Backend: backend,
    Embedder: ollamaEmbedder,
})

err := memory.Add(ctx, rag.Fragment{
    Content: "Refactoricé auth.go usando hexagonal",
    ProjectID: "rony",
})

Ver también

  • pkg/agent — Inyecta memoria al loop
  • pkg/llm — Para summarization en compaction