breve
O ReAct (Reasoning and Acting) é uma estrutura que combina raciocínio e ação para aprimorar o desempenho das inteligências em tarefas complexas. A estrutura permite que as inteligências realizem tarefas de forma mais eficaz em ambientes dinâmicos, integrando fortemente o raciocínio lógico com a ação prática.
Fonte:ReAct: raciocínio e ação trabalhando juntos em um modelo de linguagem grande
Este documento descreve como usar o ReAct A estrutura está em Ollama O agente local (Agent) é implementado no Ollama. Ao combinar o poder do Ollama com a flexibilidade do ReAct, os usuários podem criar um agente interativo eficiente em seu ambiente local. Essa implementação é capaz de lidar com tarefas complexas, suporta vários modos de interação e otimiza a automação de tarefas e a experiência do usuário para aplicativos locais que exigem alto desempenho em tempo real.
Observação: este documento contém trechos do código principal e explicações detalhadas. O código completo pode ser encontrado em notebook .
1. importação de dependências
from langchain_core.tools import tool
from langchain.pydantic_v1 import BaseModel, Field
from langchain_core.tools import render_text_description
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain_community.chat_models import ChatOllama
2) Inicializar a ferramenta Agente
definir Entrada de pesquisa
herança de classe BaseModel
que é usado para definir o modo dos dados de entrada.
@tool(args_schema=SearchInput)
Decoração com decoradores de ferramentas previsão do tempo
e especifique seu modo de entrada como Entrada de pesquisa
.
class SearchInput(BaseModel).
Location: str = Field(description="location to search for") # Defina um modelo Pydantic que descreva o esquema de entrada com informações de descrição
@tool(args_schema=SearchInput)
def weather_forecast(location: str).
"""Weather_forecast_tool.""""
print(f "Weather for {location}") # imprime o local para o qual a previsão do tempo será feita
return f "A dummy forecast for {location}" # Retorna uma previsão do tempo fictícia para o local fornecido.
3. operações locais
Neste exemplo, use gemma:2b
o resultado pode ser muito diferente para diferentes tipos de modelos (mais aleatoriedade).
llm = ChatOllama(model="gemma:2b") # Inicializar o modelo ChatOllama, usando "gemma:2b"
tools = [weather_forecast] # Usar a ferramenta weather_forecast
prompt = hub.pull("hwchase17/react-json") # Extrair prompts específicos do hub
prompt = prompt.partial(
tools=render_text_description(tools), # renderizar uma descrição de texto das ferramentas para o prompt
tool_names=", ".join([t.name for t in tools]), # Concatena os nomes das ferramentas em uma cadeia de caracteres separada por vírgulas
)
agent = create_react_agent(llm, tools, prompt) # Criar um agente usando llm, ferramentas e prompts personalizados
agent_executor = AgentExecutor(agent=agent, tools=tools, handle_parsing_errors=True, verbose=False, format="json") # Inicializar o AgentExecutor
print(agent_executor.invoke({"input": "What is the weather in Paris?"})) # Invoque o agente com a entrada de teste e imprima os resultados
Uso do histórico de diálogos
Ao usar o histórico de diálogo, você precisa usar a opção react-chat
Modelo de prompt. No momento da invocação, adicione o chat_history
.
O # extrai um prompt específico, observe que o react-chat é usado aqui
prompt = hub.pull("hwchase17/react-chat")
# Crie o agente ReAct
agent_history = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent_history, tools=tools, verbose=False)
agent_executor.invoke(
{
"input": "what's my name? Use uma ferramenta somente se necessário, caso contrário, responda com Final Answer",
"chat_history": "Humano: Olá! Meu nome é Bob\nAI: Olá Bob! Prazer em conhecê-lo", }
Prazer em conhecê-lo", }
Prazer em conhecê-lo", }
bibliografia
https://react-lm.github.io/
https://python.langchain.com/v0.1/docs/modules/agents/agent_types/react/