LLM 构建Data Multi-Agents 赋能数据分析平台的实践之④:数据分析之三(数据展示)

概述
在先前探讨的文章中,我们构建了一个全面的数据测试体系,该体系遵循“数据获取—数据治理—数据分析”的流程。如何高效地构建数据可视化看板,以直观展现分析结果,正逐渐成为利用新兴技术提升效能的关键领域。伴随业务拓展、数据量增长与信息系统不断升级,对数据分析成果呈现的灵活性需求日益增强。这预示着能够迅速且灵活创建数据看板的能力,将成为未来技术赋能的核心趋势之一。

本实践研究旨在深入探讨利用大型语言模型(LLM)来构建Data Multi-Agents框架下数据展示与看板的潜力及其可能面临的挑战。通过LLM的智能分析能力,我们期望能自动识别关键数据指标,智能设计图表类型,并动态调整数据看板布局,以适应不同用户的需求和场景。然而,这一过程中也存在若干难题,如数据隐私保护、模型训练所需大量高质量数据集的获取,以及如何确保看板信息的准确性和实时性等,这些都是需要我们重点关注和解决的问题。

通过本次实践,我们将评估LLM在自动化数据看板构建中的适用性,探索其在提升数据可读性与洞察力方面的潜在优势,同时也会审视技术实施中可能遇到的实际障碍,以期为未来的数据可视化工具开发提供有价值的参考。
在这里插入图片描述

Data Agent构建
本次实践工程采用LLM+AutoGen框架,借助AutoGen框架代码生成和执行的能力构建数据展示的原生代码,并且使用Streamlit、PyEcharts、Bypython等框架来展示数据情况:

1. 代码执行器的构建

目标:

创建一个可以安全地执行Python代码的环境,用于动态生成数据可视化。

实现步骤:
  • 容器化: 使用Docker容器隔离执行环境,确保主机系统安全。
  • 权限控制: 限制代码执行器对系统的访问权限,防止恶意代码损害系统。
  • 错误处理: 捕获并优雅地处理执行时可能发生的任何异常。
  • 资源管理: 监控和限制CPU、内存使用,避免资源耗尽。
技术栈:
  • Docker
  • Python虚拟环境
  • Error handling in Python

2. 代码编写器的构建

目标:

设计一个用户友好的界面,允许非技术用户通过自然语言描述需求,自动生成代码。

实现步骤:
  • 自然语言解析: 利用LLM解析用户的自然语言指令,转换成可执行的代码片段。
  • 代码模板库: 建立常用数据处理和可视化的代码模板,减少从头生成代码的需求。
  • 用户反馈循环: 提供机制让用户验证和修改自动生成的代码,增强准确性。
技术栈:
  • AutoGen API
  • Streamlit for UI
  • LLM for NLP processing

3. 代码迭代策略及提示词的构建

目标:

优化代码生成过程,提高代码质量和效率。

实现步骤:
  • 迭代学习: 记录并分析用户修改的代码,让LLM从这些修改中学习,改进未来生成的代码。
  • 提示词优化: 创建和维护一套高质量的提示词库,帮助引导LLM生成更准确的代码。
  • 性能监控: 定期评估代码生成和执行的性能,调整算法和参数以提升效率。
技术栈:
  • Machine Learning for iterative improvement
  • Prompt engineering
  • Performance monitoring tools

展示数据情况

在所有组件就绪后,利用Streamlit、PyEcharts、ByPython等框架创建交互式数据看板:

  • Streamlit: 构建前端界面,集成所有功能。
  • PyEcharts: 生成复杂的动态图表。
  • ByPython: 实时代码执行和结果显示。
