0


AI大模型探索之路-实战篇14: 集成本地Python代码解释器:强化Agent智能数据分析平台

系列篇章💥

AI大模型探索之路-实战篇4:深入DB-GPT数据应用开发框架调研
AI大模型探索之路-实战篇5:探索Open Interpreter开放代码解释器调研
AI大模型探索之路-实战篇6:掌握Function Calling的详细流程
AI大模型探索之路-实战篇7:Function Calling技术实战自动生成函数
AI大模型探索之路-实战篇8:多轮对话与Function Calling技术应用
AI大模型探索之路-实战篇9:探究Agent智能数据分析平台的架构与功能
AI大模型探索之路-实战篇10:数据预处理的艺术:构建Agent智能数据分析平台的基础
AI大模型探索之路-实战篇11: Function Calling技术整合:强化Agent智能数据分析平台功能
AI大模型探索之路-实战篇12: 构建互动式Agent智能数据分析平台:实现多轮对话控制
AI大模型探索之路-实战篇13: 从对话到报告:打造能记录和分析的Agent智能数据分析平台


目录


一、前言

在之前的文章里,我们展示了如何利用大型模型的推理能力和Function Calling技术实现从自然语言到数据查询分析处理的转变。然而,除了依赖大模型自身的能力之外,有时我们还需要处理一些超出大模型能力范围的任务,例如调用本地代码库进行数据的可视化展示。因此,本文将介绍如何通过为Agent智能数据分析平台增添新外挂——Python代码解释器,来进一步增强其能力。

二、实现本地Python代码解释器

1、定义数据提取函数

