langchain md bot

【LangChain】3hでマークダウン化された社則のチャットボットを作った話

ポイント

  • LangChainの引っかかる部分/作業時間の目安
  • 社則のマークダウン化どんな感じ?

経緯

社長:「焼肉奢るから、誰かこの記事見ながらLang Chainでチャットボット作ってみてよ〜!」
Hさん:「作りました!趣向に基づき作品をレコメンドしてくれるボットです!nsfwです!」

社長:「テックブログで公開できないやん…」
自分:(よし、最近インターンの子が作ってくれた社則のマークダウンを使ってみよう!焼肉ゥ!)

社則のチャットボット化、やってみた理由

  • 「長期休暇って何日まで取れるんだっけ?」のような疑問が発生じた際に、長い社内規定を読み漁るのが面倒で、同僚や管理部に確認してしまっていたため。
  • GitHub Copilot Enterpriseであれば組織のレポジトリ内の.md, .mdxdocsetとして保存しお手軽にチャットボットとして運用できるそうです。月額 $40/人 と少しお高いですが、既に加入しているのであればやらない手はなさそうです。(参考

社則のマークダウンについて

弊社のマークダウン化した社則はこちら
https://github.com/glucoseinc/glucose-rules

社員規則をMD化しGitHubで管理することで以下の問題点を解消できます。

  • バージョン管理が煩雑で最新版がどれか不明
  • ファイルが多い場合にどこに保存してあるか分からなくなり検索性も悪くなる
  • 複数人でのレビューが難しく責任の所在が分かりにくい
  • レイアウトの調整に時間がかかる

実際にこちらをベースにMD化の作業を新卒入社予定のインターンの子にやってもらいました。その際、以下のようなMD化のメリット・デメリットを感じたとのことです。

良かったところ

  • 入社前のアルバイトの時点で就業規則全文を把握させてもらえて会社の透明性の高さを感じた
  • 簡単な作業とはいえ入社前のアルバイトに社員全員に影響のある仕事を任せてもらえる裁量ある環境
  • 作業の中で発生した改善案や問題点をレビューやissueとして挙げ、変革していく会社の斬新さ・柔軟さ

やってみて難しかったところ

  • 公文書の様式のガイドラインに沿うよう項番の形式などを合わせるためにCSSを適用する必要があった
    • その際、マークダウンの構造とCSSの装飾とを切り離して実装するのが難しかった
    • GitHub Markdown PreviewではCSSを適用できず、GitHub上で適用するにはGitHub Pagesの設定が必要
    • CSSを適用したものをGitの操作ができない管理部に確認してもらうため、都度.zipを添付するのが手間だった

このように難しい部分もありますが、メリットの方が大きいという所感です。
また、「弊社は社員規則をGitで管理しています」と言うとなんだかかっこいいですよね….!

LangChain実装

LangChainとは何かや基本的な実装はこちらの記事に全て丁寧に記載されているので参照ください。
ここでは自分達で工夫した点について書きます。

記事から変更した点

  • 依存のバージョンを最新にし、現在はサポート外のpinecone.init()を排しています。
  • Hさん: DBに保存してあるスクレイピング結果をCSVに変換しドキュメントのベクトル化を行っています。
  • 自分:就業規則のレポジトリの.mdを元にベクトル化

すぐに完成…!!

作業時間

3h
※ロジックが分からない部分の調査やエラー処理が大半でしたので、機械的に行えば2hかからないと思います。

実運用に載せる場合

運用に載せる場合について、以下のような構成をざっくり考えました。

  • Github Actionでmasterブランチ更新時に差分のある.mdを再取得しEC2にデプロイ(以下ではGitHub APIを使用してcurlで差分のあるファイルをダウンロードしています)
# GitHubのPersonal Access Tokenを設定する
TOKEN="YOUR_GITHUB_PERSONAL_ACCESS_TOKEN"
REPO="YOUR_REPO_NAME"
OWNER="YOUR_GITHUB_USERNAME"

# 最後のコミットのSHAを取得
SHA=$(curl -s -H "Authorization: token $TOKEN" \
     https://api.github.com/repos/$OWNER/$REPO/commits/master | \
     jq -r '.sha')

# コミットの差分を取得
DIFF=$(curl -s -H "Authorization: token $TOKEN" \
      https://api.github.com/repos/$OWNER/$REPO/commits/$SHA | \
      jq -r '.files[] | select(.filename | endswith(".md")) | .raw_url')

# 差分のあるファイルをダウンロード
for file in $DIFF; do
  curl -O -H "Authorization: token $TOKEN" $file
done
  • 上記をSlackBotと連携し社内に展開

感想

3hでお手軽にチャットボットを作れてしまったのは驚きでした。

私の前職のチャットボットの会社の営業支援での社則を読み込ませたチャットボットのデモは毎度好評でしたが、総務関連のDXはニーズがあっても営業などと違い売上に直接関連しないので予算が中々降りず進まない印象でした。今回のようにDIYすれば、かかる費用は人件費と維持費のみになるので良さそうですね。

ただ、LangChainを現状会社組織で使用する場合の利用用途は社内の緩いナレッジ管理のみに限られそうです。

というのもBtoBやBtoC向けの FAQなどの回答を行うチャットボットの場合は、求められるのは自分達が正解として出したい回答であって、GPTが導き出す回答ではない場合があるからです(もちろん調整は可能かと思います)。

また、毎回出す回答が変わり解答率・解決率が変動する点も商用利用に適してなさそうです。

BtoE向けであっても、以下のように聞き方によっては回答を出してくれないので早さを求められる営業資料の検索にも向いていなさそうに感じました。

とはいえネットに転がっていない自分たちのナレッジをボットが応答してくれると時代の変革を肌で感じてなんだかワクワクしました。皆さんもオリジナルの情報をチャットボット化して遊んでみてはいかがでしょうか?