Files
agent-craft/m05_langchain_advanced/sql_agent.py
T

47 lines
1.3 KiB
Python

from config import OPENAI_API_KEY
import sqlite3
from langchain_openai import ChatOpenAI
from langchain_community.agent_toolkits import create_sql_agent
from langchain_community.utilities import SQLDatabase # 导入 SQLDatabase
import os
# 配置llm
llm = ChatOpenAI(
model="deepseek-chat",
api_key=OPENAI_API_KEY,
base_url="https://api.deepseek.com"
)
# 创建一个临时的数据库--用于演示
db_file = "test_sql.db"
if os.path.exists(db_file):
os.remove(db_file)
conn = sqlite3.connect(db_file)
cursor = conn.cursor()
cursor.execute("CREATE TABLE users (id INT,name TEXT,age INT);")
cursor.execute("INSERT INTO users (id,name,age) VALUES (1,'Alice',30);")
cursor.execute("INSERT INTO users (id,name,age) VALUES (2,'Bob',25);")
conn.commit()
conn.close()
# 连接数据库 -- LangChain 使用 SQLAlchemy URI (连接方式)
db_uri = f'sqlite:///{db_file}'
db = SQLDatabase.from_uri(db_uri)
# 创建sqlAgent -- 一键完成,无需定义tools,仅告诉它使用openai-tools,即Tool Calling(工具调用)模式
agent_executor = create_sql_agent(
llm=llm,
db=db,
agent_type="openai-tools",
verbose=True
)
# 运行
response = agent_executor.invoke({"input":"告诉我Alice多大了?"})
print(response['output'])
# 清理
db._engine.dispose() # 关闭连接池,避免文件被占用
if os.path.exists(db_file):
os.remove(db_file)