SHODAN TSUBASA
AI OVERVIEW

LINE × Claude — 完全自動セールスエージェントシステム

人間の返信ゼロ 自己改善型 24時間365日稼働 執筆-校閲ループ
01

KPI 定量効果

完全自動化が営業プロセスにもたらす定量的インパクト

初回応答速度
< 5秒
24時間365日、即座に応答
従来: 4〜8時間 99.5% 短縮
月間対応件数
並列処理・待ち時間ゼロ
従来: 〜50件/人月 ボトルネック解消
営業人件費削減
-80%
初回商談化までの人的工数
従来: 〜2時間/件 自動化後: レビューのみ 〜20分
離脱率(目標)
≤30%
7日間タイムアウト基準
従来: 〜60%(返信遅延起因) 即応で半減
// 定量効果スコアボード
指標人手運用AI自動化分類
初回応答4-8 時間»< 5 秒速度
夜間 / 休日翌営業日»即時対応自動化
応答品質(トーン / 価格)担当者依存»100% 統一(執筆-校閲ループ)品質
ナレッジ反映研修 2-4 週間»Notion 更新で即時反映速度
改善サイクル月次 MTG»週次自動リフレクション自動化
改善実装開発者アサイン»Claude Code が自動 PR 作成コスト
回答レビュー人手ダブルチェック»Reviewer が自動校閲(最大2回)自動化
ラリー効果測定なし»Scorer が全ターン自動採点品質

// KPI 算出式(LINE Harness タグベース)

商談化率 = twin:phase:connected / twin:phase:hearing × 100%
価格提示到達率 = twin:phase:priced / twin:phase:hearing × 100%
エスカレーション率 = twin:escalated / twin:phase:hearing × 100%
タイムアウト率 = twin:phase:timeout / twin:phase:hearing × 100%

02

Agent Organization

Anthropic用語に準拠した役割分担: オーケストレーター / エージェント / ワークフロー / ツール

// エージェント構成図
LINE ユーザー
顧客(法人 / 個人)
LINE Harness
Cloudflare Workers(外部・変更不可)
Webhook Handler
オーケストレーター(Hono / Cloud Run)
Writer
Claude Sonnet 4.6
応答テキスト生成
Reviewer
Claude Sonnet 4.6
品質チェック(最大2回)
PhaseJudge
GPT-4o
フェーズ遷移判定
Scorer
GPT-4o
ラリー効果測定
Gatekeeper
Claude Haiku 4.5
2段階入力セキュリティ
Notion Custom Agent
ナレッジ取得(queryAgent)
フェーズ別自然言語クエリ
Reflector
Claude Sonnet 4.6
週次仮説生成
Hearing Handler
ルールベース(LLM不使用)
P1 固定5質問
Firestore
状態 / ベクトル / ラリー
Notion
ナレッジ / ログ / 仮説
Slack
エスカレーション / 週報
GitHub Actions
自動実装 / レビュー / マージ
// 執筆-校閲ループ(最大2ラウンド)
Writer
»
Reviewer
»
判定
承認 » 送信   |   差し戻し » Writer が再生成
Reviewer のチェック項目: 事実正確性 / 禁止表現 / ペルソナ一貫性 / 文字数 / 一問一答ルール / セキュリティ
信頼度スコア: 1.0(完璧)→ 0.7(良好)→ 0.5(許容)→ 0.3(要修正)→ 0.0(却下)

// 返信後の並列評価

返信確定後、PhaseJudgeScorer が並列実行される。
PhaseJudge: 次フェーズ判定(前進 / 維持 / 後退)。
Scorer: 前回ラリーの効果スコア(0.0〜1.0)。
結果分類: フェーズ前進 | 進行中 | 停滞 | 未返信 | フェーズ後退 | 離脱

03

Phase State Machine

6段階 + タイムアウト。前進が基本だが後退も可能。P100のみ不可逆。

// 会話フェーズフロー
P-1
タイムアウト
7日間無応答
»
P1
ヒアリング
ルールベース5問
»
P2
課題の具体化
漠然→具体化
»
P3
解決策の確信
本当にできる?
»
P4
指名・条件
他にもある?
»
P5
緊急性・決断
また今度でいい?
»
P100
CONNECTED
商談成立(不可逆)
▲ 後退可能(例: P3 → P2 興味低下時) |  P100 は不可逆  |  低圧モード: P4/P5 への強引な遷移を抑制
// P1 ルールベース・ヒアリング(LLM不使用)
#質問内容取得データ入力形式
Q1お名前・会社名・役職contactName, companyName, jobTitle自由テキスト(正規表現解析)
Q2年商規模annualRevenue選択肢(5段階)
Q3従業員数employeeCount選択肢(6段階)
Q4自動化テーマautomationTheme選択肢 + 自由入力
Q5関心サポートsupportInterest選択肢 + 自由入力
セグメント推論: 年商 ≥ 1000万 & 従業員 ≥ 6名 → 法人  |  年商 < 1000万 & 1-5名 or 個人参加 → 個人
法人向け
AI 開発(PM AI / SFA CRM AI)
月 100万円〜(税別)
AI × Notion 顧問
月 30万円(税別)
VS
個人向け
セカトレ(世界観トレード)
598,000円 / 2ヶ月(税別)
しくみX講座 for NotionAI
897,000円 / 6ヶ月(税込)
04

RAG Pipeline

メッセージ受信から応答送信までの全処理フロー

// メッセージ処理パイプライン
LINE ユーザー
»
LINE Harness
»
POST /webhook/line-harness
HMAC 検証
»
タイムスタンプ検証
»
レート制限
»
Gatekeeper(正規表現 + Haiku)
Firestore: 会話状態読込
»
P1 → ヒアリングハンドラー
»
P2〜P100 → RAG パイプライン
↓ 並列セットアップ
埋め込み生成(text-embedding-004 / 768d)
Notion Agent クエリ
顧客情報取得
前回ラリー取得
↓ ベクトル検索(上位5件、最低スコア 0.5)
Writer(Sonnet)
Reviewer(Sonnet)
最大2ラウンド
↓ 並列評価
PhaseJudge(GPT-4o)
Scorer(GPT-4o)
↓ 並列出力
LINE 応答送信
KPI タグ記録
メタデータ同期
Firestore 更新
ラリー保存
// Notion Agent × フェーズ別クエリマッピング
フェーズ取得内容フィルタ条件
P1FAQ(課題 + 顧客ペインポイント)
P2業種別事例 + 技術的専門性業種(metadata.industry)
P3ソリューション製品 + 関連事例課題(metadata.challenges)
P4価格情報(商品名, 価格, 期間)セグメント(法人/個人)
P5会社情報 + 契約手続き
キャッシュ: 30分 TTL(フェーズ+セグメント+メタデータ別)| キー: agent:${phase}:${segment}:${industry}:${challenges}
R

RAG Deep Dive

エンベディング生成 → ベクトル保存 → 類似検索 → コンテキスト注入の詳細構造

Embedding Model
text-embedding-004
Google Vertex AI
次元数
768
float64[] × 768
距離尺度
COSINE
Firestore findNearest
最小類似度
0.5
post-filter 閾値
検索上限
5
上位5件の類似ラリー
API Region
asia-ne1
asia-northeast1
// エンベディング生成 & ベクトル保存フロー
入力テキスト
ユーザーメッセージ + AI応答を embedBatch() で一括処理(1 API コール)
Vertex AI
text-embedding-004:predict768-dim vector × 2本
Firestore
FieldValue.vector() でネイティブベクトル型として rallies コレクションに保存
userMessageEmbedding
顧客メッセージのベクトル。検索対象として使用。
findNearest({ vectorField: "userMessageEmbedding" })
responseEmbedding
AI応答のベクトル。保存のみ(検索には未使用)。
将来の応答品質分析・クラスタリング用に蓄積
// ベクトル検索パイプライン(searchSimilarRallies)
クエリ
ユーザーの新しいメッセージを embed()768-dim query vector
.where("phase", "==", currentPhase) — 同一フェーズの会話のみに絞り込み
distanceMeasure: "COSINE"  |  limit: 15(post-filter用に3倍取得) |  vectorField: "userMessageEmbedding"
score ≥ 0.5 で低類似度を除外  |  excludeCustomerId で自分自身のラリーを除外
結果
上位 5件 の類似ラリー(userMessage, response, phase, outcome, score)
エンベディング失敗時はベクトル検索をスキップし、空の similarRallies で続行(グレースフルデグレード)
// Rally ドキュメント構造(Firestore: rallies コレクション)
フィールド用途
rallyIdstringドキュメントID(自動生成)
customerIdstringLINE friendId — 顧客識別子
userMessagestring顧客の元メッセージ(平文)
responsestringAIの応答テキスト(平文)
phasePhase会話フェーズ(P1〜P100)
userMessageEmbeddingvector(768)ベクトル検索の対象フィールド
responseEmbeddingvector(768)保存のみ(将来の分析用)
scorenumber | nullScorer による効果スコア(0.0〜1.0)
outcomeOutcome | nullphase_advanced / progressing / stagnant / etc.
createdAtstring (ISO)作成日時
// Writer へのコンテキスト注入(3系統の並列取得)
1. Similar Rallies
ベクトル検索で取得した過去の類似会話(最大5件)。同フェーズ + コサイン類似度 ≥ 0.5
embedding/search.ts
2. Notion Knowledge
Notion Custom Agent がフェーズ別の自然言語クエリで取得した知識。30分 TTL キャッシュ
knowledge/retriever.ts
3. Customer Profile
Firestore の顧客データ。過去の会話ログ・セグメント・メタデータ。getOrCreateCustomer で初回自動作成
embedding/customer-store.ts
Writer(Claude Sonnet 4.6)
3系統のコンテキスト + reviewFeedback(差し戻し時)を統合して応答を生成
// Notion Custom Agent 取得フロー(非ベクトル系ナレッジ)
クエリ構築
buildQuery(phase, segment, metadata) → フェーズ別の自然言語質問を生成
Notion API
POST /v1/agents/{agentId}/chat → Notion Agent がDB検索・ページ読み取りを自律実行
ポーリング
2秒間隔でスレッド状態を確認  |  タイムアウト: 60秒
結果
参照リンクを除去したクリーンテキスト → 30分 TTL キャッシュ に保存
キャッシュキー: agent:${phase}:${segment}:${industry}:${challenges}

