Discourse AI 话题摘要 🤖

|||
-|-|-|
:information_source: | 摘要 | 使用远程 AI 语言模型准备和发布主题摘要。
:hammer_and_wrench: | 代码库链接 | GitHub - merefield/discourse-ai-topic-summary: Uses a remote AI language model to prepare and post a summary of a Topic
:open_book: | 安装指南 | 如何在 Discourse 中安装插件
:heart: | 赞助 | 请考虑成为我开源工作的持续赞助者,金额可根据您或您组织的资源和需求进行选择,以确保此插件获得应有的维护,并在未来继续为您提供服务。

喜欢这个插件吗?请在 GitHub :star: 它!:pray:

功能

  • AI 生成的主题摘要:
    • 您可以选择首次生成摘要的时间以及重新生成摘要所需的新帖子数量,从而使插件更具成本效益。
    • 可选择主题显示位置,位于顶部或侧边栏(需要 Bars 主题组件)。
    • 投票系统允许社区对不良摘要进行点赞。如果点赞数超过阈值,将寻求新的摘要。
    • 在主题列表中显示摘要 - AI 摘要在可用时会显示在摘录的位置。
  • 自动标记系统
    • 重用摘要来智能地标记您的主题。
    • 在两种策略之间进行选择,以最好地适应您的用例。
  • 自动生成描绘主题的缩略图。
  • 所有提示都可以在“自定义”->“文本”中进行编辑。
  • 此插件是 Discourse 的第一个 AI 插件 :1st_place_medal:

