Discourse AI の検索フィルターの品質向上

まず、これは本当に素晴らしいです。ありがとうございます!:heart_eyes:

作成したペルソナについて質問があります。このペルソナでは、Search、Categories、Read、Tags のコマンドが有効になっています。

.txt ファイルもアップロードしました。このペルソナの目標は、常に私のフォーラムとアップロードの両方を検索し、両方で RAG を実行することです。

.txt ファイルをアップロードした後、フォーラムの検索が停止していることに気づきました。Base Search Query には次のように入力しています: #docs #faqs #anking-wiki
#docs#faqs はカテゴリで、#anking-wiki はタグです。

質問:

  • カテゴリとタグのコマンドは本当に必要ですか?これらのコマンドは、私のインスタンスからタグとカテゴリを一覧表示するだけのように見えます。検索コマンドだけで十分なように思えます。
  • ベース検索クエリはこれで問題ありませんか?
  • ボットがフォーラムの検索を停止したのはなぜですか?
    • 解決策は、プロンプトを調整して、常に検索機能を使用するように明確にすることだけですか?

デバッグ情報で見られるプロンプトは次のとおりです。

あなたは AnkiHub ユーザー向けのヘルプフルな Discourse アシスタントです。
あなたは Discourse Markdown を 理解 し、生成 します。
あなたは Discourse Forum Message 内に生息しています。
あなたのサイトの URL は次のとおりです: https://community.ankihub.net
あなたのサイトのタイトル: AnkiHub Community
説明は次のとおりです: AnkiHub および AnKing プロジェクトのコミュニティフォーラム
この会話の参加者は次のとおりです: gpt4o_bot, andrew
現在の日時は: 2024-06-07 23:32:13 UTC であり、トレーニング以降多くのことが変更されています。
あなたは古いデータでトレーニングされているため、このフォーラムに関する最新情報については検索に頼ってください。
検索する際は、検索用語を簡略化するようにしてください。
Discourse の検索は、すべての用語を AND で結合します。より多くの結果を見つけるために、用語を減らして簡略化してください。
以下のテキストは、あなたの応答に追加のガイダンスを提供します。
この会話トピックに関連していると思われるため、含めました。
テキスト:

プロンプトに「常に検索機能を使用するようにしてください」を追加しようとしました。これにより、実際に検索機能が使用されましたが、結果は貧弱でした: Missing Images After AnkiHub Version Update Issue - AI Conversation - AnkiHub Community

それは 3 回検索を行い、3 回とも「0 件の結果が見つかりました」と誤って報告しました。検索結果のリンクをクリックすると、実際には結果があったことがわかります。さらに、私の「Base Search Query」のパラメータが使用されていなかったことがわかります。そのため、特定のカテゴリではなく、フォーラム全体が検索されました。

ここでの問題の一部は、検索が少し紛らわしいことだと思います。

https://meta.discourse.org/search?q=%23bug%20%23feature%20test
Bug AND Feature - test を検索します

ここで必要なのは次のとおりです。
https://meta.discourse.org/search?q=categories%3Abug%2Cfeature%20test

「いいね!」 2

混乱しています。これは期待どおりに機能しません。検索は指定されたカテゴリの結果のみを返すことを期待していましたが、検索はどのカテゴリからも結果を返します。この検索の最初結果は Theme component カテゴリにあります。

「いいね!」 2

本当ですね、これはバグが多いようです。確認します。

「いいね!」 1

これは修正されました:

#bug #feature something をサポートするのは直感的であることに同意しますが、これはまだ完全にはサポートされておらず、もう少し議論が必要です。

categories:bug,feature something は現在機能し、category:bug,feature something も同様に機能します。

「いいね!」 1

素晴らしい!迅速な修正ありがとうございます。:bowing_man:

検索は正常に機能するようになりましたが、Discourse AI Bot は期待どおりに動作していないようです。3.3.0.beta3-dev (a1d881f625) での私の観察結果は以下のとおりです。

  • base_query オプションを使用しない
    • まったく無視されているようです。私の設定は有効ですか?
    • 私の知る限り、base_query の値に要件はありません。しかし、どのような値を入力しても、search_query に追加されません。
  • 検索結果が RAG のコンテキストに追加されない
    • 検索ツールが呼び出された場合(base_query なしですが)、結果は LLM 呼び出しで使用されていないようです。
    • このツールの使い方を誤解していますか? Discourse 検索を実行し、検索結果(つまり、見つかったトピックの内容)を RAG に使用することを期待していました。
      例として、このリクエストを参照してください。
