import os from langchain_community.agent_toolkits import SQLDatabaseToolkit from langchain_community.utilities import SQLDatabase from langchain_core.messages import SystemMessage, HumanMessage from langchain_openai import ChatOpenAI from langgraph.prebuilt import chat_agent_executor # 聊天机器人的案例 root root # jdbc:mysql://localhost:3306/user?useUnicode=true;characterEncoding=UTF-8;serverTimezone=Asia/Shanghai # SELECT id, user_name as "userName", sex, note FROM t_user where id = # {id} os.environ["OPENAI_API_BASE"] = 'https://api.xty.app/v1' os.environ["OPENAI_API_KEY"] = '*' # os.environ["SERPAPI_API_KEY"] = '*' # 初始化语言模型gpt-4-turbo model = ChatOpenAI(model='gpt-4-turbo', temperature=0.3) # 不写sql,让大语言模型自动生成sql语句,然后我们拿着sql语句去数据库查询数据 # langchain中链接数据库,使用的sqlashemam # sqlalchemy HOSTNAME = '' PORT = '' USERNAME = '' PASSWORD = '' DATABASE = '' MYSQL_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE) db = SQLDatabase.from_uri(MYSQL_URI) # 创建工具 toolkit = SQLDatabaseToolkit(db=db, llm=model) tools = toolkit.get_tools() system_prompt = """ 您是一个被设计用来与SQL数据库交互的代理。 给定一个输入问题,创建一个语法正确的SQL语句并执行,然后查看查询结果并返回答案 除非用户指定了他们想要获得的例子的具体数量,否则始终将SQL查询限制为最多100个结果。 你可以按照相关列,对结果进行排序,以返回mysql数据库中最匹配的数据。 你可以使用与数据库交互的工具,在执行查询之前,你必须仔细检查。如果在执行查询是出现错误,请重新写查询语句,并重试。 不要对数据库做任何DML语句(插入,更新,删除) 首先,你应该查看数据库中的表,看看可以查询什么。 不要跳过这一步 然后查询最相关的表的模式 """ system_messages = SystemMessage(content=system_prompt) agent = chat_agent_executor.create_tool_calling_executor(model, tools) resp = agent.invoke({'messages': [HumanMessage(content='请问t_user表中有多少条数据?')]}) result = resp['messages'] print(result) print('=============================') print(result[len(result) - 1].content)