Discourse 聊天机器人 🤖

:information_source: 摘要 Discourse 的原始 AI 聊天机器人
:hammer_and_wrench: 代码库链接 GitHub - merefield/discourse-chatbot: An AI bot with RAG capability for Topics, Chat & Customer Support in Discourse, currently powered by OpenAI · GitHub
:open_book: 安装指南 如何在 Discourse 中安装插件
:heart: 赞助 请考虑成为我开源工作的持续赞助者,赞助金额请根据您的或您组织的资源和需求来决定,以确保该插件得到应有的维护,并能在未来继续为您的站点服务。

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

:information_source: 由于这是一个独立贡献的插件,请在此主题中提出支持、Bug、用户体验和功能请求。注意:此插件提供于 Discourse.org 托管服务。如果您是自行托管,或者可能在第三方托管上(请咨询您的提供商),则可以安装它。

这是什么?

  • Discourse 的原始 AI 聊天机器人!
  • 您可以使用此机器人处理一些客户支持信息任务(参见此指南 Building a technical support chatbot
  • 在任何主题或聊天频道中与机器人对话,一对一或与他人一起!支持线程。
  • 自定义机器人的性格以适合您的论坛!
    • 希望它听起来像威廉·莎士比亚或温斯顿·丘吉尔?没问题!
  • “RAG 模式”机器人可以:
    • 搜索您的论坛**以获取答案,使机器人成为您论坛主题的专家。
      • 重新排序搜索结果,以偏向特定的作者群体或主题标签
      • 不仅了解当前主题或频道中的信息。
    • 私下询问用户他们未完成的必填用户字段。
    • 渲染和编辑 AI 图片
    • 搜索维基百科
    • 搜索当前新闻*
    • 搜索 Google*
    • 爬取远程站点*
    • 返回股票当前的收盘市场数据。*
    • 准确执行“复杂”数学运算(没有编造或“幻觉”答案!)
    • 这些“工具”可以通过插件扩展,见下文。
  • 视觉支持 - 机器人可以看到您的图片并回答相关问题!
  • 自动回复特定类别中的新主题
  • 使用尖端的 Open AI API 及其卓越的、行业领先的大型语言模型(LLM)的功能。
  • 包含一个特殊的配额系统来管理对机器人的访问:更受信任的和/或付费成员可以拥有更大的机器人访问权限!
    • 按查询或按令牌计量使用情况。
  • 也支持 Azure 和代理服务器连接。
    • 使用第三方代理进程来翻译调用,以支持替代 LLM,如 Gemini,例如 这个

*需要注册外部(非关联)API 服务。链接在设置中。

RAG 模式非常智能,知道您论坛上发布的事实:

基本机器人模式有时会出错,但由于它对大型语言模型的调用较少,因此运行成本更低:


(对不起,中国! :wink:

:biohazard: **机器人的“视觉” - 它能看到(潜在共享)的内容和隐私 :biohazard:

此机器人可用于您论坛的公共空间。为了使机器人在那里特别有用,有 RAG 模式(每个机器人信任级别一个设置)。默认情况下未设置。

在此模式下,默认情况下,机器人可以看到信任级别 1 用户能看到的所有内容,基于以下设置:

因此,如果在面向公众的主题中与机器人互动,如果您倾向于通过类别权限在信任级别 0 或 1 级别限制内容,机器人可能会“泄露”信息。选择此级别是因为通过经验,大多数站点通常不会在低信任级别限制敏感内容,但这取决于您的具体需求。

为此模式,请确保您至少有一个信任级别 1 的用户,且没有超出自动化组的额外组成员身份。(请记住,机器人将知道信任级别 1 用户知道的一切,并可以分享)。如果您有一个信任级别 0 的用户,且没有超出自动化组的额外组成员身份,您可以选择降低 chatbot embeddings benchmark user trust level

或者:

  • chatbot embeddings strategy 切换到 category,并将 chatbot embeddings categories 填充为您希望机器人了解的类别。(请注意,如果您添加任何私有类别,机器人应该了解这些类别,并且机器人在任何地方公开说的任何话都可能泄露给权限较低的用户,所以在添加时请小心)。
  • 仅在普通模式下使用机器人(但机器人将看不到任何帖子)
  • 通过审核来缓解

此外,请注意,它“看到”的任何内容都会与 Open AI 共享。

您可以看到这种设置是一种妥协。为了使机器人有用,它需要对您站点上的内容有所了解。目前,机器人无法选择性地阅读仅限成员的内容并仅与成员共享,一些管理员可能会觉得这有限制,但在机器人能够在公共场合交谈的同时,没有简单的方法来解决这个问题。如果您有特殊需求并希望赞助这方面的工作,请联系我。带有语义搜索的机器人权限是一个非平凡的问题。系统目前针对速度进行了优化。注意:机器人永远不会读取私人消息。

注意事项

  • 可能不适用于多站点安装(未明确测试),但欢迎 PR 以改善支持 :+1:
  • 由于需求高,Open AI API 响应在更高级的模型上有时会变慢。但是,聊天机器人支持 GPT 3.5,它快速响应且完全有能力。
  • 可扩展并支持其他云机器人(因此插件名称通用),但目前仅支持与 Open AI 大型语言模型(LLM)如 GPT-4 的原生交互。如果您希望添加其他机器人类型或希望支持我添加更多,请联系我。欢迎 PR。虽然可以通过代理服务器访问其他服务而无需更改代码!
  • 可扩展以支持搜索当前提供集之外的其他内容。

设置

先决条件

除了 对 app.yml 的正常更改 外,您需要注意以下几点:

要使用聊天机器人或 AI 主题摘要 构建,您需要至少 0.5.1 版本的 pgvector postgres 扩展。

大多数人已经拥有至少这个版本。然而,偶尔有些安装会安装较旧的版本。这将导致构建失败,出现类似以下错误:PG::UndefinedObject: ERROR: access method "hnsw" does not exist

首先确保您的容器正在运行:

./launcher restart app

然后进入您的容器

./launcher enter app

然后进入数据库并更新 pgvector 的版本:

:/var/www/discourse# su postgres -c 'psql discourse'
\dx
ALTER EXTENSION vector UPDATE;
\dx
exit

现在使用 exit 离开容器

您现在应该能够重新构建。

创建嵌入

如果您希望聊天机器人了解您站点上的内容,请打开此设置:

chatbot_embeddings_enabled

仅当您想使用 RAG 类型的机器人并确保它了解您论坛上的内容,而不仅仅是当前主题时,才需要此设置。

最初,我们需要为所有范围内的帖子创建嵌入,以便机器人可以找到论坛信息。启用此设置后,这将在后台发生,您无需执行任何操作。

对于非常大的站点,此播种作业可能需要几天的时间。

嵌入范围

这由几个设置决定:

  • chatbot_embeddings_strategy 可以是 “benchmark_user” 或 “category”
  • chatbot_embeddings_benchmark_user_trust_level 为前者设置相关的信任级别
  • chatbot_embeddings_categories 如果设置为 category 策略,则使机器人有权考虑指定类别中的所有帖子。

如果您更改这些设置,随着时间的推移,嵌入的群体将发生变化。

加速填充

进入容器:

./launcher enter app

并运行以下 rake 命令:

rake chatbot:refresh_embeddings[1]

目前由于未知原因会运行两次(抱歉!欢迎 PR),但 [1] 确保第二次运行时只会添加缺失的嵌入(即第一次运行后立即没有缺失),因此有些多余。

在不太可能的情况下,您被 OpenAI 限制速率(不太可能!),您可以通过以下方式完成嵌入:

rake chatbot:refresh_embeddings[1,1]

这将填充缺失的嵌入(因此错误不会导致任何丢失),但会更谨慎地继续,在每次调用 Open AI 之间放置 1 秒的延迟。

与机器人交互相比,创建嵌入并不昂贵,但无论如何请留意您 Open AI 仪表板上的使用情况。

注意:嵌入仅针对帖子创建,且仅针对信任级别 1 用户有权访问的帖子创建。这似乎是一个合理的妥协。它不会为仅限信任级别 2+ 访问的内容的帖子创建嵌入。

监控嵌入填充的有用数据浏览器查询

@37Rb 写道:“这是我使用 Data Explorer 插件来监控和验证嵌入的 SQL 查询……以防对其他人有帮助。”

SELECT e.id, e.post_id AS post, p.topic_id AS topic, p.post_number,
       p.topic_id, e.created_at, e.updated_at, p.deleted_at AS post_deleted
FROM chatbot_post_embeddings e LEFT JOIN posts p ON e.post_id = p.id

尝试为太多字符获取嵌入时出错。

您可能会遇到如下错误:

OpenAI HTTP Error (spotted in ruby-openai 6.3.1): {"error"=>{"message"=>"This model's maximum context length is 8192 tokens, however you requested 8528 tokens (8528 in your prompt; 0 for the completion). Please reduce your prompt; or completion length.", "type"=>"invalid_request_error", "param"=>nil, "code"=>nil}}

这是解决方法 …

根据您的错误消息,嵌入模型的限制为:

8192 tokens

然而您请求了 8528

您需要将此设置的当前值降低:

chatbot_open_ai_embeddings_char_limit:

大约降低 4 倍的差值,看看是否有效(一个令牌大约是 4 个字符)。

因此,在此示例中,4 x (8528 - 8192) = 1344

因此,为了安全起见,将 chatbot_open_ai_embeddings_char_limit 的当前值降低 1500。但是,默认值是根据大量英文帖子测试设置的,但对于其他语言,可能需要降低。

这将截断更多文本并请求令牌,希望嵌入能够通过。如果不成功,您需要确认差值并相应地进一步减少。最终它会足够低,您无需再查看它。

如何切换嵌入模型

您无需执行任何操作,只需更改设置:后台作业将逐渐处理事情。

如果您真的想加速这个过程,请执行:

  • 将设置 chatbot_open_ai_embeddings_model 更改为您新的首选模型
  • 最好先删除所有当前嵌入:
    • 进入容器 ./launcher enter app
    • 进入 rails 控制台 rails c
    • 运行 ::DiscourseChatbot::PostEmbedding.delete_all
    • exit(返回容器内的 root)
  • 运行 rake chatbot:refresh_embeddings[1]
  • 如果由于任何 Open AI 方面的原因中途失败,请再次运行,直到达到 100%
  • 已知新模型更准确,因此您可能需要降低 chatbot_forum_search_function_similarity_threshold,否则您可能得不到结果 :)。我将默认值从 0.8 降低到 0.6,但您的情况可能不同。

机器人类型

花点时间阅读所有插件设置。chatbot bot type 设置是关键,每个聊天机器人“信任级别”都有一个:

RAG 模式更优越,但会对 API 进行更多调用,可能会增加成本。话虽如此,其最终输出“幻觉”的倾向减少,可能使您能够从 GPT-4 降级到 GPT-3.5,尽管输出的有用性和可靠性显著增加,您最终可能会花费更少。GPT 3.5 基于响应时间也更适合代理类型。潜在的双赢!实验吧!

要使聊天机器人在聊天中工作,您必须启用聊天。

如何让机器人回应

基本规则

  • 如果在插件设置中获得权限,机器人将在主题或聊天频道中仅有一个用户时回复每个帖子或消息,直到更多人加入。
  • 如果您 @ 提及它,机器人将始终被调用

每个类别的特殊自动回复

  • 每个类别,您可以让聊天机器人回复每个新主题,并且您可以给它关于做什么的特殊指令,由您在类别设置中设置的类别特定提示控制。

应该以类似以下内容开头:

“通过说你好并自我介绍来欢迎我。通过使用本地论坛搜索与我第一篇文章相关的论坛上的 5 篇文章分享给我,包括链接”

即您需要以第一人称编写,就像用户在寻求帮助一样。它不是系统提示。它不是描述机器人应该如何行为(那是系统提示的作用,系统提示仍然会发送)。它是用户请求特定帮助(尽管是隐藏的)。基本上,您编写它就像用户帖子一样,无需提及机器人。

机器人的响应速度

这主要由一个设置控制:‎chatbot_reply_job_time_delay‎,您有自由裁量权。

拥有此设置的目的是:

  • 保护您免受 Open AI 的速率限制
  • 保护您的站点免受想要垃圾邮件机器人并花费您金钱的用户。
  • 允许 Discourse 足够的时间上传热链接图片,以便机器人可以看到它们。

现在默认为 ‘2’ 秒,现在可以减少到零 :racing_car: ,但请注意上述风险。机器人视觉(如果您正在使用)对此设置特别敏感。如果您发现机器人看不到您的图片,请尝试增加此值。

将此设置为零,机器人即使在“代理”模式下,也会变得非常“敏捷”。

显然,这有点人为,没有真正的人实际上会打得这么快……但根据您的口味和钱包大小设置。

注意:我无法直接控制 Open AI API 的响应速度——并且通常使用的规则是,您设置的模型越复杂,响应通常越慢。现在更普遍的情况是,“迷你”模型往往更快。

AI 驱动的用户字段收集(实验性

如果用户有一些当前为空的可选用户字段,启用此设置将导致机器人开始向用户询问信息。它将逐步完成未完成的用户字段,直到完成,然后恢复为正常行为。

image

(抱歉响应缓慢 - 这是在开发环境中录制的)

注意:此功能仅支持:

  • 文本
  • 下拉菜单
  • 确认

多选尚不支持。

字段必须是可选

用户字段的顺序决定优先级。

Ollama & llama3 支持

Ollama 对(完全 AWESOME!)llama3 的支持现已发布:

这是当机器人在开发环境中本地运行或在云端与 ollama 服务器一起运行时……以及基本模式下:

  • 确保模型是 llama3

  • 需要设置自定义 URL http://localhost:11434

image

如果您有足够的服务器,您可以在云端托管 ollama。

DeepSeek 炒作 :sweat_smile:

加入聊天机器人的行动 :rocket:

您至少可以在基本模式下使用机器人来访问 V3 和 R1

我使用了:

(无关联)

他们托管他们的模型。

设置如下:

确保设置基本机器人模式并替换您的密钥。

但是,如果您可以访问他们的网站进行注册,您可能能够直接使用 DeepSeek AI :sweat_smile:

基本 URL 将是 “https://api.deepseek.com”。

OpenAI

您必须从 https://platform.openai.com/ 获取 令牌 才能使用当前机器人。设置了默认语言模型(最复杂的之一),但您可以尝试更便宜的替代方案,列表在此

设置中有一个自动化部分:添加到 Discourse 后,插件当前设置一个具有以下属性的 AI 机器人用户

  • 名称:‘Chatbot’
  • 用户 ID:-4
  • 简介:“嗨,我不是真人。我是一个可以与您讨论事物的机器人。不要太认真。有时,我甚至对事情是正确的!”
  • 组名称:“ai_bot_group”
  • 组全名:“AI Bots”

您可以随意编辑名称、头像和简介(参见管理员 → 自定义 → 文本中的区域设置字符串),但使其易于提及。

它不是免费的,所以有一个配额系统,您必须设置这个

最初没有人可以访问机器人,即使是工作人员。

在初始免费分配到期后,调用 Open AI API 不是免费的!因此,我实施了一个配额系统来控制这一点,降低成本并防止滥用。这些小交互的成本并不疯狂,但如果变得流行,可能会累积。您可以在 他们的定价页面 上阅读有关 OpenAI 定价的更多信息。

为了与机器人互动,您必须属于已添加到三个信任级别组集(低、中、高信任组集)之一的组。您可以在相应的设置中修改每个信任组集每周允许的交互次数。

您还必须填充组。该配置完全由您决定。它们开始时是空的,所以最初没有人可以访问机器人:

在此示例中,我使 staff 具有高信任访问权限,而 trust_level_0 具有低信任。他们在三个额外设置中获得相应的配额。

注意:用户根据其所属的最高信任组获得配额。

“提示工程”

有几个区域设置文本“设置”影响机器人接收的内容以及机器人的响应方式。

您应该考虑更改的最重要一个是机器人的 system 提示。每次您与机器人说话时都会发送此提示。

对于基本机器人,您可以尝试像这样的系统提示:

“你是一个极端的 F1 车迷,你喜欢与赛车运动及其高辛烷值兴奋水平相关的一切”,而不是默认值。

(对于 rag 机器人,您必须保留“你是一个乐于助人的助手。”之后的所有内容,否则可能会破坏代理行为。如果遇到麻烦,请重置它。再次实验!)

尝试一个最适合您论坛主题的。发挥创意!

注意:现在每个机器人类型有两个系统提示。一个 .open 用于在“公共”场合与机器人交谈。另一个 .private 用于在私人消息或直接消息聊天中与机器人交谈。这样您就可以自定义私人行为,例如支持机器人。

更改这些区域设置字符串可以使机器人的行为非常不同,但不能实时修改。我建议只更改系统提示,因为其他提示在代理行为或提供谁对机器人说了什么的信息方面起着重要作用。

注意:在主题中,除了帖子窗口(由回看设置确定)外,还会发送第一个帖子和主题标题,以给机器人更多上下文。

您可以在管理员 → 自定义 → 文本下的 chatbot.prompt. 中编辑这些字符串,其中最重要的是系统提示,位于:chatbot.prompt.system.

支持帖子和聊天消息!

机器人支持聊天消息和主题帖子,包括私人消息(如果配置)。

您可以通过回复它或 @ 提及它来提示机器人响应。您可以设置机器人向后查找多远以获取响应上下文。值越大,每次调用的成本越高。

有一个浮动快速聊天按钮,可立即将您连接到机器人。其样式有点实验性(修改您移动设备上的基础论坛的一些 z-index 值),可能在某些页面上冲突。这可以在设置中禁用。您可以选择是否将机器人加载到一对一聊天或私人消息中。

现在您可以选择您喜欢的图标(默认 :robot: ),或者如果设置留空,将采用机器人用户的头像! :sunglasses:

头像:

或图标:

并且请记住,您还可以自定义展开时出现的文本:

image

… 使用管理员 → 自定义 → 文本

(虽然您可能需要自定义一些 CSS 以适应您想要的颜色和大小)。

一些调试帮助

  • 确保设置 chatbot include inner thoughts in private messages 为 ON
  • 确保设置 chatbot enable verbose rails logging 为 ON
  • ssh 到您的服务器
  • cd /var/discourse/shared/standalone/log/rails
  • 并行在 PM 中问机器人一些东西
  • 立即回到控制台
  • 查找此类消息:
    • 一般聊天 = tail -n 2000 production.log | grep {\"model\":\"
    • 视觉调用 = tail -n 2000 production.log | grep {\"type\":\"image_url\"
  • 检查 PM 中的“内心想法”

通过插件扩展聊天机器人的工具集

聊天机器人插件有能力在单独的插件中添加其他功能,因此您不必维护聊天机器人代码库的分叉。

示例功能插件在此:

但当然您可以将其添加到任何插件 …

此功能在此 PR 中添加

如果您需要帮助扩展聊天机器人,您可以雇佣我帮助您。

卸载插件 - 重要!

由于最近简化插件的努力,卸载插件所需的唯一步骤现在是删除克隆语句。

感谢您对插件的兴趣!

免责声明:我对机器人的响应负责。请将插件视为 Beta 阶段,事情可能会出错。它会随着反馈而改进。但不一定是机器人的响应 :rofl: 请了解 LLM 的优缺点以及它们的能力和限制。它们非常擅长创建令人信服的文本,但经常在事实上出错。

重要隐私说明:您在论坛上写的任何内容可能会作为机器人扫描最后几篇帖子的一部分转发给 Open AI,一旦提示它回复(显然这仅限于当前主题或聊天频道)。虽然几乎肯定不会将其纳入其预训练模型,但它们会在其分析和日志记录中使用数据。请务必将此事实添加到您论坛的服务条款和隐私声明中。相关链接:https://openai.com/policies/terms-of-use, https://openai.com/policies/privacy-policy, https://platform.openai.com/docs/data-usage-policies

版权:Open AI 在此处发表了关于版权的声明:https://help.openai.com/en/articles/5008634-will-openai-claim-copyright-over-what-outputs-i-generate-with-the-api

TODO/路线图项目

  • 添加前端和后端测试 :construction:
  • 添加“机器人打字”指示器和“响应流”(@Aizada_M, @MarcP:construction:
  • 忘记提及机器人?让机器人回应添加其 @ 提及的编辑(@frold
  • 添加徽章?您确实提到了 @botname@frold
  • 添加设置以包含类别和置顶帖子提示?(@Ed_S
  • 同样,每个消息历史提示的简介?(@Ed_S, @codergautam)。这甚至有效吗。让我们看看证据。
  • 使用此更好的代码库更新 Discourse Frotz
  • 转向使用 pgvector 而不是 pgembedding 进行向量搜索,因为前者现在支持快速 HNSW 查找:white_check_mark:
  • 添加语义搜索,以便机器人可以阅读您的论坛帖子并成为“专家” :wink: :white_check_mark:
  • 添加代理行为以减少幻觉并利用可靠的事实信息。 :white_check_mark:
  • 添加额外逻辑将疑似用户名转换为 @ 提及(@frold :white_check_mark:
  • 添加 GPT-4 支持(当 Open AI 认为我值得访问时! :sweat_smile: :white_check_mark:
  • 添加自定义模型名称支持:white_check_mark:
  • 添加选项在将文本传递给 API 之前从帖子中删除引号。 :white_check_mark:
  • 改善 Open AI 返回错误状态时的错误透明度和处理 :white_check_mark:
  • 添加超时 API 请求的重试功能 :white_check_mark:
  • 添加对 ChatGPT 的支持 :white_check_mark:
  • 将插件 Lint 到 Discourse 核心标准 :white_check_mark:
  • 添加 CI 工作流 :white_check_mark:
  • 添加设置以影响机器人响应的性质(例如,有多疯狂):white_check_mark:
  • 包含主题标题和第一个帖子以提示 :white_check_mark:
  • 添加设置从原始帖子/消息数据切换到 cooked,以潜在地更好地利用网络训练数据(@MarcP 的建议)。注意:可能会花费更多并限制返回的内容,因为输入令牌被计数且 cooked 大得多。 我想我们放弃了这个想法

鸣谢:

*它仍然使用 OpenAI 的聊天 GPT 引擎,但现在可以利用本地功能和来自 API 调用的数据来限制幻觉。

104 个赞
Building a technical support chatbot
Answer feature
Webhooks on chat messages?
How to check what prevents rake migrate?
Creating bot on discourse
AI Helper Plugin
Copy custom file in discourse container while build
Voice to text integration
Allow specifiy user different from guardian.user in chat services such as Chat::CreateMessage
How to add a ChatGPT trained AI to discourse?
Cannot get the js in my component to compile SyntaxError: Private field must be used in an enclosing class
Allow ChatBot to read PDFs so it can join in a group discussion
How to create a custom ChatGPT based bot?
Discourse and Coveo
Link for new DM / personal chat message with pre-filled information
UX IPhone issues
How to respond to automatic topics with AI
Comparison between discourse-ai AI Bot and merefield/discourse-chatbot
Allow multiple ‘new topic’ drafts
I have error when upgrade the latest discourse
Two different answers from gpt4o - one right, one wrong.. !?
Is the shortcut to start AI conversation a user setting or not?
Setting Form Templates with a tag
Recommendation: chatbot to support discussion in threads
Photography Mentor Bot
Grouped Site Settings under Headings in Plugins
Update Not Completed and Discourse not opening
Recommendation: chatbot to support discussion in threads
Discourse AI Topic Summary :robot:
Discourse AI Topic Summary :robot:
Hubot Adapter for Discourse
Hubot Adapter for Discourse
Verbose log
Making the case for a hard cap feature on user group AI usage for AI bots and AI Helper
LLMs and the impact on customer support
2024: The Year in Review
How to respond to automatic topics with AI
What User Information is Exposed to LLMs in Discourse AI
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Configure AI Chatbot for Trust Level 0 Access
Auto responder using AI
Discourse AI Topic Summary :robot:
Discourse Chat Bridge (Telegram)
AI personas integration of the chat plugin: It would be great if site users could chat with AI personas
What's the best way to store data with a plugin?
ChatGPT Assistant Integration
Create posts with AI
Multisite vs multiple containers
Training a model on a site's posts?
How are we all feeling about ChatGPT and other LLMs and how they'll impact forums?
GPT-4 with vision available
Use AI to request summary and others things from topic
Upgrading from /admin/upgrade takes *very* long
Embed additional explainer text in Form Template
We need prompt chains: Allow custom AI persona tools to access LangChain.js and/or longer execution time
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Configure AI Chatbot for Trust Level 0 Access
Enabling AI Bot in Chat
When I start a conversation with the AI, it gives two answers to my question
Balancing Costs and Functionality in AI-Powered Forums
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Weekly Summary of AI topics
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Interact with discourse from Python?
Sidekiq not working
Locations Plugin :earth_africa:
Lessons from Colossal Caves
Issue after Rebuilding Discourse on Digital Ocean Droplet
Locations Plugin :earth_africa:
I have error when upgrade new version of discourse
I have error when upgrade new version of discourse
Site down after upgrade via SSH - how to fix?
2023: The Year in Review
Character count when writing description
Advice on a support bot for a technical support forum (Discourse AI vs Discourse Chatbot)
Is there an option to use Discourse Chat as a customer service type of chat?
Configure AI Chatbot for Trust Level 0 Access

我已将 Jina.ai 添加到支持的 API 列表中,可用于网络搜索和网络爬行。一个密钥同时服务于这两项功能。如果您不删除现有 API 的密钥,它们将被使用。

主要有两个原因:

  • 爬行性能似乎非常好
  • 他们提供按使用量付费的模式,而不是按月收费,这适合我,也可能适合您。

设置中的链接。

感谢您对 Discourse Chatbot 的关注。

以下两点可能与您相关:

  • 如果在一个只有一名用户的帖子里调用该机器人,它将回复该帖子的每一楼层,直到有更多人加入该帖子。
  • 您可以设置让聊天机器人回复每个新帖子,并可以为其提供特殊指令,这些指令由您在分类设置中配置的特定于分类的提示来管理。

如果您 @ 提及该机器人,它将始终被调用,所以我不知道您是否也可以利用该功能。

1 个赞

“每一”条帖子?还是仅那些包含关键词的帖子?这是两个不同的要求吗?

也许你可以在预定义回复中提到 Chatbot,然后由机器人跟进?这意味着需要两条帖子,但或许可行。

所以,如果你的预定义回复是“@Chatbot(或你重命名的任何名称)请处理此事”,那么 Chatbot 就会跟进。显然,你可以定制该回复。

请注意,Chatbot 也可以回复私信(如果你这样配置),因此如果预定义回复是在私信中,普通用户只会看到 Chatbot 的回复,这样看起来可能更整洁。

如果你希望雇佣我来扩展 Chatbot 的功能,我是持开放态度的,前提是我们能想出一个足够通用的解决方案,对其他人也有用。但我觉得利用现有功能更有意义?

我在想,这里最好的做法是否为 AI 帖子分类器添加私信功能?你可以雇佣某人提交相关 PR,或者将其作为 Contribute > Feature 提出,希望它能被优先处理。这无疑会具有广泛的实用性?

我通过利用添加到 OpenAI API 的一项功能进行了一些代码简化。如果遇到任何问题,请告知我。

我决定是时候称之为 1.0.0 了 :champagne: :tada: :partying_face:

4 个赞

添加了在单独的插件中添加其他函数的功能,因此您不必维护 Chatbot 仓库的 fork。

示例函数插件在此处:

当然,您可以将其添加到任何插件中……

PR:

4 个赞

@Festinger 你解决这个问题了吗?

帖子嵌入:出现了一个问题,但会重试直到达到限制:nil 的未定义方法 `destroy!’

上次更新后,我开始收到上述错误。我尤其在处理图片时会收到此错误。我的视觉模式设置为:直接。以前我没有收到过此类错误。

您是否记得在创建帖子(或主题)后不久将其删除?

如果您在创建帖子后,在它有机会创建嵌入之前就将其删除,就会出现此错误。因此,当您删除它时,Chatbot 会尝试删除一个不存在的嵌入,这会产生一条烦人的日志消息,但不会造成损害 :wink:

如果您能想到更好的方法,欢迎提交 PR。

1 个赞

它像这样在用户发送的问题中给出了一个错误。这不是我删除的东西。

用户是如何看到这个的?这只会在日志中显示吗?

我在日志中看到了。我跟踪了一天,特别是这个问题发生在长期会员的用户帖子中。如果新会员用图片开一个帖子,通常没有问题,也不会收到错误。当老用户用图片开一个帖子时,就会出现问题。

请分享一下堆栈跟踪信息?

那用户为什么还给你发问题?他们跟你说了什么?用户不应该知道有任何问题,问题只应该出现在日志里?

听起来像是你的“老会员”可能会删除他们最近发布的新主题或帖子(因为他们知道怎么做)?

你是否部署了任何类型的自动化?

发布包含图片的帖子时不会发生破坏,所以我不太清楚这怎么会发生。

更新:我刚刚将一张图片上传到一个网站,无法重现。

1 个赞

SerpAPI 没问题,它们的统计数据显示已发出 Google 请求,但 Chatbot 声称无法使用 Google。这种情况已经持续了一段时间,但我没有做出反应,因为当时 DAI 也不想使用 Google。

没有错误消息。

1 个赞

如果您说“在网上搜索…”会发生什么?

内部提示是通用的,因此不假定使用 Google…

让我向您展示这项强大功能的绝佳演示:

(尽管这使用了捆绑的替代方案 jina.ai

我试过了。系统提示中有“当用户要求使用谷歌进行搜索时,用户实际上是指您应该使用您能够访问的网络搜索功能”。我删除了那部分,然后在我的用户提示中尝试了网络搜索措辞——毕竟,它并没有使用谷歌的 API。但没有成功,答案也差不多:我无法进行网络搜索……

这是我找到的唯一信息,但它没有打开这个:

{
  "id": "chatcmpl-A1wT9Dp1fCIVSzRsVPhr3NnNCcPjW",
  "object": "chat.completion",
  "created": 1725026447,
  "model": "gpt-4o-2024-05-13",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_MvzexRPsDj6EGuXhuiFcmtrd",
            "type": "function",
            "function": {
              "name": "web_search",
              "arguments": "{\"query\":\"International Dog Day date, reason, and history\"}"
            }
          }
        ],
        "refusal": null
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1203,
    "completion_tokens": 20,
    "total_tokens": 1223
  },
  "system_fingerprint": "fp_157b3831f5"
}
2 个赞

我可以不使用它,因为我的目标是使用聊天机器人作为内部问答机器人,而 Jina 可能会解决我使用(通过 WordPress)主内容网站的问题。

但当我从外部世界搜索时,结果并不理想。

1 个赞

我看看是否能重现

1 个赞

它通过 Serp API 或 Jina.ai 都能为我工作。

您能否提供 PM 的机器人“内心想法”?

内心想法
[
  {
    "role": "assistant",
    "content": "",
    "tool_calls": [
      {
        "id": "call_mKY7pfG54xRduRKCz5xee9E0",
        "type": "function",
        "function": {
          "name": "web_search",
          "arguments": "{\"query\":\"list of English butterflies\"}"
        }
      }
    ]
  },
  {
    "role": "tool",
    "tool_call_id": "call_mKY7pfG54xRduRKCz5xee9E0",
    "content": "A-Z of butterflies · A. Adonis Blue · B Black Hairstreak · Brimstone · Brown Argus · Brown Hairstreak · C Chalk Hill Blue · Chequered Skipper · Clouded Yellow · D."
  }
]
1 个赞

我们应该用PM来做这件事吗?我们现在只是在污染这个话题。

但是:

[
  {
    "role": "assistant",
    "content": "",
    "tool_calls": [
      {
        "id": "call_4xitHqRBJ8Wc1HI546r3Wj1U",
        "type": "function",
        "function": {
          "name": "web_search",
          "arguments": "{\"query\":\"International Dog Day date and history\"}"
        }
      }
    ]
  },
  {
    "role": "tool",
    "tool_call_id": "call_4xitHqRBJ8Wc1HI546r3Wj1U",
    "content": "国际狗日日期和历史:我在网上搜索此信息失败。"
  }
]