MoralesLarios.Ai
1.0.0
dotnet add package MoralesLarios.Ai --version 1.0.0
NuGet\Install-Package MoralesLarios.Ai -Version 1.0.0
<PackageReference Include="MoralesLarios.Ai" Version="1.0.0" />
<PackageVersion Include="MoralesLarios.Ai" Version="1.0.0" />
<PackageReference Include="MoralesLarios.Ai" />
paket add MoralesLarios.Ai --version 1.0.0
#r "nuget: MoralesLarios.Ai, 1.0.0"
#:package MoralesLarios.Ai@1.0.0
#addin nuget:?package=MoralesLarios.Ai&version=1.0.0
#tool nuget:?package=MoralesLarios.Ai&version=1.0.0
MoralesLarios.Ai
Motor de filtrado en lenguaje natural asistido por IA para .NET.
Traduce lo que escribe (o dicta) el usuario a un AST JSON, de forma totalmente genérica: el prompt se construye por reflexión a partir del tipo de datos, sin una sola línea de código condicional por proveedor.
"pedidos de Madrid del último trimestre con importe mayor que 500"
↓ (LLM)
{ "op": "and", "nodes": [ { "field": "Ciudad", "op": "eq", "value": "Madrid" }, ... ] }
Instalación
dotnet add package MoralesLarios.Ai
Proveedores soportados
Todos a través de Microsoft.Extensions.AI, con la misma API y sin condicionales por proveedor:
| Proveedor | Notas |
|---|---|
| Groq | Muy rápido, endpoint compatible OpenAI (por defecto) |
| Ollama | Modelos locales (qwen2.5:32b, llama3.2…) |
| Google Gemini | Endpoint compatible OpenAI |
| Azure OpenAI | Despliegues empresariales |
Uso rápido
1. Configuración
appsettings.json (sección Ai, ver MlAiOptions.SectionName):
{
"Ai": {
"Provider": "Groq",
"MaxRetries": 4,
"Ollama": {
"Endpoint": "http://localhost:11434",
"Model": "qwen2.5:32b"
},
"Groq": {
"Endpoint": "https://api.groq.com/openai/v1",
"Model": "openai/gpt-oss-120b",
"ApiKey": "gsk_..."
},
"Gemini": {
"Endpoint": "https://generativelanguage.googleapis.com/v1beta/openai/",
"Model": "gemini-2.0-flash-lite",
"ApiKey": "..."
},
"AzureOpenAI": {
"Endpoint": "https://<recurso>.openai.azure.com",
"ApiKey": "...",
"Deployment": "gpt-4o-mini"
}
}
}
2. Registro en el contenedor
using Microsoft.Extensions.Options;
using MoralesLarios.Ai;
using MoralesLarios.Ai.Config;
var aiOptions = builder.Configuration
.GetSection(MlAiOptions.SectionName)
.Get<MlAiOptions>() ?? new MlAiOptions();
builder.Services.AddAi(Options.Create(aiOptions));
3. Generar el AST
El punto de entrada más cómodo es IAiFilterClientExecutorFp<T>: construye el prompt a partir de
T y devuelve el JSON del AST.
using MoralesLarios.Ai.Managers;
public class SearchService(IAiFilterClientExecutorFp<Order> executor)
{
public async Task<string?> ToAstAsync(string userText, CancellationToken ct = default)
{
// providerOverride: "" para usar el configurado, o "Groq" / "Ollama" / "Gemini" / "AzureOpenAI"
MlResult<string> result = await executor.GenerateFilterJsonAsync(userText, "", ct);
return result.IsValid ? result.Value : null;
}
}
Los resultados se devuelven como MlResult<T> (de
MoralesLarios.OOFP), por lo que los errores se
propagan como valores en lugar de excepciones.
Tipos principales
| Tipo | Rol |
|---|---|
MlAiOptions |
Configuración: proveedor activo, reintentos y ajustes por proveedor |
IAiChatClientFactoryFp |
Crea el IChatClient del proveedor seleccionado |
IGenMlFieldCatalog<T> |
Catálogo de campos de T obtenido por reflexión |
IMlFilterPromptBuilder<T> |
Construye el prompt (catálogo + gramática + few-shot) |
IAiFilterClientFp |
Invoca el modelo con un PromptOptions ya construido |
IAiFilterClientExecutorFp<T> |
Orquestador: lenguaje natural → JSON del AST |
Cómo se construye el prompt
MlFilterPromptBuilder<T> genera automáticamente:
- Catálogo de campos — nombre, tipo CLR y metadatos obtenidos por reflexión sobre
T(GenMlFieldCatalog<T>), incluyendo propiedades anidadas. - Gramática del AST — operadores de comparación y nodos de unión (
and/or). - Ejemplos few-shot — pares pregunta → AST sintetizados a partir de los propios campos de
T(GenMlFewShotExampleGenerator<T>), para que el modelo aprenda el formato exacto sin ejemplos escritos a mano.
El resultado es un prompt reutilizable con cualquier entidad, sin plantillas específicas por tipo.
Paquete relacionado
MoralesLarios.Blazor.Ia.IaFilterColection— componentes Blazor listos para usar (AiFilterPanel<TItem>) construidos sobre este motor, que además compilan el AST aExpression<Func<T, bool>>aplicable a cualquierIQueryableo colección en memoria.
Licencia
MIT © Morales Larios
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.AI (>= 10.8.1)
- Microsoft.Extensions.AI.OpenAI (>= 10.7.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- MoralesLarios.OOFP (>= 1.0.35)
- MoralesLarios.OOFP.Extensions.Loggers (>= 1.0.10)
- MoralesLarios.OOFP.Utilities (>= 1.0.3)
- MoralesLarios.OOFP.Validation (>= 1.0.1)
- MoralesLarios.OOFP.Validation.Dataannotations (>= 1.0.5)
- MoralesLarios.OOFP.ValueObjects (>= 1.0.12)
- OllamaSharp (>= 5.4.25)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on MoralesLarios.Ai:
| Package | Downloads |
|---|---|
|
MoralesLarios.Blazor.Ia.IaFilterColection
Librería de componentes Blazor. Incluye AiFilterPanel<TItem>: un panel de filtrado en lenguaje natural que convierte el texto (o la voz) del usuario en un AST JSON mediante un proveedor de IA (Ollama, Groq, Gemini, Azure OpenAI) y lo compila a una expresión LINQ aplicable a cualquier colección en memoria. Sin dependencias de librerías comerciales de UI. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 109 | 9/15/2026 |