エンタープライズエージェント — クイックスタート
CRM、サポート、社内ツール、コンプライアンス向けのワークフロー対応AIエージェントを構築します。マルチインスタンス分離、Webhook駆動イベント、プロジェクトスコープのナレッジベース、評価実行、監査対応メモリを一括で実現します。
このクイックスタートは エンタープライズAIエージェント — ビジネスワークフローに組み込まれたエージェント — を構築する方向けです。CRMコパイロット、ティア1サポート、社内ナレッジアシスタント、商談資格審査ボット、コンプライアンスレビュアーなどが例として挙げられます。
作成するもの: ワークスペースごとに動作する商談資格審査エージェント。CRMからWebhook経由でディールイベントを受信し、製品ドキュメントを参照し、カスタムステートとしてワークフローステージを追跡し、各リリース前に評価ルーブリックに対して実行します。
使用するもの: マルチインスタンス分離、プロジェクトスコープのナレッジベース、カスタムステート、Webhook、ツール、評価実行。
1. プロジェクト、APIキー、Webhookシークレットを作成する
platform.sonz.ai でプロジェクトを作成し、APIキーとWebhook署名シークレットの両方を生成します。エンタープライズデプロイメントでは通常、環境(dev、staging、prod)ごとにAPIキーをスコープします。
export SONZAI_API_KEY=sk_...
export SONZAI_WEBHOOK_SECRET=whsec_...2. エージェントを作成する
中立的でプロフェッショナルなパーソナリティを使用します。ムードのドリフトが返答に影響しないよう neuroticism を低く保ちます。
import { Sonzai } from "@sonzai-labs/agents";
const client = new Sonzai({ apiKey: process.env.SONZAI_API_KEY! });
const agent = await client.agents.create({
name: "Pilot-SDR",
bio: "Pilot-SDR qualifies inbound leads, answers product questions, and hands off to humans when appropriate. Professional, concise, and never embellishes.",
big5: {
openness: 0.5,
conscientiousness: 0.9,
extraversion: 0.55,
agreeableness: 0.65,
neuroticism: 0.15,
},
});3. ワークスペースごとのインスタンスを作成する
各顧客ワークスペースに専用のインスタンスを割り当てます。instance_id = workspace-id にスコープされた記憶、カスタムステート、通知は完全に分離されます — マルチテナントSaaSとコンプライアンスにとって重要です。
const workspace = await client.agents.instances.create("agent-id", {
name: "acme-corp",
description: "Workspace for Acme Corp account",
});スコープパターンとライフサイクルについては マルチインスタンス を参照してください。
4. 製品ドキュメントをナレッジベースにアップロードする
ナレッジはプロジェクトスコープです — プロジェクト内のすべてのエージェントが同じコーパスを検索します。PDFをアップロードするか、構造化エンティティをプッシュするか、またはその両方を行います。
import { readFileSync } from "node:fs";
const pdf = readFileSync("./product-one-pager.pdf");
await client.knowledge.uploadDocument("project-id", "product-one-pager.pdf", pdf, "application/pdf");
// Or push structured facts
await client.knowledge.insertFacts("project-id", {
entities: [
{ label: "Plan: Growth", properties: { price: 299, seats: 10 } },
{ label: "Plan: Enterprise", properties: { price: "custom", seats: "unlimited" } },
],
});5. カスタムステートでワークフローステージを追跡する
すべてのディールやケースはステージ内に存在します。カスタムステートとして保存することで、エージェントはすべてのターンでそれを参照し、次に何をすべきかを推論できます。
await client.agents.customStates.create("agent-id", {
key: "deal_stage",
value: "discovery",
scope: "per-user-instance",
userId: "[email protected]",
instanceId: workspace.instance_id,
});6. ハンドオフとCRM同期ツールを登録する
エンタープライズエージェントには、人間へのエスケープハッチとシステムオブレコードへの書き戻しが常に必要です。
await client.agents.sessions.setTools("agent-id", {
userId: "[email protected]",
instanceId: workspace.instance_id,
tools: [
{
name: "handoff_to_human",
description: "Escalate this conversation to a human rep and stop the agent.",
parameters: { type: "object", properties: { reason: { type: "string" } }, required: ["reason"] },
},
{
name: "update_deal_stage",
description: "Advance the deal to a new stage in the CRM.",
parameters: {
type: "object",
properties: {
stage: { type: "string", enum: ["discovery", "qualified", "demo", "proposal", "closed_won", "closed_lost"] },
},
required: ["stage"],
},
},
],
});7. CRMイベント用のWebhookを登録する
CRMでディールのステージが変わったとき、そのイベントをSonzaiにプッシュします。エージェントは次のチャットターンでそれを「ワークフローイベント」として認識し、自然に反応します。
await client.webhooks.register("on_wakeup_ready", {
webhookUrl: "https://api.yourcorp.com/sonzai/wakeups",
});
await client.webhooks.register("on_recurring_event_due", {
webhookUrl: "https://api.yourcorp.com/sonzai/schedules",
});すべてのWebhookリクエストはHMAC-SHA256で署名されています — 処理前にシークレットで検証してください。完全なイベントカタログ、リトライポリシー、検証例については Webhookと通知 を参照してください。
8. チャットする
for await (const event of client.agents.chatStream({
agent: "agent-id",
userId: "[email protected]",
instanceId: workspace.instance_id,
messages: [{ role: "user", content: "Which plan fits a team of 12?" }],
})) {
const delta = event.choices?.[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}9. 評価実行でリリースをゲートする
プロンプトの変更や新しいエージェントバージョンをリリースする前に、評価ルーブリックに対して実行します。パーソナリティのドリフト、事実の正確性、ツール呼び出しの正確さを評点します。
// シミュレーション + 採点ランを開始し、すぐに戻る。
const ref = await client.agents.runEvalAsync("agent-id", {
templateId: "template_lead_qualification_v3",
simulationConfig: { turnsPerScenario: 6 },
});
// 評価が終わったらラン記録を読む(または streamEvents でライブ取得)。
const result = await client.evalRuns.get(ref.runId);
console.log(result.scoreOverall, result.scoresByCategory);ルーブリックの構築とシミュレーションユーザーについては 評価 を参照してください。
次のステップ
現在のSDKバージョン: TypeScript 1.1.3 · Python 1.1.4 · Go 1.2.0 (as of 2026-04-17)