AutoAnalyst 2.0  AI 数据分析系统

AutoAnalyst 2.0 AI 数据分析系统

Barry Lv6

概述与项目开源

几周前,我分享了关于创建“自动分析师”的更新,并讨论了初始设置。现在,我想更新一下我们添加的新功能,并解释您如何访问该项目,因为它已在MIT许可证下开源。我还将介绍项目的未来计划。

您可以在这里阅读第一次迭代的内容:

用户界面

我使用低代码解决方案如 streamlit 构建了一个用户界面。该 UI 允许您直接与系统或代理聊天,并提供加载 csv 或使用示例数据的额外选项。

该 UI 捕获通过执行由执行代理生成的 Python 代码所产生的 stdout。它可以显示 plotly 图表,以及表格和文本输出。

您可以直接调用代理,或者允许规划代理为您路由,UI 被配置为使用户理解代理的过程、代码和生成的输出。

酷吧?想要一个定制的 AI 代理系统来展示给您的团队、班级或利益相关者吗?比如金融分析师代理或营销代理系统等。点击下面的链接:

https://form.jotform.com/242223310861445

后端

这里是关于后端中不同组件设计的信息

Doer Agents

目前,系统有4个执行代理,它们是根据用户查询实际生成要运行的代码的代理。以下是 data_viz_agent 的结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import dspy

# DSPy signature for the data_viz_agent
class data_viz_agent(dspy.Signature):
"""
You are AI agent who uses the goal to generate data visualizations in Plotly.
You have to use the tools available to your disposal
If row_count of dataset > 50000, use sample while visualizing
use this
if len(df)>50000:
.......
Only this agent does the visualization
Also only use x_axis/y_axis once in update layout
{dataset}
{styling_index}

You must give an output as code, in case there is no relevant columns, just state that you don't have the relevant information

Make sure your output is as intended! DO NOT OUTPUT THE DATASET/STYLING INDEX
ONLY OUTPUT THE CODE AND COMMENTARY. ONLY USE ONE OF THESE 'K','M' or 1,000/1,000,000. NOT BOTH

You may be give recent agent interactions as a hint! With the first being the latest
DONT INCLUDE GOAL/DATASET/STYLING INDEX IN YOUR OUTPUT!
You can add trendline into a scatter plot to show it changes,only if user mentions for it in the query!
You are logged in streamlit use st.write instead of print

"""
goal = dspy.InputField(desc="用户定义的目标,包括他们想要绘制的数据和图表的信息")
dataset = dspy.InputField(desc="提供有关数据框中数据的信息。仅使用列名和数据框名称")
styling_index = dspy.InputField(desc='提供有关如何样式化您的Plotly图表的说明')
code= dspy.OutputField(desc="根据查询和数据框索引及样式上下文可视化用户需求的Plotly代码")
commentary = dspy.OutputField(desc="关于正在执行的分析的评论,这不应包括代码")

# Defining a module
query ="可视化 X 与 Y"
data_viz_ai = dspy.ChainOfThought(data_viz_agent)

#For information on the dataframe index & styling index, visit this:
# https://readmedium.com/building-auto-analyst-a-data-analytics-ai-agentic-system-3ac2573dcaf0
data_viz_ai(goal=query, styling_index=styling_index, dataset=dataset_)

大多数执行代理共享类似的结构:

  1. 提示:定义代理将执行的任务。
  2. 检索器:提供额外的上下文。例如,data\_viz\_agent 使用两个检索器:一个用于数据集,一个用于样式索引。
  3. 用户查询/目标:捕获用户的输入或目标。
  4. 代码和评论(输出):所有执行代理生成这两个字段。“代码”字段包含执行的Python代码,而“评论”字段帮助解释结果,说明代理做得正确的地方以及可以改进的地方。

辅助代理

辅助代理被定义为任何帮助或增强执行代理完成其任务的代理。例如,规划代理负责将分析路由并规划发送给适当的执行代理。

