Elysia:用决策树重构智能数据查询的新一代开源框架

Elysia架构示意图

在人工智能技术快速发展的今天,聊天机器人已经变得无处不在。然而,大多数系统仍然局限于”文本输入,文本输出”的基本模式。用户往往无法获得真正智能化的交互体验——系统不能根据内容动态选择展示方式,缺乏对数据的深度理解,且决策过程完全不透明。

正是为了解决这些痛点,Weaviate团队开发了Elysia——一个开源的、基于决策树的智能检索增强生成(RAG)框架,重新定义了人类通过AI与数据交互的方式。

传统RAG系统的局限性

大多数传统RAG系统存在一个根本性缺陷:它们本质上是”盲目的”。这些系统接收用户问题,将其转换为向量,然后寻找一些”相似”的文本,并期望获得最佳结果。这就像让一个蒙着眼睛的人为你推荐餐厅——他们可能会幸运地猜中,但更可能失败。

这些系统通常还会一次性向AI提供所有可用工具,这就像给幼儿一整套工具箱并期望他们能打造出书架一样不现实。结果往往是AI陷入混乱,无法有效解决问题。

Elysia的创新解决方案

Elysia采用了完全不同的方法。它不只是一个简单的问答系统,而是一个能够理解数据结构、智能选择工具并动态决定如何呈现结果的智能代理框架。

核心安装与使用

Elysia的安装过程极其简单:

pip install elysia-ai
elysia start

这几行命令就能启动完整的Web界面。对于开发者,也可以将其作为Python库使用:

from elysia import tool, Tree

tree = Tree()

@tool(tree=tree)
async def add(x: int, y: int) -> int:
    return x + y

tree("What is the sum of 9009 and 6006?")

如果已经有Weaviate数据,使用更加简单:

import elysia
tree = elysia.Tree()
response, objects = tree(
    "What are the 10 most expensive items in the Ecommerce collection?",
    collection_names = ["Ecommerce"]
)

Elysia的三大核心支柱

1. 决策树与决策代理

Elysia决策树示意图

Elysia的核心是其决策树架构。与简单代理平台在运行时访问所有可能工具不同,Elysia有一个预定义的节点网络,每个节点都有相应的操作。树中的每个节点都由具有全局环境感知能力的决策代理协调。

决策代理评估其环境、可用操作、过去操作和未来操作,以制定使用最佳工具的策略。它还输出推理,传递给后续代理以继续朝着同一目标工作。每个代理都会了解先前代理的意图。

这种树形结构还支持高级错误处理机制和完成条件。例如,当代理确定无法用可用数据完成任务时,可以在树步骤中设置”不可能标志”。如果你在只有珠宝收藏的电子商务集合中询问裤子价格,代理将识别这种不匹配并向决策树报告任务不可能完成。

同样,如果Elysia查询并发现不相关的搜索结果,这不会构成失败。返回到决策树时,代理可以识别应该使用不同的搜索词或不太严格的过滤器再次查询。

当工具遇到错误时——可能是由于连接问题或生成查询中的拼写错误——这些错误会被捕获并通过决策树传播。然后决策代理可以智能选择是使用修正重试还是完全尝试不同的方法。为防止无限循环,决策树的通过次数有严格限制。

这种结构为开发人员提供了极大的灵活性。用户可以添加自定义工具和分支,使树根据需要变得复杂或简单。工具可以配置为基于特定条件自动运行——例如,当聊天上下文超过50,000个token时,摘要工具可能会激活。其他工具可以保持隐藏,直到满足某些条件,只有在与当前状态相关时才作为选项出现。

实时可观察性是Elysia与其他黑盒AI系统的区别之一。前端显示遍历的整个决策树,允许您观察LLM在每个节点内的推理过程。这种透明度帮助用户准确理解系统为何做出特定选择,并在出现问题时进行修复。

Elysia树界面

2. 动态数据显示格式

虽然其他AI助手仅限于文本响应(有时包括图像和文本),但Elysia可以基于内容和上下文动态选择如何显示数据。系统目前有七种不同的显示格式:通用数据显示、表格、电子商务产品卡片、(GitHub)票据、对话和消息、文档和图表。

但Elysia如何知道对特定数据使用什么显示类型?

在使用任何Weaviate工具之前,Elysia会分析您的集合。LLM通过采样检查数据结构,检查字段,创建摘要并生成元数据。基于此分析,它从可用选项中推荐最合适的显示格式。用户还可以手动调整这些显示映射以更好地满足其需求。

未来,这种结构还将使我们能够构建允许不同显示执行不同后续操作的功能。酒店显示可能包括预订功能,Slack对话显示可以实现直接回复,产品卡片可能提供加入购物车功能。这可能是将Elysia从被动信息检索器转变为基于数据帮助用户采取行动的主动助手的一步。

我们将继续添加更多显示类型,以增加可能的定制水平,使Elysia能够适应几乎任何用例或行业特定需求。

3. 自动成为数据专家

