コンテンツにスキップ

Craft AI Modules を利用する

Craft AI ModulesはCraft FunctionsからAIモデルを簡単に利用できる機能です。次のような特徴があります。

  • プレイドがフルマネージドでホストしているので、AIモデルの契約や保守/運用が不要です。
  • 入力に使ったデータはモデルの再トレーニングには使用されないなど、エンタープライズ基準のAIモデルを提供しており、安心して利用できます。

Craft AI Modulesでは、Craft Functionsから利用できるAPIクライアントを経由して各種AIモデルにアクセスします。

craft-ai-modules

各プロバイダにおける構成要素は次のとおりです。

  • Craft Functions向けのクライアント
    • aiModules というクライアントを提供しています。

Craft AI Modulesでは、標準の aiModules クライアントを使って、生成AIを利用したコンテンツ生成やベクトル化、検索結果の並べ替えを実行できます。

機能メソッド用途
Geminiによるコンテンツ生成gcpGeminiGenerateContentテキスト生成、要約、分類、抽出、画像や動画などを使った回答生成
Geminiによるストリーミング生成gcpGeminiGenerateContentStreamGeminiの生成結果を逐次受け取りたい場合
Text EmbeddingsgcpEmbeddingsTextテキスト検索、類似度計算、分類、クラスタリングなどで使うベクトルの作成
Multimodal EmbeddingsgcpEmbeddingsMultiテキストまたは画像からベクトルを作成
RerankgcpRerank検索候補をクエリとの関連度順に並べ替え

利用できるモデルは利用可能なモデル一覧をご確認ください。各メソッドの詳しい引数や戻り値はリファレンスをご確認ください。

gcpGeminiGenerateContent では、Geminiモデルを使ってコンテンツを生成できます。次のような用途で利用できます。

  • 通常のテキスト生成、要約、分類、抽出、文章変換
  • contents に複数ターンの会話履歴を渡すマルチターン会話
  • systemInstruction によるシステム指示
  • generationConfig.responseMimeType と generationConfig.responseSchema による構造化出力
  • generationConfig.thinkingConfig によるThinking設定
  • tools.functionDeclarations と toolConfig.functionCallingConfig によるFunction Calling
  • craftExtra.ragOptions によるCraft RAGとの連携
  • inlineData による画像、PDF、音声、動画などのバイナリ入力

gcpGeminiGenerateContentStream を使うと、Geminiの生成結果をストリーミングで受け取れます。入力の指定方法は gcpGeminiGenerateContent と同様です。

画像、PDF、音声、動画などのファイルをGeminiに渡す場合は、contents[].parts[] の inlineData にBase64エンコードしたデータを指定します。

const response = await aiModules.gcpGeminiGenerateContent({
model: "gemini-2.5-flash",
contents: [
{
role: "user",
parts: [
{ text: "この画像の内容を説明してください。" },
{
inlineData: {
mimeType: "image/png",
data: "BASE64_ENCODED_IMAGE",
},
},
],
},
],
});

gcpEmbeddingsText では、テキストをベクトル化できます。検索クエリや検索対象ドキュメントのベクトル作成、類似度計算、分類、クラスタリングなどに利用できます。

instances[].task_type を指定すると、検索クエリ用、検索対象ドキュメント用、分類用など、用途に応じた埋め込みを作成できます。parameters.outputDimensionality で出力次元数も調整できます。

gcpEmbeddingsMulti では、テキストまたは画像をベクトル化できます。画像を指定する場合は、Base64エンコードした画像データを bytesBase64Encoded に指定します。dimension には 128、256、512、1408 のいずれかを指定できます。

gcpEmbeddingsText に model: "gemini-embedding-2" を指定すると、テキストをベクトル化できます。gemini-embedding-001 と同じ instances、task_type、parameters を指定できます。task_type は用途を示すための値で、Craft AI Modulesがモデル向けのテキスト指示に変換します。検索ではクエリに RETRIEVAL_QUERY、文書に RETRIEVAL_DOCUMENT を指定してください。文書には title も指定できます。

export default async function (_data, { MODULES }) {
const { aiModules } = MODULES;
const result = await aiModules.gcpEmbeddingsText({
model: "gemini-embedding-2",
instances: [
{ content: "配送状況を確認したい", task_type: "RETRIEVAL_QUERY" },
{
content: "注文履歴から配送状況を確認できます。",
title: "配送状況の確認",
task_type: "RETRIEVAL_DOCUMENT",
},
],
parameters: { outputDimensionality: 768 },
});
return {
queryEmbedding: result.predictions[0].embeddings.values,
documentEmbedding: result.predictions[1].embeddings.values,
};
}

outputDimensionality は整数の 128〜3072 を指定でき、省略時は 3072 です。1入力は8192トークンを超えると暗黙的に切り詰められます。parameters.autoTruncate に false は指定できません。

このモデルはグローバルエンドポイントを使用するため、環境リージョンや日本リージョンオプションは適用されません。

Craft AIトークンの計算方法については、Craft AI Modules の Craft AIトークンとコストをご確認ください。

gcpRerank では、検索クエリと検索候補を渡して、候補を関連度順に並べ替えられます。ベクトル検索やキーワード検索で取得した候補を、生成AIアプリケーションへ渡す前に再評価できます。

records には、各候補の id、title、content を指定します。topN で返却する上位件数を指定でき、ignoreRecordDetailsInResponse でレスポンスに title と content を含めるかを制御できます。

Craft AI Modulesの利用方法を説明します。

Gemini Enterprise Agent Platformのモデルを利用する

Section titled “Gemini Enterprise Agent Platformのモデルを利用する”

Gemini Enterprise Agent Platformのモデルは aiModules クライアント経由で利用できます。利用できるメソッドはリファレンスをご確認ください。

// Main export function
export default async function (data, { MODULES }) {
const { aiModules } = MODULES;
// コンテンツ生成(テキスト生成)を行う
const response = await aiModules.gcpGeminiGenerateContent({
model: "gemini-2.5-flash",
contents: [{ role: 'user', parts: [{ text: "How does AI work?" }] }],
});
// 返却値のフォーマット
// response = {
// usageMetadata: {
// candidatesTokenCount: ...,
// totalTokenCount: ...,
// promptTokenCount: ...,
// thoughtsTokenCount: ...,
// },
// candidates: [
// {
// role: 'user', // 役割
// parts: [
// text: 'answer text...', // 生成結果
// functionCall: { // tool 呼び出しの引数
// name: 'tool',
// args: { ... },
// },
// functionResponse: { // tool 呼び出し結果
// name: 'tool',
// response: { ... },
// },
// ...
// ],
// finishReason: '...' // 回答終了理由
// },
// ...
// ],
// }
...
}