如何整合大模型与数据库,让大模型识别数据库数据

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值