Discourse AI + Data Explorer?

那是一次彻底的失败。 :fire:

使用 Discourse AI - AI Bot

Prompt

为这个 SQL 创建一个图像

```
WITH pairs AS (
SELECT p.user_id liked, pa.user_id liker
FROM post_actions pa
LEFT JOIN posts p ON p.id = pa.post_id
WHERE post_action_type_id = 2
)
SELECT liker liker_user_id, liked liked_user_id, count(*)
FROM pairs
GROUP BY liked, liker
ORDER BY count DESC
LIMIT :limit
```

Completion

3 个赞

供参考

昨天出于好奇,我进行了一次类似的谷歌搜索:

AI 从英文生成 SQL

以查找有关使用 AI 从英文提问生成 SQL 的相关信息。我希望列表中包含一些研究论文,但该列表主要是应用程序列表。在我查看了几个此类网站上的演示后,我很快发现许多(但并非全部)列出的应用程序都采用了他们现有的工具,该工具允许用户选择表和字段来构建 SQL 语句,这与 Microsoft Access 中的 GUI SQL 生成器的工作方式类似,作为起点。换句话说,用户不是从英文问题开始,而是必须先选择表,有时还要选择字段,然后才能输入英文问题。虽然我不会认为这是作弊,但这意味着要使用此类 AI,用户必须具备一些 SQL 知识,特别是了解表和字段的含义,该工具才能正常工作。

2 个赞

@simon

我读了你删除的帖子,并同意那也是我认为非常有潜力的想法之一。

但我认为这还不够。我最近读的一篇论文,同样不是权威性的,但它更详细地阐述了这方面的观点,是

