2.1 KiB
2.1 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",
})