(注意,这只是一个使用一些糟糕的随机开发固定数据的 UI 预览,在真实数据上效果好得多

在最少帖子数量后,如果主题位于范围内类别中,插件会将主题文本发送到 Open AI 大型语言模型,并附带一个提示,然后发布响应,旨在作为内容摘要,并且效果相当不错。可以选择模型。

摘要通常出奇地好,有时甚至令人惊叹。但是,当某个摘要不够好时,我添加了一个社区点赞机制,以在达到设定的阈值后强制刷新不良摘要。

无论如何,当添加了设定的额外帖子数量后,摘要都会被重新查找。

您可以修改提示和阈值。

重要提示:摘要永远不会暴露给匿名用户,因此文本将无法被抓取(您可能认为这是好事,也可能不认为,但至少爬虫只会处理您真实的人类数据)。

自动标记支持:

厌倦了手动标记主题?让 AI 为您完成!(相对智能地!)

有时 AI 会过于有创意,尽管我们在这里给它指示,所以您可以将其限制在现有标签的集合中。

您可以通过 rails 控制台快速创建一个非管理员用户来实现此目的:

rake admin:create (不要给此用户管理员权限)

(这是一个有点 hacky 的解决方法,因为 Discourse 当前的“内部 API”用于标记目前不允许您指定“无新标签”,因此目前轻松阻止此操作的唯一方法是将其创建为没有该特权的用户(即信任级别低于 min_trust_to_create_tag))

可选地覆盖主题列表上的摘录与 AI 摘要

启用 ai_topic_summary_expose_as_excerpt 设置后,将覆盖显示摘录的主题列表(例如,通过类似 Topic List PreviewsTopic List Excerpts 的主题组件),如果 AI 摘要可用。

切换摘录:

您可以使用我的主题组件 Topic List Previews (TLP) - #592 by merefield

可选的描绘主题内容的图片

已为此插件添加了可选的缩略图生成功能。

它将以图像的形式描绘摘要,并自动添加到 OP 的顶部。

  • 您必须在插件设置中启用它。
  • 您可以选择在每次生成时自动删除顶部的最后一张图片。
  • 您可以通过插件设置中的链接编辑提示,以便影响样式和内容(但这将应用于所有后续生成的图像)。

尽情享受 :framed_picture:

限制

由于令牌限制,目前最多只能处理约 160 个帖子(取决于模型!),因此它将不包含之后帖子的内容。随着模型越来越强大,服务越来越完善,这种情况几乎肯定会改变。

速率限制和成本

从 Open AI 检索数据并非免费。但是,速率限制隐式基于发帖。您可以控制在寻求新摘要之前需要多少帖子。这不太可能成为问题。

侧边栏“Bars”支持!!

现在有一个与 Bars 兼容的小部件随插件一起提供。您只需安装Bars 主题组件并进行配置:

安装后,您可以关闭标准的顶部主题摘要,并依赖侧边栏中的小部件。

注意事项

免责声明:我对 LLM 的回复不负责。请理解 LLM 的优点和缺点,以及它们的能力和局限性。它们非常擅长生成令人信服的、上下文感知的文本,但可能在事实上是错误的。

重要隐私提示:您的论坛数据将被发送到 Open AI。虽然它几乎肯定不会被纳入其预训练模型,但他们将在其分析和日志记录中使用这些数据。请务必将此事实添加到您论坛的服务条款和隐私声明中。相关链接:使用条款隐私政策

版权:Open AI 在版权方面发表了声明:OpenAI 是否会声称对其通过 API 生成的输出拥有版权?| OpenAI 帮助中心

待办事项

  • 添加前端和后端测试 :construction:
  • 添加更多用户配置以影响响应样式 :white_check_mark:
  • 添加自定义模型名称支持 :white_check_mark:
  • 在可用时添加 GPT-4 支持 :white_check_mark:
  • 将模型设置设为下拉列表 :white_check_mark:
  • 为 Layouts 插件添加小部件支持 :white_check_mark:
30 个赞

这只是时间问题,我们终于等到了!

但我的主要问题是,这对我们来说会变得多贵?

4 个赞

它已经在我的一个论坛上运行了好几天了。它几乎活跃在所有公共类别中。

很难回答,因为我不知道你的论坛有多活跃。

我的建议是尝试在一个类别中进行,看看效果如何。

有一个不错的仪表板。

在开发了两个基于 GPT3(最昂贵的模型)的插件并在上个月底在一个网站上上线后,我二月份的收入如下:

所以可能比你的电子邮件成本还要低。

10 个赞

这可能有助于我们扩展术语表主题。

它应该可以用西班牙语工作吗?

3 个赞

我不知道,你可能需要在设置中更改提示。不过可以试试看!

(这应该是一个本地化字符串,我很快就会更改它)

4 个赞

感谢 @merefield - 这个插件看起来很棒!

我已经启用了它,并输入了我的 API 密钥,启用了分类等,但还没有看到任何摘要。我能否在我的 Discourse 论坛上监控它的进度?在日志或 sidekiq 中看不到任何内容(尽管我承认还没有仔细查看)。

3 个赞

嘿 Chris,它会响应新帖子。如果它们在阈值范围内并且符合类别位置标准,它将创建一个摘要。

3 个赞

好的,感谢@merefield的澄清

2 个赞

您好,

启用此摘要插件后,我的构建失败。我不知道这是否与我的底层设置或插件冲突有关。如果有所帮助,我附上了一些详细信息。

注释掉 ai-topic-summary 插件可以解决问题,构建成功。

非常感谢您的任何指导。

I, [2023-03-12T17:24:25.390052 #1]  INFO -- : cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-03-12T17:24:31.668769 #1]  INFO -- : discourse-ai-topic-summary is already at latest compatible version
discourse-assign is already at latest compatible version
discourse-chat-integration is already at latest compatible version
discourse-chatbot is already at latest compatible version
discourse-checklist is already at latest compatible version
discourse-solved is already at latest compatible version
docker_manager is already at latest compatible version

I, [2023-03-12T17:24:31.677801 #1]  INFO -- : cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Gem::LoadError: can't activate ruby-openai-3.4.0, already activated ruby-openai-3.3.0
/var/www/discourse/lib/plugin_gem.rb:26:in `load'
/var/www/discourse/lib/plugin/instance.rb:796:in `gem'
/var/www/discourse/plugins/discourse-chatbot/plugin.rb:9:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:693:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:693:in `activate!'
/var/www/discourse/lib/discourse.rb:352:in `block in activate_plugins!'
/var/www/discourse/lib/discourse.rb:349:in `each'
/var/www/discourse/lib/discourse.rb:349:in `activate_plugins!'
/var/www/discourse/config/application.rb:216:in `block in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:216:in `<class:Application>'
/var/www/discourse/config/application.rb:75:in `<module:Discourse>'
/var/www/discourse/config/application.rb:74:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
(See full trace by running task with --trace)
I, [2023-03-12T17:24:38.020166 #1]  INFO -- : gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
When you HTTParty, you must party hard!
Successfully installed httparty-0.21.0
1 gem installed
gem install ruby-openai -v 3.3.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
Successfully installed ruby-openai-3.3.0
1 gem installed
gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
When you HTTParty, you must party hard!
Successfully installed httparty-0.21.0
1 gem installed
gem install ruby-openai -v 3.4.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
Successfully installed ruby-openai-3.4.0
1 gem installed

I, [2023-03-12T17:24:38.021523 #1]  INFO -- : Terminating async processes
I, [2023-03-12T17:24:38.022106 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 41
2023-03-12 17:24:38.022 UTC [41] LOG:  received fast shutdown request
I, [2023-03-12T17:24:38.022874 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 102
102:signal-handler (1678641878) Received SIGTERM scheduling shutdown...
2023-03-12 17:24:38.035 UTC [41] LOG:  aborting any active transactions
2023-03-12 17:24:38.046 UTC [41] LOG:  background worker "logical replication launcher" (PID 50) exited with exit code 1
2023-03-12 17:24:38.049 UTC [45] LOG:  shutting down
102:M 12 Mar 2023 17:24:38.053 # User requested shutdown...
102:M 12 Mar 2023 17:24:38.054 * Saving the final RDB snapshot before exiting.
102:M 12 Mar 2023 17:24:38.120 * DB saved on disk
102:M 12 Mar 2023 17:24:38.122 # Redis is now ready to exit, bye bye...
2023-03-12 17:24:38.153 UTC [41] LOG:  database system is shut down


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1043 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
3 个赞

哎呀,我的错。是我的两个 AI 插件之间发生了冲突。我会解决并恢复!:sweat_smile: 抱歉!

5 个赞

试试这个: FIX: conflict with chatbot · merefield/discourse-ai-topic-summary@0067eaf · GitHub

5 个赞

非常感谢您如此迅速地回复。我明天会尝试一下。我很期待看到这个插件的实际效果!

3 个赞

快速更新,我收到了第一次真正的摘要触发,效果相当不错。@merefield 我认为你已经完美地完成了这个插件 :-)。事实上,我认为像这样利用 chatgpt 的工作方式比仅仅将其添加到讨论线程中具有更广阔的未来潜力。

这是生成的摘要,它位于主题的顶部,非常有助于鼓励其他人阅读——或者不阅读。

在我发布会触发摘要的更新时,我确实遇到了一个错误(错误 500)。这是因为我在设置中尝试使用 gpt-3.5-turbo。也许当出现 chatgpt API 错误时,最好允许帖子提交,而不是让用户收到一个他们不知道如何处理的 500 错误。

在日志中,我清楚地看到了我做错了什么

StandardError (这是一个聊天模型,不支持 v1/completions 端点。您是不是想使用 v1/chat/completions?)

潜在的演进方向:

  • 允许主题所有者/管理员删除不相关/不合适的摘要?
  • 也许可以有一个地方来查看某个类别/整体的所有摘要?

除此之外,我期待看到它的发展。非常感谢您迄今为止所做的一切。我的网站非常小,只有几个用户,但我确实看到了它的潜力。

4 个赞

非常感谢您的宝贵反馈。这些都是很棒的想法。

是的,管理员/作者按钮可能会很不错。我会将其添加到路线图中。

太棒了!

我想知道“查看摘要的地方”列表是否实际上是主题列表中的替代摘录?

我会将其添加到路线图中。

是的,我应该像处理聊天机器人一样将其转换为下拉菜单。不过,您尝试得很棒 :wink:

另外,GPT-4 即将推出,它将大大改进摘要,并能处理 更长 的主题。

6 个赞

该插件目前是否支持 ChatGPT 4 和 POE 应用程序(Quora 开发的 AI 聊天平台)的 API?

3 个赞

哈哈,饶了我吧!:sweat_smile: 昨天才刚宣布的吧?

目前只有极少数开发者获得了 API 访问权限。有一个等候名单。所以插件用户无论如何都不太可能连接。

(你注意到话题标题了吗?)

目前没有,也没有计划。有什么好处呢?它以总结能力见长吗?

2 个赞

^^
抱歉没说清楚^^ 我只是想知道你们未来是否有兴趣集成它们?我一直在关注 GPT 04 的新闻,这对我们越南社区来说非常令人惊讶和特别。

3 个赞

感谢您的关注。关于 GPT-4 支持,我将这样回复:

Hell Yeah Dcuniverse GIF by DC

我可能会先将其添加到 Chatbot 中,但很快就会着手进行 AI 主题摘要。

我正在等待 OpenAI 的邮件……(然后是点空闲时间!)

5 个赞

实际上,我想到一个稍微简单的解决方案,这样我们就不用让界面显得拥挤了:

我们是否可以为管理员和作者设置“投票权重”?

这样你就可以将作者的投票权重设置为 3,如果阈值是 3,就会生成新的摘要。

这两种解决方案(按钮或与阈值匹配的权重)的缺点是,作者可以随意请求新摘要,这会让你在 API 调用上花费很多。

所以我建议你让作者的投票权重略低于阈值(但高于普通用户),而管理员的投票权重等于阈值?

这样我们就不用更改界面,只需将其内置到后端逻辑和设置中即可。

管理员的反对票将始终创建一个新的摘要并重置计数。

有什么想法吗 @JamesPick

4 个赞

我同意您对垃圾邮件新摘要的担忧。
我认为问题不在于人工智能提供了一个糟糕的摘要,而在于该主题不利于生成好的摘要。也许该主题失去了焦点,或者更多地变成了聊天,而关键帖子在发送给 ChatGPT 的内容中丢失了。

最终,当管理员/主题所有者清楚地看到摘要不会为该主题产生任何有意义的内容时,他们可以取消它。

我想随着时间的推移,可以添加功能来选择可以发送到 API 进行摘要的具体帖子。

我曾考虑过为类似此线程的内容使用此功能。您可以将您的第一个帖子标记为始终包含在摘要中的帖子?然后,也许可以添加几个最适合摘要的帖子。

您甚至可以有一个“生成摘要”选项,即使主题只有一个帖子也可以生成摘要。这与您之前的评论非常吻合

4 个赞