// RAG 設計の要点

デュアルソース設計: ベクトル検索(過去の会話履歴)+ Notion Agent(構造化ナレッジ)の2系統を並列取得
フェーズスコープ: ベクトル検索は同一フェーズに限定し、文脈の関連性を保証
グレースフルデグレード: エンベディング失敗 → 検索スキップ / Notion失敗 → 空ナレッジで続行
バッチ最適化: embedBatch() で userMessage + response を1回のAPI呼び出しで処理
自己除外: excludeCustomerId で自分自身の過去ラリーを除外し、自己参照バイアスを防止

05

Weekly Reflection Loop

完全自動の改善サイクル — 分析 → 仮説 → 実装 → レビュー → デプロイ → 効果検証

// 自己改善サイクル
1
会話ログ分析
直近 〜20件の会話ログを Firestore から取得し、パターンを分析
src/analytics/reflection.ts
2
低パフォーマンス検出
ラリー数 < 5 の会話を検出し、最終フェーズ:終了理由でグルーピング、頻出パターンを抽出
低ラリー閾値: 5 | 目標ラリー数: 10
3
改善仮説の生成
Claude Sonnet が上位5パターン + サンプル会話を分析し、最大3件の仮説をJSON生成。Notion 仮説DB + GitHub Issue を自動作成
src/analytics/hypothesis.ts → Notion 仮説DB + GitHub Issues (reflection-auto)
4
Claude Code 自動実装
GitHub Actions が reflection-auto ラベルを検知し、Claude Code エージェントが PR を自動作成
.github/workflows/reflection-auto-implement.yml
5
自動コードレビュー
別の Claude Code エージェントが PR をレビュー。最大3ラウンドの修正サイクル
.github/workflows/reflection-auto-review.yml(最大3ラウンド)
6
自動マージ & デプロイ
承認後、自動マージ → Cloud Run デプロイ → Notion 仮説ステータスを更新
.github/workflows/reflection-auto-merge-deploy.yml → /webhook/reflection-deployed
7
効果検証
翌週、デプロイ前後のKPIを比較。効果あり/なし/revertを判定し、Slack週報を送信
src/analytics/weekly-report.ts → Slack
« ステップ1に戻り、継続的に改善 »
// 仮説ステータスフロー(Notion DB)
新規
»
着手中
»
デプロイ済み
»
効果あり
または → 効果なしrevert済み

// シミュレーション経由のリフレクション(代替ソース)

ペルソナバッチシミュレーション(バッチ10件、並列3)の結果からも仮説を生成可能。
離脱フェーズ + 離脱理由 を分析し、離脱ポイントを特定。
指標: 商談化率(%)/ 平均ラリー数 / フェーズ別離脱数

06

Inquiry Memory Loop

未知の質問を蓄積し、人間レビューで回答精度を継続改善するフィードバックループ

