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