Discourse AI - 嵌入

:bookmark: 本主题涵盖 Discourse AI 插件的 Embeddings 模块的配置。它解释了 embeddings 是什么,它们如何被使用,以及如何进行设置。

:person_raising_hand: 所需用户级别:管理员

Embeddings 是 Discourse AI 插件的关键组成部分,它支持 相关主题AI 搜索 等功能。本指南将引导您完成在 Discourse 实例中设置和使用 embeddings 的过程。

什么是 Embeddings?

Embeddings 是文本的数值表示,能够捕捉语义含义。在 Discourse 中,它们用于:

  1. 在主题页面底部生成相关主题
  2. 启用语义搜索功能

设置 Embeddings

对于托管客户

如果您是托管客户,embeddings 已经预先配置好。您只需启用依赖于它们的人工智能功能即可。

对于自托管实例

如果您是自托管用户,请参阅 Discourse AI 自托管指南 以获取详细的设置说明。

配置 Embeddings

导航到 管理设置Discourse AI,确保以下设置已启用。

  1. ai embeddings enabled:启用或禁用 embeddings 模块
  2. ai embeddings selected model:选择用于生成 embeddings 的模型

可以调整的可选设置……

  • AI embeddings generate for pms:决定是否为私信生成 embeddings
  • AI embeddings semantic related topics enabled:启用或禁用“相关主题”功能
  • AI embeddings semantic related topics:要显示的相关主题的最大数量
  • AI embeddings semantic related include closed topics:在 AI 搜索结果中包含已关闭的主题
  • AI embeddings semantic search enabled:启用全页 AI 搜索
  • AI embeddings semantic search hyde model:用于扩展关键词以在语义搜索中获得更好结果的模型

提供商

在管理设置中,导航到 AI 插件 → Embeddings 选项卡以配置任何与提供商相关的设置,例如 API 密钥。

