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

View File

@@ -9,11 +9,13 @@ def test_python_repl() -> None:
# Run a simple initial command.
repl.run("foo = 1")
assert repl._locals["foo"] == 1
assert repl.locals is not None
assert repl.locals["foo"] == 1
# Now run a command that accesses `foo` to make sure it still has it.
repl.run("bar = foo * 2")
assert repl._locals["bar"] == 2
assert repl.locals is not None
assert repl.locals["bar"] == 2
def test_python_repl_no_previous_variables() -> None:
@@ -29,7 +31,8 @@ def test_python_repl_pass_in_locals() -> None:
_locals = {"foo": 4}
repl = PythonREPL(_locals=_locals)
repl.run("bar = foo * 2")
assert repl._locals["bar"] == 8
assert repl.locals is not None
assert repl.locals["bar"] == 8
def test_functionality() -> None:
@@ -38,3 +41,15 @@ def test_functionality() -> None:
code = "print(1 + 1)"
output = chain.run(code)
assert output == "2\n"
def test_function() -> None:
"""Test correct functionality."""
chain = PythonREPL()
code = "def add(a, b): " " return a + b"
output = chain.run(code)
assert output == ""
code = "print(add(1, 2))"
output = chain.run(code)
assert output == "3\n"