📖
RAGとGemini APIで作る!Slack履歴を活用したAIアシスタントの開発
Slack履歴を活用したRAGベースのAIアシスタントボットの開発
はじめに
学校のプロジェクトやチーム活動において、過去の議論や決定事項を即座に参照することは重要です。しかし、Slackの検索機能だけでは、文脈を理解した上での情報検索は困難です。
そこで、チャンネルの履歴を学習し、自然な対話形式で情報を提供できるAIチャットボットを開発しました。このボットは、RAG(Retrieval-Augmented Generation)技術を活用し、過去のメッセージから関連情報を検索・提供します。
🎯 解決したい課題
-
情報アクセスの効率化
- チャンネル内の過去の議論や決定事項への素早いアクセス
- 文脈を考慮した関連情報の提供
-
知識の共有と活用
- チーム内の暗黙知の可視化
- 新メンバーの情報収集をサポート
🛠️ 技術スタック
-
言語とフレームワーク
- Python 3.10+
- Slack Bolt Framework
-
AI/ML技術
- Google Gemini API(テキスト生成)
- ChromaDB(ベクトルデータベース)
- RAG(Retrieval-Augmented Generation)
-
インフラ
- Systemdサービス
- 環境変数による設定管理
💡 主要機能
-
メッセージの自動収集と保存
- 指定チャンネルのメッセージを自動収集
- ベクトル化してChromaDBに保存
-
コンテキストを考慮した応答生成
- メンションされた質問に対する関連メッセージの検索
- Gemini APIによる自然な応答の生成
-
情報源の提供
- 回答の根拠となったメッセージへのリンク
- 信頼度スコアの表示
🔧 システム構成
📝 実装の詳細
1. メッセージの収集と保存
async def sync_channel(self, channel_id: str):
messages = self.slack_client.fetch_channel_history(channel_id)
vectors = self.vectorizer.vectorize_messages(messages)
self.vector_store.add_messages(vectors)
2. 質問応答システム
def answer_question(self, question: str) -> tuple[str, List[dict]]:
# 質問をベクトル化
query_vector = self.vectorizer.vectorize_query(question)
# 関連メッセージを検索
relevant_messages = self.vector_store.search_similar(
query_vector=query_vector,
n_results=self.max_context_messages
)
# Geminiで回答を生成
response = self.model.generate_content(
self._construct_prompt(question, relevant_messages)
)
return response.text, relevant_messages
🚀 デプロイと運用
システムサービスとして実装し、自動起動と監視を実現:
[Unit]
Description=Slack AI Assistant Bot
After=network.target
[Service]
User=your-username
WorkingDirectory=/path/to/SlackAIBot
Environment=PATH=/path/to/venv/bin
ExecStart=/path/to/venv/bin/python src/main.py
Restart=always
[Install]
WantedBy=multi-user.target
📊 結果と効果
-
情報アクセスの改善
- 質問から回答までの時間を大幅に短縮
- 関連情報への直接リンクにより、文脈の理解が容易に
-
チーム運営の効率化
- 新メンバーの情報収集時間の削減
- チーム内知識の効率的な共有
🔜 今後の展開
-
機能の拡張
- 画像認識機能の追加
- 複数チャンネルの横断検索
-
精度の向上
- 検索アルゴリズムの改善
- プロンプトエンジニアリングの最適化
🔗 GitHubリポジトリ
🔗 参考リンク
まとめ
RAGを活用したSlackボットの開発により、チーム内の情報アクセスと知識共有を効率化することができました。このプロジェクトを通じて、AIと既存のコミュニケーションツールを組み合わせることで、チームの生産性を向上させる可能性を示すことができました。
ライセンス
このプロジェクトはMITライセンスの下で公開されています。
- ✅ 商用利用可能
- ✅ 改変可能
- ✅ 再配布可能
- ✅ 私的利用可能
- ❌ 無保証
- ❌ 責任免除
コードやドキュメントの使用、改変、再配布は自由に行っていただけますが、著作権表示とライセンス表示を保持してください。
Discussion