Discourse AI 支持多种 Embeddings 提供商:

  • Discourse 托管 Embeddings(推荐且为默认
  • OpenAI
  • Google
  • 通过 Hugging Face 的开源模型
  • 自定义选项

功能

相关主题

启用后,“相关主题”部分将出现在主题页面的底部,链接到语义上相似的讨论。

AI 搜索

Embeddings 为全页搜索界面中的语义搜索选项提供支持。

语义搜索依赖于 HyDE(假设文档嵌入)。我们使用您提供的大型语言模型来扩展搜索词。扩展后,我们将扩展后的搜索转换为向量并查找相似的主题。此技术会增加一些搜索延迟,但会提高结果质量。

在通过 ai embeddings semantic search hyde model 选择用于 hyde 的模型时,请务必选择一个快速的模型,例如 Gemini Flash、Claude Haiku、GPT4o Mini 或最新的可用模型。

生成 Embeddings

新帖子会自动生成 embeddings。要为现有内容生成 embeddings:

  1. 如果缺少 embeddings,则在查看页面时会创建 embeddings
  2. Discourse 将自动为旧主题填充 embeddings。

常见问题解答

问:相关主题是如何确定的?
答:相关主题仅基于 embeddings,其中包括标题、类别、标签和帖子内容。

问:我可以将某些主题排除在相关主题之外吗?
答:是的,有一个站点设置可以从结果中移除已关闭的主题。

问:embeddings 对历史帖子有效吗?
答:是的,系统将自动为您的所有内容填充 embeddings。

附加资源

17 个赞

干得好,首先感谢您,但我似乎看不到“主题”下的相关主题,我的设置是这样的,我添加了一个 openai 密钥。语义搜索有效,但如何才能在主题下显示相关文章?

如果您想使用 OpenAI 进行嵌入,则必须将 ai embeddings model 设置为 text-embedding-ada-002

3 个赞

生成嵌入式作业的计划是什么?从代码来看,嵌入式似乎仅在查看页面且缺少嵌入式时生成。有没有办法在启用该功能时为整个站点生成嵌入式?

2 个赞

您还可以运行 rake ai:embeddings:backfill 来预先生成所有主题的嵌入。

8 个赞

建议

有时阅读一个主题,你对大部分背景知识都了解,但也有一些提及的内容是你不知道的。虽然有总结功能可以总结到目前为止的整个主题,但还有一个有用的功能是人工智能选项,它可以在顶部附近插入该主题的词汇表,并且如果用户选择一个词或短语希望人工智能将其包含在词汇表中,则会更新该词汇表。


今天阅读这个主题时,有一个我不知道的参考资料,所以我查了一下,并回复了一个参考资料。虽然我知道其余的参考资料,但我确定还有其他参考资料,特别是那些对大型语言模型等不熟悉的人,他们会不知道许多提及的参考资料,如果人工智能能帮助他们,他们会更频繁地访问该网站。

虽然我知道这个起始帖子中的 RAG 是什么意思,但有多少人真正知道呢?

什么是 RAG (点击三角形展开)

领域特定的聊天机器人如何工作?检索增强生成 (RAG) 概述


注意:不知道应该将此帖子发布到哪个主题,但由于它需要嵌入才能工作,所以发布在这里。如果发布到其他地方更合适,或者随着 Discourse AI 插件的变化,请移动此帖子。

1 个赞

确定“相关主题”时,嵌入是唯一的变量吗?还是会考虑其他因素(例如作者、主题分数、主题年龄、类别等)?

3 个赞

只有嵌入,但它们包含标题、类别、标签和帖子。还有一个站点设置可以从结果中删除已关闭的主题。

5 个赞

7 个帖子被拆分到一个新主题:Is full page semantic search only in English?

2 篇帖子已拆分为新主题:AI 语义搜索与关键字搜索之间的搜索延迟差异

我希望几个月前就能找到这个。我已经使用 bge-small-en-v1.5 创建了嵌入,并将它们托管在外部数据库中。

我将看看是否能将其“硬塞”到这个“标准”设置中!

我在最近的版本中发现了一个小错误,导致 rake ai:embeddings:backfill 失败:

root@nbg-webxj:/var/www/discourse# rake ai:embeddings:backfill
rake aborted!
NameError: uninitialized constant Parallel (NameError)

  Parallel.each(topics.all, in_processes: args[:concurrency].to_i, progress: "Topics") do |t|
  ^^^^^^
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:27:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => ai:embeddings:backfill
(See full trace by running task with --trace)

我怀疑罪魁祸首是 parallel gem 没有安装在这个插件中,也没有安装在 Discourse 核心中(只在 if ENV["IMPORT"] == "1" 块中找到一个: gem "parallel", require: false)。

我发现 ruby-progressbar gem 也需要执行 rake ai:embeddings:backfill

我在 Github 上做了一个简单的 PR:

2 个赞

请注意,根据 GitHub 上 Falco 的说法,此 rake 方法似乎已被降级/半弃用:

感谢您的 PR @fokx,但我无意中遗漏了它们,因为 rake 任务已不再受欢迎,只有经验丰富的操作员在极少数情况下才能使用,他们可以轻松地在带外安装它们。

语义搜索选项是否不再显示在该下拉菜单中,而是通过 AI 开关来理解或启用?

1 个赞

您能否为我确认一下,嵌入式功能是安装后才对帖子生效,还是也能用于对历史帖子进行语义搜索?我希望是后者!谢谢。

1 个赞

稍后进行,因为它将自动回填您所有内容的嵌入。

4 个赞

我正在尝试使用 Gemini Flash 设置 AI Embeddings,但无法使其正常工作。我找不到所有设置字段的详细说明/示例,因此我可能错过了一些重要的字段。我不知道“ai_embeddings_model”设置是否是必需的,但如果我将其设置为“gemini”,我会收到以下错误……

我找不到 ai_gemini_api_key 设置。我已经将 Gemini Flash 设置为一个带有 API 密钥的 LLM,并且它在其他地方(例如摘要)可以正常工作,但我假设它需要在这里的其他地方输入 API 密钥?

我想这也能与OpenAI一起使用,对吗?

如果能支持他们的Batch API(有50%的折扣)那就太好了。

是的,但现在我们会在后台自动进行回填,所以这不是强制性的。

对于注重价格的用户,我们支持很棒的开放权重模型,您可以在自己的硬件上运行它们。

1 个赞

谢谢。我是否正确地理解,回填(backfill)是指进行向量化?在模型之间切换时,是否需要重新计算向量(它们是“专有的”)?我猜是的。

了解使用 OpenAI API 的成本与投资带 GPU 的服务器和开源解决方案的成本如何对比,将会很有用。是否有公式或任何方法可以估算使用的 token 数量?我们只将 API 用于向量化帖子,而不是用于计算向量距离,对吗?那么,使用的 token 数量取决于我们有多少内容,对吗?

我假设对于相关主题和 AI 驱动的搜索,所有帖子只需要向量化一次,因此我可以计算帖子表中单词的总数并推导出所需的 token 数量。每天添加帖子也适用相同的过程。我现在暂时忽略搜索短语。