新しくなったAssistant APIを使って「嘘ばっかり答えるチャットボットをわざわざベクトル検索を使って実装する」を手軽に実装する
RAGを用いてアンサイクロペディアの記事を参照することで、嘘ばっかり答えるチャットボットを実装するという記事を書きました。noteに公開したのは11月6日。実はちょっと、自信がある記事でした。
と思ったら、11月7日に、OpenAIがAssistant APIという形で、簡単にRAGを用いたチャットボットを作る機能を公開しました。コードさえ書くことなく、PlaygroundでRetrievalというスイッチをONにするだけで利用できます。1日にして、自分の書いた記事が古くなってしまいました。世界、恐ろしい(ローカルLLMのcalm2を使っているので、その点でユニークさはあると思うのですが)
とりあえずは試さなくては。というわけでやってみました。
アンサイクロペディアをパースしたJSONを分割
とりあえず、私の記事にアップロードしたアンサイクロペディアのデータをJSON化したデータを加工します。上記の記事中にアップロードしてあります。
OpenAIにアップロードするには、1データの上限があるので、10分割することにします。
idキーと、ベクトルデータvectorキーは削除
10分割する
その操作のPythonのスクリプトです
import json
# 入力されたjsonファイルを読み込む
with open('Uncyclopedia-ja-with-vectors-CCBYNCSA30.json', 'r', encoding="utf-8") as f:
data = json.load(f)
# jsonの要素数を取得
length = len(data)
# idキーとvectorキーを削除
for i in range(length):
del data[i]['id']
del data[i]['vector']
# 与えられたjsonファイルを10分割して連番を付けて保存する。10番目は余りを含む
for i in range(10):
if i == 9:
with open('output_' + str(i) + '.json', 'w', encoding="utf-8") as f:
json.dump(data[int(length / 10 * i):], f, ensure_ascii=False, indent=4)
else:
with open('output_' + str(i) + '.json', 'w', encoding="utf-8") as f:
json.dump(data[int(length / 10 * i):int(length / 10 * (i + 1))], f, ensure_ascii=False, indent=4)
これを、アップロードします。アップロードするのは以下のPlaygroundの左側カラム下にある「Files」です。10個まとめてアップロードできます。
RetrievalをONにしておきます。
Playgroundでチャットボットを作る
そして、名前とインストラクションを書きます。嘘をつくということは明示しておいた方がいいので、以下のようにしました。
Name: 嘘ばっかり付くジョークBot powered by アンサイクロペディア
Instruction: 貴方はなにを質問されても嘘を答えるジョークBotです。嘘の材料として、アップロードした資料を活用してください。アップロードした資料はアンサイクロペディアから抽出した、皮肉の効いた嘘の文章です。できるだけ堂々と、まるで真実かのように回答してください
Modelは最新のgpt-4-1106-previewを選択します。せっかくだから新しいの使いたいですし(笑)
これで終了です。JSONが大きかったので分割はしましたが、ほぼノーコードで完成してしまいました。すごい。
早速、聞いてみましょう。
わはは! ちゃんと嘘ついてる! 最後にフォローが入るのはOpenAIの良心を感じます。良心というか、ハルシネーション対策なのかもしれませんが。
結論としては、ローカルLLMを使いたいなどのニーズが無くて、単純に資料を参照するボットを作りたいのなら、OpenAIの機能を使うのが一番手軽ってことですね!
私はこれからも、決してOpenAIが手を出さないであろうくだらないことをやっていきたいと思います。
この記事が気に入ったらサポートをしてみませんか?