像我们自己的Verba这样的简单RAG系统很难处理复杂数据、多种数据类型或位置,或者重复或相似的数据,因为它们没有全面了解所工作的环境。在看到社区对此苦苦挣扎(以及我们自己也在挣扎😅)之后,我们决定这是Elysia需要帮助解决的主要问题之一。

如上所述,将Weaviate Cloud实例连接到Elysia后,LLM会分析您的集合以检查数据结构、创建摘要、生成元数据并选择显示类型。这不仅是对用户有用的信息——它还显著增强了Elysia处理复杂查询和提供知识性响应的能力。这种能力在Verba等先前系统中缺乏,这些系统常常因其盲目搜索方法而在模糊数据上失败。

生成元数据对于处理树中的复杂查询和任务实际上非常关键。我们见过的其他传统RAG和查询系统通常执行盲向量搜索,不知道它们搜索数据的整体结构和含义,只是希望获得相关结果。但使用Elysia,我们构建的系统在执行查询等操作之前理解并考虑特定数据的结构和内容

Web平台还具有全面的数据浏览器,具有BM25搜索、排序和过滤功能。它自动分组字段内的唯一值,并为数字数据提供最小/最大范围,使Elysia和用户都能清楚了解可用的内容。

数据仪表板提供所有可用集合的高级概述,而集合浏览器允许详细检查单个数据集。查看表格数据时,我们为所选条目提供完整的对象视图,以便以结构化、可读的格式显示大型和嵌套数据对象。此外,在元数据选项卡中,用户可以编辑LLM生成的元数据、显示类型和摘要,因为众所周知,LLM远非完美。

其他创新功能

反馈系统:向用户学习的AI

我们实施的反馈系统远远超出了简单的评分。每个用户维护自己的一组反馈示例,存储在他们的Weaviate实例中。当您进行查询时,Elysia首先使用向量相似性匹配搜索您评价积极的类似过去查询。

然后系统可以使用这些积极示例作为少量示例演示,使较小模型能够提供更好的响应。如果您一直使用更大、更昂贵的模型处理复杂任务并对输出给予积极评价,Elysia可以使用这些高质量响应作为类似查询上更小、更快模型的示例。随着时间的推移,这降低了成本并提高了响应速度,同时仍保持质量。

保持交互独立于单个用户确保个人偏好不会影响他人的体验,并且数据保持安全。该功能通过简单的配置复选框激活,并在后台透明运行,仅基于您的交互持续改进整个系统。

按需分块:更智能的文档处理

传统RAG系统预分块所有文档,这可能大幅增加存储需求。这是我们看到社区苦苦挣扎的另一件事,因此我们提出的解决方案是在查询时分块,而不是处理预分块策略。初始搜索使用文档级向量,这提供了文档要点的良好概述,但不包括其中的相关部分。当文档超过token阈值并被证明与查询相关时,Elysia将介入并动态分块。

系统将这些块存储在具有原始文档交叉引用的并行量化集合中。这意味着后续对类似信息的查询可以利用先前分块的内容,使系统随着时间的推移更加高效。这种方法降低了存储成本,同时保持甚至提高了检索质量。

展望未来版本,这种架构还可以实现灵活的分块策略。不同的文档类型可以使用不同的分块方法——代码可能按函数或类边界分块,而散文可能使用语义或简单固定大小的分块。

通过静态HTML提供前端

我们想要解决的另一个问题是如何提供NextJS前端,而无需同时启动后端和前端服务器。我们发现可以通过FastAPI将Elysia的前端作为静态HTML提供,消除了对单独Node.js服务器的需求。这种架构变化意味着一切都可以从单个Python包运行,有助于简化部署过程并降低操作复杂性。简单的pip安装提供了完整的、生产就绪的应用程序,可以在任何运行Python的地方部署。相当酷,对吧?

多模型策略

除了允许在小模型和大模型之间互换而不会损失质量的反馈系统外,Elysia智能地根据任务复杂性将不同任务路由到适当的模型大小。小型轻量模型处理决策代理和简单任务,而更大、更强大的模型保留用于需要更深推理的复杂工具操作。我们在构建时默认使用Gemini,因为它具有超好的性能,同时具有超大的上下文窗口、快速速度和成本效益。

然而,我们喜欢Weaviate生态系统和开发的主要部分之一始终是可以灵活选择提供者、工具和集成。因此,当然所有模型选择通过配置文件保持完全可定制,支持几乎任何提供者,包括本地模型。更深入地说,用户还可以为系统的不同部分配置不同模型,根据其特定性能、安全性、成本和延迟要求进行优化。

个性化您的Blob

整个应用程序UI的个性化是我们将在未来版本中继续开发的功能之一,但现在,您可以通过定制保存在应用程序中的自己的Elysia blob来体验它!未来,这些定制功能将允许用户重新品牌Elysia以适应自己的公司。

技术栈

Elysia技术架构

Elysia背后的技术栈相对简单。Elysia的检索完全由Weaviate提供支持——它使用代理构建自定义查询或聚合,以及使用Weaviate的快速向量搜索来快速检索类似的过去对话以及存储对话历史。此外,我们使用DSPy、NextJS、FastAPI和Gemini作为我们的首选测试模型。