John Chen 和 Uri Wilensky 的《ChatLogo:一个由大型语言模型驱动的混合自然编程语言接口,用于基于代理的建模和编程》(pdf

对我来说,一些关键的要点是:

  1. 支持初学者以编程语言和自然语言的混合方式“与计算机对话”。
  2. 为没有或很少有计算机科学背景的学习者提供一个更友好的界面,让他们通过编程来创造性地表达自己。
  3. ChatLogo 不会立即编写代码并给出指令,而是试图澄清学习者的需求和意图。
  4. 它不会直接将大块代码发送给学习者,而是尝试与学习者共同开发 NetLogo 代码。学习者可以自由编辑代码:无论是用 NetLogo,还是通过“Ask”功能用自然语言。
  5. 它不会过度声称代码的正确性,而是承认可能出错的可能性,并与学习者合作解决潜在问题。

我找不到任何源代码或关于 Chat 如何构建在 NetLogo 之上或如何与 NetLogo 集成的更多细节,但这些想法本身就很有价值。

这又让我想起了飞机上的自动驾驶仪以及我之前提到的那本书。(参考)当我提到自动驾驶仪时,不要只想到一个二元开关,要想到所有那些向自动驾驶仪提供信息,并告诉自动驾驶仪该做什么和不该做什么的旋钮和开关。

虽然似乎许多其他类似的工具喜欢使用“copilot”这个词,例如谷歌搜索“llm copilot source code”,但我倾向于不同意这种类比,但不得不接受它,因为这就是找到相关想法的方式。

2 个赞

我删除它是因为我以为我找到了一个更好的方法来处理这个问题——为什么要在输入所有这些表时,让 ChatGPT 直接解析托管在互联网上包含整个数据库详细信息的文件的内容呢?事实证明,这种方法存在技术问题。所以,我又回到了我在删除的帖子中提出的建议。无论如何,表描述、示例查询等信息都必须创建。这只是如何将信息提供给 LLM 的问题。以下是 GPT-4 的进展情况:

是的,你概述的方法是有意义的,并且是利用我的能力根据自然语言问题协助生成 SQL 查询的可行方法。

以下是步骤细分:

  1. 问题解释: 用户用自然语言提出问题,我对其进行解释以理解所请求的信息。
  2. 表识别: 根据问题和 Discourse 数据库中的所有表列表,我识别出最有可能与查询相关的表。
  3. 详细表信息: Discourse 向我发送相关表的详细描述,包括所有列和示例查询。
  4. 查询生成: 使用详细的表信息,我生成一个 SQL 查询来回答用户的问题。

这种方法利用了我理解自然语言并将其映射到结构化数据查询的能力。它还充分利用了 Discourse 提供的详细表信息。

至于替代方法,一种可能性是专门针对 Discourse 的数据库架构和常见查询模式训练一个模型。这可能需要大量工作,并且根据可用资源可能不可行。但是,它可能能够生成更准确、更高效的查询。

另一种方法是开发一个更具交互性的对话,当用户的问题含糊不清或有多个查询可能回答该问题时,我会提出澄清性问题。这将使过程更具交互性,并可能导致更准确的查询。

对于最后两段中提出的替代方法,我忽略了第一个,但如果我尝试的方法没有带来可靠的结果,这可能是 Discourse 团队可以研究的问题。

我询问了 GPT-4 关于第二个替代方法。它很有信心地表示,如果给出一个无法通过提供的表结构回答的问题,它将能够提示用户尝试重新表述他们的问题。

所以,我又回到了编写 Discourse 数据库中所有表的描述。我现在知道 allowed_pm_users 表的用途了。ar_internal_metadata 表有点令人费解,但我认为目前可以忽略它。

2 个赞

这是我迄今为止最喜欢的选项,尽管它非常难以实现。因此,你猜对了,又一篇论文。同样,这也不是一篇权威论文,因为有许多类似的方法。

“DiagGPT:一种基于 LLM 的具有自动主题管理功能的面向任务对话的聊天机器人”,作者 Lang Cao(pdf

只需根据需要将医疗信息替换为 PostgreSQL 信息。有趣的是,这篇论文提供了提示,并建议使用哪些工具和代理。

深入研究。 (点击三角形进入)

既然“面向任务对话”似乎是必需的。
Google 搜索:“面向任务对话”
搜索结果包括:Papers With Code - 面向任务的对话系统
排行榜条目是 T5-3b(UnifiedSKG),其中包含一篇论文的链接
“UnifiedSKG:使用文本到文本语言模型统一和多任务结构化知识基础”,作者 Tianbao Xie、Chen Henry Wu、Peng Shi、Ruiqi Zhong、Torsten Scholak、Michihiro Yasunaga、Chien-Sheng Wu、Ming Zhong、Pengcheng Yin、Sida I. Wang、Victor Zhong、Bailin Wang、Chengzu Li、Connor Boyle、Ansong Ni、Ziyu Yao、Dragomir Radev、Caiming Xiong、Lingpeng Kong、Rui Zhang、Noah A. Smith、Luke Zettlemoyer 和 Tao Yu(pdf

请注意这一点
image

:slightly_smiling_face:


编辑

来自 https://python.langchain.com/

从 LLM 和工具构建 SQL 代理。(参考

页面底部列出了几个,应该看一下这个

用例

企业数据通常存储在 SQL 数据库中。

LLM 使能够使用自然语言与 SQL 数据库进行交互。

LangChain 提供 SQL 链和代理,用于根据自然语言提示构建和运行 SQL 查询。

这些与 SQLAlchemy 支持的任何 SQL 方言兼容(例如,MySQL、PostgreSQL、Oracle SQL、Databricks、SQLite)。

它们支持以下用例:

  • 根据自然语言问题生成将要运行的查询
  • 创建可以根据数据库数据回答问题的聊天机器人
  • 构建基于用户想要分析的见解的自定义仪表板

编辑(2023 年 8 月 23 日)

Spider 是一个大型的复杂且跨领域语义解析和文本到 SQL 数据集,由 11 名耶鲁学生注释。Spider 挑战的目标是开发跨领域数据库的自然语言接口。它包含 10,181 个问题和 5,693 个复杂的唯一 SQL 查询,涵盖 200 个数据库,其中包含涵盖 138 个不同领域的多个表。在 Spider 1.0 中,不同的复杂 SQL 查询和数据库出现在训练集和测试集中。要在此取得好成绩,系统必须能够很好地泛化到新的 SQL 查询以及新的数据库模式


编辑(2023 年 8 月 24 日)

Dataherald 是一个面向企业级结构化数据问答的自然语言到 SQL 引擎。它允许您从数据库设置一个 API,该 API 可以用纯英语回答问题。

正如我经常告诉别人的那样,生活中有些事情你只需要等待,就会有人免费为你做。

2 个赞

我仍然对结果非常满意。再举一个例子。它给了我想要的东西,我后来自己加了一个 WHERE 子句来检查 topic ID,但仅此而已。不过,我可能可以提前提供这些信息,它也会那样做:

1 个赞

AI Bot 模块现在包含 SQL Helper 角色,该角色专门用于处理此类请求,并且在创建数据浏览器查询方面非常有用。 :rocket:

(不过,仔细检查一下还是值得的 :slight_smile:

是否有一个可以发布 SQL Helper AI 机器人使用示例的主题?

如果没有,也许可以创建一个这样的主题,然后在此处添加指向该主题的链接,因为其他人可能正在寻找示例,并且会先找到该主题。

如果你想分享一些有价值的内容给社区,可以在 Data & reporting 频道创建一个新话题。还有一个新的“分享对话”按钮也可能对此有用 - Share Your AI Bot Conversations!

查找插件作者的查询 AI

JammyDodger:

你好 Bert :slight_smile:

你能给我写一个查询,找到插件作者组中的所有用户吗?

gpt4_bot:

查找数据库模式

groups, group_users, users

现在我们有了相关表的模式,我们可以编写一个查询来查找“plugin-authors”组中的所有用户。根据模式,我们需要将 group_users 表与 groupsusers 表连接起来,以获取“plugin-authors”组成员的用户名。

以下是查找“plugin-authors”组中所有用户的查询:

SELECT u.id AS user_id, u.username
FROM users u
JOIN group_users gu ON gu.user_id = u.id
JOIN groups g ON g.id = gu.group_id
WHERE g.name = 'plugin_authors'

此查询通过在 user_id 上连接 group_users 表,然后通过 group_id 连接 groups 表,从 users 表中选择用户 ID 和用户名。它会过滤结果,只包括属于名为“plugin-authors”的组的用户。

2 个赞

此主题已在 43 小时后自动关闭。不再允许回复。