AIショッピングエージェント
ショッピングエージェントは、顧客のためのパーソナルショッパーとして機能するAIシステムです。自然言語のリクエストを理解し、商品カタログを検索し、好みと制約に基づいてレコメンデーションを行い、チェックアウトまで顧客をガイドします。このレッスンでは、本番グレードのショッピングエージェントの背後にあるアーキテクチャを学び、ShopifyのCatalog APIとCheckout Kitと統合するものを構築します。
ショッピングアシスタントのアーキテクチャ
よく設計されたショッピングエージェントは、単一のモノリシックなプロンプトではありません。連携する専門コンポーネントのパイプラインです:
コアコンポーネント
意図分類器: 顧客が何をしたいのかを判断します -- 商品の閲覧、オプションの比較、購入、配送についての質問、その他。これは通常、構造化出力を持つLLM自体によって処理されます。
商品ディスカバリ: 自然言語を適切なフィルターと検索語を持つCatalog APIクエリに変換します。
レコメンデーションエンジン: 顧客の好み、購入履歴、コンテキストシグナルに基づいて結果をランク付けおよびフィルタリングします。
カートマネージャー: 会話全体を通じてショッピングカートの状態を維持し、追加、削除、数量変更を処理します。
チェックアウトフロー: Checkout Kitを通じて購入プロセスをオーケストレーションし、必要な購入者情報を収集して決済を処理します。
Shopifyカタログによる商品レコメンデーションエンジン
レコメンデーションエンジンは、エージェントが単純な検索を超えた価値を追加する場所です。Catalog APIの結果とコンテキスト理解を組み合わせて、適切な商品を表示します。
// src/agents/recommendation-engine.ts
import Anthropic from '@anthropic-ai/sdk';
import { CatalogClient } from './catalog-client';
interface CustomerContext {
preferences: string[];
budget: { min: number; max: number } | null;
previousPurchases: string[];
conversationHistory: Message[];
}
interface ProductRecommendation {
productId: string;
title: string;
price: number;
reason: string; // この商品が推薦された理由
confidence: number;
}
export class RecommendationEngine {
private anthropic: Anthropic;
private catalog: CatalogClient;
constructor() {
this.anthropic = new Anthropic();
this.catalog = new CatalogClient();
}
async recommend(
query: string,
context: CustomerContext
): Promise<ProductRecommendation[]> {
// ステップ1: 自然言語から検索パラメータを抽出
const searchParams = await this.extractSearchParams(query, context);
// ステップ2: Catalog APIにクエリ
const rawProducts = await this.catalog.search({
query: searchParams.searchTerms,
filters: {
priceRange: context.budget || undefined,
categories: searchParams.categories,
availability: 'IN_STOCK',
},
limit: 25, // ランキング用に必要以上に取得
});
// ステップ3: LLMを使用して結果を再ランキング
const ranked = await this.rankProducts(rawProducts, query, context);
return ranked.slice(0, 5); // トップ5レコメンデーションを返す
}
}
レコメンデーションフローを構築する際、Catalog API検索とユーザーコンテキストの参照(購入履歴、保存された好み)をPromise.all()で並列に実行してください。LLMの再ランキングステップは両方に依存しますが、データの取得は互いに独立しています。
会話型コマースフロー
ショッピングの会話は予測可能なパターンに従います。これらのパターンに合わせて設計することで、エージェントがロボット的ではなく自然に感じられるようになります。
会話ステートマシン
Checkout Kit統合
Checkout Kitはエージェントの商品レコメンデーションと実際の購入を橋渡しします。プラットフォーム間での統合方法を以下に示します。
JavaScript(Webエージェント)
// src/checkout/web-checkout.ts
import { CheckoutKit } from '@shopify/checkout-kit-js';
export class WebCheckoutFlow {
private kit: CheckoutKit;
constructor(storeDomain: string, storefrontToken: string) {
this.kit = new CheckoutKit({
domain: storeDomain,
storefrontAccessToken: storefrontToken,
});
}
async createCheckout(cartItems: CartItem[], buyerEmail: string) {
// Storefront API経由でカートを作成
const cart = await this.kit.createCart({
lines: cartItems.map((item) => ({
merchandiseId: item.variantId,
quantity: item.quantity,
})),
buyerIdentity: {
email: buyerEmail,
countryCode: 'US',
},
});
return {
cartId: cart.id,
checkoutUrl: cart.checkoutUrl,
totalAmount: cart.cost.totalAmount.amount,
currency: cart.cost.totalAmount.currencyCode,
};
}
}
Shopifyのカートは24時間非アクティブだと期限切れになります。エージェントが長時間の会話を維持する場合、チェックアウトを開始する前に必ずカートを検証してください。カートが期限切れの場合は、保存されたカートアイテムから再作成してください。以前作成したカートが有効であると仮定しないでください。
エージェントからチェックアウトまでのパイプライン
顧客の意図から購入完了までの完全なパイプラインには複数のステップがあり、各ステップにエージェントが処理すべき潜在的な障害点があります:
Agenticコマースでは、エラーは単なる技術的問題ではなく、壊れた顧客体験です。エージェントは以下を処理する必要があります: Catalog APIへのネットワークタイムアウト、チェックアウト時に発見された在庫切れ商品、支払い拒否、配送制限の不一致。すべてのエラーに対して、エージェントは明確にコミュニケーションし、代替の前進パスを提供すべきです。
パフォーマンス最適化
ショッピングエージェントは素早く応答する必要があります。顧客は単純なクエリにはサブ秒のレスポンス、複雑な商品検索には3秒以内を期待しています。主な最適化戦略:
- 人気カテゴリの事前取得 -- 一般的なカテゴリのトップ100商品をローカルにキャッシュ
- LLMレスポンスのストリーミング -- ストリーミングを使用してエージェントが処理中に「入力中」を表示
- ツールの並列実行 -- エージェントが複数のツールを呼び出す場合、同時に実行
- コネクションプーリング -- Catalog APIとCheckout KitへのHTTP接続を再利用
- エッジキャッシング -- グローバルパフォーマンスのためにエッジに商品検索キャッシュを配置
ワークフロー自動化に進んで、AIエージェントをShopify Flowと組み合わせて自動化されたコマース操作を実現する方法を学びましょう。