Weaviate提供了构建健壮应用程序所需的所有功能,如命名向量、不同搜索类型(向量、关键字、混合、聚合)和过滤器。其对交叉引用的本机支持是按需分块功能的基础,因此Elysia可以维护原始文档与其动态生成块之间的关系。Weaviate的量化选项也有助于管理Alpha测试阶段发布数据的存储成本,云集合设置使我们能够轻松存储生成的元数据和用户信息。

DSPy作为LLM交互层。团队(嗯,实际上是我们的后端向导Danny)选择DSPy是因为它提供了一个灵活、面向未来的框架来处理语言模型。除了基本的提示管理之外,DSPy使实现少量学习变得简单,这为Elysia的反馈系统提供了动力。该框架还将支持可能包含在未来版本中的提示优化功能。

但是,Elysia的核心逻辑是用纯Python(和血、汗、泪)编写的。这样做使我们能够完全控制实现,并将必须使用的工具保持在最低限度。虽然pip安装确实从DSPy和其他库带来了(很多)依赖项,但核心Elysia逻辑(在我们谦虚的意见中)是精益和可理解的。

实际案例:为Glowe聊天提供动力

为了测试Elysia是否按我们设想的方式作为灵活代理框架工作,我们决定使用它为我们的AI驱动护肤电子商务应用程序Glowe中的聊天界面提供动力。

使用Elysia构建的Glowe

对于Glowe-Elysia树,我们专门为应用程序的需求创建了三个自定义工具:

  1. 用于通过复杂过滤器找到合适产品的查询代理工具(由Weaviate查询代理提供支持)
  2. 通过自然语言为用户创建特定产品集合的堆栈生成工具
  3. 基于当前上下文和个体用户提供推荐的类似产品工具

所有复杂功能——文本响应、递归、自我修复、错误处理和流式传输——都内置在Elysia中。我们可以完全专注于实现应用程序特定的逻辑,而不是构建所有无聊的AI基础设施。

如何开始使用

Web应用程序

步骤1:安装依赖项并启动应用程序

运行这些命令启动Web界面

python3.12 -m venv .venv
source .venv/bin/activate
pip install elysia-ai
elysia start

步骤2:获取数据

如果您还没有包含数据的Weaviate Cloud集群,请转到Weaviate Cloud控制台创建免费的沙盒集群

然后,您可以通过遵循快速入门教程或将此提示复制到您最喜欢的vibe编码LLM聊天中来将数据添加到集群。

步骤3:添加配置设置

在配置编辑器中,您可以添加Weaviate集群URL和API密钥,并设置模型和模型提供者API密钥。您还可以创建多个配置,以便轻松在数据集群或模型提供者之间切换。

在左侧菜单栏中,您还可以定制您自己的blob

步骤4:分析数据

在左侧菜单栏的”数据”选项卡下,您可以分析集合,这将提示LLM生成属性描述、数据集摘要、示例查询并为每个集合选择显示类型。

单击数据源时,您可以查看集合中的所有项目,并编辑任何元数据,包括选择其他显示类型或配置属性映射。

步骤5:开始聊天

是时候开始提问了!转到”聊天”选项卡创建新对话并与数据聊天。如果要查看决策树,请单击聊天视图左上角的绿色按钮切换到树视图,并将鼠标悬停在任何节点上以获取节点描述、LLM指令以及LLM的推理。每个新用户查询将在此视图中生成新的决策树。

设置也可在每个聊天级别配置。您可以添加更详细的代理指令,或更改模型设置。

作为Python库

简单安装:

pip install elysia-ai

然后在Python中,使用Elysia很容易:

from elysia import tree, preprocess

preprocess("<your_collection_name>")
tree = Tree()
tree("What is Elysia?")

使用Elysia需要访问LLM和您的Weaviate云详细信息,可以在本地环境文件中设置或直接在Python中配置。完整文档提供了详细的配置选项和示例。

未来发展

我们仍在不断改进🧑‍🍳

我们计划并正在进行几个功能,包括类似于Verba的自定义主题,允许用户将Elysia的外观与其品牌匹配。但除此之外,您必须等待并关注👀

结论:代理式RAG的未来

Elysia不仅仅是一个RAG实现——我们构建它是为了展示AI应用程序可以成为什么的新方法。通过结合透明代理决策、动态显示以及随时间推移的个性化和优化,我们认为我们正在创建一个不仅理解您询问内容而且知道如何有效呈现答案的AI助手。

Elysia最终将取代Verba(我们最初的RAG应用程序),作为我们开发以向量数据库为核心的前沿应用程序的下一步。超越简单的询问-检索-生成管道,我们创建了一个用于开发复杂代理AI应用程序的基础设施,同时保持开发者和用户体验的简单直观。

无论您是构建电子商务聊天机器人、内部公司知识专家还是全新的事物,Elysia都为超越文本生成的AI体验提供了基础。我们迫不及待想看到您构建的内容!

那么,准备好开始了吗?访问演示,查看GitHub存储库,或深入研究文档开始构建。

团队图片