from autogen import GroupChat
from autogen import GroupChatManager
from autogen import ConversableAgent  # 从autogen模块导入ConversableAgent类
from autogen.coding import LocalCommandLineCodeExecutor
from autogen import UserProxyAgent
import tempfile
from autogen.agentchat.contrib.retrieve_user_proxy_agent import RetrieveUserProxyAgent
from autogen.agentchat.contrib.retrieve_assistant_agent import RetrieveAssistantAgent
import chromadb
import autogenconfig_deepseek= {"config_list": [{"model": "xxx","base_url":"xxx","api_key":"xxx"}],"cache_seed": None}executor = LocalCommandLineCodeExecutor(timeout=10,  # 每次代码执行的超时时间,单位为秒work_dir='/content/pig_data',  # 使用临时目录来存储代码文件
)assistant = autogen.AssistantAgent(name="assistant",system_message="You are a helpful assistant.",llm_config=config_deepseek,)
# 创建一个配置了代码执行器的代理
code_executor_agent = ConversableAgent("code_executor_agent",llm_config=False,  # 关闭此代理的LLM功能code_execution_config={"last_n_messages": 5,"work_dir": "/content/pig_data","use_docker": False,},  # 使用本地命令行代码执行器human_input_mode="NEVER",  # 此代理始终需要人类输入,以确保安全is_termination_msg=lambda msg: "TERMINATE" in msg["content"].lower())# 代码编写代理的系统消息是指导LLM如何使用代码执行代理中的代码执行器
code_writer_system_message = """You are a helpful AI assistant.Solve tasks using your coding and language skills.In the following cases, suggest python code (in a python coding block) or shell script (in a sh coding block) for the user to execute.1. When you need to collect info, use the code to output the info you need, for example, browse or search the web, download/read a file, print the content of a webpage or a file, get the current date/time, check the operating system. After sufficient info is printed and the task is ready to be solved based on your language skill, you can solve the task by yourself.2. When you need to perform some task with code, use the code to perform the task and output the result. Finish the task smartly.Solve the task step by step if you need to. If a plan is not provided, explain your plan first. Be clear which step uses code, and which step uses your language skill.When using code, you must indicate the script type in the code block. The user cannot provide any other feedback or perform any other action beyond executing the code you suggest. The user can't modify your code. So do not suggest incomplete code which requires users to modify. Don't use a code block if it's not intended to be executed by the user.If you want the user to save the code in a file before executing it, put # filename: <filename> inside the code block as the first line. Don't include multiple code blocks in one response. Do not ask users to copy and paste the result. Instead, use 'print' function for the output when relevant. Check the execution result returned by the user.If the result indicates there is an error, fix the error and output the code again. Suggest the full code instead of partial code or code changes. If the error can't be fixed or if the task is not solved even after the code is executed successfully, analyze the problem, revisit your assumption, collect additional info you need, and think of a different approach to try.When you find an answer, verify the answer carefully. Include verifiable evidence in your response if possible.Reply 'TERMINATE' in the end when everything is done."""# 创建一个名为code_writer_agent的代码编写代理,配置系统消息并关闭代码执行功能
code_writer_agent = ConversableAgent("code_writer_agent",system_message=code_writer_system_message,llm_config=config_deepseek,  # 使用GPT-4模型code_execution_config={"last_n_messages": 5,"work_dir": "/content/pig_data","use_docker": False,},  # 关闭此代理的代码执行功能)

数据多智能体协作:数据展示测试

prompt = """我们想要创建一个数据看板,用于展示和分析广东省生猪市场的价格动态。具体而言,我们需要关注以下几类数据:
全国母猪市场价格数据:Minimum price per week for weeded sows.csv ;淘汰母猪最低价格(周度).xlsx
全国仔猪市场价格数据:Piglet weekly out price.csv;仔猪出栏价格周度.xlsx
全国育肥猪价格数据:Weekly price of commercial pigs.csv;商品猪周度出栏价格.xlsx
一、数据获取与清洗:
1、获取广东省生猪市场的实时数据,包括育肥猪、仔猪和母猪的价格信息。
2、清洗数据,确保其准确无误且格式一致。
-计算价格指数:
1、基于获取的实时价格,计算育肥猪、仔猪和母猪的价格指数。价格指数可以通过标准化当前价格与基期价格的比例来计算
2、计算过程中,请确保考虑到数据的时间序列性质,选择最早日期作为基期。
二、数据保存:
1、将计算出的价格指数以及对应的实时价格数据保存到一个CSV文件中。CSV文件应包含日期、育肥猪价格指数、育肥猪实时价格、仔猪价格指数、仔猪实时价格、母猪价格指数、母猪实时价格等字段。
三、数据可视化:
1、使用Streamlit 库、Plotly 库:创建一个综合看板,利用Streamlit 库、Plotly 库的图表功能,展示各类猪只的价格指数与实时价格变化。保存数据看板为py文件。确保每个包含Streamlit代码的Python文件都有一个名为run的函数来运行Streamlit应用。
2、看板布局:顶部:广东省生猪市场总览,显示最新日期的平均价格指数。中部:第二个模块:两个独立的折线图,母猪价格指数折线图,母猪实时价格趋势图第三个模块:两个独立的柱状图,仔猪价格指数折线图,仔猪实时价格趋势图第四个模块:两个独立的折线图,育肥猪价格指数折线图,育肥猪实时价格趋势图第五个模块:两个独立的双折线图,母猪与仔猪价格指数对比折线图,母猪与育肥猪价格指数对比折线图底部:数据表格,列出具体日期的价格指数与实时价格,便于查阅。
3、图表样式:折线图:清晰标注日期轴,区分价格指数与实时价格的两条折线,使用不同的颜色和标记点。颜色方案:采用温和而对比明显的颜色组合,如深蓝与亮橙,便于区分不同类别。图例与标题:确保每个图表都有清晰的标题和图例,标注价格指数与实时价格的含义。
4、交互性与美观性交互设计:允许用户通过下拉菜单或滑块选择不同的日期范围,动态更新图表与表格中的数据。响应式设计:确保看板在不同设备上(桌面、平板、手机)都能良好显示,适应屏幕尺寸自动调整布局。视觉美观:整体设计简洁明快,避免过多装饰,确保数据呈现为主。"""

执行任务:

groupchat_result = code_writer_agent.initiate_chat(code_excute_agent,message=prompt,
)

结果展示:
运行过程
在这里插入图片描述
数据看板界面

WeChat_20240715175508

总结
1、AutoGen作为一个大模型应用开源开发框架,支持非openAI大模型力度不够,在测试过程中,面对复杂任务容易失灵;
2、当前的国产大模型面对多文件、多流程、复杂的任务很难快速生成准确无误的代码,导致迭代次数增加;从而极大的推高使用成本;
3、AutoGen经过更新虽然原生支持RAG应用,但是RAG应用效果远不如Langchain、Llamaindex等框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/377422.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQl server 日期函数查询相关练习

练习1.按月份分析销售数据。 create database date_db; use date_db; CREATE TABLE SalesData ( SaleID INT PRIMARY KEY IDENTITY(1,1), ProductName NVARCHAR(100) NOT NULL, SaleAmount DECIMAL(10, 2) NOT NULL, SaleDate DATE NOT NULL ); INSERT INTO Sa…

华为USG6000V防火墙v1

目录 一、实验拓扑图 二、要求 三、IP地址规划 四、实验配置 1&#x1f923;防火墙FW1web服务配置 2.网络配置 要求1&#xff1a;DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 要求2&#xff1a;生产区不…

使用Python和MediaPipe实现手势控制音量(Win/Mac)

1. 依赖库介绍 OpenCV OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它包含了数百个计算机视觉算法。 MediaPipe MediaPipe是一个跨平台的机器学习解决方案库&#xff0c;可以用于实时人类姿势估计、手势识…

Flask 用 Redis 缓存键值对-实例

Flask 使用起 Redis 来简直就是手到擒来&#xff0c;比 MySQL 简单多了&#xff0c;不需要那么多配置&#xff0c;实际代码就这么多&#xff0c;直接复制就能用。除了提供简单实用的实例以外&#xff0c;本文后面还会简单介绍一下 Redis 的安装与使用&#xff0c;初学者也能一看…

Nginx部署Vite打包的带前缀的项目

之前有篇文章&#xff0c;需要参考一下&#xff1a;https://zhangdapeng.blog.csdn.net/article/details/140388105 在这篇文章的基础之上&#xff0c;我测试了Vite打包的项目。 首先&#xff0c;我在vite配置文件里面添加了前缀&#xff1a; import {defineConfig} from v…

生物素-十一聚乙二醇-沙利度胺;Biotin-PEG11-Thalidomide

Biotin-PEG11-Thalidomide&#xff0c;即生物素-十一聚乙二醇-沙利度胺&#xff0c;是一种结合了生物素、十一聚乙二醇&#xff08;PEG11&#xff09;和沙利度胺的复杂化合物。以下是对该化合物的详细分析&#xff1a; 一、组成成分及特性 生物素&#xff08;Biotin&#xff09…

访问 Postman OAuth 2.0 授权的最佳实践

OAuth 2.0 代表了 web 安全协议的发展&#xff0c;便于在多个平台上进行授权服务&#xff0c;同时避免暴露用户凭据。它提供了一种安全的方式&#xff0c;让用户可以授权应用程序访问服务。 在 Postman 中开始使用 OAuth 2.0 Postman 是一个流行的API客户端&#xff0c;支持 …

2024-07-14 Unity插件 Odin Inspector1 —— 插件介绍

文章目录 1 介绍2 模块3 学习目的 1 介绍 ​ Odin Inspector 是 Unity 的一个插件&#xff0c;拥有强大、自定义和用户友好的编辑器&#xff0c;而无需编写任何自定义编辑器代码&#xff0c;使得编程过程中的数据可视化更容易实现。 ​ 具体功能包括&#xff1a; 更舒适美观…

2024-07-12 Unity AI状态机1 —— 框架介绍

文章目录 1 有限状态机2 状态机实现框架2.1 StateMachine2.2 BaseState2.3 ...State2.4 IAIObject 3 框架类图 本文章参考 B 站唐老狮 2023 年直播内容。点击前往唐老狮 B 站主页。 1 有限状态机 ​ 有限状态机&#xff08;Finite - State Machine&#xff0c;FSM&#xff09…

Docker安装RabbitMQ(带web管理端)

1.拉取带web管理的镜像 可以拉取rabbitmq对应版本的web管理端&#xff0c;比如&#xff1a;rabbitmq:3.9.11-management&#xff0c;也可以直接拉取带web管理端的最新版本 rabbitmq:management. docker pull rabbitmq:3.9.11-management 注意&#xff1a;如果docker pull ra…

websockt初始化,创建一个webSocket示例

写文思路&#xff1a; 以下主要从几个方面着手写websocket相关&#xff0c;包括以下&#xff1a;什么是webSocket&#xff0c;webSocket的优点和劣势&#xff0c;webSocket工作原理&#xff0c;webSocket握手示例&#xff0c;如何使用webSocket(使用webSocket的一个示例)&#…

Chapter 1:数据结构前言

在数字化的世界里&#xff0c;我们每天都在与数据打交道。然而&#xff0c;你是否曾想过&#xff0c;这些数据是如何被组织、存储和处理的&#xff1f;这就是数据结构的魅力所在。 数据结构&#xff0c;简单来说&#xff0c;就是数据的组织方式。它决定了我们如何高效地访问和操…

object-C 解答算法:合并两个有序数组(leetCode-88)

合并两个有序数组(leetCode-88) 题目如下图:(也可以到leetCode上看完整题目,题号88) 首先搞懂,什么叫“非递减顺序” 非递减顺序,是指一个序列中的元素从前往后&#xff08;或从左到右&#xff09;保持不减少或相等。 这意味着序列中的元素可以保持相同的值&#xff0c;但不会…

外包干了1个月,技术明显退步。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

Rust 使用 panic! 还是不用 panic!

使用 panic! 还是不用 panic! 那么&#xff0c;该如何决定何时应该 panic! 以及何时应该返回 Result 呢&#xff1f;如果代码 panic&#xff0c;就没有恢复的可能。你可以选择对任何错误场景都调用 panic!&#xff0c;不管是否有可能恢复&#xff0c;不过这样就是你代替调用者…

智能合约和分布式应用管理系统:技术革新与未来展望

引言 随着区块链技术的不断发展&#xff0c;智能合约和分布式应用&#xff08;DApps&#xff09;逐渐成为数字经济中的重要组成部分。智能合约是一种自执行的协议&#xff0c;能够在预设条件满足时自动执行代码&#xff0c;而无需人工干预或中介机构。这种自动化和信任机制极大…

DP V2.1a标准学习(二)

三、线材&连接器要求 1.线材分类 线材按照支持速率的不同,划分为不同规格,具体如下: DP和USB线材混用矩阵,也就是不同规格的线材对应的支持传输速率和传输类型,如下: 2.线材和连接器组件分类 线材+连接器组件分类与DP V1.4类似,不过型号更多了,如下: 也支持2种…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

从 Icelake 到 Iceberg Rust

本文作者丁皓是Databend 研发工程师&#xff0c;也是 ASF Member&#xff0c; Apache OpenDAL PMC Chair &#xff0c;主要研究领域包括存储、自动化与开源。 太长不看 Icelake 已经停止更新&#xff0c;请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目&#xff0…