Uso de Ollama con la API de inferencia

Aprende cómo integrar Ollama con Elasticsearch usando la API de Inference.

Elasticsearch tiene integraciones nativas con las herramientas y proveedores líderes en la industria de IA generativa. Echa un vistazo a nuestros webinars sobre cómo ir más allá de los conceptos básicos de RAG o crear apps listas para la producción con la base de datos vectorial de Elastic.

Para crear las mejores soluciones de búsqueda para tu caso de uso, inicia una prueba gratuita en el cloud o prueba Elastic en tu máquina local ahora mismo.

En este artículo, aprenderemos cómo conectar modelos locales al modelo de inferencia de Elasticsearch usando Ollama y luego hacer preguntas a tus documentos usando Playground.

Elasticsearch permite a los usuarios conectarse a LLM empleando la API de Open Inference, compatible con proveedores como Amazon Bedrock, Cohere, Google AI, Azure AI Studio, HuggingFace, como servicio, entre otros.

Ollama es una herramienta que le permite descargar y ejecutar modelos LLM empleando su propia infraestructura (su máquina/servidor local). Aquí puedes encontrar una lista de los modelos disponibles que son compatibles con Ollama.

Ollama es una gran opción si quieres alojar y probar diferentes modelos de código abierto sin tener que preocuparte por las diferentes formas en que se podría tener que configurar cada uno de los modelos, o por cómo crear una API para acceder a las funciones del modelo, ya que Ollama se encarga de todo.

Dado que la API de Ollama es compatible con la API de OpenAI, podemos integrar fácilmente el modelo de inferencia y crear una aplicación RAG empleando Playground.

Prerrequisitos

  1. Elasticsearch 8.17
  2. Kibana 8.17
  3. Python

Pasos

  1. Configuración del servidor Ollama LLM
  2. Creación de asignaciones
  3. Indexación de datos
  4. Hacer preguntas con Playground

Configuración del servidor Ollama LLM

Vamos a configurar un servidor LLM para conectarlo a nuestra instancia de Playground usando Ollama. Necesitaremos:

  • Descargue y ejecute Ollama.
  • Use ngrok para acceder al servidor sitio web local que hospeda Ollama a través de Internet

Descarga y ejecuta Ollama

Para usar Ollama, primero debemos descargarlo. Ollama ofrece soporte para Linux, Windows y macOS, así que simplemente descargue la versión de Ollama compatible con su sistema operativo aquí. Una vez instalado Ollama, podemos elegir un modelo de esta lista de LLM compatibles. En este ejemplo, usaremos el modelo llama3.2, un modelo general multilingüe. En el proceso de configuración, habilitará la herramienta de línea de comandos para Ollama. Una vez descargado, puede ejecutar la siguiente línea:

Lo que dará como resultado:

Una vez instalado, puede probarlo con este comando:

Hagamos una pregunta:

Con el modelo en ejecución, Ollama habilita una API que se ejecutaría de forma predeterminada en el puerto "11434". Hagamos una solicitud a esa API, siguiendo la documentación oficial:

Esta es la respuesta que obtuvimos:

Tenga en cuenta que la respuesta específica para este punto de conexión es una transmisión.

Exponer el punto de conexión a Internet mediante ngrok

Dado que nuestro endpoint funciona en un entorno local, no se puede acceder a él desde otro punto, como nuestra instancia de Elastic Cloud, a través de Internet. ngrok nos permite exponer un puerto que ofrece una IP pública. Cree una cuenta en ngrok y siga la guía de configuración oficial.

Una vez instalado y configurado el agente ngrok, podemos exponer el puerto que usa Ollama:

Nota: El encabezado --host-header="localhost:11434" garantiza que el encabezado "Host" de las solicitudes coincida con "localhost:11434"

La ejecución de este comando devolverá un vínculo público que funcionará siempre que ngrok y el servidor de Ollama se ejecuten localmente.

En "Reenvío" podemos ver que ngrok generó una dirección URL. Almacénalo para más tarde.

Intentemos realizar una solicitud HTTP al punto de conexión de nuevo, ahora con la dirección URL generada por ngrok:

La respuesta debe ser similar a la anterior.

Creación de asignaciones

Punto final ELSER

Para este ejemplo, crearemos un punto final de inferencia mediante la API de inferencia de Elasticsearch. Además, usaremos ELSER para generar las incrustaciones.

Para este ejemplo, imaginemos que tiene una farmacia que vende dos tipos de medicamentos:

  • Medicamentos que requieren receta médica.
  • Medicamentos que NO requieren receta médica.

Esta información se incluiría en el campo de descripción de cada medicamento.

El LLM debe interpretar este campo, por lo que estas son las asignaciones de datos que usaremos:

