El propósito de esta prueba de concepto es evaluar lo que se requiere para crear un chatbot versátil, confiable e intuitivo para que los usuarios interactúen con temas relacionados con Alkemio. El proyecto no se puede implementar tal como está, pero debería servir como un aporte valioso para mostrar capacidades generativas de IA y ayudar a evaluar lo que se requiere para incorporar esta funcionalidad en la plataforma.
Los modelos de lenguajes grandes (LLM) han mejorado significativamente en el período reciente y no son ubicuos ni eficientes. Esto abre muchas posibilidades para su uso en diferentes áreas. OpenAI es el proveedor comercial de LLM más conocido, pero existen amplias opciones para modelos LLM, ya sean comerciales o de código abierto. Si bien esto ofrece opciones, también crea el riesgo de dependencia del proveedor.
Los LLM son solo un componente necesario para la implementación práctica de soluciones de IA generativa, y también son necesarios muchos otros "elementos básicos". Langchain es una popular biblioteca de código abierto que proporciona estos componentes básicos y crea una capa de abstracción, creando independencia del proveedor.
La formación de un LLM es prohibitivamente costosa para la mayoría de las organizaciones, pero para la mayoría de las implementaciones prácticas existe la necesidad de incorporar datos específicos de la organización. Un enfoque común es agregar contexto específico a la pregunta de un usuario en el mensaje que se envía al LLM. Esto plantea un desafío, ya que los LLM generalmente solo permiten indicaciones con un tamaño finito (generalmente alrededor de 4k tokens). Por lo tanto, es importante que se proporcione la información contextual relevante y para ello se debe hacer lo siguiente:
Este proyecto se ha inspirado en muchos artículos, pero teóricos y prácticos. Una parte importante del código base proviene del proyecto Creación de un chatbot de buena arquitectura de AWS con LangChain.
El proyecto se ha implementado como un microservicio basado en contenedores con un RPC RabbitMQ. Hay una cola RabbitMQ:
alkemio-virtual-contributor-engine-guidance
: cola para enviar solicitudes al microservicioLa carga útil de la solicitud consta de json con la siguiente estructura (ejemplo de una consulta):
{
"data": {
"userId": "userID",
"question": "What are the key Alkemio concepts?",
"language": "UK"
},
"pattern": {
"cmd": "query"
}
}
Los tipos de operación son:
ingest
: recopilación de datos del sitio web de la fundación Alkemio (a través de la fuente de Github) e incrustación utilizando el modelo de texto OpenAI Ada, sin datos de solicitud adicionales .reset
: restablece el historial de chat para el chat en curso, necesita ID de usuario.query
: publique la siguiente pregunta en una secuencia de chat, ver ejemploLa respuesta se publica en una cola sin nombre, exclusiva y generada automáticamente.
Existe un borrador de implementación para el lenguaje de interacción del modelo (esto necesita una mejora significativa). Si no se especifica ningún código de idioma, se asumirá el inglés. Las opciones son: 'EN': 'inglés', 'US': 'inglés', 'UK': 'inglés', 'FR': 'francés', 'DE': 'alemán', 'ES': 'español' , 'NL': 'holandés', 'BG': 'búlgaro', 'UA': "ucraniano"
*nota: hay una implementación RESTful anterior (obsoleta) disponible en https://github.com/alkem-io/virtual-contributor-engine-guidance/tree/http-api
El siguiente comando se puede utilizar para construir el contenedor desde Docker CLI (la arquitectura predeterminada es amd64, por lo que --build-arg ARCHITECTURE=arm64
para compilaciones amd64): docker build --build-arg ARCHITECTURE=arm64 --no-cache -t alkemio/virtual-contributor-engine-guidance:v0.4.0 .
docker build --no-cache -t alkemio/virtual-contributor-engine-guidance:v0.2.0 .
El Dockerfile tiene algunos argumentos de configuración que se explican por sí mismos.
El siguiente comando se puede utilizar para iniciar el contenedor desde la CLI de Docker: docker run --name virtual-contributor-engine-guidance -v /dev/shm:/dev/shm --env-file .env virtual-contributor-engine-guidance
donde .env
basado en .azure-template.env
Alternativamente use docker-compose up -d
.
con:
AZURE_OPENAI_API_KEY
: una clave API de OpenAI válidaOPENAI_API_VERSION
: una versión válida de Azure OpenAI. En el momento de escribir este artículo, la última fecha es 2023-05-15
AZURE_OPENAI_ENDPOINT
: una URL base válida de Azure OpenAI, por ejemplo https://{your-azure-resource-name}.openai.azure.com/
RABBITMQ_HOST
: el nombre de host de RabbitMQRABBITMQ_USER
: el usuario de RabbitMQRABBITMQ_PASSWORD
: la contraseña de RabbitMQAI_MODEL_TEMPERATURE
: la temperature
del modelo, use un valor entre 0 y 1. 1 significa una respuesta más aleatoria, más cercana a 0, una más estrictaLLM_DEPLOYMENT_NAME
: el nombre de implementación del modelo AI gpt en AzureEMBEDDINGS_DEPLOYMENT_NAME
: el nombre de implementación del modelo de incrustaciones de IA en AzureAI_SOURCE_WEBSITE
: la URL del sitio web de la fundación que contiene los datos de origen (solo como referencia)AI_SOURCE_WEBSITE2
: la URL del sitio web de bienvenida que contiene los datos de origen (solo como referencia)AI_LOCAL_PATH
: ruta del archivo local para almacenar datosAI_WEBSITE_REPO
: URL del repositorio Git que contiene los datos de origen del sitio web de la fundación, basado en Hugo, sin httpsAI_WEBSITE_REPO2
: URL del repositorio Git que contiene los datos fuente del sitio web de bienvenida, basado en Hugo, sin httpsAI_GITHUB_USER
: usuario de Github utilizado para clonar repositorios de sitios webAI_GITHUB_PAT
: Token de acceso personal para clonar repositorios de sitios webLANGCHAIN_TRACING_V2
: habilitar el seguimiento de LangchainLANGCHAIN_ENDPOINT
: punto final de seguimiento de Langchain (por ejemplo, "https://api.smith.langchain.com")LANGCHAIN_API_KEY
: clave API de seguimiento de LangchainLANGCHAIN_PROJECT
: nombre del proyecto de seguimiento de Langchain (por ejemplo, "virtual-contributor-engine-guidance") Puede encontrar valores de ejemplo en .azure-template.env
. Configúrelos y cree un archivo .env
con la configuración actualizada.
El proyecto requiere Python & Poetry instalado. Las dependencias mínimas de la versión se pueden encontrar en pyproject.toml
. Después de instalar Python y poesía:
poetry install
poetry run python virtual_contributor_engine_guidance.py
El proyecto requiere Python 3.11 como mínimo y necesita tener instalados Go y Hugo para crear una versión local del sitio web. Consulte la documentación de Go y Hugo para obtener instrucciones de instalación (solo cuando se ejecuta fuera del contenedor)
Aún quedan pendientes las siguientes tareas: