Craft AI Modules を利用する
Craft AI ModulesはCraft FunctionsからGPTなどのAIモデルを簡単に利用できる機能です。次のような特徴があります。
- プレイドがフルマネージドにホスティングしているので、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機能が有効化されている
利用手順
- API v2 Craft Type Appを作成します。
- 利用したいAPIのScopeを追加します。
- 表示されたアクセストークンをCraft Secret Managerに登録します。
- Craft Functionsで
karteApiClientForCraftTypeApp
を使ってAPIクライアントを生成し、APIを実行します。 - karteApiClientForCraftTypeApp
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);}