利用LangGraph和Waii实现你的chat2db!
cnblogs 2024-10-17 08:13:00 阅读 54
0 前言
在数据分析领域快速发展的今天,通过自然语言与数据交互的能力变得越来越有价值。对话式分析旨在使复杂数据结构对没有专业技能的用户更易于访问。
LangGraph 是个框架,用于构建使用语言模型的状态化、多代理应用程序。Waii 提供文本到 SQL 和文本到图表的功能,使用户能够通过自然语言与数据库和数据可视化进行交互。
本文探讨 Waii 的能力如何增强 LangGraph 应用程序在对话式分析方面的应用。重点关注 Waii 处理数据库中复杂连接的方法,这是从自然语言查询生成准确 SQL 的一个关键方面。
1 Waii 的文本到 SQL 能力
对话式分析的核心是将自然语言转换为数据库操作的能力。Waii 提供了一个全面的文本到 SQL 解决方案,在几个关键领域很优秀:
下一节深入探讨 Waii 如何处理复杂连接。关注这点,因为它是对话式分析的基本能力,许多当今的解决方案都在努力应对。我们将检查一个示例,看看连接是如何构建的,并解释如何轻松地将 Waii 集成到你现有的 LangGraph 应用程序中以实现这些收益。
2 深入研究:连接处理
示例
想象一下,一个流媒体平台的数据团队被指派创建一个全面的导演表现仪表板。他们需要通过结合来自电影、电视剧、类型、关键词、奖项和演员合作的数据来分析什么使导演成功。
指令
创建一个视图,为排名前 5 的导演(按标题数量最高)提供以下信息:
- 导演的名字
- 总标题数量
- 最频繁的类型
- 最频繁的关键词
- 获得的奖项数量
- 电影总收入
- 他们合作过的演员名单
查询
Waii 根据这些指令生成的完整查询可以在附录 A 中找到。这里有一个片段,显示了一些连接:
...
FROM ranked_directors AS rd
INNER JOIN movie_db.movies_and_tv.people AS p
ON rd.people_id = p.people_id
LEFT JOIN combined_director_genres AS cdg
ON rd.people_id = cdg.people_id AND cdg.genre_rank = 1
LEFT JOIN combined_director_keywords AS cdk
ON rd.people_id = cdk.people_id AND cdk.keyword_rank = 1
LEFT JOIN director_awards AS da
ON rd.people_id = da.people_id
LEFT JOIN director_revenue AS dr
ON rd.people_id = dr.people_id
LEFT JOIN director_actors AS d_actors
ON rd.people_id = d_actors.people_id
...
查询分析
此查询展示了许多复杂的连接能力:
- 复杂连接图: 查询中使用了 14 个具有不同限定符、元数和语义的表。
- 桥接表连接: 用于连接多对多关系中的实体(例如,导演与电影、电视剧和演员)。
- 维度表连接: 用于通过类型和关键词表中的描述性信息丰富数据。
- 复杂连接链: 实现连接遥远的实体,例如通过他们的合作将导演与演员联系起来。
- 全外连接: 用于结合导演在电影和电视剧中的工作,确保全面覆盖。
- 左连接用于可选数据: 当包括可能不是所有导演都存在的数据时应用(例如,奖项、收入)。
(这个列表不是穷尽的,还有许多其他考虑因素用于准确的连接处理,例如:on 和 where 子句之间的区别,连接顺序,非等连接,用于半结构化数据的横向连接等)
Waii 理解数据库关系的方法是关键。以下是它的工作原理:
3 知识图构建
Waii 自动构建数据库对象的全面知识图。这个图包含来自多个来源的信息:
- 模式信息
- 约束(例如,主键/外键)
- 基于分析列名和数据模式的预测
- 从查询历史中提取和排名的连接图
- 数据库文档
- 数据目录中定义的关系
- 随着时间的推移从系统使用中获得的反馈
这个图不断更新和完善。每次模式更改、新查询和新的反馈都被分析并整合到图中。
4 用于查询构建的代理流程
有了知识图,Waii 采用一系列代理流程来构建最优查询:
1. 表选择: 分析用户的请求以确定最相关的表。常见的连接关系和对关系语义的理解用于找到可能不直接语义链接到用户输入的表和路径。
2. 连接图分析: 提议和评估选定表之间的潜在连接路径。这包括评分连接图与之前看到的连接和关系语义理解的对齐程度。
3. 评估/细化连接条件: 单独检查以确保外连接和连接条件正确应用。这也是我们查看外连接的“on”与“where”子句条件的地方。
4. 查询构建: 根据选择的连接图和条件构建 SQL 查询。
5. 编译和优化: 确保连接在语法上正确并针对性能进行优化。我们还执行用户对查询的操作约束(例如,最大输出行数,最大输入分区)。
结果是,SQL 查询不仅准确回答了用户的问题,而且以优化的方式针对特定的数据库结构和查询引擎。
5 构建对话式分析应用程序
现在我们已经了解了 Waii 如何处理连接和文本到 SQL,让我们探讨如何将这种能力与 LangGraph 结合起来构建复杂的对话式分析应用程序。
LangGraph 是构建代理系统的事实上的框架。对于任何需要精确、周到的数据库访问的 LangGraph 应用程序,Waii 是一个很好的补充。将 Waii 与 LangGraph 集成允许开发人员创建在保持交互上下文的同时执行复杂查询的系统,提高了应用程序的整体智能。
6 实现细节
实施此系统涉及几个关键组件:
1. LangGraph 框架: 提供多代理系统的总体结构,管理状态和代理交互。
2. Waii API 集成: SQL 生成和可视化代理将调用 Waii 的 API 以利用其文本到 SQL 和文本到图表的能力。
3. 自然语言处理: 用于理解用户输入和生成易于理解的响应。
4. Waii 执行 API: 执行生成的 SQL 查询对实际数据库进行操作。注入代码以执行用户级别的安全策略,例如限制行/列访问。
5. 状态管理: 维护多个用户交互之间的上下文,允许后续问题和迭代分析。
典型的交互流程可能如下所示:
- <li>用户输入一个问题。
- LangGraph 问题分类器决定请求最好从内存还是数据库中回答
- [可选] Waii SQL 生成器创建一个优化的 SQL 查询。
- [可选] Waii SQL 执行器注入安全约束,执行查询并检索结果。
- [可选] 结果分类器决定输出应该是数据还是可视化。
- [可选] Waii 图表生成器根据数据和元数据创建相关图表。
- LangGraph 洞察生成代理综合最终结果供用户使用
- 循环重复。
(可选 / 图像中未显示:在错误或异常情况下,LangGraph 循环,重写输入并重新生成所需的对象。)
在此过程中,对话管理代理维护状态,允许上下文后续问题和更自然、流畅的交互。
示例的完整实现在附录 B 中给出。
7 好处和用例
LangGraph 和 Waii 的这种集成用于数据库访问提供了几个关键好处:
- 可访问性: 通过自然语言交互,复杂的数据分析变得对非技术用户可访问。
- 分析深度: 系统可以处理手动制定具有挑战性的复杂查询。
- 上下文理解: 维护的状态允许更自然、上下文感知的关于数据的对话。
- 视觉洞察: 自动生成的相关可视化增强了对数据的理解。
- 可扩展性: 系统可以适应大型、复杂的数据库,而不会成比例地增加最终用户的复杂性。
潜在的用例涵盖各个行业:
- 商业智能: 执行人员可以在不学习 SQL 或 BI 工具的情况下查询复杂的业务数据。
- 医疗保健: 研究人员可以探索大型医疗数据库,关联患者结果中的不同因素。
- 金融: 分析人员可以快速调查市场趋势和公司绩效的多个维度。
- 电子商务: 营销团队可以分析客户行为模式以指导策略。
- 教育: 管理员可以洞察学生表现和资源分配。
8 结论
LangGraph 的多代理能力和 Waii 的高级文本到 SQL 和可视化功能的结合为分析和数据处理开辟了新的机会。通过使复杂的数据分析通过自然语言变得可访问,这种方法大大降低了从数据中获得高质量洞察的障碍。
关注我,紧跟本系列专栏文章,咱们下篇再续!
作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。
各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。
负责:
- 中央/分销预订系统性能优化
- 活动&券等营销中台建设
- 交易平台及数据中台等架构和开发设计
- 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
- LLM Agent应用开发
- 区块链应用开发
- 大数据开发挖掘经验
- 推荐系统项目
目前主攻市级软件项目设计、构建服务全社会的应用系统。
参考:
- 编程严选网
本文由博客一文多发平台 OpenWrite 发布!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。