Granite
Como construir Agentic RAG usando Granite-3.0-8B-Instruct no watsonx.ai
18/11/2024 | Escrito por: Flavia Janine Rosante Beo
Categoria: Granite
Compartilhe:
https://github.com/flaviabeo/agentic-rag-granite
Neste tutorial, vamos criar um sistema RAG agente LangChain usando o modelo Granite-3.0-8B-Instruct agora disponível em watsonx.ai que pode responder a consultas complexas sobre o US Open de 2024 usando informações externas.
RAG usando AI Agents
O que é RAG?
RAG é uma técnica em processamento de linguagem natural que combina busca de informações sobre um determinado domínio em uma base e modelos de IA generativa para produzir respostas mais precisas, relevantes e contextualmente conscientes. Em tarefas tradicionais de geração de linguagem, grandes modelos de linguagem (LLMs), como os Modelos Llama da Meta ou Granite da IBM são usados para construir respostas com base em um prompt de entrada. Casos de uso comuns no mundo real desses grandes modelos de linguagem são os chatbots. Quando faltam aos modelos informações relevantes e atualizadas em sua base de conhecimento, o RAG é uma ferramenta poderosa.
Demonstração e outro tutorial de RAG usando watsonx aqui.
O que são AI Agents
Um AI Agent – Agente de IA refere-se a um sistema ou programa que é capaz de executar tarefas de forma autônoma em nome de um usuário ou outro sistema, projetando seu fluxo de trabalho e usando ferramentas disponíveis. A tecnologia Agentic implementa o uso de ferramentas para obter informações atualizadas de diversas fontes de dados, otimizar o fluxo de trabalho e criar subtarefas de forma autônoma para resolver tarefas complexas. Essas ferramentas externas podem incluir conjuntos de dados externos, mecanismos de busca, APIs e até outros agentes. Passo a passo, o agente reavalia seu plano de ação em tempo real e se autocorrige, tornando a experiência menos rígida do que um fluxo programático tradicional de um chatbot por exemplo.
O que torna o uso de agentes interessante é a capacidade deles de criar este ciclo que intuitivamente, nós, como humanos, fazemos para resolver algum problema. Eles têm a capacidade de decompor uma pergunta em uma cadeia de pensamento e responder à pergunta de forma fragmentada. Considerando cada uma das etapas.
Uma cadeia de pensamento é uma série de etapas intermediárias de raciocínio em linguagem natural que levam ao resultado final, e nos referimos a essa abordagem como estímulo de cadeia de pensamento. Para saber mais sobre prompts com cadeias de raciocínio veja esse artigo aqui.
Agentic RAG X RAG tradicional
O RAG combinado com sistemas de agentes é poderoso porque podem abranger mais do que apenas uma ferramenta. Nas aplicações RAG tradicionais, o prompt fornecido ao LLM é incrementado com contexto obtido em um banco de dados vetorial para referência na formação de suas respostas. Já as implementações de RAG com sistemas de agentes não estão restritas a agentes de documentos que apenas realizam busca e recuperação de dados. Os agentes RAG também podem contar com ferramentas para tarefas como resolver cálculos matemáticos, escrever e-mails, realizar análises de dados e muito mais. Estas ferramentas podem ser complementares ao processo de tomada de decisão do agente. Os agentes de IA reconhecem o contexto em seu raciocínio em várias etapas e podem determinar quando usar as ferramentas apropriadas.
Os agentes de IA, ou agentes inteligentes, também podem trabalhar colaborativamente em sistemas multiagentes, que tendem a superar os agentes singulares. Essa escalabilidade e adaptabilidade é o que diferencia os agentes RAG agentes dos pipelines RAG tradicionais.
Pré requisitos
Você precisa de uma conta IBM Cloud® e um projeto watsonx.ai™.
No tutorial bee smart RAG você pode consultar como conseguir seu project_ID, sua API_KEY e a URL necessária para uso do watsonx.
Nesse video você encontra também um tutorial de como configurar suas chaves e projetos no IBM Cloud.
Esse tutorial é baseado no cookbook criado por Anna Gutowska. Link para o notebook referência em português aqui → https://github.com/flaviabeo/agentic-rag-granite
Iniciar um agente básico, sem ferramentas.
Esta etapa é importante porque produzirá um exemplo claro do comportamento de um agente com e sem fontes de dados externas. Vamos começar definindo nossos parâmetros.
Os parâmetros do modelo disponíveis podem ser encontrados aqui. Experimentamos vários parâmetros do modelo, incluindo temperatura, mínimo e máximo de novos tokens e sequências de parada. Saiba mais sobre parâmetros de modelo e o que eles significam na documentação watsonx. É importante definir nossas stop_sequences aqui para limitar as alucinações dos agentes. Isso diz ao agente para parar de produzir mais saídas ao encontrar substrings específicas. No nosso caso, queremos que o agente termine a sua resposta ao atingir uma observação e não tenha alucinações com uma resposta humana. Portanto, uma de nossas stop_sequences é ‘Human:‘ e outra é ‘Observation’ para parar quando uma resposta final for produzida.
Para este tutorial, sugerimos usar o modelo Granite-3.0-8B-Instruct da IBM como LLM para obter resultados semelhantes. Você é livre para usar qualquer modelo de IA de sua escolha. Os modelos de fundação disponíveis por meio do watsonx podem ser encontrados aqui. O objetivo desses modelos em aplicações LLM é servir como mecanismo de raciocínio que decide quais ações tomar.
E agora podemos um encadeamento com nosso prompt e nosso LLM. Isso permite que o modelo generativo produza uma resposta.
Na próxima etapa vamos adicionar o componente RAG para melhorar o contexto da resposta obtida.
Construindo a base de dados
A primeira etapa na criação da base de conhecimento é listar os URLs dos quais extrairemos o conteúdo. Nesse caso, nossa fonte de dados será coletada de nosso conteúdo on-line que resume o envolvimento da IBM no US Open de 2024. Os URLs relevantes são estabelecidos na lista `urls`.
Passamos essa lista então, em um divisor de texto para que ele possa ser processado pelo LLM. Usaremos então, um modelo de embeddings IBM Slate™ que está disponível também em watsonx.ai embeddings service, para criar as representações do nosso contexto. E salvamos os embeddings criados em um banco de dados vetorial, nesse caso, usaremos o Chroma, mas pode ser outro banco de sua preferência.
Definir o componente RAG como uma ferramenta
Vamos definir a ferramenta `get_IBM_US_Open_context()` que nosso agente usará. O único parâmetro desta ferramenta é a consulta do usuário. A descrição da ferramenta também é incluída para informar o agente sobre o uso da ferramenta. Dessa forma, o agente sabe quando acionar esta ferramenta. Esta ferramenta pode ser usada pelo sistema RAG para rotear a consulta do usuário para o armazenamento de vetores se for referente ao tema IBM no 2024 US Open.
Criar um template para o prompt do LLM
A seguir, configuraremos um novo template de prompt para fazer várias perguntas. Este modelo é mais complexo. Ele é conhecido como prompt de chat estruturado e pode ser usado para criar agentes que possuem diversas ferramentas disponíveis. No nosso caso, a ferramenta RAG que utilizamos foi definida anteriormente. O prompt de chat estruturado será composto por um `system_prompt`, um `human_prompt` e nossa ferramenta RAG.
Primeiro, configuremos o `system_prompt`. Este prompt instrui o agente a imprimir seu “processo de pensamento”, que envolve as subtarefas do agente, as ferramentas que foram utilizadas e o resultado final. Isso nos dá uma ideia da chamada de função do agente. O prompt também instrui o agente a retornar suas respostas no formato JSON.
A seguir, estabelecemos a ordem dos nossos prompts recém-definidos no modelo de prompt. Criamos este novo modelo para apresentar o `system_prompt` seguido por uma lista opcional de mensagens coletadas na memória do agente. Depois, vamos finalizar nosso modelo de prompt adicionando os nomes das ferramentas. Isso permite que o agente acesse as informações relativas a cada ferramenta, incluindo os casos de uso pretendidos e também significa que podemos adicionar e remover ferramentas sem alterar todo o nosso modelo de prompt.
Siga os passos seguintes no notebook para configurar a memória, e criar a classe AgentExecutor, que é usada para executar o agente.
Gerar as respostas com o Agentic RAG criado!!
Agora podemos fazer perguntas ao agente. Lembre-se da incapacidade anterior do agente de nos fornecer informações relativas ao US Open 2024. Agora que o agente tem sua ferramenta RAG disponível para uso, vamos tentar fazer as mesmas perguntas novamente.
A saída deve ser:
Veja nesta e nas outras respostas presentes no notebook, que o agente mostra a cada iteração a tarefa que ele está executando, baseado na entrada ou na última saída da ação realizada. O agente conseguiu recuperar informações relevantes por meio da ferramenta RAG – get_IBM_US_Open_context, atualizar sua memória com cada interação e gerar respostas apropriadas. Também é importante observar a capacidade do agente de determinar se a chamada da ferramenta é apropriada para cada tarefa específica. Quando o agente possuía as informações necessárias para responder à consulta de entrada, ele não utiliza nenhuma ferramenta para responder às perguntas. Existe um framework IBM para agentes sendo desenvolvido em IBM Research, o IBM Bee Framework, que é open source e tem integrações com diversas ferramentas e pode também ser utilizado com o modelo Granite.
O Bee Agent utiliza uma metodologia chamada ReAct veja mais aqui em que o LLM gera cadeias de pensamento e ações específicas de tarefas de forma intercalada, podendo permitir maior sinergia entre linhas de raciocínio que ajudam o modelo produzir respostas, rastrear e atualizar planos de ação, bem como lidar com exceções. Enquanto as ações ou tarefas podem interagir e coletar informações adicionais de fontes externas, como a base de conhecimento que construímos para o tutorial.
Experimente, rode o notebook e me conte o que achou do nosso agentic RAG!
Até o próximo tutorial =D
WatsonX Platform Engineer | Research Software Engineer
Como construir Agentic RAG usando Granite-3.0-8B-Instruct no watsonx.ai
https://github.com/flaviabeo/agentic-rag-granite Neste tutorial, vamos criar um sistema RAG agente LangChain usando o modelo Granite-3.0-8B-Instruct agora disponível em watsonx.ai que pode responder a consultas complexas sobre o US Open de 2024 usando informações externas. RAG usando AI Agents O que é RAG? RAG é uma técnica em processamento de linguagem natural que combina busca de informações […]
Como o IBM Cloud Satellite pode ajudar sua empresa em uma jornada de nuvem distribuída
É comum os clientes questionarem a segurança de seus dados e como o provedor de nuvem realiza o armazenamento: se os dados são criptografados em repouso, se são criptografados em trânsito ou quem tem acesso a esses dados. Na IBM Cloud, temos produtos que ajudam o cliente nesse quesito, como o Key Protect e o […]
Incorpore IA nas cargas de trabalho críticas da IBM Power na nuvem – em nosso local ou no seu
Expanda a adoção de nuvem híbrida e IA com as capacidades no local do cliente do IBM® Power® Virtual Server – Por Doris Conti | Vice-Presidente de Gerenciamento de Produto aaS IBM Power À medida que as empresas embarcam em suas jornadas para adotar tecnologias inovadoras de nuvem híbrida e IA, torna-se cada vez mais […]