add agent code
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
Agent with memory and confirmation of tool usage.
|
||||
"""
|
||||
|
||||
from langchain.agents import AgentExecutor, create_openai_tools_agent
|
||||
from langchain.chat_models import ChatOpenAI
|
||||
from langchain.memory import ConversationBufferMemory
|
||||
from langchain.tools import BaseTool
|
||||
import os
|
||||
|
||||
# Example tool: get_price (placeholder)
|
||||
class GetPriceTool(BaseTool):
|
||||
name = "get_price"
|
||||
description = "Get price for a city. Input: {city}"
|
||||
|
||||
def _run(self, city: str) -> str:
|
||||
# Dummy implementation
|
||||
return f"The price in {city} is $100"
|
||||
|
||||
# Setup LLM and memory
|
||||
llm = ChatOpenAI(temperature=0)
|
||||
memory = ConversationBufferMemory()
|
||||
|
||||
# Create agent with interrupt_before tools
|
||||
agent = create_openai_tools_agent(
|
||||
llm,
|
||||
[GetPriceTool()],
|
||||
verbose=True,
|
||||
checkpointer=memory,
|
||||
interrupt_before=["tools"]
|
||||
)
|
||||
|
||||
executor = AgentExecutor(agent=agent, tools=[GetPriceTool()], verbose=True)
|
||||
|
||||
# Main loop
|
||||
while True:
|
||||
user_input = input("You: ")
|
||||
if user_input.lower() in {"exit", "quit"}:
|
||||
break
|
||||
# Run executor and capture interrupt
|
||||
try:
|
||||
result = executor.run(user_input)
|
||||
print(result)
|
||||
except Exception as e:
|
||||
if "__interrupt__" in str(e):
|
||||
# Extract tool call info from exception message (simplified)
|
||||
print("Agent wants to use a tool.")
|
||||
confirm = input("Allow? (Y/n): ")
|
||||
if confirm.lower() in {"", "y", "yes"}:
|
||||
executor.run(user_input, run_name=None) # retry
|
||||
else:
|
||||
print("Action cancelled by user.")
|
||||
else:
|
||||
raise
|
||||
Reference in New Issue
Block a user