mirror of
https://github.com/langchain-ai/deepagents.git
synced 2026-07-16 09:44:27 -04:00
111 lines
3.2 KiB
Python
111 lines
3.2 KiB
Python
import argparse
|
|
import os
|
|
import sys
|
|
|
|
from deepagents import create_deep_agent
|
|
from deepagents.backends import FilesystemBackend
|
|
from dotenv import load_dotenv
|
|
from langchain_anthropic import ChatAnthropic
|
|
from langchain_community.agent_toolkits import SQLDatabaseToolkit
|
|
from langchain_community.utilities import SQLDatabase
|
|
from rich.console import Console
|
|
from rich.panel import Panel
|
|
|
|
# Load environment variables
|
|
load_dotenv()
|
|
|
|
console = Console()
|
|
|
|
|
|
def create_sql_deep_agent():
|
|
"""Create and return a text-to-SQL Deep Agent"""
|
|
|
|
# Get base directory
|
|
base_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# Connect to Chinook database
|
|
db_path = os.path.join(base_dir, "chinook.db")
|
|
db = SQLDatabase.from_uri(f"sqlite:///{db_path}", sample_rows_in_table_info=3)
|
|
|
|
# Initialize Claude Sonnet 4.5 for toolkit initialization
|
|
model = ChatAnthropic(model="claude-sonnet-4-5-20250929", temperature=0)
|
|
|
|
# Create SQL toolkit and get tools
|
|
toolkit = SQLDatabaseToolkit(db=db, llm=model)
|
|
sql_tools = toolkit.get_tools()
|
|
|
|
# Create the Deep Agent with all parameters
|
|
agent = create_deep_agent(
|
|
model=model, # Claude Sonnet 4.5 with temperature=0
|
|
memory=["./AGENTS.md"], # Agent identity and general instructions
|
|
skills=[
|
|
"./skills/"
|
|
], # Specialized workflows (query-writing, schema-exploration)
|
|
tools=sql_tools, # SQL database tools
|
|
subagents=[], # No subagents needed
|
|
backend=FilesystemBackend(root_dir=base_dir), # Persistent file storage
|
|
)
|
|
|
|
return agent
|
|
|
|
|
|
def main():
|
|
"""Main entry point for the SQL Deep Agent CLI"""
|
|
parser = argparse.ArgumentParser(
|
|
description="Text-to-SQL Deep Agent powered by LangChain Deep Agents and Claude Sonnet 4.5",
|
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
epilog="""
|
|
Examples:
|
|
python agent.py "What are the top 5 best-selling artists?"
|
|
python agent.py "Which employee generated the most revenue by country?"
|
|
python agent.py "How many customers are from Canada?"
|
|
""",
|
|
)
|
|
parser.add_argument(
|
|
"question",
|
|
type=str,
|
|
help="Natural language question to answer using the Chinook database",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Display the question
|
|
console.print(
|
|
Panel(f"[bold cyan]Question:[/bold cyan] {args.question}", border_style="cyan")
|
|
)
|
|
console.print()
|
|
|
|
# Create the agent
|
|
console.print("[dim]Creating SQL Deep Agent...[/dim]")
|
|
agent = create_sql_deep_agent()
|
|
|
|
# Invoke the agent
|
|
console.print("[dim]Processing query...[/dim]\n")
|
|
|
|
try:
|
|
result = agent.invoke(
|
|
{"messages": [{"role": "user", "content": args.question}]}
|
|
)
|
|
|
|
# Extract and display the final answer
|
|
final_message = result["messages"][-1]
|
|
answer = (
|
|
final_message.content
|
|
if hasattr(final_message, "content")
|
|
else str(final_message)
|
|
)
|
|
|
|
console.print(
|
|
Panel(f"[bold green]Answer:[/bold green]\n\n{answer}", border_style="green")
|
|
)
|
|
|
|
except Exception as e:
|
|
console.print(
|
|
Panel(f"[bold red]Error:[/bold red]\n\n{str(e)}", border_style="red")
|
|
)
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|