Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
2RiniaR opened this issue Aug 18, 2023 · 6 comments
Labels
bot enhancement New feature or request

Comments

@2RiniaR
Copy link
Sponsor Contributor

2RiniaR commented Aug 18, 2023

振る舞い

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

動機

  • ソースコードや手順書など、2000字を超える回答が欲しい場合があるため。
  • 他環境にこのような仕様のbotが存在し、便利だったため。
@m1sk9 m1sk9 added the enhancement New feature or request label Aug 18, 2023
@m1sk9
Copy link
Contributor

m1sk9 commented Aug 19, 2023

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

static SYSTEM_CONTEXT: &str = "回答時は以下のルールに従うこと.\n- 2000文字以内に収めること。\n- なるべく簡潔に言うこと。\n- 一般的に知られている単語は説明しない。";

@m1sk9
Copy link
Contributor

m1sk9 commented Aug 19, 2023

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

@2RiniaR
Copy link
Sponsor Contributor Author

2RiniaR commented Aug 19, 2023

検証内容および結果

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
Copy link
Member

Colk-tech commented Aug 19, 2023

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

@2RiniaR
Copy link
Sponsor Contributor Author

2RiniaR commented Aug 20, 2023

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

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

  • 「1000000字程度の物語を書いてください」のように長文を回答させる旨のプロンプトを送信した場合、延々とメッセージが送信され続けてしまう。

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

@m1sk9 m1sk9 changed the title Feature: レスポンスの文字数制限なしで、続きを手動で出力させるモード レスポンスの文字数制限なしで、続きを手動で出力させるモード Sep 9, 2023
@m1sk9
Copy link
Contributor

m1sk9 commented Sep 16, 2023

検証内容および結果

max_tokensオプションによる制限

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

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

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

@m1sk9 m1sk9 added the bot label Dec 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bot enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants