Desenvolva um sistema LangChain agêntico RAG usando o IBM® Granite-3.0-8B-Instruct no IBM® watsonx.ai

Autor

Anna Gutowska

AI Engineer, Developer Advocate

IBM

O que é RAG agêntica?

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.

Visão geral da RAG agêntica

O que é RAG?

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.

O que são agentes de IA?

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.

RAG agêntica versus RAG tradicional

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.

Pré-requisitos

Você precisa de uma conta do IBM® Cloud para criar um projeto do watsonx.ai .

Etapas

Etapa 1. Configure seu ambiente

Embora você possa escolher entre várias ferramentas, este tutorial explica como configurar uma conta da IBM para usar um Jupyter Notebook.

  1. Faça login no watsonx.ai usando sua conta do IBM Cloud.

  2. 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.

  3. 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.

Etapa 2. Configure uma instância do watsonx.ai Runtime e uma chave de API

  1. 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).

  2. Gere uma chave de API.

  3. Associe a instância do serviço do watsonx.ai Runtime ao projeto que você criou no watsonx.ai.

Etapa 3. Instale e importe bibliotecas relevantes e configure suas credenciais

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.

# installations
!pip install langchain | tail -n 1
!pip install langchain-ibm | tail -n 1
!pip install langchain-community | tail -n 1
!pip install ibm-watsonx-ai | tail -n 1
!pip install ibm_watson_machine_learning | tail -n 1
!pip install chromadb | tail -n 1
!pip install tiktoken | tail -n 1
!pip install python-dotenv | tail -n 1
!pip install bs4 | tail -n 1
# imports import os
from dotenv import load_dotenv
from langchain_ibm import WatsonxEmbeddings, WatsonxLLM
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.prompts import PromptTemplate
from langchain.tools import tool
from langchain.tools.render import render_text_description_and_args
from langchain.agents.output_parsers import JSONAgentOutputParser
from langchain.agents.format_scratchpad import format_log_to_str
from langchain.agents import AgentExecutor
from langchain.memory import ConversationBufferMemory
from langchain_core.runnables import RunnablePassthrough
from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams
from ibm_watsonx_ai.foundation_models.utils.enums import EmbeddingTypes

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.

load_dotenv(os.getcwd()+"/.env", override=True)
credentials = {
    "url": "https://us-south.ml.cloud.ibm.com",
    "apikey": os.getenv("WATSONX_APIKEY", ""),
}
project_id = os.getenv("PROJECT_ID", "")

Etapa 4. Inicialização de um agente básico sem ferramentas

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.

llm = WatsonxLLM(
    model_id="ibm/granite-3-8b-instruct",
    url=credentials.get("url"),
    apikey=credentials.get("apikey"),
    project_id=project_id,
    params={
        GenParams.DECODING_METHOD: "greedy",
        GenParams.TEMPERATURE: 0,
        GenParams.MIN_NEW_TOKENS: 5,
        GenParams.MAX_NEW_TOKENS: 250,
        GenParams.STOP_SEQUENCES: ["Human:", "Observation"],
    },
)

Configuraremos um modelo de prompts caso você queira fazer várias perguntas.

template = "Answer the {query} accurately. If you do not know the answer, simply say you do not know."
prompt = PromptTemplate.from_template(template)

E agora podemos configurar uma cadeia com nosso prompt e nosso LLM. Isso permite que o modelo generativo produza uma resposta.

agent = prompt | llm

Vamos testar para ver como nosso agente responde a uma consulta básica.

agent.invoke({"query": 'What sport is played at the US Open?'})

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.

agent.invoke({"query": 'Where was the 2024 US Open Tennis Championship?'})

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.

Etapa 5. Estabeleça a base de conhecimento e o recuperador

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 .

urls = ['https://www.ibm.com/br-pt/case-studies/us-open',
        'https://www.ibm.com/br-pt/sports/usopen',
        'https://newsroom.ibm.com/US-Open-AI-Tennis-Fan-Engagement',
        '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']

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.

docs = [WebBaseLoader(url).load() for url in urls]
docs_list = [item for sublist in docs for item in sublist]
docs_list[0]

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 .

