生成系AIでの開発ってこういうこと?

考えたこと
考えたこと

今、流行?のブロードリスニングをやってみようと Talk to the Cityってのを触っていて、あーなるほど生成系AI時代のシステム開発ってこんなイメージなんかというのがなんとなくわかってき多様な気がするという話。T3Cはきっかけってだけなので、ここでは特に触れない。

(ここは後で書きました:書いた文章を後から読み直すと、なんとなくT3Cを馬鹿にしたようなイメージを持たれるかもだけどそんなことは全然ない。「考え方の違い」がメインテーマ。ところ変わればやり方も変わる。はじめて接するときは、相手がどれだけプロトコルに則ってたとしても、とても奇妙に見えるものだ。そういうことを言っている。)

で、T3Cのサンプルを動かした後、手持ちのデータを食わせてみたりなんだりしていると、まぁ微妙に変なことになる。で、ロジックを追おうとしても大したことは書いてない。テンプレートになっているプロンプト+データみたいなのをChatGPTに投げているだけ。

そもそも、手持ちのデータをJSONに変換。変換したJSONをプロンプトと一緒に投げる。ChatGPTがJSONデータを返してきてくれる。素晴らしい!みたいな感じ。え、それってうまくいってるのは、たまたまじゃない?みたいな感じ。

例)プロンプトでお願いしとる…
Please return the same list, in the same order, but translated to {language}.
Make sure to return a valid JSON list of string of the same length as the original list.

例)そうね、JSONはMarkdownで返ってくるからテキスト処理しないとね
response = llm(messages=messages(lang_prompt, input)).content.strip()
if ““`” in response:
response = response.split(““`”)[1]
if response.startswith(“json”):
response = response[4:]

なんというか、なんというか。ちなみに、T3CのサンプルでChatGPTのバージョンがGPT-3.5 Turboを使ってるのは、4系だと単純にJSONだけ返してくれなくて、この行き当たりばったりな(ヒューリスティックな)処理が失敗するかららっぽい。

まぁ、これを解決する方法はあって、ChatGPTのresponse_formatをしっかりと使って、JSONで回答を返すこと、指定したスキーマで返すことを明示してやると解決するっぽい。たぶん、もう少ししたらT3Cの方でも対応しそうな気がするけどね。(っと思ったけど、このプロジェクト、もう8ヶ月くらい更新がないっぽい。これは大丈夫なのか…。)

あとは、どうしても失敗することがある。例えば、配列を投げて、変換してほしい場合。まぁChatGPTとかだと結果として、件数がいつの間にか変わってたりするよねみたいな。そうですね、そういうことありますよね。

じゃぁどうするかというと、こんな感じ。

    try:
parsed = [a.strip() for a in json.loads(response)]
if len(parsed) != len(batch):
print("Warning: batch size mismatch!")
print("Batch len:", len(batch))
print("Response len:", len(parsed))
for i, item in enumerate(batch):
print(f"Batch item {i}:", item)
if (i < len(parsed)):
print("Response:", parsed[i])
if (len(batch) > 1):
print("Retrying with smaller batches...")
mid = len(batch) // 2
return translate_batch(batch[:mid], lang_prompt, model, retries - 1) + \
translate_batch(
batch[mid:], lang_prompt, model, retries - 1)
else:
print("Retrying batch...")
return translate_batch(batch, lang_prompt, model, retries - 1)
else:
return parsed

要するに、5件のデータがあったとして、まずは5件を配列にして処理を投げる。返ってきたJSON配列の数を数えて、投げた件数と返ってきた件数が一致してればOK。違ったらNGと判定して、配列を半分にしてもう一回投げて、また件数をチェック。そうすると最後には1件になるので、まぁ大丈夫でしょう。みたいな感じ。うーん、ひゅーりすてぃっく。

っていうか、T3Cを眺めていると、いままで考えていた「生成系AIでシステム開発!」みたいいなもののイメージが大分変った気がするな。ほんと、そもそも根本から考え方が違う。こうなってくると、JSONのスキーマの設定と失敗時のリカバー策みたいなところが注力ポイントなのか、今後の生成系AIの発展で、なんかうまくできるようになるのか。

そういえば、むかしWSDLとかあったなぁ。SOAPとか。あの流れって割といい線いってたんだなぁみたいなことをしみじみと思ってしまう。

ところで、世の中の生成系AIを組み込みました!みたいなシステムって、裏側はほんとにこんなことやてるんだろうか。結構謎な感じある。いや、泥臭そうだなとは思ってるんだけどね。デザインパターンみたいなもの、いつか誰かがまとめるんだろうから、そこに期待。

これ以外で面白かったのは、多言語翻訳。これも翻訳したい端午や文章の一覧を配列にしてJSONで投げる、その結果を受けるみたいな感じ。まったくもってダイナミック!ただ、これなら多言語対応し放題ではあるんだろうな。ほんとに通じるかどうかは保証ないけど。

タイトルとURLをコピーしました