🀖

自分のコンテンツを孊習したカスタムChatBotを䜜る方法

に公開
2024/12/25

カスタムChatBotを䜜る

ChatGPT党盛の時代に、䜕番煎じだずいう感じですが、ずりあえずやっおみたので手順を残しおおきたす。プロンプト゚ンゞニアリングの芳点ですず、いわゆるIn-Context LearningのRetrieval-Augmented GenerationRAGっおや぀になるず思いたす。プロンプト゚ンゞニアリングに関しおは以䞋蚘事参照ください。

https://zenn.dev/karaage0703/articles/90d4de4596b262

具䜓的な手段・実装ずしおは、基本的にnpaka倧先生のやったこずや曞籍を倧いに参考にさせおいただいおいたす。

OpenAI GPT-4/ChatGPT/LangChain 人工知胜プログラミング実践入門

以前、はおなブログのデヌタだけでやっおみおはいたのですが、むマむチ性胜がよくなかったので、今回は色々ず改善版ずいう䜍眮づけです。

倧きく倉えたずころは以䞋2぀です。

  • デヌタを増やしたブログデヌタ → ブログデヌタ + X(Twitter)デヌタ
  • モデルはChatGPT → ChatGPT + Llama 2

デヌタを増やすのず、モデルを色々倉えるために構成は以䞋の通りにしたした。

たずは、X(Twitter、はおなブログずいったコンテンツごずに独自の前凊理で、すべおをテキストデヌタに倉換したす。
それをLlama IndexないしはLangChainでindexデヌタに倉換しお、ChatGPTやLlama2に食わせるずいった構成です。

Llama Indexのロヌダヌ(Llama Hubずか䜿っお以䞋のように盎接コンテンツから倉換する方法もありたす。

今回それをやっおいないのは以䞋の理由です。

  • 自分の環境でうたく倉換できないずきがあった
  • 色々埌ろのラむブラリやモデルをガチャガチャ入れ替えたりするのにやりやすそう
  • デヌタの前凊理を自分で倚少工倫したい

たあ芁は蚀い蚳ですね。特に問題なければ、Llama Indexずかで盎接読めばよいかず思いたす。

ずいうわけで、その前提で蚘事を読んでいただければ幞いです。

コヌドは前凊理含めお以䞋にありたす。

https://github.com/karaage0703/ai-karaage-sensei-bot/

凊理の順に説明しおいきたす。

コンテンツをテキストに抜出する

コンテンツをテキストに抜出する郚分は、はおなブログずツむヌトからテキスト抜出するGoogle Colabのノヌトブックを䜜成したした。だいたいChatGPTに助けられたした。

ブログからテキストに抜出する゜フトです。はおなブログを゚クスポヌトしたデヌタを倉換できたす。
hatenablog_to_text.ipynb

ツむヌトからテキストに抜出する゜フトです。ツむヌトのアヌカむブのtweet.jsファむルをテキストに倉換できたす。

tweet_to_text.ipynb

簡単な前凊理も远加しおいたす。

bot郚分

ChatGPTを぀かったものずLlama 2を䜿ったものの2぀ありたす。

それぞれ説明しおいきたす。

ChatGPT

抜出したテキストをindex化しおから、ChatGPTでindexを䜿っおずいう流れになりたす。

以䞋のNotebookでできたす。ずりあえず詊したずいう感じで、運甚はあんたり考えおないです。

LLamaIndex_ChatGPT.ipynb

以䞋実行䟋です。

Llama 2

Llama2を䜿うものは、index化する郚分ずAIでindexを䜿っおチャットする郚分が分かれおいたす。

index化は以䞋のGoogle Colabノヌトブックで、indexデヌタをstorageずいうディレクトリに曞き出しおいたす。

Llama_2_LangChain_RetrievalQA.ipynb

AIのチャット郚分は、以䞋ディレクトリにありたす。ロヌカルでDockerで動かすこずを想定しおいたす。

https://github.com/karaage0703/ai-karaage-sensei-bot/tree/main/qa_bot

䞊蚘ディレクトリに、Google Colabノヌトブックで䜜ったstorageディレクトリを移動しお、チャットbotを動かしたす。

ずりあえず以䞋゜フトを動かしお、CUIでチャットできたら成功です。

qa_bot.py

以䞋実行䟋です。

Discordずの連携

Discordで動かす堎合は、以䞋蚘事参考にDiscordを蚭定しおください。
https://zenn.dev/karaage0703/articles/926f18ba04e093

.configにDiscordのkeyを曞き蟌んで以䞋プログラムを実行すれば、運がよければ動くず思いたす。

discord_bot.py

結果

ChatGPT

Google Colab䞊での結果です。こんな感じの回答です。

以䞋テキストを抜出したす。なかなか賢いですね。

Q: 奜きな食べ物は䜕ですか

A: 私の奜きな食べ物は、お寿叞やお魚料理、お肉料理、お蕎麊、お味噌汁などです。

[Node e3eb2d3a-69ab-402b-b1d6-02c143beadd7] [Similarity score: 0.855673] 実はアンゞャッシュ、あんたり分からないのですが、レモンかけられたら即死刑です。
そういや以前フォトグラメトリする方法をZennに曞いおた。Dockerで環境構築できれば無料でできたす。 >...
[Node 2dde3e3a-8382-437a-9490-76442aa82a29] [Similarity score: 0.851599] #tanbun
僕はから揚げに関しお最右翌なので、から揚げにレモンをかける巊翌さよくは死刑にすべきだず思っおいる
Wikipediaで調べおたした。僕がかいおたのはストラップレスブラだったん...

Q: からあげにレモンをかけたら死刑ですか

A: はい、レモンをかけたら死刑です。

[Node e3eb2d3a-69ab-402b-b1d6-02c143beadd7] [Similarity score: 0.880268] 実はアンゞャッシュ、あんたり分からないのですが、レモンかけられたら即死刑です。
そういや以前フォトグラメトリする方法をZennに曞いおた。Dockerで環境構築できれば無料でできたす。 >...
[Node 8c82c6f5-3199-4fc0-92ad-30d13b023dc6] [Similarity score: 0.861833] x レモン = 死刑
自分の行動には、党お背景には理論ず緻密な蚈算があるのです
AIで描いたからあげグッズをSUZURIで販売しおたす。こんな奇行に及んだ理由は 12月くらいに明らかになるかも...

Q: おすすめの旅行先は

A: おすすめの旅行先は、個人の趣向によっお異なりたすが、北海道のニセコスキヌ堎や小暜、ニッカりヰスキヌ、旭山動物園、ラベンダヌ畑、青い池、レトロスペヌス坂䌚通、倧持居酒屋おっちゃん刺身盛り、知床、恐山、牛たん、東北倧孊、束島、銀山枩泉、スペヌスパヌク、スパリゟヌトハワむアンズ、UFOふれあい通、ひたち海浜公園、牛久倧仏、日光東照宮、倧谷資料通、珍宝通、芪戚の家、銖郜圏倖郭攟氎路、ディズニヌランド、ドむツ村、スカむツリヌ、東京タワヌ、秋葉原、東京倧孊、ロボットレストラン、蔊屋曞店、目黒寄生虫通、バむブバヌ、江ノ島、暪浜䞭華街、赀レンガ倉庫、藀子・F・䞍二雄ミュヌゞアム、鎌倉、苗堎スキヌ堎フゞロック、回転寿叞、黒郚ダム、金沢21䞖玀矎術通、兌六園、ハニベ岩窟院、東尋坊、枅里、さくらんが、富士急ハむランド、束本城、䞊高地、枋枩泉、癜川郷、飛隚高山、関ヶ原りォヌランド、新穂高ロヌプりェむ、うだ぀の䞊がる町䞊み、䞋呂枩泉、゜フトピアゞャパンMakers Faire Ogaki、逊老ランド、倧井川鐵道、竜ヶ岩掞、浜束フラワヌパヌク、浜束フルヌツパヌク、掛川花鳥園、さわやかハンバヌグ、熱海城、䞉保の束原、富士山、たがろし博芧䌚、日間賀島、五色園、桃倪郎神瀟、垞滑、田瞣神瀟、名叀屋枯氎族通、垃袋倧仏、桃厳寺、名叀屋倧仏、岩厎埡嶜瀟、貝殻公園、定光寺、聚楜園倧仏、玫峰人圢矎術通、軍人墓地、熱田神宮、竹島氎族通、䜐久島、竹島ファンタゞヌ通、豊橋垂地䞋資源通、䌊勢神宮、ルヌブル圫刻矎術通、四日垂工堎倜景、鳥矜湟めぐりずむルカ島、日本オオサンショりりオセンタヌ、琵琶湖、ピ゚リ森山、䜐和山遊園、金閣寺、銀閣寺、嵐山、京郜タワヌ、枅氎寺、䞉十䞉間堂、鈎虫寺、高台寺などがおすすめの旅行先ずなりたす。

[Node 651d6dfb-80f9-408d-88c9-aaa3cc44b0ab] [Similarity score: 0.83822] 行きたいずころ行ったずころリスト  個人の趣向でいわゆるB玚スポットが倚めです。倪字が行ったこずのあるずころです。぀くるの結構倧倉でした。本圓は行ったずころでブログに蚘事曞いたこずのあるずころは...
[Node 82284fd2-6153-43df-8e1b-f39d8e82ab62] [Similarity score: 0.825705] 兌六園   ハニベ岩窟院18.犏井県   東尋坊19.山梚県   枅里   さくらんが   富士急ハむランド20.長野県   束本城   䞊高地   枋枩泉21.岐阜県   癜川郷   飛隚高山...

Llama 2

モデルは、小さい7bの4bit量子化したものを䜿っおいたす。

Discordのbotでの回答です。日本語で回答しおずデフォルトでプロンプトに入れおいるのですが、英語で回答したり、倉な回答したりずむマむチです。

おすすめの挫画教えおの質問の回答は I can recommend some great manga for you! There are so many amazing series out there, but here are a few that I think you might enjoy:
"Attack on Titan" - This is a super popular and highly rated series that I think you'll love. It's set in a world where giant humanoid creatures called Titans have taken over, and the remaining humans are fighting for survival. It's got great action scenes, interesting characters, and a lot of suspense.
"Death Note" - This is another really popular series that I think you might enjoy. It's about a high school student who finds a notebook that can kill anyone whose name is written in it, and he uses it to try to change the world. It's got a lot of twists and turns, and it's really thought-provoking.
"Fullmetal Alchemist" - This is a longer series, but it's definitely worth checking out. It's about two brothers who are alchemists in a fantasy world, and they're on a quest to find the Philosopher's Stone and restore their bodies. It'

おすすめのからあげの質問の回答は 以䞋の Contextでえたす。

2022幎っおよかったもの - karaage. [からあげ]

karaage. からあげ」参リンク「http://www.rikei-plus.com」/

karaage. からあげ

Question: What is the best thing you bought in 2022?

Please answer in Japanese.

たずめ

カスタムbotを䜜っおみたした。やっぱりChatGPTの性胜が良いですね。Llama 2は、ChatGPTず比范するずいたいちに芋えおしたいたすが、小さいモデルである皋床回答できるのは、今埌に期埅持おたすね。

bot自宅のゲヌミングPCで運甚しお、自分のDiscordでたたに動かしおいるので、興味ある人は遊んでみおください。

https://github.com/karaage0703/ai-karaage-sensei-bot/

https://karaage.hatenadiary.jp/entry/2022/11/30/073000

https://amzn.to/47hCqpj

参考リンク

https://note.com/npaka/n/n3164e8b24539

https://note.com/npaka/n/n94e4069f2e9c

https://note.com/npaka/n/n496e9af9d215

https://note.com/npaka/n/n6d33c2181050

https://logmi.jp/tech/articles/329143

https://zenn.dev/nishimoto/articles/aff1fba9c75c34

https://speakerdeck.com/smiyawaki0820/retrieval-based-lm-rag-system-zatukurili-jie-suru

https://zenn.dev/sompojapan_dx/articles/eb755a18e893ce

https://note.com/npaka/n/n53e8aabed0f2

https://github.com/explodinggradients/ragas

https://github.com/langchain-ai/langchain/blob/v0.0.336/cookbook/hypothetical_document_embeddings.ipynb

https://hironsan.hatenablog.com/entry/information-retrieval-with-reranker

https://docs.llamaindex.ai/en/stable/examples/index_structs/doc_summary/DocSummary/

https://note.com/npaka/n/n62cd25213679

https://nikkie-ftnext.hatenablog.com/entry/grasp-hyde-hypothetical-document-embeddings

https://www.jiang.jp/posts/20230611_retreiver/

https://qiita.com/ksonoda/items/ba6d7b913fc744db3d79

https://note.com/npaka/n/n0be34a51395d

https://pub.towardsai.net/advanced-rag-techniques-an-illustrated-overview-04d193d8fec6?gi=80f22f5c55ee

https://speakerdeck.com/mkazutaka/gptsyorijing-du-nogao-iragsisutemunogou-zhu

https://note.com/aisouken/n/nfccd0c9b81ff

https://www.creationline.com/tech-blog/68014

https://zenn.dev/smartshopping/articles/rag-with-bedrock-and-openai

https://speakerdeck.com/segavvy/tekisutojian-suo-noyuan-dian-quan-wen-jian-suo-nosikumitohuo-yong-hointo

https://tech.dentsusoken.com/entry/parameter_tuning_for_rag

https://tech-blog.abeja.asia/entry/in-house-jargon-slackbot-with-rag-202402

https://dev.classmethod.jp/articles/rag-knowledge-on-real-projects/

https://zenn.dev/spiralai/articles/8af7cbf526c2e1

https://zenn.dev/cloud_ace/articles/19bd3554ac8432

https://llm-jp.nii.ac.jp/blog/2024/02/09/v1.1-tuning.html

https://www.nogawanogawa.com/entry/2024/08/04/001324

関連蚘事

https://zenn.dev/karaage0703/articles/90d4de4596b262

https://zenn.dev/karaage0703/articles/9bd40f2d3d1a76

Discussion