定义一个数据提取服务,用于读取数据库表信息,放入到df变量中,并设置成全局变量

  1. defextract_data(sql_query,df_name):"""
  2. 用于借助pymysql,将MySQL中的iquery数据库中的表读取并保存到本地Python环境中。
  3. :param sql_query: 字符串形式的SQL查询语句,用于提取MySQL中iquery数据库中的某张表。
  4. :param df_name: 将MySQL数据库中提取的表格进行本地保存时的变量名,以字符串形式表示。
  5. :return:表格读取和保存结果
  6. """
  7. mysql_pw ="iquery_agent"
  8. connection = pymysql.connect(
  9. host='localhost',# 数据库地址
  10. user='iquery_agent',# 数据库用户名
  11. passwd=mysql_pw,# 数据库密码
  12. db='iquery',# 数据库名
  13. charset='utf8'# 字符集选择utf8)# 使用pandas的read_sql方法,根据SQL查询语句从数据库中读取数据,并将结果保存到本地变量中globals()[df_name]= pd.read_sql(sql_query, connection)return"已成功完成%s变量创建"% df_name

2、数据查询汲取测试

测试数据查询,并传入一个本地变量用于接收查询到的数据

  1. sql_query ="SELECT * FROM user_demographics LIMIT 10"
  2. data_name ="test_dataframe"
  3. extract_data(sql_query,data_name)

输出:
在这里插入图片描述

3、变量数据查看

查看本地的全局变量,确认是否有接收到数据

  1. test_dataframe

输出:
在这里插入图片描述

4、数据汲取函数信息生成

使用函数自动生成器,生成数据库查询函数的信息

  1. #定义函数列表
  2. functions_list =[extract_data]#函数信息生成测试
  3. tools = auto_functions(functions_list)
  4. tools

输出:
在这里插入图片描述

  1. 注意:读取数据库和python代码解析的函数信息建议采用自己手写的方式,避免大模型不稳定,有时候生成的格式不对

5、大模型调用测试

测试大模型能否正常找到对于的数据汲取的函数

  1. messages=[{"role":"user","content":"请帮我读取iquery数据库中的user_payments,并保存至本地"}]
  2. response = client.chat.completions.create(
  3. model="gpt-3.5-turbo",
  4. messages=messages,
  5. tools=tools,
  6. tool_choice="auto",)
  7. response.choices[0].message

输出:
在这里插入图片描述

6、定义python代码执行函数

定义一个能够在本地执行python代码的工具函数

  1. # 能够在本地执行python代码的外部函数# 定义一个名为python_inter的函数,该函数接受一个字符串类型的python代码作为参数defpython_inter(py_code):"""
  2. 该函数的主要作用是对iquery数据库中各张数据表进行查询和处理,并获取最终查询或处理结果。
  3. :param py_code: 字符串形式的Python代码,此代码用于执行对iquery数据库中各张数据表进行操作
  4. :return:返回代码运行的最终结果
  5. """# 记录函数开始执行时,全局作用域内的变量名
  6. global_vars_before =set(globals().keys())try:# 尝试执行传入的代码,代码的作用域为全局作用域exec(py_code,globals())except Exception as e:# 如果代码执行出错,返回错误信息returnstr(e)# 记录代码执行后,全局作用域内的变量名
  7. global_vars_after =set(globals().keys())# 获取执行代码后新产生的全局变量名
  8. new_vars = global_vars_after - global_vars_before
  9. # 如果有新的全局变量产生if new_vars:# 返回新的全局变量及其值
  10. result ={var:globals()[var]for var in new_vars}returnstr(result)else:try:# 如果没有新的全局变量产生,尝试计算并返回代码的执行结果returnstr(eval(py_code,globals()))except Exception as e:# 如果计算代码执行结果也出错,返回成功执行代码的消息return"已经顺利执行代码"

7、自动生成python代码执行函数的信息

利用大模型生成funcation calling需要的函数信息(实践运用时建议手写,避免大模型不稳定生成格式不对

  1. functions_list =[python_inter]
  2. tools = auto_functions(functions_list)
  3. tools

输出:
在这里插入图片描述

8、第一次大模型调用测试(python代码执行函数调用测试)

1)调用大模型,并找到工具函数
通过大模型API自动调用python代码执行函数,检查确认大模型是否能找的工具函数python_inter

  1. messages=[{"role":"user","content":"已经读取iquery数据库中的user_payments数据表,并保存为test_dataframe"},{"role":"user","content":"test_dataframe是已经定义好的变量"},{"role":"user","content":"请帮我检查test_dataframe中总共包含几个字段"}]
  2. response = client.chat.completions.create(
  3. model="gpt-3.5-turbo",
  4. messages=messages,
  5. tools=tools,
  6. tool_choice="auto",)
  7. response.choices[0].message

在这里插入图片描述

2)获取代码变量

  1. py_code=response.choices[0].message.tool_calls[0].function.arguments
  2. #格式转换
  3. code = json.loads(py_code)#查看代码
  4. code

输出:(查看变量)
在这里插入图片描述

3)取出变量信息

  1. code_str = code.get("py_code")#取出代码
  2. code_str

在这里插入图片描述
4)执行代码,看结果

  1. #Python代码执行测试(查看经过python代码格式化之后的数据库数据)
  2. python_inter(code_str)

在这里插入图片描述

9、第二次大模型调用测试

第二次大模型API调用测试,获取查询user_payments数据表,获取字段信息和取值范围。

  1. messages=[{"role":"user","content":"已经读取iquery数据库中的user_payments数据表,并保存为test_dataframe"},{"role":"user","content":"test_dataframe是已经定义好的变量"},{"role":"user","content":"请帮我检查test_dataframe中各字段的基本类型和取值范围"}]
  2. response = client.chat.completions.create(
  3. model="gpt-3.5-turbo-16k",
  4. messages=messages,
  5. tools=tools,
  6. tool_choice="auto",)
  7. response.choices[0].message

输出:
在这里插入图片描述

函数信息查看、提取

  1. code = json.loads(response.choices[0].message.tool_calls[0].function.arguments)
  2. code_str = code.get("py_code")
  3. code_str

在这里插入图片描述

代码执行测试

  1. python_inter(code_str)

在这里插入图片描述

10、第三次大模型调用测试

第三次大模型API调用测试,获取查询user_payments数据表,并统计缺失列。

  1. messages=[{"role":"user","content":"已经读取iquery数据库中的user_payments数据表,并保存为test_dataframe"},{"role":"user","content":"test_dataframe是已经定义好的变量"},{"role":"user","content":"请帮我检查test_dataframe中各列的缺失值情况,并将统计结果保存为missing_value对象"}]
  2. response = client.chat.completions.create(
  3. model="gpt-3.5-turbo",
  4. messages=messages,
  5. tools=tools,
  6. tool_choice="auto",)
  7. response.choices[0].message

输出:
在这里插入图片描述
查看变量信息:missing_value
获取查看函数

  1. code = json.loads(response.choices[0].message.tool_calls[0].function.arguments)
  2. code_str = code.get("py_code")
  3. code_str

在这里插入图片描述

代码执行

  1. python_inter(code_str)

在这里插入图片描述

查看执行后的变量

  1. missing_value

在这里插入图片描述

三、可视化展示数据

借助Python代码解释器进行可视化数据展示

1、获取数据

根据大模型获取test_dataframe中gender字段信息

  1. messages=[{"role":"user","content":"已经读取iquery数据库中的user_payments数据表,并保存为test_dataframe"},{"role":"user","content":"test_dataframe是已经定义好的变量"},{"role":"user","content":"请帮我统计test_dataframe中gender字段的不同取值分布情况,并以可视化形式进行展示"}]
  2. response = client.chat.completions.create(
  3. model="gpt-3.5-turbo",
  4. messages=messages,
  5. tools=tools,
  6. tool_choice="auto",)
  7. response.choices[0].message

在这里插入图片描述
查看函数信息

  1. code = json.loads(response.choices[0].message.tool_calls[0].function.arguments)
  2. code_str = code.get("py_code")
  3. code_str

在这里插入图片描述

2、可视化展示

执行python代码解释器,进行可视化展示

  1. python_inter(code_str)

在这里插入图片描述

四、把可视化图片存入云盘文档

1、图形绘制测试

  1. import matplotlib.pyplot as plt
  2. # 创建一个图形
  3. fig, ax = plt.subplots()
  4. ax.plot([1,2,3,4,5])

在这里插入图片描述

查看类型

  1. type(fig)

在这里插入图片描述

2、定义图片存储服务

  1. from docx import Document
  2. import matplotlib.pyplot as plt
  3. import os
  4. import tempfile
  5. defappend_img_in_doc(folder_name, doc_name, img):""""
  6. 往文件里追加图片
  7. @param folder_name=目录名,doc_name=文件名,img=图片对象,数据类型为matplotlib.figure.Figure对象
  8. """
  9. base_path ="/root/autodl-tmp/iquery项目/iquery云盘"## 目录地址
  10. full_path_folder=base_path+"/"+folder_name
  11. ## 文件地址
  12. full_path_doc = os.path.join(full_path_folder, doc_name)+".doc"# 检查目录是否存在,如果不存在则创建ifnot os.path.exists(full_path_folder):
  13. os.makedirs(full_path_folder)# 检查文件是否存在if os.path.exists(full_path_doc):print(full_path_doc)# 文件存在,打开并追加内容
  14. document = Document(full_path_doc)else:# 文件不存在,创建一个新的文档对象
  15. document = Document()# 追加图片# 将matplotlib的Figure对象保存为临时图片文件with tempfile.NamedTemporaryFile(delete=False, suffix='.png')as tmpfile:
  16. fig.savefig(tmpfile.name,format='png')# 将图片插入到.docx文档中
  17. document.add_picture(tmpfile.name)# 保存文档
  18. document.save(full_path_doc)print(f"图片已追加到 {doc_name}")
  19. append_img_in_doc(folder_name="电信用户行为分析", doc_name="数据分析问答", img=fig)

在这里插入图片描述

五、 实现把图片变为fig对象的代码逻辑

1、获取数据

  1. messages=[{"role":"user","content":"已经读取iquery数据库中的user_payments数据表,并保存为test_dataframe"},{"role":"user","content":"test_dataframe是已经定义好的变量"},{"role":"user","content":"请帮我统计test_dataframe中gender字段的不同取值分布情况,并以可视化形式进行展示,可视化展示时请尽量绘制更加清晰美观的图片"}]
  2. response = client.chat.completions.create(
  3. model="gpt-3.5-turbo",
  4. messages=messages,
  5. tools=tools,
  6. tool_choice="auto",)
  7. response.choices[0].message

在这里插入图片描述

2、查看代码

  1. code = json.loads(response.choices[0].message.tool_calls[0].function.arguments)
  2. code_str = code.get("py_code")
  3. code_str

在这里插入图片描述

3、执行代码(可视化展示)

  1. python_inter(code_str)

在这里插入图片描述

4、定义insert_fig_objec函数,插入matplotlib图形对象

1)查看代码

  1. code_str

在这里插入图片描述

2)在给定的代码字符串(code_str)中插入一个名为fig的matplotlib图形对象
检查代码字符串中是否已经存在fig对象的创建,如果不存在,则在第一次出现绘图相关代码的位置之前插入fig对象的创建。这样可以确保在使用matplotlib绘图时,所有的绘图操作都在同一个图形对象上进行

  1. definsert_fig_object(code_str):global fig
  2. # 检查是否已存在 fig 对象的创建if'fig = plt.figure'in code_str:return code_str # 如果存在,则返回原始代码字符串# 定义可能的库别名和全名
  3. plot_aliases =['plt.','matplotlib.pyplot.','plot']
  4. sns_aliases =['sns.','seaborn.']# 寻找第一次出现绘图相关代码的位置
  5. first_plot_occurrence =min((code_str.find(alias)for alias in plot_aliases + sns_aliases if code_str.find(alias)>=0), default=-1)# 如果找到绘图代码,则在该位置之前插入 fig 对象的创建if first_plot_occurrence !=-1:
  6. plt_figure_index = code_str.find('plt.figure')if plt_figure_index !=-1:# 寻找 plt.figure 后的括号位置,以确定是否有参数
  7. closing_bracket_index = code_str.find(')', plt_figure_index)# 如果找到了 plt.figure(),则替换为 fig = plt.figure()
  8. modified_str = code_str[:plt_figure_index]+'fig = '+ code_str[plt_figure_index:closing_bracket_index +1]+ code_str[closing_bracket_index +1:]else:
  9. modified_str = code_str[:first_plot_occurrence]+'fig = plt.figure()\n'+ code_str[first_plot_occurrence:]return modified_str
  10. else:return code_str # 如果没有找到绘图代码,则返回原始代码字符串

5、insert_fig_objec函数测试

  1. code_temp1=("import matplotlib.pyplot as plt\n\n# 统计gender字段的不同取值分布情况\ngender_counts = test_dataframe['gender'].value_counts()\n\n# 绘制柱状图\nplt.figure(figsize=(8, 6))\nplt.bar(gender_counts.index, gender_counts.values)\nplt.xlabel('Gender')\nplt.ylabel('Count')\nplt.title('Distribution of Gender')\n\n# 展示图形\nplt.show()")
  2. modified_str = insert_fig_object(code_temp1)print(modified_str)

在这里插入图片描述

6、可视化展示gender字段取值分布1

  1. 导入matplotlib.pyplot库,并将其别名为plt。
  2. 统计test_dataframe中gender字段的不同取值分布情况,将结果存储在gender_counts变量中。
  3. 创建一个8x6大小的图形对象fig。
  4. 使用plt.bar()函数绘制柱状图,横坐标为gender_counts的索引(即不同的性别取值),纵坐标为gender_counts的值(即每个性别取值的数量)。
  5. 设置横轴标签为’Gender’,纵轴标签为’Count’,标题为’Distribution of Gender’。
  6. 使用plt.show()函数展示图形。
  1. import matplotlib.pyplot as plt
  2. # 统计gender字段的不同取值分布情况
  3. gender_counts = test_dataframe['gender'].value_counts()# 绘制柱状图
  4. fig = plt.figure(figsize=(8,6))
  5. plt.bar(gender_counts.index, gender_counts.values)
  6. plt.xlabel('Gender')
  7. plt.ylabel('Count')
  8. plt.title('Distribution of Gender')# 展示图形
  9. plt.show()

输出
在这里插入图片描述

7、可视化展示gender字段取值分布2

使用了seaborn库来设置图形样式和绘制柱状图

  1. import matplotlib.pyplot as plt
  2. import seaborn as sns
  3. counts = test_dataframe['gender'].value_counts()
  4. fig = plt.figure(figsize=(8,6))
  5. sns.set(style='whitegrid')
  6. sns.barplot(x=counts.index, y=counts.values)
  7. plt.title('Distribution of Gender in test_dataframe')
  8. plt.xlabel('Gender')
  9. plt.ylabel('Count')
  10. plt.show()

输出
在这里插入图片描述

8、提取代码格式化输出

  1. defextract_python(json_str):# 使用literal_eval将字符串转换为字典
  2. dict_data = json.loads(json_str)# 提取'sql_query'的值
  3. py_code_value = dict_data['py_code']# 提取并返回'sql_query'的值return py_code_value
  4. json_str = response.choices[0].message.tool_calls[0].function.arguments
  5. print(json_str)print(extract_python(json_str))

输出:
在这里插入图片描述

9、重新定义python代码执行函数

  1. defpython_inter(py_code):"""
  2. 用于对iquery数据库中各张数据表进行查询和处理,并获取最终查询或处理结果。
  3. :param py_code: 字符串形式的Python代码,用于执行对iquery数据库中各张数据表进行操作
  4. :return:代码运行的最终结果
  5. """# 添加图片对象,如果存在绘图代码,则创建fig对象
  6. py_code = insert_fig_object(py_code)
  7. global_vars_before =set(globals().keys())try:exec(py_code,globals())except Exception as e:returnstr(e)
  8. global_vars_after =set(globals().keys())
  9. new_vars = global_vars_after - global_vars_before
  10. if new_vars:
  11. result ={var:globals()[var]for var in new_vars}returnstr(result)else:try:returnstr(eval(py_code,globals()))except Exception as e:return"已经顺利执行代码"

测试

  1. python_inter(code_str)

在这里插入图片描述

10、查看fg对象

  1. fig

在这里插入图片描述

六、多轮对话增加Python代码解释器效果

1、定义Python代码提取函数

  1. defextract_python(json_str):ifisinstance(json_str,dict):return json_str['py_code']# 使用literal_eval将字符串转换为字典
  2. dict_data = json.loads(json_str)# 提取'sql_query'的值
  3. py_code_value = dict_data['py_code']# 提取并返回'sql_query'的值return py_code_value

2、大模型两次调用封装

  1. defcheck_code_run(messages,
  2. project_name,
  3. doc_name,
  4. functions_list=None,
  5. tools=None,
  6. model="gpt-3.5-turbo",
  7. auto_run =True):"""
  8. 能够自动执行外部函数调用的对话模型
  9. :param messages: 必要参数,字典类型,输入到Chat模型的messages参数对象
  10. :param prject_name: 项目名
  11. :param doc_name: 文件名
  12. :param functions_list: 可选参数,默认为None,可以设置为包含全部外部函数的列表对象
  13. :param model: Chat模型,可选参数,默认模型为gpt-3.5-turbo
  14. :return:Chat模型输出结果
  15. """
  16. code =None# 如果没有外部函数库,则执行普通的对话任务if functions_list ==None:
  17. response = client.chat.completions.create(
  18. model=model,
  19. messages=messages,)
  20. response_message = response.choices[0].message
  21. final_response = response_message.content
  22. # 若存在外部函数库,则需要灵活选取外部函数并进行回答else:# 创建外部函数库字典
  23. available_functions ={func.__name__: func for func in functions_list}# 第一次调用大模型
  24. response = client.chat.completions.create(
  25. model=model,
  26. messages=messages,
  27. tools=tools,
  28. tool_choice="auto",)
  29. response_message = response.choices[0].message
  30. tool_calls = response_message.tool_calls
  31. if tool_calls:
  32. messages.append(response_message)for tool_call in tool_calls:
  33. function_name = tool_call.function.name
  34. function_to_call = available_functions[function_name]
  35. function_args = json.loads(tool_call.function.arguments)########################################## 创建code对象if'sql_inter'in function_name or'extract_data'in function_name:
  36. code = extract_sql(function_args)# 将代码字符串转换为Markdown格式
  37. markdown_code =f"```sql\n{code}\n```"else:
  38. code = extract_python(function_args)
  39. code = insert_fig_object(code)# 将代码字符串转换为Markdown格式
  40. markdown_code =f"```python\n{code}\n```"#########################################if auto_run ==False:print("已将问题转化为如下代码准备运行:")# 在Jupyter Notebook中展示Markdown格式的代码
  41. display(Markdown(markdown_code))#sql_query = extract_sql_by_str(function_args)#print("抽取出来的SQL:" + sql_query)
  42. res =input('是否确认并继续执行(1),或者退出本次运行过程(2)')if res =='2':print("终止运行")returnNoneelse:print("正在执行代码,请稍后...")
  43. function_response = function_to_call(**function_args)
  44. messages.append({"tool_call_id": tool_call.id,"role":"tool","name": function_name,"content": function_response,})## 第二次调用模型
  45. second_response = client.chat.completions.create(
  46. model=model,
  47. messages=messages,)# 获取最终结果
  48. final_response = second_response.choices[0].message.content
  49. else:
  50. final_response = response_message.content
  51. del messages
  52. ##################################if code:
  53. substrings =['plt.','matplotlib.pyplot.','sns.','seaborn.','plot']ifany(substring in code for substring in substrings):global fig
  54. append_img_in_doc(project_name, doc_name, img=fig)print("图片保存成功!")################################return final_response

3、多轮对话函数定义

  1. import tiktoken
  2. defchat_with_inter(functions_list=None,
  3. prompt="你好呀",
  4. model="gpt-3.5-turbo",
  5. system_message=[{"role":"system","content":"你是一个智能助手。"}],
  6. auto_run =True):print("正在初始化外部函数库")# 创建函数列表对应的参数解释列表
  7. functions = auto_functions(functions_list)#print(functions)print("外部函数库初始化完成")
  8. project_name =input("请输入当前分析项目名称:")
  9. folder_name = create_directory(project_name)print("已完成数据分析文件创建")
  10. doc_name =input("请输入当前分析阶段,如数据探索阶段和理解、数据清洗阶段等:")
  11. doc_name +='问答'print("好的,即将进入交互式分析流程")# 多轮对话阈值if'gpt-4'in model:
  12. tokens_thr =6000elif'16k'in model:
  13. tokens_thr =14000else:
  14. tokens_thr =3000
  15. messages = system_message
  16. ## 完成给用户输入的问题赋值
  17. user_input = prompt
  18. messages.append({"role":"user","content": prompt})## 计算token大小
  19. embedding_model ="text-embedding-ada-002"# 模型对应的分词器(TOKENIZER)
  20. embedding_encoding ="cl100k_base"
  21. encoding = tiktoken.get_encoding(embedding_encoding)
  22. tokens_count =len(encoding.encode((prompt + system_message[0]["content"])))whileTrue:
  23. answer = check_code_run(messages,
  24. project_name=project_name,
  25. doc_name = doc_name,
  26. functions_list=functions_list,
  27. tools=functions,
  28. model=model,
  29. auto_run = auto_run)print(f"模型回答: {answer}")#####################判断是否记录文档 start#######################whileTrue:
  30. record =input('是否记录本次回答(1),还是再次输入问题并生成该问题答案(2)')if record =='1':
  31. Q_temp ='Q:'+ user_input
  32. A_temp ='A:'+ answer
  33. append_in_doc(folder_name=project_name,
  34. doc_name=doc_name,
  35. qa_string=Q_temp)
  36. append_in_doc(folder_name=project_name,
  37. doc_name=doc_name,
  38. qa_string=A_temp)# 记录本轮问题答案
  39. messages.append({"role":"assistant","content": answer})breakelse:print('好的,请再次输入问题')
  40. user_input =input()
  41. messages[-1]["content"]= user_input
  42. answer = check_code_run(messages,
  43. project_name=project_name,
  44. doc_name = doc_name,
  45. functions_list=functions_list,
  46. tools=functions,
  47. model=model,
  48. auto_run = auto_run)print(f"模型回答: {answer}")########################判断是否记录文档 stop ######################## 询问用户是否还有其他问题
  49. user_input =input("您还有其他问题吗?(输入退出以结束对话): ")if user_input =="退出":del messages
  50. break# 记录新一轮问答
  51. messages.append({"role":"assistant","content": answer})
  52. messages.append({"role":"user","content": user_input})# 计算当前总token
  53. tokens_count +=len(encoding.encode((answer + user_input)))# 删除超出token阈值的对话内容while tokens_count >= tokens_thr:
  54. tokens_count -=len(encoding.encode(messages.pop(1)["content"]))

4、定义工具列表

  1. #sql_inter,
  2. functions_list =[extract_data, python_inter]

5、多轮对话测试

  1. from IPython.display import display, Markdown, Code
  2. chat_with_inter(functions_list=functions_list,
  3. prompt="请将iquery数据库中的user_demographics表保存到本地Python环境中,并命名为user_demographics_df",
  4. model="gpt-3.5-turbo",
  5. system_message=[{"role":"system","content": md_content}],
  6. auto_run =False)

对话效果

  1. 正在初始化外部函数库
  2. [{'type':'function','function':{'name':'extract_data','description':'用于借助pymysql,将MySQL中的iquery数据库中的表读取并保存到本地Python环境中。','parameters':{'type':'object','properties':{'sql_query':{'type':'string','description':'字符串形式的SQL查询语句,用于提取MySQL中iquery数据库中的某张表。'},'df_name':{'type':'string','description':'将MySQL数据库中提取的表格进行本地保存时的变量名,以字符串形式表示。'}},'required':['sql_query','df_name']}}},{'type':'function','function':{'name':'python_inter','description':'用于对chatbi数据库中各张数据表进行查询和处理,并获取最终查询或处理结果。','parameters':{'type':'object','properties':{'py_code':{'type':'string','description':'字符串形式的Python代码,用于执行对chatbi数据库中各张数据表进行操作'}},'required':['py_code']}}}]
  3. 外部函数库初始化完成
  4. 请输入当前分析项目名称: 电信用户行为分析目录 电信用户行为分析 已存在
  5. 已完成数据分析文件创建
  6. 请输入当前分析阶段,如数据探索阶段和理解、数据清洗阶段等: 数据可视化
  7. 好的,即将进入交互式分析流程
  8. 已将问题转化为如下代码准备运行:
  9. 是否确认并继续执行(1),或者退出本次运行过程(2 1
  10. 正在执行代码,请稍后.../tmp/ipykernel_150812/966933623.py:20: UserWarning: pandas only supports SQLAlchemy connectable (engine/connection)or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.globals()[df_name]= pd.read_sql(sql_query, connection)
  11. 模型回答: 已将iquery数据库中的user_demographics数据表保存到本地Python环境中,并命名为user_demographics_df。您可以使用该变量进行进一步的数据分析和处理了。
  12. 是否记录本次回答(1),还是再次输入问题并生成该问题答案(2 1
  13. 内容已追加到 数据可视化问答
  14. 内容已追加到 数据可视化问答
  15. 您还有其他问题吗?(输入退出以结束对话): 用可视化的方式展示user_demographics_df数据集中gender字段不同取值的占比情况
  16. 已将问题转化为如下代码准备运行:
  17. 是否确认并继续执行(1),或者退出本次运行过程(2 1
  18. 正在执行代码,请稍后...

在这里插入图片描述

七、结语

通过上述步骤的实践应用,我们已经成功将本地python代码解释器整合进入了Agent智能数据分析平台,到此,智能数据分析平台同时兼容了我们调研项目中的DB-GPT和Open Interpreter两者的优势特点。相当于给平台装上了两个翅膀,一个用于SQL解析、一个用于代码解释;从而让平台的数据处理能力更上一层楼。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型探索之路

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:建立有技术交流群,可以扫码👇 加入社群,500本各类编程书籍、AI教程、AI工具等你领取!
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!


本文转载自: https://blog.csdn.net/xiaobing259/article/details/139399366
版权归原作者 寻道AI小兵 所有, 如有侵权,请联系我们删除。

“AI大模型探索之路-实战篇14: 集成本地Python代码解释器:强化Agent智能数据分析平台”的评论:

还没有评论