LINEで社内規則に答えてくれるAIボットを作った話

LINEで社内規則に答えてくれるAIボットを作った話

LINEで社内規則に答えてくれるAIボットを作った話

「リモートワークのルールってどうなってたっけ?」「有給って何日から使えるんだっけ?」

社内規則って意外と細かくて、毎回確認するのが面倒じゃないですか。Slackで聞くのも気が引けるし、ドキュメントを探し回るのも手間。そこでAWSとLINEを使って、LINEで聞くだけで答えてくれる社内規則RAGボットを作りました。

そもそもRAGって何?

RAG(Retrieval-Augmented Generation) とは、AIが回答を生成する前に関連ドキュメントを検索して、その内容をもとに答える仕組みです。


システム全体の構成


使ったAWSサービス:

  • Lambda:処理の中心。コードを動かす場所

  • S3:社内ドキュメントとFAISSインデックスの保管場所

  • Bedrock(Titan Embed v2):テキストをベクトルに変換

  • Bedrock(Claude 3.5 Sonnet):回答を日本語で生成

作った手順

Step 1:社内ドキュメントをベクトル化してS3に保存

まずは社内規則のテキストファイルをチャンク(小さな断片)に分割し、Bedrockの埋め込みモデルでベクトルに変換。FAISSインデックスとして保存しました。


[画像: AWS S3 - faiss-index/フォルダの中身]

Step 2:Lambda関数を作成

Lambdaにコードをデプロイ。faiss・numpyはLambda標準環境に含まれないため、Lambda Layerとして事前にパッケージ化して追加しました。



[画像: AWS Lambda - 関数の概要(Layersが表示されている)]

ポイント: MacでビルドしたPythonパッケージはLinuxのLambdaで動きません。以下のようにLinux用バイナリとして明示的にビルドする必要があります。

pip install faiss-cpu numpy \
  --platform manylinux2014_aarch64 \
  --only-binary=:all: \
  -t

Step 3:環境変数を設定

LINEのシークレットキーなどをLambdaの環境変数に登録。コードに直書きしないのがセキュリティ上のベストプラクティスです。

[画像: AWS Lambda - 環境変数(5件)設定済みの画面]

Step 4:LINE Messaging APIと接続

LINE Developers ConsoleでWebhook URLにLambdaのFunction URLを設定。

ハマりポイント: LINE公式アカウントには「自動応答メッセージ」がデフォルトで設定されており、これがWebhookより先に返信してしまいます。RAGボットの回答も届くのですが、自動応答が邪魔をして2通返ってくる状態に。


[画像: LINE Official Account Manager - 自動応答メッセージの設定画面]

実際に動かしてみた

[画像: ターミナル or CloudWatch Logs - Lambda実行ログ]

Lambdaのログを見ると、S3ダウンロード→ベクトル化→検索→回答生成の流れが確認できます。

そしてLINEには…ついに返ってきました。

でました、VISK名物CBL!🍜

社内規則のドキュメントにCBLの説明を入れていなかったのでこちらで説明しましょう!

CBL(コミュニケーションブーストランチ)——社員同士にもっとコミュニケーションをとってほしい、という想いから生まれた制度です。

ルールはめちゃくちゃシンプル。週1回、社内の誰かとご飯に行くだけで会社がお金を出してくれます。 上限1,200円。

「仕事の話しなきゃダメ?」→ 別に。 おいしいもの食べて「最近どうっすか〜」でOK。

業務だけだとどうしても会話が"タスクの話"になりがち。ランチという場があることで、仕事以外の話ができる時間を会社が意図的に作ってくれているのがいいなと思っています。VISKらしい文化です。

ちなみにこの制度、申請するたびに「これって週1でよかったっけ?」と確認したくなるんですよね。RAGボットのファーストユースケースとしてちょうどよかったです。

Google Chatで2日溶かして、ファイル名のズレに悩んで、自動応答に阻まれて…それでもちゃんと動いた瞬間はテンション上がりました 🎉

ハマったこと3選

1. Google Chatで2日間溶かした

最初はGoogle Chat連携を試みましたが、認証トークンの検証でどうしても「応答がありません」エラーが解消できず断念。LINEに切り替えたら1日で動きました。インターフェースの選択は重要。

2. Bedrockのモデルが見つからないエラー

東京リージョンでは一部モデルをそのまま指定できません。APACクロスリージョン推論プロファイルを使う必要があります。

# ❌ これだとエラー
modelId="anthropic.claude-3-5-sonnet-20241022-v2:0"

# ✅ これが正解
modelId="apac.anthropic.claude-3-5-sonnet-20241022-v2:0"

3. S3のファイル名が微妙にずれていた

インデックス作成スクリプトが生成したファイル名(faiss.index)と、Lambdaコードが読もうとしていたファイル名(index.faiss)が違っていてエラー。地味に時間を取られました。

かかったコスト

サービス

費用

Lambda

ほぼ無料(無料枠内)

S3

ほぼ無料

Bedrock(呼び出し料)

数円〜数十円/日

合計

月額約2,000円以下

社内ツールとしては十分すぎるコスト感です。

まとめ

AWS Lambda + FAISS + Bedrock + LINEを組み合わせることで、社内ドキュメントに答えるRAGボットが比較的シンプルに作れました。

特に良かったのは、コンテキストにない情報に対して「わかりません」と正直に答えてくれること。ハルシネーション(嘘をつく)が少なく、社内ツールとしての信頼性が高いです。

次のステップとしては、ドキュメントの自動更新(S3に新しいファイルを置いたら自動でインデックスを再作成)あたりを整備したいと思っています。

