去年看的论文,在实际解决问题的过程中,越来越觉得这篇论文里的内容非常值得再学习
背景金融、气象、能源等各个行业每天都会产生海量的异构数据。人们对有效管理、处理和显示数据有着天然的需求。然而,这些与数据相关的任务需要劳动密集型的工作和高水平的专业知识。
考虑到大型语言模型(LLM)在语义理解和推理方面表现出有超强的能力,浙江大学提出 Data-Copilot,通过部署大语言模型 (LLMs) 来自主地管理和处理海量数据,即它连接不同领域(股票、基金、公司、经济和实时新闻)的丰富数据,满足多样化的用户查询,计算,预测,可视化等需求。同时以人性化的方式显示和交互。Data-Copilot 是一个基于 LLM 的系统,一端连接众多数据源,另一端满足人类的不同需求。它就像经验丰富的专家一样,自主地将原始数据转换为最符合用户意图的可视化结果。
具体来说,Data-Copilot 自主设计用于数据管理,处理,预测和可视化的多功能工具。在实时响应中,它通过针对用户的请求逐步调用相应的接口来自动部署简洁的工作流程。当收到复杂的请求后,它会自主调用这些自我设计的接口来构建一个工作流程,以满足人类的意图。接口设计和部署过程完全由 Data-Copilot 本身控制,无需人工协助 ,它能熟练地将来自不同源的不同格式的原始数据转换为人性化的输出,例如图形、表格和文本。
以某种方式处理数据,根据人类指令对其进行处理,并最终显示结果。因此,出现了一个问题:LLM 能否在通用数据的背景下构建能够解决各种数据相关任务的自动化数据科学工作流程?为了实现这一目标,必须解决几个挑战:
从数据角度来看:使用 LLM 直接读取和处理海量数据不仅不切实际,而且存在数据泄露的潜在风险。从模型角度看:LLM 不擅长处理数值计算,可能没有合适的可调用外部工具来满足不同的用户请求,从而限制了LLM的利用率。从任务角度看:虽然 LLM 已经表现出很强的 few-shot 能力,但许多与数据相关的任务错综复杂,需要许多操作的组合,如数据检索, 计算和表格操作以及结果需要以多种格式呈现,包括图像、表格和文本,所有这些都超出了 LLM 的当前能力。因此,将当前方法直接应用于与数据相关的任务具有挑战性。
如何有效地从数据中提取信息取决于我们拥有的工具类型。因此,LLM 不应该直接处理数据,而应该充当大脑,创建适当的接口工具来管理和利用数据,并以人为中心的方式呈现有价值的信息。基于此,名为 Data-Copilot 的系统被设计出来,该系统利用 LLM 的功能来创建合适的接口和部署。
Data-Copilot 不仅仅是一个可视化工具,它是一个多功能框架,一端连接来自不同领域的众多数据源,另一端满足不同的用户需求。它只需少量种子请求即可不断丰富其接口工具,从而扩展其功能范围,例如高级数据分析和更复杂的数据预测。为了实现这一点,它包括两个过程:接口设计和接口调度。
图片
接口设计:Data-Copilot 采用迭代的自我请求流程,全面探索数据,覆盖大部分场景。如上图所示,Data-Copilot 被指示从几个种子请求中生成大量不同的请求,然后将自生成的请求抽象到接口工具中,并合并具有类似功能的接口。最后,它收集了一些通用接口,包括数据采集、处理、预测、表操作和可视化。接口调度:当收到用户请求时,Data-Copilot 首先解析用户意图,然后在查看自己设计的接口描述后,再规划接口调用过程。它能够灵活地构建具有各种结构(包括顺序、并行和循环结构)的工作流,以满足用户请求。图片
Data-Copilot 系统在以下方面有所不同:
Data-Copilot 是专门为各种数据相关任务而设计的基于 LLM 的通用系统。它考虑了如何利用 LLM 来访问和管理大量异构数据,以满足复杂的用户需求,如查询,分析和可视化。只需要几个种子请求,Data-Copilot 采用自我请求的方法独立设计其接口工具。它将接口的定义与其特定的实现分开,使 LLM 能够更专注于准确描述接口的功能。这种方法与以前的工作明显不同,并为社区提供了自动化工具创建的可行解决方案。Data-Copilot 能够基于自己设计的接口构建更复杂的接口调度流程,如并行、顺序、循环工作流。接口设计Data-Copilot 设计了大量的接口作为数据管理工具,其中接口是由自然语言(功能描述)和代码(实现)组成的模块,负责数据采集、处理等。如上图所示,Data-Copilot 维护了一个接口工具库,用于存储当前生成的接口。首先,LLM 提供了一些种子请求,并自主生成大量请求。然后 LLM 设计相应的接口(只有描述和参数)来解决这些请求,并在每次迭代中逐步优化接口设计。最后,我们利用 LLM 强大的代码生成能力为接口库中的每个接口生成特定代码。此过程将接口的设计与特定实现分离,创建一组可以覆盖大多数请求的通用接口工具。
通过自我请求探索数据接口的设计取决于两个方面:可用的数据类型以及用户提出的需求类型。Data-Copilot 首先自主探索数据以挖掘更多请求。然后,根据这些请求和数据,它继续设计接口。具体来说,我们为每个数据源生成一个解析文件,以帮助 LLM 理解数据。每个分析文件都包含数据说明、每列(属性)的名称、访问示例及其输出的第一行和最后一行。此过程不需要太多的劳动力,因为数据提供者通常会提供数据和访问方法的描述。然后我们采用自我请求过程来探索数据,即这些解析文件和一些种子请求作为提示输入 LLM,并指示 LLM 生成更多样化的请求。这些生成的请求用于下一步(接口定义)。允许 LLM 自主探索数据并自行生成请求至关重要,因为它确保了接口允许 LLM 自主探索数据并自行生成请求至关重要,因为它确保后续步骤中的接口设计是充分且通用的。在上图中,LLM 基于两个种子请求和所有数据源生成四个请求。
接口定义在此步骤中,Data-Copilot 定义了各种接口工具来满足先前生成的请求。具体来说,我们将所有数据解析文件和存储在接口库中的所有接口(第一次迭代时为空)作为提示输入 Data-Copilot。如上图所示,每个请求被逐个输入到 Data-Copilot 中,并提示 Data-Copilot 使用接口库中的现有接口或重新定义新接口来满足当前请求。详细提示如下图所示。每次迭代时都会提示 LLM 以 JSON 格式生成接口库:接口1={接口名称:“”,函数描述:“”,输入和输出:“},接口2={接口名称:”“,函数描述:”,输入和输出:“”},并使用这些接口生成解决方案解决方案=“ 您将首先使用 getBankData 获取数据,然后...”。重要的是,Data-Copilot只使用自然语言来定义接口的功能及其参数,而不考虑具体的实现,这是无语法的。此过程类似于软件架构设计,但由 Data-Copilot 自动实现。它允许 Data-Copilot 更专注于设计具有不同功能的接口的布局和关系,而不是遵守编程语法。
图片
接口合并为了使接口更具通用性,Data-Copilot 会考虑每个新设计的接口是否可以与库中的现有接口合并。具体来说,当 Data-Copilot 为新请求设计新接口时,它还会检查此接口在功能、参数等方面是否与以前的接口相似。合并两个类似的接口以创建一个新的通用接口。如,{接口:查询 GDP} 的两个接口和 {接口:查询-CPI} 已合并为一个 {接口:查询-GDP-CPI}。此过程类似于软件开发人员在开发过程中将类似的模块打包到新模块中。通过这个过程,大量类似的接口被合并。库中的每个接口都有非常清晰的功能,并且与其他接口明显不同,这有利于在实时响应中部署清晰简洁的工作流程。
接口实现每个请求都连续输入到 Data-Copilot 进行接口定义和接口合并。最终,当库中的所有请求都可以由库中的接口满足时,Data-Copilot 利用 LLM 强大的代码生成功能为每个接口生成实现代码。整个接口设计过程是离线的。如下图所示,Data-Copilot 在接口库中自动生成五种类型的接口:数据采集、处理、预测、可视化和数据帧操作。它将重复和繁琐的劳动转化为自动化过程,还可以毫不费力地添加新接口以适应其他请求或新数据源。此外,Data-Copilot 还通过简单地重新生成接口的实现代码轻松切换到其他编程平台和数据库,展示了出色的可扩展性。
图片
接口调度在上面一阶段,收获了各种用于数据采集、处理和可视化的通用接口工具。每个接口都有清晰明确的功能描述。Data-Copilot 通过在实时请求中规划和调用不同的接口,形成了从数据到多形式结果的工作流程。
意图分析为了准确理解用户请求,Data-Copilot 首先分析用户意图。意图分析涉及解析时间、位置、数据对象和输出格式,这些对于数据相关任务都至关重要。例如,如果用户的问题是:“我想比较我们地区过去五年的GDP和CPI趋势”,Data-Copilot 在准确理解语义后,将其解析为:“绘制2017年5月至2023年5月中国每季度全国GDP和CPI的折线图进行比较”(时间:201705-202305,地点:中国,对象:中国季度GDP和CPI,格式:折线图)。为了实现这一点,我们首先调用一个外部 API 来获取本地时间和网络 IP 地址,然后将外部信息与原始请求一起输入 LLM 以生成解析结果。如下图所示,我们提供了一个详细的提示设计来指导此阶段的 LLM。
图片
规划工作流程一旦准确理解了用户的意图,Data-Copilot 就会计划一个合理的工作流程来处理用户的请求。我们指示 LLM 生成一个固定格式的 JSON,表示调度的每个步骤,如step={“arg”:“”,“function”:“”,“output”:“”,“description”:“”}(详细的提示设计如图11所示)。除了在设计阶段生成的接口描述外,Data-Copilot 还包含了一些演示,作为上下文学习提示的一部分。如上图所示,每个演示都包含一个任务指令 (###Instruction:) 和相应的接口调用过程 (###Function Call:),这提高了 Data-Copilot 对不同接口之间逻辑关系的理解。在接口描述和几个演示的提示下,Data-Copilot 在每个步骤中以顺序或并行的方式精心编排接口的调度。LLM根据用户的请求和接口定义自主确定应调用哪些接口以及以什么顺序调用。例如,第一个请求:“比较今年沪深300、创业板指数和沪深1000指数的回报”,Data-Copilot 首先规划了其工作流程中的五个步骤。第一步并行调度{数据采集接口}获取三个指数的数据,第二步同样用于三个指数的返回。最后三个步骤依次调用 {可视化接口},在同一画布上按顺序绘制三个指数的趋势。在第二种情况下,Data-Copilot 部署了一个循环工作流,通过调用 {循环和排名接口} 来完成所有 50 只成分股的财务指标计算。
多形式输出图片
在部署和执行工作流后,Data-Copilot 以图形、表格和描述性文本的形式产生所需的结果。此外,Data-Copilot 还提供了整个工作流程的全面摘要。这一系统摘要不仅提供了清晰简洁的结果,而且还阐明了为实现这些结果而采取的步骤,从而提高了与数据相关的任务的透明度和理解。在上图中,我们提供了一个详细示例,用户在其中输入请求:“预测中国未来 4 个季度的 GDP 增长率”。Data-Copilot 首先根据本地时间解释用户的意图。随后,它部署了一个三步工作流:第一步涉及调用 {get-GDP-data} 接口来获取历史 GDP 数据。第二步涉及调用 {predict-next-value} 接口进行预测。最后一步是可视化输出。
限制自动化接口设计:Data-Copilot 的本质在于有效的接口设计,这个过程直接影响后续接口部署的有效性。目前,该接口设计过程是离线进行的。因此,探索如何自动化设计接口并同步部署就显得至关重要。系统稳定性:接口部署过程中偶尔会出现不稳定的情况。这种不稳定的主要原因是 LLM 不完全可控。尽管他们能够熟练地生成文本,但 LLMs 偶尔会无法遵循说明或提供不正确的答案,从而导致接口工作流程出现异常。因此,寻找在接口调度过程中最小化这些不确定性的方法应该是未来的一个关键考虑因素。示例简单工作流程图片
并行工作流程图片
循环工作流程图片
总结Data-Copilot 用来解决各种与数据相关的任务。它充当众多异构数据和人类之间的桥梁,根据人类的喜好有效地管理、处理和呈现数据。Data-Copilot 通过将 LLMs 融入到数据相关任务的各个阶段,根据用户请求自主将原始数据转化为用户友好的可视化结果,显着减少对繁琐劳动和专家知识的依赖。Data-Copilot 就像经验丰富的专家一样,针对各类数据和潜在的用户需求,自主设计通用接口工具,并实时响应调用接口,为用户请求部署清晰的工作流程。接口设计和调度这两个流程完全由 Data-Copilot 控制,几乎不需要人工协助。通过获取中国金融数据,Data-Copilot 可以灵活处理股票、基金、经济、公司财务、新闻直播等挑战性请求,成为人类可靠的AI助手。
代码阅读主要流程Repo: https://github.com/zwq2018/Data-Copilot
图片
Demohttps://huggingface.co/spaces/zwq2018/Data-Copilot
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。