¿Qué es la búsqueda de texto del kernel semántico?
Advertencia
La funcionalidad Búsqueda de texto de kernel semántica es una versión preliminar y las mejoras que requieren cambios importantes pueden producirse en circunstancias limitadas antes de la versión.
El kernel semántico proporciona funcionalidades que permiten a los desarrolladores integrar la búsqueda al llamar a un modelo de lenguaje grande (LLM). Esto es importante porque LLM está entrenado en conjuntos de datos fijos y puede necesitar acceso a datos adicionales para responder con precisión a una pregunta del usuario.
El proceso de proporcionar contexto adicional al solicitar un LLM se denomina Generación aumentada de recuperación (RAG). RAG normalmente implica recuperar datos adicionales relevantes para el usuario actual y aumentar la solicitud enviada al LLM con estos datos. LlM puede usar su entrenamiento más el contexto adicional para proporcionar una respuesta más precisa.
Un ejemplo sencillo de cuándo esto es importante es cuando la solicitud del usuario está relacionada con la información actualizada no incluida en el conjunto de datos de entrenamiento de LLM. Al realizar una búsqueda de texto adecuada e incluir los resultados con la pregunta del usuario, se lograrán respuestas más precisas.
El kernel semántico proporciona un conjunto de funcionalidades de búsqueda de texto que permiten a los desarrolladores realizar búsquedas mediante bases de datos de búsqueda web o vectores y agregar fácilmente RAG a sus aplicaciones.
Implementación de RAG mediante la búsqueda de texto web
En el código de ejemplo siguiente puede elegir entre el uso de Bing o Google para realizar operaciones de búsqueda web.
Sugerencia
Para ejecutar los ejemplos que se muestran en esta página, vaya a GettingStartedWithTextSearch/Step1_Web_Search.cs.
Creación de una instancia de búsqueda de texto
Cada ejemplo crea una instancia de búsqueda de texto y, a continuación, realiza una operación de búsqueda para obtener los resultados de la consulta proporcionada. Los resultados de la búsqueda contendrán un fragmento de texto de la página web que describe su contenido. Esto solo proporciona un contexto limitado, es decir, un subconjunto del contenido de la página web y ningún vínculo al origen de la información. Los ejemplos posteriores muestran cómo abordar estas limitaciones.
Sugerencia
En el código de ejemplo siguiente se usa el conector OpenAI del kernel semántico y los complementos web, instale mediante los siguientes comandos:
dotnet add package Microsoft.SemanticKernel
dotnet add package Microsoft.SemanticKernel.Plugins.Web
Bing Web Search
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create an ITextSearch instance using Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
var query = "What is the Semantic Kernel?";
// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
Console.WriteLine(result);
}
Búsqueda web de Google
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;
// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
searchEngineId: "<Your Google Search Engine Id>",
apiKey: "<Your Google API Key>");
var query = "What is the Semantic Kernel?";
// Search and return results
KernelSearchResults<string> searchResults = await textSearch.SearchAsync(query, new() { Top = 4 });
await foreach (string result in searchResults.Results)
{
Console.WriteLine(result);
}
Sugerencia
Para obtener más información sobre los tipos de resultados de búsqueda que se pueden recuperar, consulte la documentación sobre complementos de búsqueda de texto.
Uso de resultados de búsqueda de texto para aumentar un mensaje
Los pasos siguientes son crear un complemento a partir de la búsqueda de texto web e invocar el complemento para agregar los resultados de búsqueda al símbolo del sistema.
El código de ejemplo siguiente muestra cómo lograrlo:
- Cree un
Kernel
objeto que tenga registrado un servicio OpenAI. Se usará para llamar al modelo con el símbolo delgpt-4o
sistema. - Cree una instancia de búsqueda de texto.
- Cree un complemento de búsqueda a partir de la instancia de búsqueda de texto.
- Cree una plantilla de aviso que invoque el complemento de búsqueda con la consulta e incluya los resultados de búsqueda en el símbolo del sistema junto con la consulta original.
- Invoque el símbolo del sistema y muestre la respuesta.
El modelo proporcionará una respuesta que se basa en la información más reciente disponible desde una búsqueda web.
Bing Web Search
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Bing;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
Kernel kernel = kernelBuilder.Build();
// Create a text search using Bing search
var textSearch = new BingTextSearch(apiKey: "<Your Bing API Key>");
// Build a text search plugin with Bing search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));
Búsqueda web de Google
using Microsoft.SemanticKernel.Data;
using Microsoft.SemanticKernel.Plugins.Web.Google;
// Create a kernel with OpenAI chat completion
IKernelBuilder kernelBuilder = Kernel.CreateBuilder();
kernelBuilder.AddOpenAIChatCompletion(
modelId: "gpt-4o",
apiKey: "<Your OpenAI API Key>");
Kernel kernel = kernelBuilder.Build();
// Create an ITextSearch instance using Google search
var textSearch = new GoogleTextSearch(
searchEngineId: "<Your Google Search Engine Id>",
apiKey: "<Your Google API Key>");
// Build a text search plugin with Google search and add to the kernel
var searchPlugin = textSearch.CreateWithSearch("SearchPlugin");
kernel.Plugins.Add(searchPlugin);
// Invoke prompt and use text search plugin to provide grounding information
var query = "What is the Semantic Kernel?";
var prompt = "{{SearchPlugin.Search $query}}. {{$query}}";
KernelArguments arguments = new() { { "query", query } };
Console.WriteLine(await kernel.InvokePromptAsync(prompt, arguments));
Hay una serie de problemas con el ejemplo anterior:
- La respuesta no incluye citas que muestran las páginas web que se usaron para proporcionar contexto de base.
- La respuesta incluirá datos de cualquier sitio web, sería mejor limitar esto a sitios de confianza.
- Solo se usa un fragmento de código de cada página web para proporcionar contexto de base al modelo, es posible que el fragmento de código no contenga los datos necesarios para proporcionar una respuesta precisa.
Consulte la página en la que se describen los complementos de búsqueda de texto para obtener soluciones a estos problemas.
A continuación, se recomienda examinar las abstracciones de búsqueda de texto.
Próximamente
Más próximamente.
Próximamente
Más próximamente.