前言
上篇文章先容Langchain框架怎样毗连数据库
这篇文章将领导各人编写一个Agent数据库智能体
一、开发环境
版本:Python 3.10.4 版本(注:Python版本至少3.9以上,最好是3.10版本) MySQL8.0
我这里用到的是MySQL数据库
二、编写代码
1.调用API、毗连数据库
这部分代码在上一篇文章已经做过具体先容了,这里就不过多报告了
- # 调用AI检测平台(langSmith)
- import os
- import sys
- os.environ["LANGCHAIN_TRACING_V2"] = "true"
- os.environ["LANGCHAIN_API_KEY"] = 'xxxxxxxxxx'
- os.environ["LANGCHAIN_PROJECT"] = "智谱AI"
- #调用智谱AI API
- os.environ["ZHIPUAI_API_KEY"] = "xxxxxxxx"
- #调用第三方库
- from langchain_community.chat_models import ChatZhipuAI
- from langchain_community.utilities import SQLDatabase
- from langchain_community.agent_toolkits import SQLDatabaseToolkit
- from langchain_core.messages import SystemMessage, HumanMessage
- from langgraph.prebuilt import chat_agent_executor
- #调用大语言模型
- model = ChatZhipuAI(model_name='glm-4-flash')
- HOSTNAME = '127.0.0.1'
- PORT='3306'
- DATABASE = 'langchain'
- USERNAME = 'root'
- PASSWORD = 'root'
- MYSQL_UEL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
- db = SQLDatabase.from_uri(MYSQL_UEL)
复制代码 2.创建工具
- toolkit = SQLDatabaseToolkit(db=db,llm=model)
- tools = toolkit.get_tools()
复制代码
- SQLDatabase Toolkit:LangChain生态系统中的一个重要组件,专门设计用于资助AI署理与SQL数据库进行交互。它提供了一系列工具,使得AI系统能够执行诸如查询数据、检查数据库布局、验证SQL语句等操作。
- db:毗连的数据库
- llm:调用的大语言模子
- .get_tools:返回了当前工具包中所有可用工具的列表。这些工具随后可以被用于构建智能署理
3.定义提示词模板
- system_prompt="""
- 你是一个被设计用来与SQL数据库交互的代理。
- 给定一个输入问题,创建一个语法正确的SQL语句并且执行,然后查看查询结果并且返回答案。
- 除非用户指定了他们想要获得的实例的具体数量,否则始终将SQL查询限制伟最多10个结果。
- 你可以按相关列对结果进行排序,以返回MySQL数据库中最匹配的数据。
- 你可以使用与数据库交互的工具。在执行查询之前,你必须仔细检查。如果执行查询时出现错误,请重新查询并重试。
- 不要对数据库做任何的DML语句(插入,更新,删除等)。
- 首先,你应该查看数据库中的表,看看能查询什么。
- 不要跳过这个一步。
- 然后查询最相关表的模式。
- """
- system_message = SystemMessage(content=system_prompt)
复制代码 4.创建署理Agent
- agent = chat_agent_executor.create_tool_calling_executor(model,tools,prompt=system_message)
复制代码
- chat_agent_executor.create_tool_calling_executor:创建一个支持工具调用的聊天署理执行器,使署理(Agent)能够在对话过程中动态调用外部工具(如API、函数等),从而增强其处置惩罚复杂任务的本领。
- 这个方法内里一共有三个参数 model调用的大模子 tools创造的工具 以即提示词模板
5.运行部分
- def run():
- question = input('请输入你的问题')
- question = '"' + question + '"'
- resp = agent.invoke({'messages':[HumanMessage(content=question)]})
- result = resp['messages']
- #最后一个才是真正的答案
- print(result[len(result)-1].content)
- num = int(input('请输入你的选择 1.提问 2.退出系统'))
- if num == 1:
- run()
- else:
- sys.exit()
- if __name__ == "__main__":
- print('--------欢迎来到数据库智能体---------')
- run()
复制代码 6.运行结果
7.完整代码
- # 调用AI检测平台(langSmith)import osimport sysos.environ["LANGCHAIN_TRACING_V2"] = "true"os.environ["LANGCHAIN_API_KEY"] = 'xxxxxxxx'os.environ["LANGCHAIN_PROJECT"] = "智谱AI"#调用智谱AI APIos.environ["ZHIPUAI_API_KEY"] = "xxxxxxxxxxx"#调用第三方库from langchain_community.chat_models import ChatZhipuAIfrom langchain_community.utilities import SQLDatabasefrom langchain_community.agent_toolkits import SQLDatabaseToolkitfrom langchain_core.messages import SystemMessage, HumanMessagefrom langgraph.prebuilt import chat_agent_executor#调用大语言模子model = ChatZhipuAI(model_name='glm-4-flash')HOSTNAME = '127.0.0.1'PORT='3306'DATABASE = 'langchain'USERNAME = 'root'PASSWORD = 'root'#pymysql驱动URL 这里也可以选其他的MYSQL_UEL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)#langchain毗连数据库db = SQLDatabase.from_uri(MYSQL_UEL)#创建工具toolkit = SQLDatabaseToolkit(db=db,llm=model)
- tools = toolkit.get_tools()system_prompt="""
- 你是一个被设计用来与SQL数据库交互的代理。
- 给定一个输入问题,创建一个语法正确的SQL语句并且执行,然后查看查询结果并且返回答案。
- 除非用户指定了他们想要获得的实例的具体数量,否则始终将SQL查询限制伟最多10个结果。
- 你可以按相关列对结果进行排序,以返回MySQL数据库中最匹配的数据。
- 你可以使用与数据库交互的工具。在执行查询之前,你必须仔细检查。如果执行查询时出现错误,请重新查询并重试。
- 不要对数据库做任何的DML语句(插入,更新,删除等)。
- 首先,你应该查看数据库中的表,看看能查询什么。
- 不要跳过这个一步。
- 然后查询最相关表的模式。
- """
- system_message = SystemMessage(content=system_prompt)agent = chat_agent_executor.create_tool_calling_executor(model,tools,prompt=system_message)def run(): question = input('请输入你的问题') question = '"' + question + '"' resp = agent.invoke({'messages':[HumanMessage(content=question)]}) result = resp['messages'] # print(result) # print(len(result)) #最后一个才是真正的答案 print(result[len(result)-1].content) num = int(input('请输入你的选择 1.提问 2.退出系统')) if num == 1: run() else: sys.exit()if __name__ == "__main__": print('--------欢迎来到数据库智能体---------') run()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|