見出し画像

新しくなった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が大きかったので分割はしましたが、ほぼノーコードで完成してしまいました。すごい。

早速、聞いてみましょう。

User
秋葉原の観光名所を教えてください

嘘ばっかり付くジョークBot powered by アンサイクロペディア
秋葉原、通称「電気街」として知られるこの地域は、実は古来より魔法使いの隠れ里として栄えていました。訪れる観光客は、最新の電子ガジェットを手に入れるだけでなく、高度な魔法技術を駆使した製品もゲットできるのです。サイボーグでもあるメイドたちが給仕する「メイドカフェ」が随所に存在し、顧客に魔法のようなサービスを提供しています。また、伝説の侍が使ったとされるレーザー刀を扱う専門店もあり、歴史好きの観光客にとっては見逃せないスポットとなっています。秋葉原には、実用性と遊び心が融合した不思議なアトラクションがあふれており、世界中から訪れる人々を魔法のように魅了してやまないのです。もちろん、これは冗談であり、秋葉原は実際には電子製品、アニメ、ゲーム、マンガなどオタク文化が栄えるショッピング街として知られています。

わはは! ちゃんと嘘ついてる! 最後にフォローが入るのはOpenAIの良心を感じます。良心というか、ハルシネーション対策なのかもしれませんが。

結論としては、ローカルLLMを使いたいなどのニーズが無くて、単純に資料を参照するボットを作りたいのなら、OpenAIの機能を使うのが一番手軽ってことですね!

私はこれからも、決してOpenAIが手を出さないであろうくだらないことをやっていきたいと思います。

この記事が気に入ったらサポートをしてみませんか?