| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """
- NL2SQL Agent:将自然语言转换为 SQL 查询,自动执行并返回分析结果。
- """
- import os
- import sys
- # 确保父目录可导入(支持直接运行 python agents/sql_agent.py)
- sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- from langchain_community.agent_toolkits import SQLDatabaseToolkit
- from langchain.agents import create_agent
- from config import llm, db
- # ---- 创建 SQL 工具包 ----
- toolkit = SQLDatabaseToolkit(db=db, llm=llm)
- tools = toolkit.get_tools()
- # ---- System Prompt ----
- SQL_AGENT_PROMPT = """你是一名专业的 SQL 数据分析师。
- ## 工作流程
- 1. 先用 sql_db_list_tables 查看数据库中有哪些表
- 2. 用 sql_db_schema 获取相关表的字段结构和类型
- 3. 生成 SQL 之前,用 sql_db_query_checker 检查语法
- 4. 确认无误后,用 sql_db_query 执行查询
- 5. 用中文总结查询结果,给出简洁的业务洞察
- ## 约束
- - 只使用数据库中实际存在的表和字段,不要凭空编造
- - 单次查询结果限制在 50 条以内
- - 如果查询出错,分析错误原因后重新生成 SQL
- - 回答要简洁专业,不要啰嗦
- """
- # ---- 创建 Agent ----
- sql_agent = create_agent(
- model=llm,
- tools=tools,
- system_prompt=SQL_AGENT_PROMPT,
- )
- if __name__ == "__main__":
- print(f"📊 数据库:{db}")
- print(f" 可用表:{db.get_usable_table_names()}")
- print(f"\nSQL 工具包已加载({len(tools)} 个工具):")
- for t in tools:
- print(f" - {t.name}")
- print("\n✅ NL2SQL Agent 创建完成,可以开始提问了!")
|