見出し画像

現場から生まれるFAQ—Slackの会話からFAQを自動生成し、即ナレッジ資産化するAI活用

はじめに

こんにちは!電通デジタルの小橋敬太です。

Slackなどのチャットツールには、業務改善につながるヒントやナレッジが日々流れています。しかし、いざという時に目的の会話を探し出すのは大変ですし、「同じ質問が何度も繰り返される」「せっかくの知見が埋もれてしまう」といった悩みが絶えません。

そんな現場課題を解決したくて、私はSlackの会話からFAQ(よくある質問)を自動で抽出・整理するプログラムを開発しました。

以下のような課題意識が出発点でした。

  • Slackのチャットボットを作成したが、使用しているデータソースのFAQを手間をかけずに“リッチなFAQデータ”にしていきたい

  • 手作業でFAQをまとめるのは限界、自動生成が必須

  • 変化の早い現場ニーズに、FAQも“リアルタイムで追従”させたい

この記事では作成の手順ではなく、あくまでどのようにFAQ自動生成を可能にしているかを簡単にお伝えできればと思います。

(本ブログ記事には株式会社電通デジタルの宣伝内容を含みます。)

1. システム概要:API連携だけで“会話からFAQ”を自動化

プログラムは主に2つのAPIを連携させてFAQ自動生成を実現しています。

  • ChatGPT Playground API(OpenAI公式):高度な自然言語処理・FAQ文生成に活用。

  • Slack API:チャンネル内メッセージやスレッド履歴の自動取得・解析に活用。

これらのAPIを繋いで、「Slackで交わされた実際のQ&A」をAIがそのままFAQとしてまとめてくれる仕掛けです。 手作業なしで“現場に即したリッチなFAQデータ”を作り、更新も半自動化できます。

2. ChatGPTの会話ログとそのデータの扱い

ChatGPTや多くのAIチャットサービスでは、会話の履歴は「誰(user)がどう質問し」「AI(assistant)がどう答えたか」が時系列でJSON形式として記録・管理されています。 これにより、「AIにそのまま続きの回答やFAQ生成を依頼する」ことが可能なのです。

ChatGPT APIで使われる会話ログ(JSON例)

/* 
ChatGPT APIで使われる会話ログ(ChatGPT API(Playground経由)) 
*/
[
  {
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "XX機能の初期設定ってどこからできますか?"
      }
    ]
  },
  {
    "role": "assistant",
    "content": [
      {
        "type": "text",
        "text": "初期設定は管理画面の『設定』タブから行えます。"
      }
    ]
  }
]

「role」で発言者(質問なら"user"、回答なら"assistant")を指定し、content内のtextにやり取りが格納されます。

3. AI向けに最適化してFAQ化:現場有識者の発言をアシスタント役に変換

FAQ自動化のポイントは、「Slackの会話をAIが最も得意とする“対話ログ”形式に自動変換する」ことです。

実際のSlackスレッドには、質問者と答える有識者が混ざって発言しています。そのままAIに渡しても、人間との違いをAIが認識できず、最適なFAQ化ができません。

プログラムでは、 有識者の発言は「assistant」役、質問者は「user」役として処理し、上記で紹介したChatGPT APIの会話ログ形式に構築しなおします。

この変換処理(下記参照)によって、「実際の現場メンバーが発言したやりとり」を“まるで自分(ChatGPT assistant)が答えているかのようなログ”AI向け最適化しているのがポイントです。下記プログラムではassistant_user_idsに有識者のIDを割り当てています。

/*
SlackのAPIを使用して、会話のログを成型する例
*/
def build_chat_messages_for_faq(thread_msgs, assistant_user_ids):
    messages = []
    for msg in thread_msgs:
        role = "assistant" if msg.get("user") in assistant_user_ids else "user"
        text = msg.get("text", "").replace('\n', ' ').strip()
        if text:
            messages.append({
                "role": role,
                "content": [{
                    "type": "text",
                    "text": text
                }]
            })
    # 最後にFAQ用プロンプト(指示文)を追加
    faq_prompt = '''
    【FAQ化のための指示】
    - Q&A形式で分かりやすくまとめること
    - (例: ソリューション名の使用ルールや禁止事項、曖昧表現NG、具体的な内容で記載、不要な領域は除外等)
    '''
    messages.append({
        "role": "user",
        "content": [{
            "type": "text",
            "text": faq_prompt
        }]
    })
    return messages

4. FAQの“新しさ”もAIで自動判定

さらに、Googleスプレッドシート等に記録した既存FAQも自動取得し、FAQ文をベクトル形式(埋め込み)に変換。 新たにAIが生成したFAQがどれくらい既存FAQと“似ているか”をAI自身が評価し、重複や不要な追加を自動的に回避します。

/*SlackのAPIを使用して、会話のログを成型する例*/
def get_embedding(text):
    text = text.replace("\n", " ")[:2000]
    res = client_ai.embeddings.create(
        model="text-embedding-3-large",
        input=[text]
    )
    return np.array(res.data[0].embedding, dtype=np.float32)

また、FAQ化の際には、AIに「どんな項目が必要か」「どんな表現は避けるか」「出力のフォーマット」など プロンプトで厳密に指示します。

FAQ化プロンプトで盛り込む内容(例)

  • Q&Aそれぞれに明確な見出し(Q:、A:等)

  • 使って良いソリューション名やラベルの制約

  • 曖昧な表現の禁止・具体的説明の義務

  • 特定分野・対象外領域の排除

  • FAQごとの出力形式厳守(順番・粒度等)

実際のプログラムでは、作成したFAQをさらに似たものをグルーピングする処理も含めることで、同じFAQを新規で作成しないようにしています。

5. まとめ

Slackの会話履歴を ChatGPT API(Playground経由)とSlack APIを連携・活用して、そのままAIが読みやすい形に自動変換することで、高精度なFAQ自動化とナレッジ共有を実現しています。

本記事では、具体的な作成手順ではなく「全体の仕組みや考え方」「なぜこのアーキテクチャが有効か」という概念的・構造的な部分をお伝えしました。

プログラムのこうしたAIの理解に最適化したデータ変換により、 現場ナレッジが“流れるだけ”だった状況から、誰でも・すぐに取り出せる強いFAQ資産へと進化していきます。

今後も継続的にアップデートを重ね、より広い現場に役立つツールへ成長させていきます。

電通デジタルにはGA4の計測設計からDWHの構築、BI構築まで幅広いスキルを持ったチームがあります。

お困りのことがあれば、ぜひお問い合わせください。