- AI技術
- クラウド技術
ChatGPTにトークン数上限を超える内容を送付する方法
- #AI
課題
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
一度にChatGPTに送れる文字数は上限があるようです。
でも、どうしてもその上限を超える内容を送りたい場合がありますよね。
例えば、自分が書いた論文とか、機能がそこそこ複雑なプログラムとか。。。
ChatGPTに解決してもらえないか
下記の案1.分割送信がよさそうですね。
試作してみよう
でも、やっぱりChatGPTに何分割されたか、今送っているのは何個目かを伝えないと不安なので、教えてもらえるように指示しました。
ちょっとバグがありますね。単純に分割情報をpartに足すと、partの長さがmaxLengthを超えている状態です。
良さそうなソースを帰って来なかったので、割愛します…。
ChatGPTを助けてあげましょう。
検証してみよう
キレイなソースと言えないですが、一旦実行してみましょう。
できました!
ソースコードを添付します。
※少しだけ人間の私が修正しています。(笑)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import java.util.ArrayList; import java.util.List; public class TextSplitterResult { private List<String> parts; private int totalParts; private int currentPartIndex; public TextSplitterResult() { parts = new ArrayList<>(); totalParts = 0; currentPartIndex = 0; } public void addPart(String part, int currentPartIndex, int totalParts) { parts.add("Part " + currentPartIndex + " (" + currentPartIndex + "/" + totalParts + "):" + part); this.currentPartIndex = currentPartIndex; this.totalParts = totalParts; } public List<String> getParts() { return parts; } public int getTotalParts() { return totalParts; } public static TextSplitterResult splitText(String text, int maxLength) { TextSplitterResult result = new TextSplitterResult(); // Part xxx:部分の長さを考慮 int partInfoLength = 20; maxLength -= partInfoLength; int length = text.length(); int totalParts = (int) Math.ceil((double) length / maxLength); int startIndex = 0; int partIndex = 1; while (startIndex < length) { int endIndex = Math.min(startIndex + maxLength, length); String part = text.substring(startIndex, endIndex); result.addPart(part, partIndex, totalParts); startIndex = endIndex; partIndex++; } return result; } public static void main(String[] args) { // 1000文字 String longText = "0234567890123456789022345678903234567890423456789052345678906234567890723456789082345678909234567890023456789012345678902234567890323456789042345678905234567890623456789072345678908234567890923456789002345678901234567890223456789032345678904234567890523456789062345678907234567890823456789092345678900234567890123456789022345678903234567890423456789052345678906234567890723456789082345678909234567890023456789012345678902234567890323456789042345678905234567890623456789072345678908234567890923456789002345678901234567890223456789032345678904234567890523456789062345678907234567890823456789092345678900234567890123456789022345678903234567890423456789052345678906234567890723456789082345678909234567890023456789012345678902234567890323456789042345678905234567890623456789072345678908234567890923456789002345678901234567890223456789032345678904234567890523456789062345678907234567890823456789092345678900234567890123456789022345678903234567890423456789052345678906234567890723456789082345678909234567890"; int maxLength = 500; TextSplitterResult result = splitText(longText, maxLength); System.out.println("分割されたテキストの個数: " + result.getTotalParts()); for (String part : result.getParts()) { System.out.println(part); } } } |
以上、参考になればうれしいです( ^ ^ )
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>