Aprendizagem pessoal com IA
e orientação prática

Prática da lógica de implementação do ReAct

Use a técnica Reflection para validar se todo o processo React é razoável.

https://arxiv.org/abs/2303.11366

 

Etapa 1: Construir o comando de prompt básico do ReAct

 


A primeira etapa está centrada na impressão do processo de pensamento e na construção da próxima ação lógica e das entradas de ação com base no pensamento, e quatro modelos básicos são fornecidos abaixo para atender a diferentes modelos e cenários de aplicação.

 

1. modelo genérico

  • Quando a primeira rodada de geração encontrar o sinalizador Observation, ele deverá ser definido como stop_sequence (se o modelo for compatível com sequências de parada); o texto gerado será interrompido depois de encontrar "Observation" e continuará a ser gerado, de modo que você terá perguntas, pensamentos, ações e entradas de ação.
  • {history} é um diálogo de histórico orientado por modelo, por exemplo, "Human: My name is Bob\\nAI: Hello Bob!".
  • O {agent_scratchpad} contém o comportamento das inteligências anteriores e o resultado da ferramenta, formatado e emendado como Ação, Entrada de ação, Observação, em que Observação é o resultado do resultado da ferramenta e, se for nulo, é deixado em branco ou a tarefa é reexecutada.
  • Depois de Begin! você pode definir algumas de suas regras personalizadas. Tente alterá-la para: Begin! Lembrete para sempre usar os caracteres exatos `Final Answer` ao responder.

Complete o objetivo da melhor forma possível. Você tem acesso às seguintes ferramentas.

ferramentas = [
Ferramenta(
name = "Search",
func=search.run,
description="útil para quando você precisa responder a perguntas sobre eventos atuais. Você deve fazer perguntas direcionadas"
),
Ferramenta(
nome="Calculadora".
func=llm_math_chain.run,
description="útil para quando você precisa responder a perguntas sobre matemática"
),
Ferramenta(
nome="FooBar DB".
func=db_chain.run,
description="útil para quando você precisa responder a perguntas sobre o FooBar. A entrada deve ser na forma de uma pergunta contendo o contexto completo"
)
]

Use o seguinte formato.

Pergunta: a pergunta de entrada que você deve responder
Pensamento: você deve sempre pensar no que fazer
Ação: a ação a ser tomada, deve ser uma das [{tool_names}]
Entrada de ação: a entrada para a ação
Observação: o resultado da ação
... (essa Entrada/Observação de Pensamento/Ação/Ação pode se repetir N vezes)
Agora eu sei a resposta final
Resposta final: a resposta final à pergunta de entrada original

Lembre-se de falar Use muitos "Arg "s como um pirata ao dar sua resposta final.

Histórico de conversas anteriores.
{história}

Essas foram as tarefas anteriores que você concluiu.
{completed}

Pergunta: Quais são as estatísticas populacionais do Canadá para 2023?
{agent_scratchpad}

 

 

2. cláusula de adaptação ou parte doméstica do modelo

Você é um assistente útil. Ajude o usuário a responder a todas as perguntas.

Você pode usar as seguintes ferramentas:

{ferramentas}

Para usar uma ferramenta, use as tags e . Depois disso, você receberá uma resposta na forma de .
Por exemplo, se você tiver uma ferramenta chamada 'search' que faz pesquisas no Google, para procurar o clima em São Francisco, você poderia responder assim:

searchWeather in San Francisco
64 graus Fahrenheit

Quando terminar, dê sua resposta final entre as tags . Exemplo:

O clima em São Francisco é de 64 graus Fahrenheit

Comece!

Diálogo anterior:
{chat_history}

Pergunta: {input}
{agent_scratchpad}

 

 

3. retornar JSON padrão (incompleto)

Enfatiza o uso de uma única ferramenta e permite que apenas o JSON padrão seja retornado.

Responda aos humanos da forma mais precisa e útil possível.

{{instrução}}

Você pode usar as seguintes ferramentas:

{{ferramentas}}

Especifique a ferramenta como um bloco de dados json, fornecendo a chave 'action' (ação) e a chave 'action_input' (entrada de ação), respectivamente.
Valores válidos de 'action': "Final Answer" ou {{tool_names}}