El campo text_description almacenará el texto sin formato de las descripciones, mientras que semantic_field, que es un tipo de campo semantic_text , almacenará las incrustaciones generadas por ELSER.

La propiedad copy_to copiará el contenido del nombre y la text_description de los campos en el campo semántico para que se generen las incrustaciones de esos campos.

Indexación de datos

Ahora, indexemos los datos usando la API de _bulk.

Respuesta:

Hacer preguntas con Playground

Playground es una herramienta de Kibana que te permite crear rápidamente un sistema RAG empleando índices de Elasticsearch y un proveedor de LLM. Puedes leer este artículo para saber más al respecto.

Conectando el LLM local con Playground

Primero debemos crear un conector que use la dirección URL pública que acabamos de crear. En Kibana, ve a Buscar>Playground y luego haz clic en "Conectar a un LLM".

Esta acción revelará un menú en el lado izquierdo de la interfaz de Kibana. Allí, haga clic en "OpenAI".

Ahora podemos comenzar a configurar el conector OpenAI.

Vaya a "Configuración del conector" y para el proveedor de OpenAI, seleccione "Otro (servicio compatible con OpenAI)":

Ahora, configuremos los otros campos. Para este ejemplo, llamaremos a nuestro modelo "medicines-llm". En el campo URL, usa la que genera ngrok (/v1/chat/completions). En el campo "Modelo predeterminado", selecciona "llama3.2". No usaremos una clave API, así que simplemente pon cualquier texto aleatorio para continuar:

Haga clic en "Almacenar" y agregue los medicamentos índice haciendo clic en "Agregar fuentes de datos":

¡Bien! Ahora tenemos acceso a Playground usando el LLM que estamos ejecutando localmente como motor RAG.

Antes de probarlo, agreguemos instrucciones más específicas al agente y aumentemos el número de documentos enviados al modelo a 10, para que la respuesta tenga la mayor cantidad de documentos posibles disponibles. El campo de contexto será semantic_field, que incluye el nombre y la descripción de los medicamentos, gracias a la propiedad copy_to.

Ahora hagamos la pregunta: ¿Puedo comprar clonazepam sin receta? y vea qué sucede:

Como era de esperar, obtuvimos la respuesta correcta.

Pasos siguientes

¡El siguiente paso es crear su propia aplicación! Playground proporciona un script de código en Python que puede ejecutar en su máquina y personalizarlo para satisfacer sus necesidades. Por ejemplo, colocándolo detrás de un servidor FastAPI para crear un chatbot de medicamentos de control de calidad consumido por su interfaz de usuario.

Puedes encontrar este código haciendo clic en el botón Ver código en la sección superior derecha de Playground:

Y usa los puntos finales y las claves API para generar la variable de entorno ES_API_KEY requerida en el código.

Para este ejemplo en individuo, el código es el siguiente:

Para que funcione con Ollama, debe cambiar el cliente OpenAI para conectarse al servidor Ollama en lugar del servidor OpenAI. Puede encontrar la lista completa de ejemplos de OpenAI y puntos finales compatibles aquí.

Y también cambie el modelo a llama3.2 al llamar al método de finalización:

Agreguemos nuestra pregunta: ¿Puedo comprar Clonazepam sin receta? A la consulta de Elasticsearch:

Y también a la llamada de finalización con un par de impresiones, para que podamos confirmar que estamos enviando los resultados de Elasticsearch como parte del contexto de la pregunta:

Ahora ejecutemos el comando

pip install -qU elasticsearch openai

python main.py

Deberías ver algo como esto:

Conclusión

En este artículo, podemos ver el poder y la versatilidad de herramientas como Ollama cuando las usamos junto con la API de inferencia de Elasticsearch y Playground.

Luego de algunos pasos simples, teníamos una aplicación RAG en funcionamiento con un chat que usaba un LLM que se ejecutaba en nuestra propia infraestructura sin costo alguno. Esto también nos permite tener más control sobre los recursos y la información sensible, además de darnos acceso a una variedad de modelos para diferentes tareas.

Preguntas frecuentes

¿Qué es Ollama?

Ollama es una herramienta que te permite descargar y ejecutar modelos LLM usando tu propia infraestructura (tu máquina/servidor local).

Contenido relacionado

¿Estás listo para crear experiencias de búsqueda de última generación?

No se logra una búsqueda suficientemente avanzada con los esfuerzos de uno. Elasticsearch está impulsado por científicos de datos, operaciones de ML, ingenieros y muchos más que son tan apasionados por la búsqueda como tú. Conectemos y trabajemos juntos para crear la experiencia mágica de búsqueda que te dará los resultados que deseas.

Pruébalo tú mismo