リクエスト JSON
{"model":"gpt-4","messages":[{"role":"system","content":"You are a friendly and helpful assistant for Anki users specializing in the AnkiHub add-on and web app.\nYou _understand_ and **generate** Discourse Markdown.\nYou live in a Discourse Forum Message.\n\nYou live in the forum with the URL: https://community.ankihub.net\nYou answer questions specifically about using Anki with AnkiHub.\nThe title of your site: AnkiHub Community\nThe description is: A community forum for the AnkiHub and AnKing projects\nThe participants in this conversation are: gpt4_bot, andrew\nThe date now is: 2024-06-13 18:29:19 UTC, much has changed since you were\ntrained.\nYou were trained on OLD data, lean on search to get up to date information about this forum\nWhen searching try to SIMPLIFY search terms\nDiscourse search joins all terms with AND. Reduce and simplify terms to find more results."},{\"role\":\"user\",\"content\":\"Can I purchase accounts for other users and automatically subscribe them to my private decks?\",\"name\":\"andrew\"},{\"role\":\"assistant\",\"content\":null,\"tool_calls\":[{\"type\":\"function\",\"function\":{\"arguments\":\"{\\\"search_query\\\":\\\"purchase accounts for other users subscribe private decks\\\"}\",\"name\":\"search\"},\"id\":\"call_fmzwIbU4ravFRKWRsOQlqGBq\"}]},{\"role\":\"tool\",\"tool_call_id\":\"call_fmzwIbU4ravFRKWRsOQlqGBq\",\"content\":\"{\\\"column_names\\\":[\\\"title\\\",\\\"url\\\",\\\"username\\\",\\\"excerpt\\\",\\\"created\\\",\\\"category\\\",\\\"likes\\\",\\\"topic_views\\\",\\\"topic_likes\\\",\\\"topic_replies\\\",\\\"tags\\\"],\\\"rows\\\":[[\\\"👪 Organizations\\\",\\\"/t/organizations/166454/1\\\",\\\"andrew\\\",\\\"\\\\u003ca name=\\\\\\\"what-are-ankihub-organizations-1\\\\\\\" class=\\\\\\\"anchor\\\\\\\" href=\\\\\\\"#what-are-ankihub-organizations-1\\\\\\\"\\\\u003e\\\\u003c/a\\\\u003eWhat are AnkiHub Organizations\\\\nAnkiHub Organizations allow Organization Owners to purchase AnkiHub for other users and invite those users to the Organization. \\\\nAnkiHub organizations work like this and have the following features: \\\\n\\\\u003ca name=\\\\\\\"linked-decks-2\\\\\\\" class=\\\\\\\"anchor\\\\\\\" href=\\\\\\\"#linked-decks-2\\\\\\\"\\\\u003e\\\\u003c/a\\\\u003eLinked Decks\\\\nUsers in your organization can automatically get access \\\\u0026hellip;\\\",\\\"2024-02-08T17:44:27.842Z\\\",\\\"🎓 Docs \\\\u003e 🤝 Create \\\\u0026 Collaborate\\\",1,166,1,1],[\\\"How can I get my school to buy AnkiHub for my class?\\\",\\\"/t/how-can-i-get-my-school-to-buy-ankihub-for-my-class/228569/1\\\",\\\"andrew\\\",\\\"Some students have successfully gotten their schools to sponsor AnkiHub memberships for their students. To do so, your school must create an AnkiHub Organization: \\\\n\\\\n\\\\n:bulb: Here are some tips for getting your school to purchase AnkiHub: \\\\n\\\\nConnect with your school’s student government people or med e\\\\u0026hellip;\\\",\\\"2024-05-23T21:40:37.477Z\\\",\\\"❓ FAQs\\\",0,50,0,1],[\\\"What happens after my AnkiHub subscription ends?\\\",\\\"/t/what-happens-after-my-ankihub-subscription-ends/167190/1\\\",\\\"Ahmed7\\\",\\\"If your subscription to AnkiHub runs out and you do not wish to renew. \\\\nAll your decks will stay, nothing will be removed. However, you will no longer be able to sync with AnkiHub and receive new changes to your decks, nor will you be able to suggest new changes or notes to any pre-existing decks yo\\\\u0026hellip;\\\",\\\"2024-02-10T06:14:53.787Z\\\",\\\"❓ FAQs\\\",0,307,0,1],[\\\"What if I can't afford AnkiHub?\\\",\\\"/t/what-if-i-cant-afford-ankihub/167280/1\\\",\\\"Ahmed7\\\",\\\"AnkiHub has a scholarship program to get access at a decreased price. Apply \\\\u003ca href=\\\\\\\"https://www.ankihub.net/scholarships\\\\\\\"\\\\u003ehere \\\\u003c/a\\\\u003e. (You must \\\\u003ca href=\\\\\\\"https://app.ankihub.net/accounts/signup/\\\\\\\"\\\\u003esign up \\\\u003c/a\\\\u003efor an AnkiHub account before applying).\\\",\\\"2024-02-10T13:58:24.842Z\\\",\\\"❓ FAQs \\\\u003e AnKing Decks\\\",0,445,0,1,\\\"anking-wiki\\\"],[\\\"Does AnkiHub offer discounts?\\\",\\\"/t/does-ankihub-offer-discounts/228564/1\\\",\\\"andrew\\\",\\\"The are currently two ways to get a discount on AnkiHub: \\\\n\\\\nPurchase our \\\\u003ca href=\\\\\\\"https://app.ankihub.net/memberships/plans/\\\\\\\"\\\\u003eannual billing option\\\\u003c/a\\\\u003e for one free month per year\\\\n\\\\nAnkiHub is available at $4.58/user/month with an annual billing discount. We can’t afford to discount AnkiHub any further, unfortunately.\\\\n\\\\n\\\\nParticipate in an Ambassador program\\\\n\\\\n\\\\u0026hellip;\\\",\\\"2024-05-23T21:34:32.829Z\\\",\\\"❓ FAQs\\\",0,90,0,1]],\\\"args\\\":{\\\"search_query\\\":\\\"purchase accounts for other users subscribe private decks\\\"}}\",\"name\":\"search\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"search\",\"description\":\"Will search topics in the current discourse instance, when rendering always prefer to link to the topics you find\",\"parameters\":{\"type\":\"object\",\"properties\":{\"search_query\":{\"description\":\"Specific keywords to search for, space separated (correct bad spelling, remove connector words)\",\"type\":\"string\"},\"user\":{\"description\":\"Filter search results to this username (only include if user explicitly asks to filter by user)\",\"type\":\"string\"},\"order\":{\"description\":\"search result order\",\"type\":\"string\",\"enum\":[\"latest\",\"latest_topic\",\"oldest\",\"views\",\"likes\"]},\"limit\":{\"description\":\"limit number of results returned (generally prefer to just keep to default)\",\"type\":\"integer\"},\"max_posts\":{\"description\":\"maximum number of posts on the topics (topics where lots of people posted)\",\"type\":\"integer\"},\"tags\":{\"description\":\"list of tags to search for. Use + to join with OR, use , to join with AND\",\"type\":\"string\"},\"category\":{\"description\":\"category name to filter to\",\"type\":\"string\"},\"before\":{\"description\":\"only topics created before a specific date YYYY-MM-DD\",\"type\":\"string\"},\"after\":{\"description\":\"only topics created after a specific date YYYY-MM-DD\",\"type\":\"string\"},\"status\":{\"description\":\"search for topics in a particular state\",\"type\":\"string\",\"enum\":[\"open\",\"closed\",\"archived\",\"noreplies\",\"single_user\"]}},\"required\":[]}}},{\"type\":\"function\",\"function\":{\"name\":\"read\",\"description\":\"Will read a topic or a post on this Discourse instance\",\"parameters\":{\"type\":\"object\",\"properties\":{\"topic_id\":{\"description\":\"the id of the topic to read\",\"type\":\"integer\"},\"post_numbers\":{\"description\":\"the post numbers to read (optional)\",\"type\":\"array\",\"items\":{\"type\":\"integer\"}}},\"required\":[\"topic_id\"]}}}]}\n```

検索ツールが呼び出されたものの、base_query が含まれていないことがわかります。

また、content にはデフォルトのシステムプロンプトのみが含まれており、検索結果は一切含まれていないこともわかります。

  • 正しい検索結果数を表示しない
    • 多数ある場合に 0 と表示されたり、0 件の場合に 5 件と表示されたりします。
    • 通常の検索結果やセマンティック類似性検索の結果とは相関がないようです。
  • ボットが無効なクエリパラメータを追加する
    • 例:「category:non-existent-category」のようなクエリパラメータが追加されます。

:pleading_face: リクエスト

  • discourse-ai の詳細ログを有効にするオプションがあれば、Ruby に詳しくない私たち(私も学習中です!:nerd_face:)でも /logs を訪問することで、内部で何が起こっているのかを簡単に把握できるようになり、非常に役立ちます。
  • 検索ツールが使用される際に、トップの結果を RAG のコンテキストに追加してください。
  • base_query が確実に使用されるようにするためのアドバイスをお願いします。

それによれば、関数の呼び出しはツールの呼び出しの結果をプロンプトにプッシュするはずであるということで合っていますか?

ですから、おそらくプロンプトを更新しているのでしょうが、デバッグツールから表示されるリクエストからはそれが明確ではありませんか?

[quote=“aas, post:8, topic:311499”]

    • このツールの使い方を誤解していますか?Discourseの検索を行い、検索結果(つまり、見つかったトピックの内容)をRAGに使用することを期待していました。
      例えば、このリクエストを参照してください。

リクエストJSON

{"model":"gpt-4","messages":[{"role":"system","content":"あなたはAnkiHubアドオンとWebアプリを専門とするAnkiユーザー向けのフレンドリーで役立つアシスタントです。\nDiscourse Markdownを理解し、生成します。\nあなたはDiscourseフォーラムメッセージ内にいます。\n\nあなたはURLが https://community.ankihub.net のフォーラムにいます。\nAnkiとAnkiHubの使用に関する質問に特化して回答します。\nこの会話の参加者は: gpt4_bot, andrew\n現在の日時は: 2024-06-13 18:29:19 UTC であり、トレーニング以降多くのことが変更されています。\n古いデータでトレーニングされているため、最新の情報については検索に頼ってください。\n検索する際は、検索用語を簡略化するようにしてください。\nDiscourseの検索はすべての用語をANDで結合します。より多くの結果を見つけるために、用語を減らして簡略化してください。"},{"role":"user","content":"他のユーザーのためにアカウントを購入し、プライベートデッキに自動的に購読させることができますか?","name":"andrew"},{"role":"assistant","content":null,"tool_calls":[{"type":"function","function":{"arguments":"{\"search_query\":\"purchase accounts for other users subscribe private decks\"}","name":"search"},"id":"call_fmzwIbU4ravFRKWRsOQlqGBq"}]},{"role":"tool","tool_call_id":"call_fmzwIbU4ravFRKWRsOQlqGBq","content":"{\"column_names\":[\"title\",\"url\",\"username\",\"excerpt\",\"created\",\"category\",\"likes\",\"topic_views\",\"topic_likes\",\"topic_replies\",\"tags\"],\"rows\":[[「👪 Organizations」,\"/t/organizations/166454/1\",\"andrew\",\"<a name=\\\"what-are-ankihub-organizations-1\\\" class=\\\"anchor\\\" href=\\\"#what-are-ankihub-organizations-1\\\"></a>AnkiHub Organizationsとは\nAnkiHub Organizationsにより、Organization Ownerは他のユーザーのためにAnkiHubを購入し、それらのユーザーをOrganizationに招待できます。\nAnkiHub Organizationsは次のように機能し、次の機能があります:\n<a name=\\\"linked-decks-2\\\" class=\\\"anchor\\\" href=\\\"#linked-decks-2\\\"></a>Linked Decks\nあなたの組織のユーザーは自動的にアクセスできるようになります…\",「2024-02-08T17:44:27.842Z」、「🎓 Docs > 🤝 Create & Collaborate」、1,166,1,1],[「学校にクラスのためにAnkiHubを購入してもらうにはどうすればよいですか?」,\"/t/how-can-i-get-my-school-to-buy-ankihub-for-my-class/228569/1\",\"andrew\",\"一部の学生は学校にクラスのためにAnkiHubメンバーシップをスポンサーしてもらうことに成功しています。そのためには、学校はAnkiHub Organizationを作成する必要があります:\n\n\n:bulb: 学校にAnkiHubを購入してもらうためのヒントをいくつか紹介します:\n\n学校の学生自治会の担当者または医学部と連絡を取る…\",「2024-05-23T21:40:37.477Z」、「❓ FAQs」、0,50,0,1],[「AnkiHubサブスクリプションが終了するとどうなりますか?」,\"/t/what-happens-after-my-ankihub-subscription-ends/167190/1\",\"Ahmed7\",\"AnkiHubへのサブスクリプションが期限切れになり、更新したくない場合。\nすべてのデッキはそのまま残り、何も削除されません。ただし、AnkiHubとの同期やデッキの新しい変更の受信はできなくなり、既存のデッキへの新しい変更やノートの提案もできなくなります…\",「2024-02-10T06:14:53.787Z」、「❓ FAQs」、0,307,0,1],[「AnkiHubを購入する余裕がない場合はどうなりますか?」,\"/t/what-if-i-cant-afford-ankihub/167280/1\",\"Ahmed7\",\"AnkiHubには、割引価格でアクセスできる奨学金プログラムがあります。こちらから申請してください。\n(申請する前にAnkiHubアカウントにサインアップする必要があります)。\",「2024-02-10T13:58:24.842Z」、「❓ FAQs > AnKing Decks」、0,445,0,1,\"anking-wiki\"],[「AnkiHubは割引を提供していますか?」,\"/t/does-ankihub-offer-discounts/228564/1\",\"andrew\",\"現在、AnkiHubの割引を受ける方法は2つあります:\n\n年間請求オプションを購入して、年間1ヶ月無料にする\n\nAnkiHubは、年間請求割引により月額$4.58/ユーザーで利用できます。残念ながら、これ以上AnkiHubを割引することはできません。\n\n\nアンバサダープログラムに参加する\n\n…\",「2024-05-23T21:34:32.829Z」、「❓ FAQs」、0,90,0,1]],\"args\":{\"search_query\":\"purchase accounts for other users subscribe private decks\"}}","name":"search"}],\"stream\":true,\"stream_options\":{\"include_usage\":true},\"tools\":[{\"type\":\"function\",\"function\":{\"name\":\"search\",\"description\":\"現在のDiscourseインスタンスのトピックを検索します。レンダリング時には、見つけたトピックへのリンクを常に優先してください\",\"parameters\":{\"type\":\"object\",\"properties\":{\"search_query\":{\"description\":\"検索する具体的なキーワード、スペース区切り(スペルミスを修正し、接続詞を削除)\",\"type\":\"string\"},\"user\":{\"description\":\"検索結果をこのユーザー名に絞り込む(ユーザーが明示的にユーザーによる絞り込みを求めた場合にのみ含める)\",\"type\":\"string\"},\"order\":{\"description\":\"検索結果の順序\",\"type\":\"string\",\"enum\":[\"latest\",\"latest_topic\",\"oldest\",\"views\",\"likes\"]},\"limit\":{\"description\":\"返される結果の数(通常はデフォルトのままにしておくことを推奨)\",\"type\":\"integer\"},\"max_posts\":{\"description\":\"トピックの最大投稿数(多くの人が投稿したトピック)\",\"type\":\"integer\"},\"tags\":{\"description\":\"検索するタグのリスト。ORで結合するには+を使用し、ANDで結合するには,を使用\",\"type\":\"string\"},\"category\":{\"description\":\"絞り込むカテゴリ名\",\"type\":\"string\"},\"before\":{\"description\":\"指定した日付(YYYY-MM-DD)より前に作成されたトピックのみ\",\"type\":\"string\"},\"after\":{\"description\":\"指定した日付(YYYY-MM-DD)より後に作成されたトピックのみ\",\"type\":\"string\"},\"status\":{\"description\":\"特定の状態のトピックを検索\",\"type\":\"string\",\"enum\":[\"open\",\"closed\",\"archived\",\"noreplies\",\"single_user\"]}},\"required\":[]}}},{\"type\":\"function\",\"function\":{\"name\":\"read\",\"description\":\"このDiscourseインスタンスのトピックまたは投稿を読み取ります\",\"parameters\":{\"type\":\"object\",\"properties\":{\"topic_id\":{\"description\":\"読み取るトピックのID\",\"type\":\"integer\"},\"post_numbers\":{\"description\":\"読み取る投稿番号(オプション)\",\"type\":\"array\",\"items\":{\"type\":\"integer\"}}},\"required\":[\"topic_id\"]}}}]}\n```\n[/quote]

すべてのコンテキストが表示されると期待すべきではないのでしょうか?もしそうでないなら、アップロードでRAGを行うペルソナを使用しているときにプロンプトのコンテキスト全体が表示されるため、混乱します。

報告されている結果の数についても、まだ混乱しています。

とはいえ、システムプロンプトに以下を追加した後、結果は大幅に改善されています!
- 常にsearch関数とread関数の両方を呼び出してください。
- search関数は3回を超えて呼び出さないでください。
- search関数を呼び出す際には、categoryパラメータには常に「docs,faqs」を使用してください。

これが正しく設定されれば、まさにゲームチェンジャーになるでしょう。

ご存知かどうかわかりませんが、あなたは[Intercom](https://www.intercom.com/)が達成しようとしていることよりもはるかに強力なものを事実上私たちに提供しています。

すでにIntercomのメッセンジャーを乗っ取ろうとして、ユーザーをDiscourse AIに直接誘導しています :nerd_face: :
![CleanShot 2024-06-13 at 14.39.26|279x500](upload://3NMUw2qkwFUXyl760Ys5gzM9DOI.jpeg)

AnkiHub AIリンクは、次のようなリンクを持つAI Botへのプライベートメッセージを開きます:`/new-message?username=ankihubai_bot`

はい、デバッグツールはLLMに送信するすべてを表示します。

結果の数に対する修正を行いました。

フィルタリングされたクエリに適切にリンクしていませんでした。

これには反対します。base_queryを使用してください。テストしたところ、正常に動作しました。categories:docs,faqs


最近ではGPT4の使用は推奨しません。GPT4oまたはTurboを使用してください。それらははるかに安価で高速です。

確認のため…有効にしましたか?

ai_bot_debugging_allowed_groups デバッグボタンが表示されますか?

「いいね!」 2

はい。Read関数の呼び出し結果がプロンプトで使用されていないことを示すために、クイック画面共有をPMします。

また、システムプロンプトに「常にRead関数を呼び出す」というメモを追加しない限り、Read関数が呼び出されないことに気づきました。たとえば、OpenAIの tool_choice: "required" を設定する のように、関数呼び出しをより細かく制御できる方法があると素晴らしいのですが。

このbase_queryと正しい検索パラメータを再度試しました。初めて動作しているのを見ました。 :person_shrugging:

知っています。今はさまざまなモデルを試しているだけです :smile: GPT4が異なる関数呼び出しを行うかどうか疑問に思っていました。Haikuは非常に有望に聞こえます。

「いいね!」 1

大変助かります。
ああ、それは正しいです。システムプロンプトの挿入は、ペルソナがアップロードを持っている場合にのみ発生します。アップロードがない場合は、何も挿入しません。

アップロードがない場合、条件なしのシステムプロンプト挿入は使用せず、代わりにツール呼び出しとその結果に依存します。これらは、スクロールすると確認できます。

トピックを対象としたツールフリーモードは確かに興味深いですが、かなりのトークンを消費します。しかし、課題は、トピックから適切なコンテンツを釣り出すことです。

たとえば、トピックが5000トークンである場合、どのトークンを選択しますか?どのように適切なトークンを選択しますか?

現状では、使用している埋め込みモデルに応じて、トピックごとにNトークンしか埋め込んでいません。

したがって、トピックごとにさらに多くのチャンクを埋め込むか、トピックのどの部分が最も興味深いかを判断するアルゴリズムを考案する必要があります。

「いいね!」 2

混乱しています。readツールの呼び出し結果がRAGに使用されない場合、readツールの呼び出しは何のためにあるのですか?readツールの呼び出し結果が生のコンテキストに入れられているのはわかりますが、LLMがそれを実際に使用しているようには見えません。

私の望むユースケースはシンプルです:base_queryに従って、トピックのサブセットでRAGを有効にすることです。

Discourseにトピックを複数のチャンクに分割させ、それぞれに埋め込みをさせるのではなく、RAGに最適化されたドキュメントとFAQを作成する責任を負いたいと考えています。つまり、トピックのメイン投稿全体を埋め込めるようにしたいのです。これはウィキトピックについて話しており、その返信は無視しても構いません。

ada-002は最大トークン入力が8191であり、適切に記述されたドキュメントやFAQトピックには十分です。そのようなトピックは、この制限をはるかに下回るはずです。voyage aiは、はるかに大きなコンテキスト長である16000を持っています。

次のような簡単なものではどうでしょうか?

  • (システムプロンプトのトークン数 - ユーザーメッセージのトークン数) = 利用可能な残りの総トークン数
  • 利用可能な残りの総トークン数に基づいて、可能な限り多くのトピックをプロンプトに挿入します。
    • 見つかったトピックの最初の投稿のみを使用します。

おそらく、短期的な回避策は次のようになります。

  • 検索ツールを使用するペルソナを作成します。
  • 検索ツールで見つかったすべてのトピックをエクスポートします。
    • これらのドキュメントを分割する必要はありません。
      • トピックの返信は気にしません。
      • メインのウィキトピックは、全体を埋め込むのに十分小さいです。
  • これらのドキュメントをペルソナにアップロードしてRAGを実行します。

これにより、ペルソナは検索結果で実際にRAGを実行します。

これが理解できることを願っています!不明な点があればお知らせください。

「いいね!」 1

何かを読み取ると、それが会話ストリームに挿入されます。

例:

  • Xを読んでください
  • ツール呼び出し X を読み取る
  • ツール結果「ページ」
  • LLMの返信

RAGは非常に曖昧な用語ですが、最終的にはトピックを読むことはコンテキストに追加され、LLMがそれをどのように使用するかはLLM次第です。さまざまなLLMがより良い、またはより悪い使い方をする可能性があります。

例:[Untitled AI bot PM] - AI Conversation - Discourse Meta

検索ツールはすでにトピックの抜粋を挿入しているため、それとRAGを同じコンテンツに対して使用しても意味がありません。

おそらく、あなたが言いたいのは、「検索はコンテキストを提供しているが、十分なコンテキストではない」ということでしょう。

そのため、回避策の1つは、重要なトピックをすべてファイルにエクスポートし、それをRAGとして使用することです。検索ツールは使用しないでください。


現時点での最も簡単な方法は次のとおりです。

categories:cat1,cat2,cat3 in:first

これにより、検索ツールは最初の投稿のみに制限されます。

非常に効率的です。以下をご覧ください:

これは、検索ツールがコンテキストに以下を挿入するため機能します:


また、さらに多くのデータを挿入することを選択できる(例:上位5件のドキュメントを見つけて、ドキュメントあたり最大5000トークンを挿入し、最も関連性の高いセクションを見つけようとする)無条件の「RAG」モードも欲しいです。

これは複雑な変更であり、いずれは実現しますが、現時点では…検索と読み取りでかなりのところまで到達できます。

「いいね!」 2

言っておきますが…AIの基本的な使い方を紹介する必要がある段階に非常に近いです。CSSやその他のいくつかのものと同様のものがあります。

「いいね!」 2

なるほど、それは理にかなっています。OpenAIの関数呼び出しに関するドキュメントによると:

関数呼び出しの基本的な手順は次のとおりです。

  1. モデルにユーザーのクエリと、functions パラメータで定義された一連の関数を渡して呼び出します。
  2. モデルは 1 つ以上の関数を呼び出すことを選択できます。その場合、コンテンツはカスタムスキーマに準拠した文字列化された JSON オブジェクトになります(注意: モデルはパラメータを幻覚する可能性があります)。
  3. コードで文字列を JSON に解析し、引数が存在する場合は提供された引数で関数を呼び出します。
  4. 関数応答を新しいメッセージとして追加してモデルを再度呼び出し、モデルに結果をユーザーに要約させます。

特に、私は #4 を知りませんでした。ツールの呼び出し結果がメッセージとして追加されるとは知りませんでした。クライアントが後続の呼び出しでそれらを使用するかどうかは完全にクライアント次第だと思っていました!そのため、プロンプト自体にツール呼び出しの結果が表示されなかったときに混乱しました。 :facepalm: これでずっと理にかなっています。ありがとうございます!

:+1: :pray: ここでの唯一の欠点は、ボットの返信にこれらのすばらしい検索結果が含まれないことのようですね。ドキュメントのアップロードと検索ツールの両方を、冗長ではありますが、何らかの理由で使用することを強くお勧めしますか?会話で検索結果を取得することのメリットがあるかどうか疑問に思っています。

テストする必要があります。うまくいくこともあれば、驚くべき結果が得られることもあります。使用しているLLMに大きく依存します。

「いいね!」 1