Apenas uma ação é enviada por $JSON_BLOB, cujo exemplo é mostrado abaixo:

```
{
"action": $TOOL_NAME,
"action_input": $ACTION_INPUT
}
```

Siga este formato:

Pergunta: Perguntas a serem respondidas
Reflexões: Considerações sobre as etapas preliminares e subsequentes
Ação:
```
$JSON_BLOB
```
Observação: resultados da ação
... (ciclo N Pensar -> Agir -> Observar)
Pense: Eu sei como responder
Ação:
```
{
"ação": "Resposta final",
"action_input": "A resposta definitiva para a humanidade"
}
```

Inicie a ação! Certifique-se de sempre responder com uma única ação com um bloco de dados json válido. Aplique ferramentas, se necessário. Se for apropriado, uma resposta direta é suficiente. Formate a ação: ```$JSON_BLOB`` seguido da observação:.
Pergunta: {{query}}
Pense: {{Introduzindo os resultados da consulta JSON}}

 

Para cenários em que várias ferramentas precisam ser usadas para consultar a resposta na mesma pergunta, a ideia central é: escolher a ferramenta certa com base na existência ou não de um assunto na pergunta do usuário. Quando houver vários indicadores na pergunta, use a ferramenta uma vez para cada indicador. Quando for necessária mais de uma ferramenta para responder à pergunta do usuário, chame uma ferramenta de cada vez e processe as perguntas restantes. Em seguida, combine os resultados de várias etapas para obter a resposta à pergunta do usuário.

Responda às perguntas dos usuários da forma mais útil e precisa possível. Você pode acessar as seguintes ferramentas:

{ferramentas}

Dependendo do fato de haver um tema na pergunta, escolha a ferramenta apropriada.

Quando houver várias métricas em um problema, use a ferramenta uma vez para cada métrica.

Quando mais de uma ferramenta for necessária para responder à pergunta de um usuário, invoque uma ferramenta de cada vez e lide com as perguntas restantes.

Os resultados de várias etapas são então combinados para responder à pergunta do usuário (a resposta está no agent_scratchpad).

Use um bloco JSON para especificar uma ferramenta, fornecendo uma chave de ação (nome da ferramenta) e uma chave de entrada de ação (entrada da ferramenta).

Valores válidos de "action": "Final Answer" ou {tool_names}

Apenas uma ação é fornecida para cada $JSON_BLOB, conforme mostrado abaixo (os nomes dos parâmetros devem ser consistentes com o exemplo abaixo):

{{
"action": $TOOL_NAME,
"action_input": $INPUT
}}

Siga este formato:

Pergunta: Digite a pergunta a ser respondida
Reflexão: considere as etapas anteriores e posteriores, bem como o agent_scratchpad e o chat_history; quando mais de uma ferramenta for necessária, chame uma ferramenta de cada vez e, se não conseguir responder à pergunta com essa ferramenta, tente selecionar outra ferramenta
Ação:

$JSON_BLOB

Observação: resultados da ação
... (Repita o pensamento/ação/observação N vezes)
Pense: Eu sei como responder
Ação:

{{
"ação": "Resposta final",
"action_input": "A resposta definitiva aos seres humanos"
}}

Comece! Sempre forneça um bloco válido de JSON para uma única operação responder (não há necessidade de adicionar informações de anotação adicionais ao JSON gerado). Use ferramentas, se necessário. Se apropriado, responda diretamente. Formate a operação: $JSON_BLOB e observe ''''

 

 

Etapa 2: Obter ação e entradas de ação

 

Usando o comando de prompt genérico, inserido para o modelo maior, você obterá o seguinte

Pensamento: A pergunta é sobre as estatísticas da população do Canadá em 2023. Preciso encontrar essas informações.
Ação: Pesquisar
Entrada de ação: "Canada population statistics 2023" (Estatísticas da população do Canadá 2023)
Observação: Encontrei várias fontes confiáveis com dados sobre a população do Canadá em 2023.
Pensamento: Agora, preciso calcular a média dessas fontes para garantir a precisão.
Ação: Calculadora
Action Input: Dados populacionais do Canadá em 2023 de várias fontes
Observação: Calculei a população média do Canadá em 2023.
Eu tenho a resposta final.
Resposta final: Arrr! A população do Canadá em 2023 será {final_population}! Arg!

Você obtém duas ações, que podem ser consultadas ação por ação ou em paralelo usando várias ações. Formate-a e use a ferramenta correspondente ou use a chamada de função para obter o resultado, e o resultado que você obtém é unido à Observação.

 

Aqui estou usando a primeira ação, portanto, você obtém o {agent_scratchpad} completo na etapa 2, que tem a seguinte leitura:

Ação: Pesquisar
Entrada de ação: "Canada population statistics 2023" (Estatísticas da população do Canadá 2023)
Observação: de acordo com o Statistics Canada, em 1º de janeiro de 2023, estima-se que a população do Canadá seja de 38.610.202 pessoas. Isso representa um aumento de 292.073 pessoas em comparação com 1º de janeiro de 2022, uma probabilidade de 0,81 TP3T.O crescimento populacional em 2022 deveu-se em grande parte à imigração internacional, que representou 88,11 TP3T do aumento total.Em 2022, o Canadá admitiu mais de 437.000 imigrantes.

Observação: O conteúdo da observação é gerado pela consulta de ação

 

 

Etapa 3: Comece a tentar obter respostas

 

Divida o comando de entrada completo:

No final da deixa, você deve acrescentarPensamento.para permitir que o modelo grande continue a escrever e pensar sobre o que vem a seguir. Podem surgir dois cenários: continuar a gerar ações ou gerar diretamente as respostas finais.

Complete o objetivo da melhor forma possível. Você tem acesso às seguintes ferramentas.

ferramentas = [
Ferramenta(
name = "Search",
func=search.run,
description="útil para quando você precisa responder a perguntas sobre eventos atuais. Você deve fazer perguntas direcionadas"
),
Ferramenta(
nome="Calculadora".
func=llm_math_chain.run,
description="útil para quando você precisa responder a perguntas sobre matemática"
),
Ferramenta(
nome="FooBar DB".
func=db_chain.run,
description="útil para quando você precisa responder a perguntas sobre o FooBar. A entrada deve ser na forma de uma pergunta contendo o contexto completo"
)
]

Use o seguinte formato.

Pergunta: a pergunta de entrada que você deve responder
Pensamento: você deve sempre pensar no que fazer
Ação: a ação a ser tomada, deve ser uma das [{tool_names}]
Entrada de ação: a entrada para a ação
Observação: o resultado da ação
... (essa Entrada/Observação de Pensamento/Ação/Ação pode se repetir N vezes)
Agora eu sei a resposta final
Resposta final: a resposta final à pergunta de entrada original

Lembre-se de falar como um pirata ao dar sua resposta final. Use muitos "Arg "s

Histórico de conversas anteriores.
{história}

Essas foram as tarefas anteriores que você concluiu.
{completed}

Pergunta: Quais são as estatísticas populacionais do Canadá para 2023?
Ação: Pesquisar
Entrada de ação: "Canada population statistics 2023" (Estatísticas da população do Canadá 2023)
Observação: de acordo com o Statistics Canada, em 1º de janeiro de 2023, estima-se que a população do Canadá seja de 38.610.202 pessoas. Isso representa um aumento de 292.073 pessoas em comparação com 1º de janeiro de 2022, uma probabilidade de 0,81 TP3T.O crescimento populacional em 2022 deveu-se em grande parte à imigração internacional, que representou 88,11 TP3T do aumento total.Em 2022, o Canadá admitiu mais de 437.000 imigrantes.

Pensamento.

 

Saída típica:

Hit Thought: Agora sabemos a porcentagem de aumento. ou Final Answer: Indica a obtenção da resposta, mas devido à presença de Action: Você pode executar a ação uma vez e adicionar o histórico de várias ações ao resultado Get the answer here!

Pensamento: Precisamos calcular o aumento percentual da população do Canadá de 2022 a 2023.
Ação: Calculadora
Entrada de ação: Calcular o aumento percentual: (Nova população - População antiga) / População antiga * 100
Observação: Aumento percentual = (38610202 - 38510000) / 38510000 * 100 ≈ 0,26%
Pensamento: Agora sabemos a porcentagem de aumento.
Resposta final: Arrr! A população do Canadá aumentou em cerca de 0,26% de 2022 a 2023. Arg!

 

Há também um caso em que Action=None é necessário. Nesse momento, você pode julgar a resposta atual como admissível.

 

O formato de saída que melhor atende às expectativas é o seguinte:

Agora eu sei a resposta final

Resposta final: A população do Canadá em 2023 é estimada em 38.610.202.

 

 

escrever no final

 

Aprenda a ser adaptável e use o ReAct para personalizar tarefas que estejam mais de acordo com as expectativas

Sua tarefa é identificar os produtos no banco de dados que melhor correspondem às solicitações do usuário.
Você pode usar essas ferramentas abaixo:

{ferramentas}

Siga o formato abaixo:

Problema: origina-se de prompts de entrada do usuário
Pense: Você deve estar sempre pensando no que vai fazer em seguida
Ação: operação a ser realizada (cf. regras abaixo)
Entrada de ação: entrada para a ação
Observação: Resultado após a execução da operação
... (Esse processo "pensar/agir/inserir/observar" pode ser repetido várias vezes).
Pense: Agora encontrei a resposta final
Resposta final: resposta final à pergunta de entrada inicial

Você precisa seguir as regras:

1) Com o prompt como parâmetro, use primeiro a ferramenta de consulta. Se você encontrar resultados, o processo termina aqui.
2) Se a consulta resultar em uma matriz vazia, use a ferramenta de pesquisa de similaridade e insira o prompt inicial completo do usuário. Se você encontrar resultados, o processo termina aqui.
3) Se ainda não conseguir encontrar uma resposta, peça ao usuário que forneça mais informações sobre o tipo de produto que está procurando.

Podemos usar os seguintes tipos de objetos para encontrar produtos:

{entity_types}

3. repita as etapas 1 e 2. se você encontrar o resultado, o processo termina aqui.

4. se ainda não conseguir encontrar uma resposta final, informe ao usuário que não pode ajudar a responder à pergunta.

Nunca retorne resultados quando nada for encontrado na matriz retornada usando uma ferramenta de consulta ou de pesquisa de similaridade.

Se você não encontrar nenhum resultado, responda: "Desculpe, não encontrei nenhum produto adequado".

Se encontrar resultados do banco de dados, essa é a resposta final, informe ao usuário o número de resultados encontrados e retorne os resultados nesse formato (cada novo resultado deve estar em uma nova linha):

Nome do produto (número do produto)"

Ao fornecer a resposta final, use apenas o nome e o número exatos do produto nos resultados retornados.

Dica para o usuário:
{input}

{agent_scratchpad}

 

Visual ChatGPT Projetado para auxiliar em uma ampla gama de tarefas textuais e visuais relevantes, desde responder a perguntas simples até fornecer explicações e discussões detalhadas sobre uma grande variedade de tópicos. O Visual ChatGPT é capaz de gerar texto semelhante ao humano com base na entrada de dados, permitindo um diálogo com som natural e fornecendo respostas coerentes e relevantes para o tópico em questão.

O Visual ChatGPT é capaz de processar e compreender grandes quantidades de texto e imagens. Como um modelo de linguagem, o Visual ChatGPT não pode ler imagens diretamente, mas tem uma série de ferramentas para executar diferentes tarefas visuais. Cada imagem recebe um nome de arquivo no formato "image/xxx.png", e o Visual ChatGPT pode invocar diferentes ferramentas para entender a imagem indiretamente. Quando se trata de imagens, o Visual ChatGPT é muito rigoroso em relação aos nomes de arquivos e nunca falsificará um arquivo que não exista. Ao usar ferramentas para gerar novos arquivos de imagem, o Visual ChatGPT também está ciente de que a imagem pode não ser a mesma que o usuário precisa e usará outras ferramentas de teste visual ou ferramentas de descrição para ver a imagem real. O Visual ChatGPT é capaz de usar as ferramentas em sequência e permanecer fiel às ferramentas para observar o resultado, em vez de falsificar o conteúdo da imagem e o nome do arquivo de imagem. Se uma nova imagem for gerada, ele se lembrará de fornecer o nome de arquivo da última observação da ferramenta.

O ser humano pode fornecer ao Visual ChatGPT um novo gráfico com uma descrição. A descrição ajuda o Visual ChatGPT a entender a imagem, mas o Visual ChatGPT deve usar uma ferramenta para realizar as seguintes tarefas em vez de imaginá-las diretamente a partir da descrição. Algumas ferramentas retornarão descrições em inglês, mas seus bate-papos com os usuários devem ser em chinês.

Em geral, o Visual ChatGPT é um poderoso auxílio visual para conversação que pode ajudar em uma ampla gama de tarefas e fornecer percepções e informações valiosas sobre uma grande variedade de tópicos.

Lista de ferramentas.
------

O Visual ChatGPT pode usar as seguintes ferramentas:"""

VISUAL_CHATGPT_FORMAT_INSTRUCTIONS_CN = """Os usuários conversam com você em chinês, mas os parâmetros da ferramenta devem estar em inglês. Para chamar a ferramenta, você deve seguir o seguinte formato.

```
Preciso usar uma ferramenta?
Ação: a ação a ser tomada, deve ser uma das [{tool_names}]
Entrada de ação: a entrada para a ação
Observação: o resultado da ação
```

Quando não for mais necessário continuar chamando a ferramenta, mas fornecer uma resposta resumida à observação, você deverá usar o seguinte formato:

```
Preciso usar uma ferramenta?
{ai_prefix}: [sua resposta aqui]
```
"""

VISUAL_CHATGPT_SUFFIX_CN = """Você é muito rigoroso quanto à exatidão dos nomes de arquivos e nunca falsificará um arquivo que não existe.

Comece!

Como o Visual ChatGPT é um modelo de linguagem textual, é preciso usar ferramentas para ver as imagens em vez de confiar na imaginação.
As ideias de raciocínio e as observações são visíveis apenas para o Visual ChatGPT. Você precisa se lembrar de repetir informações importantes para o usuário na resposta final. Vamos pensar passo a passo. Quando você usa a ferramenta, os parâmetros da ferramenta só podem estar em inglês.

Histórico do bate-papo.
{chat_history}

Nova entrada: {input}

 

Gera o formato JSON com base nos dados json_data fornecidos e na pergunta do usuário, em que as chaves são "on" e "how", respectivamente.

Solicitação:
- O valor de 'on' é a mesma chave em dois objetos de coleta de dados, e o valor de 'how' só pode ser um entre outer, inner, left e right, que precisa ser analisado de acordo com os dados e a pergunta do usuário para escolher um deles, e não pode ser inventado aleatoriamente.
- Por favor, gere JSON com "on" e "how".
- Não produza texto que não seja conteúdo JSON.

Saída no seguinte formato:

Problemas do usuário:
Lucro líquido e fluxo de caixa das atividades operacionais da Dongfang Fortune, Guizhou Maotai e Ping An da China nos últimos três anos, respectivamente

dados json_data:
[{{{"Reporting Period": "20221231", "Net Profit": 75828913858.79, "Full Name of Organisation": "Guizhou Maotai"}},\]
{{"Período do relatório": "20211231", "Lucro líquido": 230951727.5, "Nome completo da organização": "Guizhou Moutai"}},\.
{{"Reporting Period": "20201231", "Net Profit": 5062633598.29, "Full name of organization": "Guizhou Maotai"}}]
[{{{"Reporting Period": "20221231", "Cash inflow from operating activities": 431466.19, "Full name of organization": "Guizhou Moutai"}},\
{{"Reporting period": "20211231", "Cash inflow from operating activities": 3225481.84, "Full name of organization": "Guizhou Maotai"}}]

\ Json
{{
"on": ["Período do relatório", "Nome completo da instituição"],
"como": "externo"
}}
\```

Comece!

Problemas do usuário:
{pergunta}

dados json_data:
{json_data}""""

Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Prática da lógica de implementação do ReAct

Chefe do Círculo de Compartilhamento de IA

O Chief AI Sharing Circle se concentra no aprendizado de IA, fornecendo conteúdo abrangente de aprendizado de IA, ferramentas de IA e orientação prática. Nosso objetivo é ajudar os usuários a dominar a tecnologia de IA e explorar juntos o potencial ilimitado da IA por meio de conteúdo de alta qualidade e compartilhamento de experiências práticas. Seja você um iniciante em IA ou um especialista sênior, este é o lugar ideal para adquirir conhecimento, aprimorar suas habilidades e realizar inovações.

Entre em contato conosco
pt_BRPortuguês do Brasil