asopi tech
asopi techIndie Developer

Asopitech With · カスタマーサポート

Zendesk with Alopex DB

Zendeskは、顧客からの問い合わせを受けて解決するカスタマーサポートのサービスです。Alopex DBで同じものを作るとしたら…?

更新: 2026/10/12

どんなサービスか

Zendeskは、顧客からの問い合わせを受けて解決するサポートのサービスです。問い合わせはチケットとして管理し、ナレッジベースの記事から答えを探して返します。扱うデータは、チケット、顧客、やりとり、ナレッジの記事です。

データの置き場所

  • SQLテーブル:チケット、顧客、担当者、やりとりをテーブルに持ちます。
  • 全文検索:記事とやりとりに全文検索の索引を張り、製品名やエラーの文言で探します。
  • ベクトル:記事と過去の回答の埋め込みをベクトル列に持ち、新しい問い合わせに近い答えを探します。
  • カラムナーテーブル:チケットの記録をカラムナーテーブルにも持ち、解決までの時間を集計します。

埋め込みの計算と、答えの文章を組み立てるのは、アプリのコードです。

配置の形

Alopex DBをサーバーとして動かし、担当者の画面とヘルプセンターにHTTPとgRPCで返します。

Alopex DBが合う理由

サポートの答えは、過去の問い合わせとナレッジの中にあります。Alopex DBは、チケット、記事、意味検索を1つのデータベースに持ち、新しい問い合わせに近い答えを同じSQLで探せます。

コードで見る

チケットとナレッジの記事を持ち、新しい問い合わせに近い記事を意味で探します。答えを見つける中心だけを取り出したコードです。

import alopex
import numpy as np

db = alopex.Database.open("zendesk.alopex")

db.execute_sql("CREATE TABLE IF NOT EXISTS tickets (id INTEGER PRIMARY KEY, subject TEXT)")
db.execute_sql("""
    CREATE TABLE IF NOT EXISTS articles (
        id INTEGER PRIMARY KEY,
        title TEXT,
        body TEXT,
        embedding VECTOR(4)
    )
""")

articles = [
    (1, "パスワードの再設定", "ログインできないとき", [0.9, 0.1, 0.0, 0.0]),
    (2, "請求書の発行", "領収書と請求のまとめ", [0.0, 0.0, 0.9, 0.1]),
    (3, "ログインの二段階認証", "認証アプリの設定", [0.8, 0.2, 0.0, 0.0]),
]
for aid, title, body, emb in articles:
    db.execute_sql("INSERT INTO articles (id, title, body, embedding) VALUES (?, ?, ?, ?)", [aid, title, body, np.array(emb, dtype=np.float32)])

# 新しい問い合わせ(ログインできない)に近いナレッジ記事を、意味で探す
db.execute_sql("INSERT INTO tickets (id, subject) VALUES (?, ?)", [1, "ログインできない"])
query = np.array([0.95, 0.05, 0.0, 0.0], dtype=np.float32)
rows = db.execute_sql("""
    SELECT title, vector_similarity(embedding, ?, 'cosine') AS score
    FROM articles
    ORDER BY score DESC
    LIMIT 2
""", [query])

for row in rows:
    print(round(row["score"], 3), row["title"])

新しい問い合わせの埋め込みに近い記事が、上位に並びます。過去の答えとナレッジから、担当者がすぐ候補を出せます。

チケット、記事、意味検索を一つのデータベースに持てるAlopex DBで、答えがすぐ見つかるサポート窓口を試作してみませんか。最初の一歩はクイックスタートです。

関連リンク