メインコンテンツまでスキップ

プロファイルの選択

プロファイルは、開発者のサーバーが提供するモデルと設定に名前を付けたものです。

既定では、すべてのユーザーがすべてのプロファイルをリクエストできます。開発者がマップしたインテントの呼び出しはマップされたプロファイルを使用し、それ以外の呼び出しはリクエストされたプロファイルを使用します。プロファイルがリクエストされていない場合は既定のプロファイルを使用します。

プロファイル オーソライザー を使用すると、開発者は各ユーザーがリクエストできるプロファイルを、通常はユーザーのプランに基づいて決定できます。クライアントに表示されるプロファイルの一覧をフィルターし、それ以外のプロファイルへのリクエストを拒否します。

ユーザーが使用できるプロファイルを制限する​

IAIProfileAuthorizer を実装し、候補のうちユーザーが使用できるプロファイルを返します。

PlanProfileAuthorizer.cs
using Reveal.Sdk;
using Reveal.Sdk.AI;

public sealed class PlanProfileAuthorizer : IAIProfileAuthorizer
{
private readonly IPlanStore _plans;

public PlanProfileAuthorizer(IPlanStore plans) => _plans = plans;

public async ValueTask<IReadOnlyCollection<string>> GetAuthorizedProfilesAsync(
IRVUserContext user, IReadOnlyCollection<string> candidateProfiles, CancellationToken cancellationToken)
{
// Retrieve the plan from custom storage
var plan = await _plans.GetPlanAsync(user.UserId, cancellationToken);
return plan switch
{
"enterprise" => candidateProfiles,
"pro" => candidateProfiles.Where(p => p != "premium").ToList(),
_ => candidateProfiles.Where(p => p == "default").ToList(),
};
}
}
Program.cs
builder.Services.AddRevealAI()
// providers and profiles
.AddProfileAuthorizer<PlanProfileAuthorizer>();

オーソライザーはシングルトンとして登録されます。サポートされるオーソライザーは 1 つだけで、2 つ目を登録すると最初のオーソライザーが置き換えられます。

オーソライザーは、プロファイルの一覧とリクエストの検証の両方を制御します。

  • GET /api/reveal/ai/profiles と、クライアント SDK の client.ai.profiles.list() は、ユーザーが使用できるプロファイルのみを返します。そのため、モデル ピッカーにはそれらだけが表示されます。
  • それ以外のプロファイルへのリクエストは、HTTP 403 とコード ai.profile_not_allowed で失敗します。存在しないプロファイルへのリクエストは、HTTP 400 と ai.profile_not_found で失敗します。Reveal が別のプロファイルに暗黙的にフォールバックすることはありません。ただし、profile の代わりに非推奨の model フィールドを使用するリクエストは例外で、不明な名前が指定されると既定のプロファイルにフォールバックし、警告がログに記録されます。
  • 候補には動的 (BYOK) プロファイルも含まれます。上の無料プランの分岐のように特定の名前だけを残すオーソライザーは、動的プロファイルも非表示にします。
  • 開発者のインテント マッピングと既定のプロファイルは開発者自身の判断であるため、オーソライザーはそれらをフィルターしません。オーソライザーが制御するのは、クライアントがリクエストできるものだけです。
  • Node.js と Java では、コールバックが例外をスローするか不正な形式の結果を返すと、すべてのプロファイルが拒否されます。候補に含まれていなかった名前は無視されます。