text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(chunk_size=250, chunk_overlap=0)
doc_splits = text_splitter.split_documents(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.

embeddings = WatsonxEmbeddings(
    model_id=EmbeddingTypes.IBM_SLATE_30M_ENG.value,
    url=credentials["url"],
    apikey=credentials["apikey"],
    project_id=project_id,
)

Para armazenar nossos documentos com embedding, usaremos o Chroma DB, um armazenamento de vetores de código aberto.

vectorstore = Chroma.from_documents(
    documents=doc_splits,
    collection_name="agentic-rag-chroma",
    embedding=embeddings,
)

Para acessar informações no armazenamento de vetores, devemos configurar um recuperador.

retriever = vectorstore.as_retriever()

Etapa 6. Defina a ferramenta de RAG do agente

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.

@tool
def get_IBM_US_Open_context(question: str):
    """Get context about IBM's involvement in the 2024 US Open Tennis Championship."""
    context = retriever.invoke(question)
    return context

tools = [get_IBM_US_Open_context]

Etapa 7. Estabeleça o modelo de prompts

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.

system_prompt = """Respond to the human as helpfully and accurately as possible. You have access to the following tools: {tools}
Use a json blob to specify a tool by providing an action key (tool name) and an action_input key (tool input).
Valid "action" values: "Final Answer" or {tool_names}
Provide only ONE action per $JSON_BLOB, as shown:"
```
{{
"action": $TOOL_NAME,
"action_input": $INPUT
}}
```
Follow this format:
Question: input question to answer
Thought: consider previous and subsequent steps
Action:
```
$JSON_BLOB
```
Observation: action result
... (repeat Thought/Action/Observation N times)
Thought: I know what to respond
Action:
```
{{
"action": "Final Answer",
"action_input": "Final response to human"
}}
Begin! Reminder to ALWAYS respond with a valid json blob of a single action.
Respond directly if appropriate. Format is Action:```$JSON_BLOB```then Observation"""

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 .

human_prompt = """{input}
{agent_scratchpad}
(reminder to always respond in a JSON blob)"""

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.

prompt = ChatPromptTemplate.from_messages(
    [
        ("system", system_prompt),
        MessagesPlaceholder("chat_history", optional=True),
        ("human", human_prompt),
    ]
)

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.

prompt = prompt.partial(
    tools=render_text_description_and_args(list(tools)),
    tool_names=", ".join([t.name for t in tools]),
)

Etapa 8. Configure a memória e a cadeia do agente

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.

memory = ConversationBufferMemory()

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.

chain = ( RunnablePassthrough.assign(
    agent_scratchpad=lambda x: format_log_to_str(x["intermediate_steps"]),
    chat_history=lambda x: memory.chat_memory.messages,
    )
    | prompt | llm | JSONAgentOutputParser())

agent_executor = AgentExecutor(agent=chain, tools=tools, handle_parsing_errors=True, verbose=True, memory=memory)

Etapa 9. Gere respostas com o sistema de RAG agêntica

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.

agent_executor.invoke({"input": 'Where was the 2024 US Open Tennis Championship?'})

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.

agent_executor.invoke({"input": 'How did IBM use watsonx at the 2024 US Open Tennis Championship?'})

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.

agent_executor.invoke({"input": 'What is the capital of France?'})

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.

Resumo

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.

Soluções relacionadas
Agentes de IA para empresas

Crie, implemente e gerencie assistentes e agentes de IA potentes que automatizam fluxos de trabalho e processos com a IA generativa.

    Explore o watsonx Orchestrate
    Soluções de agentes de IA da IBM

    Construa o futuro do seu negócio com soluções de IA em que você pode confiar.

    Explore soluções de agentes de IA
    Serviços de IA do IBM® Consulting

    Os serviços de IA da IBM Consulting ajudam a reinventar a forma como as empresas trabalham com IA para gerar transformação.

    Explore os serviços de inteligência artificial
    Dê o próximo passo

    Se você optar por personalizar aplicativos e habilidades criados previamente ou criar e implementar serviços agênticos personalizados usando um estúdio de IA, a plataforma IBM watsonx tem aquilo de que você precisa.

    Explore o watsonx Orchestrate Explore o watsonx.ai