営業スライドで示した4つの価値を、実際にどんな構成・実装で実現しているかをまとめた資料です。 末尾に gpt-image-1(ChatGPT Images 2.0)を使った画像生成スキームと図を掲載しています。
Agent i Biz は、1つの共通基盤の上で「企業(テナント)ごとに独立したAI接客チャット」を量産できる マルチテナント基盤です。企業は「業界テンプレートを選ぶ → 自社の資料を入れる → トーンを決める」だけで、その会社専用の接客人格を持つAIをLINE等で公開できます。
ユーザーの発話が届いてからAIが応答するまでの流れです。テナント分離は「②テナント特定」と 「全クエリの tenant_id スコープ」で担保しています。

標準のテキスト接客を土台に、音声・アバターを「上に重ねる」段階設計です。現状の実装範囲を正直に示します。

「業界テンプレート × 自社ナレッジ × トーン」を1つのシステムプロンプトに合成して接客人格を作ります。 実体は lib/build-prompt.ts の buildSystemPrompt() です。
プロンプト合成の構造(実コードより)
buildSystemPrompt(tenant) =
あなたは「{企業名}」(業種: {industry})の公式AIアシスタントです。
# ペルソナ … tenant.persona
# 口調 … toneGuide[tenant.tone] // 丁寧/フレンドリー/簡潔
# 登録ナレッジ … tenant.knowledge[](索引)
# FAQと公式回答 … tenant.faqs[](最優先の根拠)
# 実行アクション … 商品を持つ企業のみ tools を追記
# 重要ルール … 根拠のない創作を禁止 / 他社情報に触れない
AIが「答える」だけでなく「実行する」仕組みです。AI SDK の tool calling で、AIが必要に応じて 関数を呼び、リアルタイムのデータに基づいて回答します。本リポジトリではコスメEC向けに 商品提案・在庫確認を実装済みです。
ツール実行のシーケンス
スライドのアパレル(商品提案)・カフェ(予約実行)・賃貸(物件検索)は、この同じツール機構の 引数とDBを差し替えるだけで横展開できます。予約・物件検索ツールは設計済み・実装予定です。

「枠(テンプレート)」と「値(テナント差分)」を分離しているため、2社目以降は値を入れ替えるだけで 起動します。実体は createTenantFromTemplate() で、 業界テンプレートから新テナント(設定・初期ナレッジ・FAQ)を一括生成します。
Neon Postgres 上に6つのテーブルを持ち、tenants 以外のすべてに tenant_id を持たせて企業単位で分離しています。 1つのスキーマを全企業で共有しつつ、行レベルで完全に独立させる構成です。
テーブル関係(図)
tenants (id) ← 企業マスタ(1テナント = 1行)
│ 1
├──< knowledge (tenant_id) ナレッジ(多)
├──< faqs (tenant_id) FAQ(多)
├──< conversations (tenant_id) 会話ログ(多)
└──< products (tenant_id) 商品(多)
すべての子テーブルは tenant_id で親に紐付き、
クエリは常に WHERE tenant_id = ? でスコープされる。スライドの「各企業のデータは完全分離。他社情報は混ざらない」を、具体的に何で担保しているかを示します。
スライド①の「作って終わりにしない。会話ログから精度を上げ続ける運用」を支える仕組みです。 蓄積した会話ログを起点に、ナレッジとFAQを継続的に強化します。
お預かりした OpenAI API キーを使い、gpt-image-1(ChatGPT Images 2.0)で画像を生成する仕組みです。商品写真の自動生成や、アバター接客の顔素材生成に使います。本スキームは設計提案(未実装)です。
生成フロー(図)
↑ 縦に1→5の順で処理
実装サンプル(API ルート例)
// app/api/generate-image/route.ts
import OpenAI from "openai"
import { put } from "@vercel/blob"
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }) // ← お預かりしたキー
// 商品属性 → 画像プロンプトを組み立てる
function buildImagePrompt(p: { name: string; category: string; description: string }) {
return [
`A clean, professional product photo of "${p.name}".`,
`Category: ${p.category}. ${p.description}`,
"Soft studio lighting, white background, e-commerce style, high detail.",
].join(" ")
}
export async function POST(req: Request) {
const { tenantId, product } = await req.json()
// 1-3) gpt-image-1(ChatGPT Images 2.0)で生成
const result = await openai.images.generate({
model: "gpt-image-1",
prompt: buildImagePrompt(product),
size: "1024x1024",
quality: "high",
n: 1,
})
// gpt-image-1 は base64 で返る
const b64 = result.data[0].b64_json!
const bytes = Buffer.from(b64, "base64")
// 4) Vercel Blob に保存(tenant 配下に分離)
const blob = await put(`${tenantId}/products/${product.id}.png`, bytes, {
access: "public",
contentType: "image/png",
})
// 5) DB の products.imageUrl に保存(呼び出し側で実行)
return Response.json({ imageUrl: blob.url })
}新しい企業が接客AIを公開するまでの手順です。スライド④の「設定変更だけで増やせる」を実際の操作レベルで示します。
誇張を避けるため、現時点で動いているものと、設計のみで未実装のものを並べて示します。