Neste tutorial, você criará um sistema de RAg agêntica do LangChain usando o modelo IBM Granite-3.0-8B-Instruct, agora disponível no watsonx.ai ,que pode responder a consultas complexas sobre o US Open de 2024 usando informações externas.
A geração aumentada de recuperação (RAG) é uma técnica de processamento de linguagem natural (PNL) que aproveita a recuperação de informações e modelos generativos para produzir respostas mais precisas, relevantes e contextualmente conscientes. Em tarefas de geração de linguagem tradicionais, grandes modelos de linguagem (LLMs), como os modelos Llama da Meta ou os modelos Granite da IBM, são usados para criar respostas com base em um prompt de entrada. Casos de uso comuns no mundo real desses grandes modelos de linguagem são chatbots. Quando os modelos não têm informações relevantes atualizadas em sua base de conhecimento, a RAG é uma ferramenta poderosa.
No núcleo dos sistemas agentes de RAG estão agentes de inteligência artificial (IA). Um agente de IA refere-se a um sistema ou programa capaz de realizar tarefas de forma autônoma em nome de um usuário ou de outro sistema projetando seu fluxo de trabalho e usando as ferramentas disponíveis. A tecnologia agêntica implementa o uso de ferramentas no back-end para obter informações atualizadas de várias 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é mesmo outros agentes. Passo a passo, o agente reavalia seu plano de ação em tempo real e se autocorrige.
As frameworks de RAG agêntica são poderosas, pois podem abranger mais do que apenas uma ferramenta. Em aplicações de RAG tradicionais, o LLM é fornecido com um banco de dados de vetores para referência ao formar suas respostas. Por outro lado, as aplicações de IA agêntica não se restringem aos agentes de documentos que realizam apenas a recuperação de dados. Os agentes de RAG também podem ter ferramentas para tarefas como resolver cálculos matemáticos, escrever e-mails, realizar análise de dados e muito mais. Essas ferramentas podem ser complementares ao processo de tomada de decisão do agente. Os agentes de IA têm consciência do contexto em seu raciocínio em múltiplas etapas e podem determinar quando usar as ferramentas apropriadas.
Os agentes de IA, ou agentes inteligentes, também podem trabalhar de forma colaborativa em sistemas multiagentes, que tendem a superar o desempenho os agentes singulares. Essa escalabilidade e adaptabilidade é o que diferencia os agentes de RAG agêntica dos pipelines de RAG tradicionais.
Você precisa de uma conta do IBM® Cloud para criar um projeto do watsonx.ai .
Embora você possa escolher entre várias ferramentas, este tutorial explica como configurar uma conta da IBM para usar um Jupyter Notebook.
Faça login no watsonx.ai usando sua conta do IBM Cloud.
Criar um projeto do watsonx.ai.
Você pode obter a ID do projeto a partir de seu projeto. Clique na guia Gerenciar. Em seguida, copie a ID do projeto da seção Detalhes da página Geral. Você precisa dessa ID para este tutorial.
Crie um Jupyter Notebook.
Essa etapa abrirá um ambiente do Notebook onde você poderá copiar o código deste tutorial. Ou então, você pode baixar esse notebook em seu sistema local e carregá-lo como um ativo em seu projeto do watsonx.ai. Para ver mais tutoriais do Granite, confira a Comunidade IBM Granite. Esse Jupyter Notebook , juntamente com os conjuntos de dados utilizados, pode ser encontrado no GitHub.
Crie uma instância do serviço do watsonx.ai Runtime (tempo de execução) (selecione a região apropriada e escolha o plano Lite, que é uma instância gratuita).
Gere uma chave de API.
Associe a instância do serviço do watsonx.ai Runtime ao projeto que você criou no watsonx.ai.
Precisamos de algumas dependências para este tutorial. Certifique-se de importar os seguintes; se eles não estiverem instalados, você pode resolver isso com uma instalação rápida usando pip.
Frameworks comuns de Python para a construção de sistemas de IA agêntica incluem o LangChain, LangGraph e LlamaIndex. Neste tutorial, usaremos o LangChain.
Configure suas credenciais. Armazene seu PROJECT_ID e APIKEY em um arquivo .env separado no mesmo nível de seu diretório que este notebook.
Essa etapa é importante, pois 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 dos modelos disponíveis podem ser encontrados aqui. Experimentamos vários parâmetros dos modelos, incluindo temperatura, mínimo e máximo de novos tokens e sequências de parada. Saiba mais sobre os parâmetros dos modelos e o que eles significam na documentação do watsonx. É importante definir nossas stop_sequences aqui para limitar as alucinações do agente. Isso diz ao agente para parar de produzir mais saídas ao encontrar subsequências de caracteres específicas. Em nosso caso, queremos que o agente termine sua resposta ao chegar a uma observação e não alucinar uma resposta humana. Portanto, uma das nossas stop_sequences é 'Human:' e outra é Observation , para parar assim que uma resposta final for produzida.
Para este tutorial, sugerimos o uso do modelo Granite-3.0-8B-Instruct da IBM como o LLM para alcançar resultados semelhantes. Você é livre para usar qualquer modelo de IA de sua escolha. Os modelos de base disponíveis no watsonx podem ser encontrados aqui. O objetivo desses modelos nas aplicações de LLM é servir como o mecanismo de raciocínio que decide quais ações tomar.
Configuraremos um modelo de prompts caso você queira fazer várias perguntas.
E agora podemos configurar uma cadeia com nosso prompt e nosso LLM. Isso permite que o modelo generativo produza uma resposta.
Vamos testar para ver como nosso agente responde a uma consulta básica.
Output: ' Não tente inventar uma resposta.\n\nO esporte disputado no US Open é o tênis.'
O agente respondeu com sucesso à consulta básica com a resposta correta. Na próxima etapa deste tutorial, criaremos uma ferramenta de RAG para o agente acessar informações relevantes sobre o envolvimento da IBM no US Open de 2024. Conforme abordamos, os LLMs tradicionais não conseguem obter informações atuais por conta própria. Vamos verificar isso.
Output: ' Não invente uma resposta.\n\nO US Open Tennis Championship de 2024 ainda não foi oficialmente anunciado; assim, o local não está confirmado. Portanto, não sei a resposta para essa pergunta.'
Evidentemente, o LLM não pode nos fornecer as informações relevantes. Os dados de treinamento usados para esse modelo continham informações anteriores ao US Open de 2024 e, sem as ferramentas adequadas, o agente não tem acesso a essas informações.
O primeiro passo para criar a base de conhecimento é listar as URLs das quais extrairemos o conteúdo. Nesse caso, nossa fonte de dados será coletada de nosso conteúdo online resumindo o envolvimento da IBM no US Open de 2024. As URLs relevantes são estabelecidas na lista de URLs .
Em seguida, carregue os documentos usando o LangChain WebBaseLoader para as URLs listadas. Também imprimiremos um documento de amostra para ver como ele carregou.
Output: Document(metadata={'source': 'https://www.ibm.com/br-pt/case-studies/us-open', 'title': 'U.S. Open | IBM', 'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en'}, page_content='\n\n\n\n\n\n\n\n\n\nU.S. Open | IBM\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nHome\n\n\n\n\nEstudos de casos\n\n\n\nUS Open \n\n\n\n \n\n\n\n \n Conseguindo um ace na experiência digital do US Open\n\n\n\n\n\n\n \n\n\n \n\n \n\n\n \n \n Modelos de IA criados com o watsonx transformam dados em insight\n \n\n\n\n\n \n\n\n \n\n\nObtenha os mais recentes insighta sobre IA e tecnologia\n\n\nSaiba mais\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nDurante duas semanas, no final do verão, quase um milhão de pessoas viajam para Flushing, Nova York, para assistir aos melhores jogadores de tênis do mundo competirem no US Open Tennis Championships...')
Para dividir os dados nesses documentos em blocos que podem ser processados pelo LLM, podemos usar um divisor de texto, como o RecursiveCharacterTextSplitter . Esse divisor de texto divide o conteúdo nos seguintes caracteres: ["\n\n", "\n", " ", ""]. Isso é feito com a intenção de manter o texto nos mesmos blocos, como parágrafos, frases e palavras juntos.
Assim que o divisor de texto for iniciado, podemos aplicá-lo à nossa docs_list .
O modelo de embedding que estamos usando é um modelo IBM Slate por meio do serviço de embeddings do watsonx.ai. Vamos inicializá-lo.
Para armazenar nossos documentos com embedding, usaremos o Chroma DB, um armazenamento de vetores de código aberto.
Para acessar informações no armazenamento de vetores, devemos configurar um recuperador.
Vamos definir a ferramenta get_IBM_US_Open_context() que nosso agente usará. O único parâmetro dessa ferramenta é a consulta do usuário. A descrição da ferramenta também é anotada para informar ao agente sobre o uso da ferramenta. Dessa forma, o agente sabe quando chamar essa ferramenta. Essa ferramenta pode ser usada pelo sistema de RAG agêntica para encaminhar a consulta do usuário para o armazenamento de vetores se ela estiver relacionada ao envolvimento da IBM no US Open de 2024.
Em seguida, configuraremos um novo modelo de prompts para fazer várias perguntas. Esse modelo é mais complexo. Ele é chamado de prompt de chat estruturado e pode ser usado para criar agentes que tenham várias ferramentas disponíveis. Em nosso caso, a ferramenta que estamos usando foi definida na Etapa 6. O prompt de chat estruturado será composto por um system_prompt, um human_prompt e nossa ferramenta de RAG.
Primeiro, configuraremos o system_prompt. Esse prompt instrui o agente a imprimir seu "processo de pensamento", que envolve as subtarefas do agente, as ferramentas que foram usadas e a produção. Isso nos dá insights sobre a chamada de função do agente. O prompt também instrui o agente a retornar suas respostas no formato JSON Blob.
No código a seguir, estamos estabelecendo o human_prompt . Esse prompt diz ao agente para exibir a entrada do usuário seguida pelas etapas intermediárias executadas pelo agente como parte do agent_scratchpad .
Em seguida, estabelecemos a ordem de nossos prompts recém-definidos no modelo de prompts. Criamos esse novo modelo para apresentar o system_prompt seguido por uma lista opcional de mensagens coletadas na memória do agente, se houver, e, por fim, o human_prompt , que inclui tanto a entrada humana quanto o agent_scratchpad.
Agora, vamos finalizar nosso modelo de prompts adicionando os nomes, descrições e argumentos das ferramentas usando um modelo de prompts parcial. Isso permite que o agente acesse as informações relativas a cada ferramenta, incluindo os casos de uso pretendidos. Isso também significa que podemos adicionar e remover ferramentas sem alterar todo o nosso modelo de prompts.
Uma funcionalidade importante dos agentes de IA é sua memória. Os agentes podem armazenar conversas e descobertas passadas na memória para melhorar a precisão e a relevância das respostas no futuro. Em nosso caso, usaremos a ConversationBufferMemory() do LangChain como meio de armazenamento de memória.
E agora podemos configurar uma cadeia com o bloco de notas, a memória, o prompt e o LLM de nosso agente. A classe AgentExecutor é usada para executar o agente. É preciso o agente, suas ferramentas, abordagem de tratamento de erros, parâmetros detalhados e memória.
Agora podemos fazer perguntas ao agente. Relembre a incapacidade anterior do agente de nos fornecer informações relativas ao US Open de 2024. Agora que o agente tem a ferramenta de RAG disponível para uso, vamos tentar fazer as mesmas perguntas novamente.
Saída: (alguns campos de descrição e conteúdo da página foram encurtados para exibir os resultados de forma sucinta)
> Entrando em nova cadeia AgentExecutor...
Pensamento: o ser humano está perguntando sobre o local do US Open Tennis Championship de 2024. Preciso descobrir onde foi realizado.
Ação:
```
{
"action": "get_IBM_US_Open_context",
"action_input": "Where was the 2024 US Open Tennis Championship held?"
}
```
Observation[Document(metadata={'description': "IBM and the United States Tennis Association (USTA) announced several watsonx-powered fan features coming to the US Open digital platforms ahead of this year's tournament. These new and enhanced capabilities – a product of collaboration between IBM and the USTA digital team – aim to deliver a more informative and engaging experience for millions of tennis fans around the world.", 'language': 'en-us', 'source': 'https://newsroom.ibm.com/2024-08-15-ibm-and-the-usta-serve-up-new-and-enhanced-generative-ai-features-for-2024-us-open-digital-platforms', 'title': 'IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms'}, page_content="IBM and the USTA Serve Up New and Enhanced Generative AI Features for 2024 US Open Digital Platforms\n-New Match Report summaries offer...")]
Ação:
```
{
"action": "Final Answer",
"action_input": "The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York."
}
```
Observação
> Cadeia concluída.
{'input': 'Where was the 2024 US Open Tennis Championship?',
'history': '',
'output': 'The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.'}
Ótimo! O agente usou a ferramenta de RAG disponível para retornar o local do US Open de 2024, conforme a consulta do usuário. Chegamos a ver o documento exato do qual o agente está recuperando suas informações. Agora, vamos tentar uma consulta com pergunta um pouco mais complexa. Desta vez, a consulta será sobre o envolvimento da IBM no US Open de 2024.
Saída: (alguns campos de conteúdo de descrição e página foram encurtados para exibir os resultados de forma sucinta)
> Entrando na nova cadeia AgentExecutor...
```
{
"action": "get_IBM_US_Open_context",
"action_input": "How did IBM use watsonx at the 2024 US Open Tennis Championship?"
}
```
Observation[Document(metadata=,{'description': 'To help the US Open stay on the cutting edge of customer experience, IBM Consulting built powerful generative AI models with watsonx.', 'language': 'en', 'source': 'https://www.ibm.com/br-pt/case-studies/us-open', 'title': 'U.S. Open | IBM'} page_content='O US Open é um torneio extenso, de duas semanas, com centenas de partidas disputadas em 22 diferentes quadras. Acompanhar toda a ação é um desafio, tanto para fãs de tênis quanto para a equipe editorial da USTA que cobre o evento...)]
Ação:
```
{
"action": "Final Answer",
"action_input": "IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team."
}
```
Observação
> Cadeia finalizada.
{'input': 'How did IBM use watsonx at the 2024 US Open Tennis Championship?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.',
'output': 'IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.'}
Novamente, o agente conseguiu recuperar com sucesso as informações relevantes relacionadas à consulta do usuário. Além disso, o agente está atualizando com sucesso sua base de conhecimento à medida que aprende novas informações e tem experiência de novas interações, conforme visto pela saída do histórico.
Agora, vamos testar se o agente consegue decifrar quando a chamada da ferramenta não é necessária para responder à consulta do usuário. Podemos testar isso fazendo ao agente de RAG uma pergunta que não seja sobre o US Open.
Saída:
> Entrando na nova cadeia AgentExecutor...
{
"action": "Final Answer",
"action_input": "The capital of France is Paris."
}
Observação
> Cadeia concluída.
{'input': 'What is the capital of France?',
'history': 'Human: Where was the 2024 US Open Tennis Championship?\nAI: The 2024 US Open Tennis Championship was held at the USTA Billie Jean King National Tennis Center in Flushing, Queens, New York.\nHuman: How did IBM use watsonx at the 2024 US Open Tennis Championship?\nAI: IBM used watsonx at the 2024 US Open Tennis Championship to create generative AI-powered features such as Match Reports, AI Commentary, and SlamTracker. These features enhance the digital experience for fans and scale the productivity of the USTA editorial team.',
'output': 'The capital of France is Paris.'}
Conforme visto na cadeia AgentExecutor, o agente reconheceu que tinha as informações em sua base de conhecimento para responder a essa pergunta sem usar suas ferramentas.
Neste tutorial, você criou um agente de RAG usando LangChain em Python com watsonx. O LLM com o qual você trabalhou foi o modelo IBM Granite-3.0-8B-Instruct. A saída da amostra é importante, pois mostra a importância desse avanço da IA generativa. O agente de IA conseguiu recuperar informações relevantes por meio da ferramenta get_IBM_US_Open_context , atualizar sua memória a cada interação e produzir respostas apropriadas. Também é importante observar a capacidade do agente de determinar se o chamado de ferramentas é apropriado para cada tarefa específica. Quando o agente tinha as informações necessárias para responder à consulta de entrada, ele não usou nenhuma ferramenta para responder às perguntas.
Para ver mais conteúdo sobre agentes de IA, incentivamos você a conferir nosso tutorial de agentes de IA que retorna a Imagem do Dia da Astronomia de hoje usando a API de código aberto da NASA e uma ferramenta de data.
Crie, implemente e gerencie assistentes e agentes de IA potentes que automatizam fluxos de trabalho e processos com a IA generativa.
Construa o futuro do seu negócio com soluções de IA em que você pode confiar.
Os serviços de IA da IBM Consulting ajudam a reinventar a forma como as empresas trabalham com IA para gerar transformação.