approvers / ichiyoAI

ChatGPT / Gemini / DALL-E が利用できる Discord Bot
http://ichiyoai.approvers.dev/
MIT License
6 stars 2 forks source link

レスポンスの文字数制限なしで、続きを手動で出力させるモード #69

Open 2RiniaR opened 1 year ago

2RiniaR commented 1 year ago

振る舞い

@ichiyoAI -p 限界LTというLT会を開催するための具体的な準備をリストアップしてください。 などのメッセージに対して、そのレスポンスが2000字を超えたとき、2000文字目までのレスポンスのみを送信するようにする。-p はオプションの例である。 また、このレスポンスに対して「続きをお願いします」などのメッセージが送られたとき、その続きを2000字まで表示する。

動機

m1sk9 commented 1 year ago

ChatGPT への SYSTEM_CONTEXT (指示) に 2000文字を超えた場合は一度そこで生成を止めて、続きからと言われたら続けること みたいなルールを記述すればそのようなオプションを用意せずとも出来そう.

https://github.com/approvers/ichiyoAI/blob/8821b5cdc89291287c2fab5035daf2fbe3bca9eb/src/client/openai.rs#L14

m1sk9 commented 1 year ago

v1.7.0 からはチャットモードも history に対応しているので

2RiniaR commented 1 year ago

検証内容および結果

max_tokensオプションによる制限

現在使用しているchatgpt crateには、max_tokensオプションが実装されていない(参考: https://github.com/Maxuss/chatgpt_rs/issues/59

また、max_tokensオプションによる振る舞いは未検証のため、不明

システムコンテキストによる制御

GPT-3.5に以下のシステムコンテキストを与え、質問を行った。

User:
回答時は以下のルールに従うこと.
- 回答が400字を超える場合は「...」 と末尾に付け、一度「続きから」と言われたら続く内容を示す
- 一般的に知られている単語は説明しない
Assistant:
了解しました。指示通りに回答いたしますので、質問をどうぞお聞きしてください。
User:
C言語の歴史について1000字以上で説明してください

しかし、期待する結果は得られなかった。具体的には、900字程度の回答があり、文字数に関する指令を無視する形となった。

Colk-tech commented 1 year ago

先の検証結果 に基づいて、ChatGPT が文字数制限を理解できないことを前提とします。 2,000 文字に到達する直前の区切り文字でメッセージを分割して、遅延して後のメッセージを送信する形ではどうでしょうか。 これならばサーバーがデータベースを保持する必要はありませんし、目的も達成できます。 しかしながら、Discord の 2,000 文字基準を Rust でうまく表現できるかは不明です。

2RiniaR commented 1 year ago

先の検証結果 に基づいて、ChatGPT が文字数制限を理解できないことを前提とします。 2,000 文字に到達する直前の区切り文字でメッセージを分割して、遅延して後のメッセージを送信する形ではどうでしょうか。 これならばサーバーがデータベースを保持する必要はありませんし、目的も達成できます。 しかしながら、Discord の 2,000 文字基準を Rust でうまく表現できるかは不明です。

ご意見ありがとうございます。 しかし、その方法は以下のようなケースにおいてサービスの欠陥となりうるため、避けたいと思っています。

そのため、続きを送信する手段には必ず手動による操作が必要となるようにしたいです。

m1sk9 commented 1 year ago

検証内容および結果

max_tokensオプションによる制限

現在使用しているchatgpt crateには、max_tokensオプションが実装されていない(参考: https://github.com/Maxuss/chatgpt_rs/issues/59)

また、max_tokensオプションによる振る舞いは未検証のため、不明 @2RiniaR

max_tokens については既に実装されていて, Option<u32> を受け入れるように私がプルリクエストを出したのでそれなりに使えるはずです. ( https://github.com/Maxuss/chatgpt_rs/pull/66 )