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

前言

上篇文章介绍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 os
import sys

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = 'xxxxxxxx'
os.environ["LANGCHAIN_PROJECT"] = "智谱AI"

#调用智谱AI API
os.environ["ZHIPUAI_API_KEY"] = "xxxxxxxxxxx"

#调用第三方库
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'
#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()

### 使用 LangGraph 和大模型开发数据分析助理智能体 #### 背景与目标 LangGraph 是一种强大的工具,能够用于构建复杂的多智能体系统。它不仅提供了灵活的工作流设计能力,还允许开发者轻松集成多种模块化的功能组件[^1]。结合大模型的强大自然语言处理能力和数据分析能力,可以创建一个高效的数据分析助理智能体。 这种智能体的主要目标是帮助企业或个人快速完成数据清洗、探索性数据分析(EDA)、统计建模以及可视化展示等工作。以下是关于如何利用 LangGraph 和大模型技术来开发这样一个系统的详细介绍。 --- #### 工作流概述 为了实现数据分析助理的功能,整个工作流通常分为以下几个部分: 1. **用户交互接口** 用户可以通过自然语言提问的方式向系统发起请求,例如:“请帮我分析销售数据的趋势。” 这一阶段主要依赖于前端界面或者 API 接口接收输入,并将其传递给后端逻辑层进行解析和执行[^4]。 2. **任务分解与调度** 利用 LangGraph 提供的任务编排机制,将复杂的大规模问题拆解成多个子任务分别交给不同的 Agents 来解决。比如某些特定类型的计算可能更适合由擅长数值运算的小型专用模型负责;而对于涉及高层次理解的内容,则交予大型预训练语言模型去处理[^3]。 3. **数据获取与预处理** 数据源可能是本地文件上传、数据库查询结果或者是外部API调取得到的信息集合。无论哪种形式,在正式进入下一步之前都需要经过必要的清理操作——去除噪声项、填补缺失值等等。这部分也可以自动化地设置为独立节点运行在图结构当中[^2]。 4. **核心算法应用** 针对具体业务场景选用合适的机器学习方法论实施预测/分类等高级别决策制定过程。同时还可以引入解释性的图表生成服务以便让最终呈现出来的结论更加直观易懂[^1]。 5. **结果反馈** 最后一步就是把所有中间环节产生的有用信息汇总起来形成一份完整的报告文档返回给原始询问者查看。这期间同样需要用到一些模板渲染引擎配合自定义样式表单共同作用才能达到最佳视觉效果体验标准[^3]。 --- #### 技术栈推荐 - **编程语言**: Python (因其拥有丰富的库支持) - **框架**: LangChain / HuggingFace Transformers 等作为基础支撑平台 - **云服务平台选项**: AWS SageMaker, Google Cloud Vertex AI 或 Azure Machine Learning Services 可以为大规模分布式训练提供必要资源保障[^2] --- #### 实践案例分享 假设我们需要打造一款专注于电商领域的产品销量趋势洞察助手。那么按照前述提到的整体思路规划如下步骤即可达成目的: 1. 定义清晰的目标范围; 2. 收集相关历史交易记录明细资料; 3. 设计合理的特征工程方案提取有意义指标变量; 4. 训练回归类监督学习模型捕捉潜在规律模式; 5. 将所得成果封装进图形界面上线发布供实际使用者便捷访问查阅[^4]. --- ```python from langchain import PromptTemplate, LLMChain from langchain.llms import OpenAI def create_data_analysis_agent(): template = """You are a data analysis assistant. Given the following context about user's request and dataset information, generate an appropriate response that includes insights from exploratory data analysis. Context: {context} Dataset Info: {dataset_info} Response:""" prompt = PromptTemplate(template=template, input_variables=["context", "dataset_info"]) llm_chain = LLMChain(prompt=prompt, llm=OpenAI()) return llm_chain agent = create_data_analysis_agent() response = agent.run({"context": "Analyze sales trends.", "dataset_info": "Monthly revenue figures over past year."}) print(response) ``` --- ### 结语 通过以上描述可以看出,借助像 LangGraph 这样的先进工具和技术手段完全可以打造出满足不同行业需求特点的数据驱动型解决方案。希望这些指导能对你有所帮助! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【本人】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值