Implantación de un agente local con Ollama+LangChain
breve
ReAct (Reasoning and Acting) es un marco que combina el razonamiento y la acción para mejorar el rendimiento de las inteligencias en tareas complejas. El marco permite a las inteligencias realizar tareas con mayor eficacia en entornos dinámicos integrando estrechamente el razonamiento lógico con la acción práctica.

Fuente:ReAct: razonamiento y acción en un gran modelo lingüístico
Este documento describe cómo utilizar el ReAct El marco está en Ollama Implementación de un agente local en ReAct. Combinando la potencia de Ollama con la flexibilidad de ReAct, los usuarios pueden crear un agente interactivo eficiente en su entorno local. Esta implementación es capaz de gestionar tareas complejas, admite múltiples modos de interacción y optimiza la automatización de tareas y la experiencia del usuario para aplicaciones locales que requieren un alto rendimiento en tiempo real.
Nota: Este documento contiene fragmentos de código básico y explicaciones detalladas. El código completo se encuentra en cuaderno .
1. Importación de dependencias
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 la herramienta Agente
defina SearchInput
herencia de clases BaseModel
que se utiliza para definir el modo de los datos de entrada.
@tool(args_schema=SearchInput)
Decoración con decoradores de herramientas weather_forecast
y especifique su modo de entrada como SearchInput
.
class SearchInput(BaseModel):
location: str = Field(description="location to search for") # 定义一个 Pydantic 模型,用于描述输入模式,并提供描述信息
@tool(args_schema=SearchInput)
def weather_forecast(location: str):
"""天气预报工具。"""
print(f"Weather for {location}") # 打印要预报天气的位置
return f"A dummy forecast for {location}" # 返回给定位置的虚拟天气预报
3. Operaciones locales
En este ejemplo, utilice gemma:2b
el resultado puede ser muy diferente para distintos tipos de modelos (más aleatoriedad).
llm = ChatOllama(model="gemma:2b") # 初始化 ChatOllama 模型,使用 "gemma:2b"
tools = [weather_forecast] # 使用 weather_forecast 工具
prompt = hub.pull("hwchase17/react-json") # 从 hub 拉取特定提示
prompt = prompt.partial(
tools=render_text_description(tools), # 为提示呈现工具的文本描述
tool_names=", ".join([t.name for t in tools]), # 将工具名称连接成一个以逗号分隔的字符串
)
agent = create_react_agent(llm, tools, prompt) # 使用 llm、工具和自定义提示创建代理
agent_executor = AgentExecutor(agent=agent, tools=tools, handle_parsing_errors=True, verbose=False, format="json") # 使用指定参数初始化 AgentExecutor
print(agent_executor.invoke({"input":"What is the weather in Paris?"})) # 使用测试输入调用代理并打印结果
Utilizar el historial de diálogos
Cuando se utiliza el historial de diálogos, es necesario utilizar la opción react-chat
Plantilla de consulta. En el momento de la invocación, añada el campo chat_history
.
# 拉去特定提示,注意此处使用的是 react-chat
prompt = hub.pull("hwchase17/react-chat")
# 构建 ReAct agent
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? Only use a tool if needed, otherwise respond with Final Answer",
"chat_history": "Human: Hi! My name is Bob\nAI: Hello Bob! Nice to meet you",
}
)
bibliografía
https://react-lm.github.io/
https://python.langchain.com/v0.1/docs/modules/agents/agent_types/react/
© declaración de copyright
El artículo está protegido por derechos de autor y no debe reproducirse sin autorización.
Artículos relacionados
Sin comentarios...