Add a SQL agent for interacting with SQL Databases and JSON Agent for interacting with large JSON blobs (#1150)

This PR adds 

* `ZeroShotAgent.as_sql_agent`, which returns an agent for interacting
with a sql database. This builds off of `SQLDatabaseChain`. The main
advantages are 1) answering general questions about the db, 2) access to
a tool for double checking queries, and 3) recovering from errors
* `ZeroShotAgent.as_json_agent` which returns an agent for interacting
with json blobs.
* Several examples in notebooks

---------

Co-authored-by: Harrison Chase <hw.chase.17@gmail.com>
This commit is contained in:
Ankush Gola
2023-02-28 19:44:39 -08:00
committed by GitHub
parent 35f1e8f569
commit 82baecc892
58 changed files with 5994 additions and 120 deletions
+6 -6
View File
@@ -3,21 +3,21 @@ import sys
from io import StringIO
from typing import Dict, Optional
from pydantic import BaseModel, Field
class PythonREPL:
class PythonREPL(BaseModel):
"""Simulates a standalone Python REPL."""
def __init__(self, _globals: Optional[Dict] = None, _locals: Optional[Dict] = None):
"""Initialize with optional globals and locals."""
self._globals = _globals if _globals is not None else {}
self._locals = _locals if _locals is not None else {}
globals: Optional[Dict] = Field(default_factory=dict, alias="_globals")
locals: Optional[Dict] = Field(default_factory=dict, alias="_locals")
def run(self, command: str) -> str:
"""Run command with own globals/locals and returns anything printed."""
old_stdout = sys.stdout
sys.stdout = mystdout = StringIO()
try:
exec(command, self._globals, self._locals)
exec(command, self.globals, self.locals)
sys.stdout = old_stdout
output = mystdout.getvalue()
except Exception as e: