見出し画像

ChatGPTで就業規則の検査Botを作成しました。

流行りに飛び乗ってみましたww
いわゆる文書検索ですね。
今回利用した就業規則はそれなりなやつで、文字数で35000文字あります。

どんな感じに返答が?

1)就業規則の第4条を教えて
「就業規則の第4条では、就業規則等は職場に常備し、従業員がいつでも閲覧できるようにすること、また従業員は規則等を知らないことで職務上の責任を逃れることはできないと定めています。」

2)旦那が亡くなりました。お休みは何日もらえますか?
大変辛い時期だと思いますが、忌引休暇として配偶者の場合は3日の休暇が取得可能です。会社には事前に申請し所属長の許可を得てください。お気をつけてお過ごしください。

3)妊娠したらどうしたら良いですか?
妊娠を確認したら、すぐに申し出てください。産前6週間(多胎妊娠の場合14週間)から休暇をいただけます。産後8週間も休暇があります。また、母性健康管理のための休暇や妊娠中の勤務時間調整等の措置があります。

こんな感じに返答が返ってきました。

どうやってる?

普段がnodejsで開発をしてるんで、ここでもnodejsでの開発を行いました。
ChatGPTさんにも大変お世話になりました(^^)
大雑把な手順としては
1)PDFからテキストを取り出す。
2)テキストから条文を取り出す。
3)ベクターストアに入れ込む
4)検索する
5)ChatGPTに渡して返答分を作成してもらう
こんな感じです。

1)PDFからテキストを取り出す。

pdf-perserを使って・・・何やりたいところなんですが、普通にテキストで保存ってマンパワーで解決しましたww

2)テキストから条文を取り出す。

今回利用した文書の構造が章・条となっています。
ここから条を取り出して、一つの文書にしました。
ここは、ChatGPTさんに「こんな構造なんやけど、nodejsで取り出すロジック作って」って相談して、ロジックを作ってもらいました(^^)
いやいや、今の世の中便利になりました!

3)ベクターストアに入れ込む

最近Faissを利用しています。
今回もご多分に漏れず利用しました。
ここで、ひとつChatGPTに弄ばれました。
先ほど抽出した文章をベクターストアに入れ込むとき、ChatGPTはtextSplitterは不要と返事してきたんです。
どうやってもいれることができない。。
そりゃそうです。Chunkやら改行処理やらで整形しなきゃいけないのに、いきなりテキストを突っ込んでも。。
てことで、「RecursiveCharacterTextSplitter」で分割して「FaissStore.fromDocuments」で突っ込みました。
当初、ChunkSizeを300とかにしてたんですが、思うようなブロックが検出できず、現状は2500にしています。

4)検索する

検索のキーワードはmecabを使って、あらかじめ品詞を抽出しています。
作成したベクタストアをキーワードで検索してます。
vectorStore.similaritySearchWithScore( _keyword, 3 );
WithScoreを利用したのは、ベクターストアから距離が離れたキーワードの場合、そのままでChatGPTに突っ込みたいからです。
「おはよう!」とか、「眠い」なんてのは就業規則に載ってませんからww
ところで、今回roleのassitantは利用しませんでした。
過去の回答がいつまでも足を引っ張るケースが有り、使いにくかったです。

5)ChatGPTに渡して返答分を作成してもらう

GPTですが、費用を考え当初GPT-3.5-turboを利用していました。
ただ、言い回しが乱暴に感じる時があり、GPT-4-turboを利用しています。

今回の構築で関係するモジュールとしては、こんな感じです。
const openai = require( 'openai' );
const MeCab = require( 'mecab-async' );
const { FaissStore } = require( '@langchain/community/vectorstores/faiss' );
const { OpenAIEmbeddings } = require( '@langchain/openai' );
const { RecursiveCharacterTextSplitter } = require( 'langchain/text_splitter' );
ハマったところというと。。。Mecabです。
mecab-asyncだけでいいのかと思ったら、mecab自体のインストールが必要でした(^^;
環境がubuntu24なんで「apt install mecab」をやりました。

返答が返ってくるのに、ちょっと間があります。
考えられる原因としては
1)つねにベクターストアを作ってる。
永続化してやれば、この部分は省けます。
2)ChunkSizeがそこそこある
この部分はChatGPTからの返答速度に関わってきています。
小さくすればいいんでしょうけど、返答が不安定になります。
使ってるサーバーのパワーを上げたら、変わるのかなぁ。。

いまのところ、機嫌よく動いてくれています。(^^)
公にはできそうにない、ハマったポイントなんかもあります。
気になられた方は、メッセージでもいただけましたら回答します。

ランニング費用。。。

平均的に、入力が3000トークン / 出力が100トークン消費しています。
費用としては入力側は$0.01 / 1000トークン。出力側は$0.03 / 1000トークン。
なので、GPT-4-turboとしては約5円($1=150円)くらいかかります。
※GPT-3.5-turboならこれの1/20くらいですみます。

ということで、では(^^)


この記事が参加している募集

仕事について話そう

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