Craft AI Modules

📘

この機能は招待制で解放しております。ご利用にあたってはKARTE Craft | AI ModulesのWaitlistにご登録をお願いします。

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

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

概要

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

Craft AI Modulesを構成する要素は以下の通りです。

  • KARTE API v2
    • Craft AI Modulesには、API v2の特殊なエンドポイントとして提供されているものがあります。このようなエンドポイントにアクセスするため、後述のCraft Type AppとCraft Functionsのみで使えるAPIクライアントを利用します。
  • API v2 Craft Type App (craft アプリタイプについて)
    • Craft Functions内でのみ利用できるAPI v2 Appです
    • Craft AI Modulesを使う際にはCraft Type Appが必要になります。
      • 具体的には、Craft Functions内でAPIクライアントを生成する際、Craft Type Appのアクセストークンが必要になります
  • APIクライアント(karteApiClientForCraftTypeApp
    • API v2 Craft Type App向けのAPIクライアントモジュールです。

利用方法

Craft AI Modulesは以下の方法で利用できます。

前提条件

Craft AI Modulesをご利用いただくためには以下の前提条件を満たす必要があります。

  • API v2が有効化されている
  • CraftのGrowthプラン以上のご契約
  • 対象プロジェクトでCraft AI Modules機能が有効化されている

利用手順

Craft AI Modulesの呼び出し例

次のコードはCraft AI Modulesを使ってGPT-4モデルによるChat Completionを行い、結果をログとして出力します。

// Enterprise grade chat completions のサンプルコード
// https://developers.karte.io/reference/post_v2beta-craft-aimodules-openai-chat-completions

const MODEL = 'gpt4';

// リファレンスを参照して適切なspecUriを入力してください。
const CRAFT_SPEC_URI = '@dev-karte/xxx'; 

// KARTE API v2 App のアクセストークンが格納されているSecret名
const KARTE_AI_APP_SECRET_NAME = 'KARTE_API_KEY'; 
const LOG_LEVEL = 'DEBUG';

export default async function (data, { MODULES }) {
  const { initLogger, secret, karteApiClientForCraftTypeApp } = MODULES;
  const logger = initLogger({ logLevel: LOG_LEVEL });

  // Secret Manager経由でアクセストークンを取得し、APIクライアントを初期化します。
  const { [KARTE_AI_APP_SECRET_NAME]: token } = await secret.get({ keys: [KARTE_AI_APP_SECRET_NAME] });
  const sdk = karteApiClientForCraftTypeApp({
    token,
    specUri: CRAFT_SPEC_URI,
  });

  const prompt = `次の文章を説明してください: "猫とはなんですか?"`;
  const messages = [
    {
      role: 'user',
      content: prompt
    },
  ];
  const { data:retData } = await sdk.postV2betaCraftAimodulesOpenaiChatCompletions({
    messages,
    model: MODEL,
    temperature: 0.7,
    frequency_penalty: 0,
  });
  const { content } = retData;

  logger.log("answer: " + content);
}