O objetivo desta prova de conceito é avaliar o que é necessário para criar um chatbot versátil, confiável e intuitivo para os usuários interagirem em tópicos relacionados ao Alkemio. O projeto não pode ser implementado tal como está, mas deve servir como um contributo valioso para mostrar capacidades generativas de IA e ajudar a avaliar o que é necessário para incorporar esta funcionalidade na plataforma.
Os Grandes Modelos de Linguagem (LLMs) melhoraram significativamente no período recente e não são onipresentes e de alto desempenho. Isso abre muitas possibilidades para seu uso em diferentes áreas. OpenAI é o fornecedor comercial mais conhecido de LLMs, mas existem amplas opções de modelos LLM, comerciais ou de código aberto. Embora isto forneça opções, também cria o risco de dependência do fornecedor.
Os LLMs são apenas um componente necessário para a implementação prática de soluções generativas de IA, e muitos outros “blocos de construção” também são necessários. Langchain é uma biblioteca popular de código aberto que fornece esses blocos de construção e cria uma camada de abstração, criando independência de provedor.
Treinar um LLM é proibitivamente caro para a maioria das organizações, mas para a maioria das implementações práticas é necessário incorporar dados específicos da organização. Uma abordagem comum é adicionar contexto específico a uma pergunta do usuário ao prompt enviado ao LLM. Isso representa um desafio, já que os LLMs geralmente permitem apenas prompts com tamanho finito (normalmente em torno de 4 mil tokens). Portanto, é importante que as informações contextuais relevantes sejam fornecidas e para isso é necessário fazer o seguinte:
Este projeto foi inspirado em muitos artigos, mas teóricos e práticos. Uma parte significativa da base de código vem do projeto Construindo um AWS Well-Architected Chatbot com LangChain.
Os projetos foram implementados como um microsserviço baseado em contêiner com um RPC RabbitMQ. Há uma fila RabbitMQ:
alkemio-virtual-contributor-engine-guidance
- fila para envio de solicitações ao microsserviçoO payload da solicitação consiste em json com a seguinte estrutura (exemplo para uma consulta):
{
"data": {
"userId": "userID",
"question": "What are the key Alkemio concepts?",
"language": "UK"
},
"pattern": {
"cmd": "query"
}
}
Os tipos de operação são:
ingest
: coleta de dados do site da fundação Alkemio (por meio da fonte Github) e incorporação usando o modelo de texto OpenAI Ada, sem solicitação de adição de dados .reset
: redefine o histórico do chat em andamento, precisa do userId.query
: poste a próxima pergunta em uma sequência de bate-papo, veja o exemploA resposta é publicada em uma fila gerada automaticamente, exclusiva e sem nome.
Existe um projeto de implementação para a linguagem de interação do modelo (isso precisa de melhorias significativas). Se nenhum código de idioma for especificado, o inglês será assumido. As opções são: 'EN': 'Inglês', 'EUA': 'Inglês', 'Reino Unido': 'Inglês', 'FR': 'Francês', 'DE': 'Alemão', 'ES': 'Espanhol' , 'NL': 'Holandês', 'BG': 'Búlgaro', 'UA': "Ucraniano"
*nota: há uma implementação RESTful anterior (desatualizada) disponível em https://github.com/alkem-io/virtual-contributor-engine-guidance/tree/http-api
O seguinte comando pode ser usado para construir o contêiner a partir da CLI do Docker (a arquitetura padrão é amd64, então --build-arg ARCHITECTURE=arm64
para compilações 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 .
O Dockerfile possui alguns argumentos de configuração autoexplicativos.
O seguinte comando pode ser usado para iniciar o contêiner a partir da CLI do Docker: docker run --name virtual-contributor-engine-guidance -v /dev/shm:/dev/shm --env-file .env virtual-contributor-engine-guidance
onde .env
baseado em .azure-template.env
Como alternativa, use docker-compose up -d
.
com:
AZURE_OPENAI_API_KEY
: uma chave de API OpenAI válidaOPENAI_API_VERSION
: uma versão válida do Azure OpenAI. No momento em que este artigo foi escrito, o mais recente era 2023-05-15
AZURE_OPENAI_ENDPOINT
: um URL base válido do Azure OpenAI, por exemplo https://{your-azure-resource-name}.openai.azure.com/
RABBITMQ_HOST
: o nome do host RabbitMQRABBITMQ_USER
: o usuário RabbitMQRABBITMQ_PASSWORD
: a senha do RabbitMQAI_MODEL_TEMPERATURE
: a temperature
do modelo, use um valor entre 0 e 1. 1 significa uma resposta mais aleatória, mais próximo de 0 - uma resposta mais rigorosaLLM_DEPLOYMENT_NAME
: o nome de implantação do modelo AI gpt no AzureEMBEDDINGS_DEPLOYMENT_NAME
: o nome de implantação do modelo de incorporação de IA no AzureAI_SOURCE_WEBSITE
: a URL do site base que contém os dados de origem (apenas para referências)AI_SOURCE_WEBSITE2
: a URL do site de boas-vindas que contém os dados de origem (apenas para referências)AI_LOCAL_PATH
: caminho do arquivo local para armazenar dadosAI_WEBSITE_REPO
: url do repositório Git contendo os dados fonte do site da fundação, baseado em Hugo - sem httpsAI_WEBSITE_REPO2
: url do repositório Git contendo os dados fonte do site de boas-vindas, baseado em Hugo - sem httpsAI_GITHUB_USER
: usuário do Github usado para clonar repositórios de sitesAI_GITHUB_PAT
: token de acesso pessoal para clonagem de repositórios de sitesLANGCHAIN_TRACING_V2
: habilita o rastreamento LangchainLANGCHAIN_ENDPOINT
: endpoint de rastreamento Langchain (por exemplo, "https://api.smith.langchain.com")LANGCHAIN_API_KEY
: chave API de rastreamento LangchainLANGCHAIN_PROJECT
: nome do projeto de rastreamento Langchain (por exemplo, "virtual-contributor-engine-guidance") Você pode encontrar valores de exemplo em .azure-template.env
. Configure-os e crie o arquivo .env
com as configurações atualizadas.
O projeto requer Python & Poetry instalado. As dependências mínimas da versão podem ser encontradas em pyproject.toml
. Depois de instalar Python e Poesia:
poetry install
poetry run python virtual_contributor_engine_guidance.py
O projeto requer no mínimo Python 3.11 e Go e Hugo instalados para criar uma versão local do site. Consulte a documentação do Go e do Hugo para obter instruções de instalação (somente ao executar fora do contêiner)
As seguintes tarefas ainda estão pendentes: