Python开发AI智能体(十一)———Agent数据库智能体

[复制链接]
发表于 2025-7-9 00:19:58 | 显示全部楼层 |阅读模式
前言

上篇文章先容Langchain框架怎样毗连数据库
这篇文章将领导各人编写一个Agent数据库智能体

一、开发环境
版本:Python 3.10.4 版本(注:Python版本至少3.9以上,最好是3.10版本)  MySQL8.0
我这里用到的是MySQL数据库 
二、编写代码

1.调用API、毗连数据库

这部分代码在上一篇文章已经做过具体先容了,这里就不过多报告了
  1. # 调用AI检测平台(langSmith)
  2. import os
  3. import sys
  4. os.environ["LANGCHAIN_TRACING_V2"] = "true"
  5. os.environ["LANGCHAIN_API_KEY"] = 'xxxxxxxxxx'
  6. os.environ["LANGCHAIN_PROJECT"] = "智谱AI"
  7. #调用智谱AI API
  8. os.environ["ZHIPUAI_API_KEY"] = "xxxxxxxx"
  9. #调用第三方库
  10. from langchain_community.chat_models import ChatZhipuAI
  11. from langchain_community.utilities import SQLDatabase
  12. from langchain_community.agent_toolkits import SQLDatabaseToolkit
  13. from langchain_core.messages import SystemMessage, HumanMessage
  14. from langgraph.prebuilt import chat_agent_executor
  15. #调用大语言模型
  16. model = ChatZhipuAI(model_name='glm-4-flash')
  17. HOSTNAME = '127.0.0.1'
  18. PORT='3306'
  19. DATABASE = 'langchain'
  20. USERNAME = 'root'
  21. PASSWORD = 'root'
  22. MYSQL_UEL = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME,PASSWORD,HOSTNAME,PORT,DATABASE)
  23. db = SQLDatabase.from_uri(MYSQL_UEL)
复制代码
2.创建工具

  1. toolkit = SQLDatabaseToolkit(db=db,llm=model)
  2. tools = toolkit.get_tools()
复制代码


  • SQLDatabase Toolkit:LangChain生态系统中的一个重要组件,专门设计用于资助AI署理与SQL数据库进行交互。它提供了一系列工具,使得AI系统能够执行诸如查询数据、检查数据库布局、验证SQL语句等操作。 
  • db:毗连的数据库
  • llm:调用的大语言模子
  • .get_tools:返回了当前工具包中所有可用工具的列表。这些工具随后可以被用于构建智能署理
3.定义提示词模板

  1. system_prompt="""
  2. 你是一个被设计用来与SQL数据库交互的代理。
  3. 给定一个输入问题,创建一个语法正确的SQL语句并且执行,然后查看查询结果并且返回答案。
  4. 除非用户指定了他们想要获得的实例的具体数量,否则始终将SQL查询限制伟最多10个结果。
  5. 你可以按相关列对结果进行排序,以返回MySQL数据库中最匹配的数据。
  6. 你可以使用与数据库交互的工具。在执行查询之前,你必须仔细检查。如果执行查询时出现错误,请重新查询并重试。
  7. 不要对数据库做任何的DML语句(插入,更新,删除等)。
  8. 首先,你应该查看数据库中的表,看看能查询什么。
  9. 不要跳过这个一步。
  10. 然后查询最相关表的模式。
  11. """
  12. system_message = SystemMessage(content=system_prompt)
复制代码
4.创建署理Agent

  1. 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.运行部分

  1. def run():
  2.   question = input('请输入你的问题')
  3.   question = '"' + question + '"'
  4.   resp = agent.invoke({'messages':[HumanMessage(content=question)]})
  5.   result = resp['messages']
  6.   #最后一个才是真正的答案
  7.   print(result[len(result)-1].content)
  8.   num = int(input('请输入你的选择  1.提问 2.退出系统'))
  9.   if num == 1:
  10.       run()
  11.   else:
  12.       sys.exit()
  13. if __name__ == "__main__":
  14.     print('--------欢迎来到数据库智能体---------')
  15.     run()
复制代码
6.运行结果


7.完整代码 

  1. # 调用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)
  2. tools = toolkit.get_tools()system_prompt="""
  3. 你是一个被设计用来与SQL数据库交互的代理。
  4. 给定一个输入问题,创建一个语法正确的SQL语句并且执行,然后查看查询结果并且返回答案。
  5. 除非用户指定了他们想要获得的实例的具体数量,否则始终将SQL查询限制伟最多10个结果。
  6. 你可以按相关列对结果进行排序,以返回MySQL数据库中最匹配的数据。
  7. 你可以使用与数据库交互的工具。在执行查询之前,你必须仔细检查。如果执行查询时出现错误,请重新查询并重试。
  8. 不要对数据库做任何的DML语句(插入,更新,删除等)。
  9. 首先,你应该查看数据库中的表,看看能查询什么。
  10. 不要跳过这个一步。
  11. 然后查询最相关表的模式。
  12. """
  13. 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企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:43 , Processed in 0.082647 second(s), 30 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表