Un paquete NuGet simple y eficiente para generar embeddings de texto utilizando Azure OpenAI y Ollama. Ideal para implementaciones RAG (Retrieval-Augmented Generation).
$ dotnet add package Cosmos.RAG.EmbeddingUn paquete NuGet simple y eficiente para generar embeddings de texto utilizando diferentes proveedores como Azure OpenAI y Ollama local.
RAG (Retrieval-Augmented Generation) es una técnica que combina la recuperación de información con la generación de texto. Permite a los modelos de IA acceder a información externa y actualizada para proporcionar respuestas más precisas y contextualmente relevantes.
El proceso típico de RAG incluye:
Los embeddings son representaciones numéricas (vectores) de texto que capturan el significado semántico. Textos con significados similares tendrán embeddings cercanos en el espacio vectorial.
Características clave:
Este paquete proporciona una abstracción simple sobre diferentes servicios de embedding:
Cosmos.Contabilidad.RAG.Embedding/
├── IEmbeddingService.cs # Interfaz principal
├── EmbeddingFactory.cs # Factory para crear servicios
├── OpenAI/
│ ├── OpenAIEmbeddingService.cs # Implementación Azure OpenAI
│ └── OpenAIEmbeddingConfiguration.cs # Configuración
└── Ollama/
└── OllamaEmbeddingService.cs # Implementación Ollama local
Componentes principales:
EmbeddingText()ReadOnlyMemory<float> para máxima flexibilidaddotnet add package Cosmos.RAG.EmbeddingO agregando la referencia al .csproj:
<PackageReference Include="Cosmos.RAG.Embedding" Version="0.1.0" />using Cosmos.Contabilidad.RAG.Embedding;
using Cosmos.Contabilidad.RAG.Embedding.OpenAI;
// Configurar el servicio de Azure OpenAI
var config = new OpenAIEmbeddingConfiguration(
Endpoint: "https://tu-instancia.openai.azure.com/",
ApiKey: "tu-api-key",
EmbeddingModel: "text-embedding-ada-002"
);
// Crear el servicio usando el factory
IEmbeddingService embeddingService = EmbeddingFactory.CreateWithOpenAI(config);
// Generar embedding para un texto
string texto = "Este es un texto de ejemplo para generar embedding";
var embedding = await embeddingService.EmbeddingText(texto, CancellationToken.None);
// El embedding es un ReadOnlyMemory<float> que puedes usar como necesites
Console.WriteLine($"Embedding generado con {embedding.Length} dimensiones");
// Convertir a array si es necesario
float[] embeddingArray = embedding.ToArray();
// O acceder directamente al span
ReadOnlySpan<float> embeddingSpan = embedding.Span;// Crear servicio con configuración por defecto (localhost:11434)
IEmbeddingService embeddingService = EmbeddingFactory.CreateWithLocal();
// O con configuración personalizada
IEmbeddingService customService = EmbeddingFactory.CreateWithLocal(
url: "http://localhost:11434/",
model: "nomic-embed-text:v1.5"
);
// Generar embedding
var embedding = await embeddingService.EmbeddingText("Texto a embebir", CancellationToken.None);Los embeddings generados son compatibles con múltiples bases de datos:
using Pgvector;
// Convertir ReadOnlyMemory<float> a Vector de pgvector
var embedding = await embeddingService.EmbeddingText("Mi texto");
var pgVector = new Vector(embedding.ToArray());
// Insertar en PostgreSQL
await connection.ExecuteAsync(
"INSERT INTO documentos (texto, embedding) VALUES (@texto, @embedding)",
new { texto = "Mi documento", embedding = pgVector }
);// Para sistemas que requieren float[]
float[] embeddingArray = embedding.ToArray();
// Para sistemas que trabajan con listas
List<float> embeddingList = embedding.ToArray().ToList();
// Para acceso directo sin copia (más eficiente)
ReadOnlySpan<float> embeddingSpan = embedding.Span;✅ Múltiples proveedores: Azure OpenAI y Ollama
✅ Async/await: Soporte completo para operaciones asíncronas
✅ Cancellation tokens: Para cancelar operaciones largas
✅ Tipo flexible: ReadOnlyMemory<float> para máxima compatibilidad
✅ Configuración tipada: Records inmutables para configuración
✅ Factory pattern: Creación simple de servicios
✅ Sin dependencias específicas: Compatible con cualquier BD vectorial
Este proyecto está bajo la licencia de Cosmos.