構築日:2026年3月 使用サービス:AWS Lambda / S3 / Bedrock / LINE Messaging API

LINEで社内規則に答えてくれるAIボットを作った話

「リモートワークのルールってどうなってたっけ?」「有給って何日から使えるんだっけ?」

社内規則って意外と細かくて、毎回確認するのが面倒じゃないですか。Slackで聞くのも気が引けるし、ドキュメントを探し回るのも手間。そこでAWSとLINEを使って、LINEで聞くだけで答えてくれる社内規則RAGボットを作りました。

そもそもRAGって何?

RAG(Retrieval-Augmented Generation) とは、AIが回答を生成する前に関連ドキュメントを検索して、その内容をもとに答える仕組みです。


システム全体の構成


使ったAWSサービス:

  • Lambda:処理の中心。コードを動かす場所

  • S3:社内ドキュメントとFAISSインデックスの保管場所

  • Bedrock(Titan Embed v2):テキストをベクトルに変換

  • Bedrock(Claude 3.5 Sonnet):回答を日本語で生成

作った手順

Step 1:社内ドキュメントをベクトル化してS3に保存

まずは社内規則のテキストファイルをチャンク(小さな断片)に分割し、Bedrockの埋め込みモデルでベクトルに変換。FAISSインデックスとして保存しました。


[画像: AWS S3 - faiss-index/フォルダの中身]

Step 2:Lambda関数を作成

Lambdaにコードをデプロイ。faiss・numpyはLambda標準環境に含まれないため、Lambda Layerとして事前にパッケージ化して追加しました。



[画像: AWS Lambda - 関数の概要(Layersが表示されている)]

ポイント: MacでビルドしたPythonパッケージはLinuxのLambdaで動きません。以下のようにLinux用バイナリとして明示的にビルドする必要があります。

pip install faiss-cpu numpy \
  --platform manylinux2014_aarch64 \
  --only-binary=:all: \
  -t

Step 3:環境変数を設定

LINEのシークレットキーなどをLambdaの環境変数に登録。コードに直書きしないのがセキュリティ上のベストプラクティスです。

[画像: AWS Lambda - 環境変数(5件)設定済みの画面]

Step 4:LINE Messaging APIと接続

LINE Developers ConsoleでWebhook URLにLambdaのFunction URLを設定。

ハマりポイント: LINE公式アカウントには「自動応答メッセージ」がデフォルトで設定されており、これがWebhookより先に返信してしまいます。RAGボットの回答も届くのですが、自動応答が邪魔をして2通返ってくる状態に。


[画像: LINE Official Account Manager - 自動応答メッセージの設定画面]

実際に動かしてみた

[画像: ターミナル or CloudWatch Logs - Lambda実行ログ]

Lambdaのログを見ると、S3ダウンロード→ベクトル化→検索→回答生成の流れが確認できます。

そしてLINEには…ついに返ってきました。

でました、VISK名物CBL!🍜

社内規則のドキュメントにCBLの説明を入れていなかったのでこちらで説明しましょう!

CBL(コミュニケーションブーストランチ)——社員同士にもっとコミュニケーションをとってほしい、という想いから生まれた制度です。

ルールはめちゃくちゃシンプル。週1回、社内の誰かとご飯に行くだけで会社がお金を出してくれます。 上限1,200円。

「仕事の話しなきゃダメ?」→ 別に。 おいしいもの食べて「最近どうっすか〜」でOK。

業務だけだとどうしても会話が"タスクの話"になりがち。ランチという場があることで、仕事以外の話ができる時間を会社が意図的に作ってくれているのがいいなと思っています。VISKらしい文化です。

ちなみにこの制度、申請するたびに「これって週1でよかったっけ?」と確認したくなるんですよね。RAGボットのファーストユースケースとしてちょうどよかったです。

Google Chatで2日溶かして、ファイル名のズレに悩んで、自動応答に阻まれて…それでもちゃんと動いた瞬間はテンション上がりました 🎉

ハマったこと3選

1. Google Chatで2日間溶かした

最初はGoogle Chat連携を試みましたが、認証トークンの検証でどうしても「応答がありません」エラーが解消できず断念。LINEに切り替えたら1日で動きました。インターフェースの選択は重要。

2. Bedrockのモデルが見つからないエラー

東京リージョンでは一部モデルをそのまま指定できません。APACクロスリージョン推論プロファイルを使う必要があります。

# ❌ これだとエラー
modelId="anthropic.claude-3-5-sonnet-20241022-v2:0"

# ✅ これが正解
modelId="apac.anthropic.claude-3-5-sonnet-20241022-v2:0"

3. S3のファイル名が微妙にずれていた

インデックス作成スクリプトが生成したファイル名(faiss.index)と、Lambdaコードが読もうとしていたファイル名(index.faiss)が違っていてエラー。地味に時間を取られました。

かかったコスト

サービス

費用

Lambda

ほぼ無料(無料枠内)

S3

ほぼ無料

Bedrock(呼び出し料)

数円〜数十円/日

合計

月額約2,000円以下

社内ツールとしては十分すぎるコスト感です。

まとめ

AWS Lambda + FAISS + Bedrock + LINEを組み合わせることで、社内ドキュメントに答えるRAGボットが比較的シンプルに作れました。

特に良かったのは、コンテキストにない情報に対して「わかりません」と正直に答えてくれること。ハルシネーション(嘘をつく)が少なく、社内ツールとしての信頼性が高いです。

次のステップとしては、ドキュメントの自動更新(S3に新しいファイルを置いたら自動でインデックスを再作成)あたりを整備したいと思っています。

構築日:2026年3月 使用サービス:AWS Lambda / S3 / Bedrock / LINE Messaging API