一个很好的例子是 code_fix 代理,当初始代理生成的代码失败时会被触发(以下是 DSPy 签名):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class code_fix(dspy.Signature):
"""
You are an AI which fixes the data analytics code from another agent, your fixed code should only fix the faulty part of the code, rest should remain the same
You take the faulty code, and the error generated and generate the fixed code that performs the exact analysis the faulty code intends to do
You are also give user given context that guides you how to fix the code!


please reflect on the errors of the AI agent and then generate a
correct step-by-step solution to the problem.
You are logged in streamlit use st.write instead of print


"""
faulty_code = dspy.InputField(desc="The faulty code that did not work")
previous_code_fixes = dspy.InputField(desc="User adds additional context that might help solve the problem")
error = dspy.InputField(desc="The error generated")

faulty_code = dspy.OutputField(desc="Only include the faulty code here")
fixed_code= dspy.OutputField(desc="The fixed code")

与执行代理不同,辅助代理具有独特的设计,可以使用不同的输入和输出构建。

查询路由

因此,查询路由过程包括两个步骤:

  1. 直接路由到代理:如果查询指定了确切的代理名称(例如,[@data\_viz\_agent](https://twitter.com/data_viz_agent)),则直接路由到这些代理。

  2. 规划和路由:如果没有提到具体的代理名称,查询首先会发送到规划代理。规划代理确定处理该查询的适当代理,并相应地进行路由。

这种方法确保查询能够有效地定向到正确的代理或根据上下文进行规划。

想要帮助设计和构建 AI 代理、RAG 管道或 LLM 应用程序吗?想要有人经验丰富地帮助您弄清楚如何将 LLM 集成到您的应用程序中?您可以直接在这里联系我:

https://form.jotform.com/242223310861445

在 GitHub 仓库中添加了更全面的文档:

未来计划

我将完全以 MIT 许可证开源该项目,非常感谢社区的贡献。以下是我提出的一些计划和您帮助将非常宝贵的领域:

近期计划

以下是我为下一个迭代计划的功能:

  1. 提示优化: 鉴于该项目是使用DSPy构建的,专注于以编程方式优化提示,开发一个优化管道以系统性地增强提示将是有益的。
  2. 改进代码修复: 我已经开发了一个代码修复管道,但它往往无法有效解决执行错误。我计划添加一个RAG管道,其中将包括常见错误的代码库,以改善错误处理和解决方案。
  3. 增加更多UI选项: 当前的UI是使用Streamlit构建的,非常适合快速开发和迭代。然而,它在执行速度上存在限制,并引入延迟,使其不太适合大规模应用。
  4. 增加更多代理: 增加更多代理意味着更多功能。

长期计划/待解决的问题

很难预测这个项目未来会是什么样子,但我将这个项目应该解决的长期问题留作我们(社区)需要关注的问题:

Q1. 代理的最佳结构是什么?

这可能是最重要的问题:我根据对问题的理解创建了一个结构。这是最佳方法吗?我开发了专注于特定 Python 包或数据科学家通常执行的典型操作的代理。这个问题与数据科学家通常如何解决与数据相关的问题有关。

Q2. 我们如何处理不同的行业/分析功能?

我们是否应该为市场分析和财务分析使用不同的系统?不同的行业面临着共同的分析挑战——例如,金融中的投资组合优化和供应链管理中的“匹配”问题。我们是否为每个行业更改系统,还是引入特定行业的代理/工具?

Q3. 这个问题的最佳用户体验是什么?

聊天机器人是最佳方案吗?还是我们应该添加一些常见的数据分析用户体验功能,比如仪表板?即使我们保持聊天机器人方案,还有很多方面可以改进,以提供更好的用户体验。

感谢您的阅读,请在Medium上关注我和FireBird Technologies,以便及时了解项目动态。

  • 标题: AutoAnalyst 2.0 AI 数据分析系统
  • 作者: Barry
  • 创建于 : 2024-08-11 13:31:04
  • 更新于 : 2024-08-31 06:59:45
  • 链接: https://wx.role.fun/2024/08/11/78c0d8c706d4406c818d75f7af0c31fd/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。