// ナレッジ・フィードバックサイクル
未知の質問を受信
Notion ナレッジに該当する回答なし
AI が仮回答 + 低信頼度スコアを記録
一般知識で即答(会話を絶対に止めない)。信頼度が閾値未満であることを記録
問い合わせメモリDB に自動記録
質問 / AI仮回答 / 信頼度 / 質問回数 → Notion DB に保存
人間がレビューして正解を入力
ステータス: AI仮回答 → 確認済み(上書きロック)
次回から正確な回答を提供
確認済み回答がナレッジとして優先的に活用される
« 質問が繰り返されるたびカウント増 → 優先度UP »
07

System Architecture

レイヤー別コンポーネント構成

インターフェース層
Webhook Handler
src/webhook/handler.ts
オーケストレーター: 署名検証 → ルーティング → 応答送信
Hearing Handler
src/webhook/hearing-handler.ts
P1 ルールベース5質問 + セグメント推論
LINE Harness Client
src/line-harness/client.ts
メッセージ送信 / タグ管理 / メタデータ同期
KPI タグマネージャー
src/line-harness/kpi.ts
twin:* タグの付与・除去・メタデータ同期
コアロジック層
Writer
src/llm/writer.ts
Claude Sonnet: 応答テキスト + UI種別 + 選択肢を生成
Reviewer
src/llm/reviewer.ts
Claude Sonnet: 7項目の品質チェック(承認/差し戻し)
PhaseJudge
src/llm/phase-judge.ts
GPT-4o: バリア超え判定で次フェーズを決定
Scorer
src/llm/scorer.ts
GPT-4o: ラリー効果を 0.0〜1.0 で採点 + 結果分類
RAG Pipeline
src/rag/pipeline.ts
埋め込み → ベクトル検索 → 執筆-校閲 → 判定+採点
データ & 分析層
会話状態管理
src/conversation/state.ts
Firestore での状態管理 / 会話履歴 / メタデータ
Notion Custom Agent
src/knowledge/retriever.ts
queryAgent + 30分キャッシュ + フォールバック
埋め込みストア
src/embedding/
ラリー / 顧客のベクトル保存 + 類似検索
リフレクションエンジン
src/analytics/
週次分析 → 仮説生成 → 効果検証 → 週報送信
Gatekeeper
src/security/gatekeeper.ts
2段階防御: 正規表現パターン + Haiku LLM 分類
08

Security Layers

多層防御: 入力 → 処理 → 出力の全段階で保護

// 多層防御アーキテクチャ
🔐
HMAC-SHA256 署名検証
Webhook リクエスト認証
タイムスタンプ検証
5分以内のリクエストのみ許可
レートリミット
ユーザーあたり 10メッセージ/分
🔍
正規表現パターンブロック
API_KEY, NOTION_, SECRET 等を即座に遮断
🤖
Haiku LLM 分類
安全 / 疑わしい / 悪意あり(10文字以上で発動)
💰
価格バリデーション
承認済みリスト: 100万, 30万, 598,000, 897,000
📄
出力パターンブロック
システム内部情報の漏洩防止
🔒
シークレット管理
secrets.sh + GCP Secret Manager(.env 禁止)
09

Tech Stack

ランタイム
Node.js 22
TypeScript + tsx
フレームワーク
Hono
v4.7
執筆 / 校閲
Claude Sonnet
claude-sonnet-4-6
入力防御
Claude Haiku
claude-haiku-4-5
判定 / 採点
GPT-4o
openai/gpt-4o
埋め込み
Vertex AI
text-embedding-004 (768d)
状態管理
Firestore
GCP
ナレッジ
Notion Agent
カスタムエージェント + キャッシュ
通知
Slack Web API
エスカレーション + 週報
デプロイ
Cloud Run
asia-northeast1
CI/CD
GitHub Actions
実装 + レビュー + マージ
シークレット
secrets.sh
Keychain + Secret Manager
// スケジュール実行エンドポイント
エンドポイント実行頻度目的
/scheduled/weekly-report 毎週月曜 リフレクション + 仮説生成 + Slack 週報送信
/scheduled/apply-timeouts 毎日 7日間無応答の会話を P-1(タイムアウト)に遷移
/scheduled/score-no-reply 毎時 24時間以上未返信のラリーにスコア 0.2 を付与
/webhook/reflection-deployed PR マージ時 仮説ステータスを「デプロイ済み」に更新

// Cloud Run 構成

プロジェクト: shodan-tsubasa-ai  |  リージョン: asia-northeast1  |  CPU: 1  |  メモリ: 512Mi  |  最大インスタンス: 3  |  同時実行数: 80