重要
Azure Functions 用の Azure OpenAI 拡張機能は現在、プレビュー段階です。
Azure OpenAI アシスタント トリガーを使用すると、アシスタントに対して行われたカスタム チャット ボットまたはスキル要求に基づいてコードを実行できます。
Azure OpenAI 拡張機能のセットアップと構成の詳細については、「Azure Functions 用の Azure OpenAI 拡張機能」を参照してください。 Azure OpenAI アシスタントの詳細については、「Azure OpenAI Assistants API」を参照してください。
注
リファレンスと例は、Node.js v4 モデルに対してのみ提供されています。
注
リファレンスと例は、Python v2 モデルに対してのみ提供されます。
注
両方の C# プロセス モデルがサポートされていますが、 isolated worker モデル 例のみが提供されます。
例
このバインドに関しては現在、Goのサポートは利用できません。
この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。
[Function(nameof(AddTodo))]
public Task AddTodo([AssistantSkillTrigger("Create a new todo task")] string taskDescription)
{
if (string.IsNullOrEmpty(taskDescription))
{
throw new ArgumentException("Task description cannot be empty");
}
this.logger.LogInformation("Adding todo: {task}", taskDescription);
string todoId = Guid.NewGuid().ToString()[..6];
return this.todoManager.AddTodoAsync(new TodoItem(todoId, taskDescription));
}
この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。
/**
* Called by the assistant to create new todo tasks.
*/
@FunctionName("AddTodo")
public void addTodo(
@AssistantSkillTrigger(
name = "assistantSkillCreateTodo",
functionDescription = "Create a new todo task"
) String taskDescription,
final ExecutionContext context) {
if (taskDescription == null || taskDescription.isEmpty()) {
throw new IllegalArgumentException("Task description cannot be empty");
}
context.getLogger().info("Adding todo: " + taskDescription);
String todoId = UUID.randomUUID().toString().substring(0, 6);
TodoItem todoItem = new TodoItem(todoId, taskDescription);
todoManager.addTodo(todoItem);
}
この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。
const { app, trigger } = require("@azure/functions");
const { TodoItem, CreateTodoManager } = require("../services/todoManager");
const { randomUUID } = require('crypto');
const todoManager = CreateTodoManager()
app.generic('AddTodo', {
trigger: trigger.generic({
type: 'assistantSkillTrigger',
functionDescription: 'Create a new todo task'
}),
handler: async (taskDescription, context) => {
if (!taskDescription) {
throw new Error('Task description cannot be empty')
}
context.log(`Adding todo: ${taskDescription}`)
const todoId = randomUUID().substring(0, 6)
return todoManager.AddTodo(new TodoItem(todoId, taskDescription))
}
})
import { InvocationContext, app, trigger } from "@azure/functions"
import { TodoItem, ITodoManager, CreateTodoManager } from "../services/todoManager"
import { randomUUID } from 'crypto';
const todoManager: ITodoManager = CreateTodoManager()
app.generic('AddTodo', {
trigger: trigger.generic({
type: 'assistantSkillTrigger',
functionDescription: 'Create a new todo task'
}),
handler: async (taskDescription: string, context: InvocationContext) => {
if (!taskDescription) {
throw new Error('Task description cannot be empty')
}
context.log(`Adding todo: ${taskDescription}`)
const todoId = randomUUID().substring(0, 6)
return todoManager.AddTodo(new TodoItem(todoId, taskDescription))
}
})
この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。
Add Todo の function.json ファイルを次に示します。
{
"bindings": [
{
"name": "TaskDescription",
"type": "assistantSkillTrigger",
"dataType": "string",
"direction": "in",
"functionDescription": "Create a new todo task"
}
]
}
function.json ファイルのプロパティについて詳しくは、「構成」セクションをご覧ください。
using namespace System.Net
param($TaskDescription, $TriggerMetadata)
$ErrorActionPreference = "Stop"
if (-not $TaskDescription) {
throw "Task description cannot be empty"
}
Write-Information "Adding todo: $TaskDescription"
$todoID = [Guid]::NewGuid().ToString().Substring(0, 5)
Add-Todo $todoId $TaskDescription
この例では、新しい todo タスクをデータベースに追加するアシスタントを作成する方法を示します。 トリガーには、モデルによって使用される Create a new todo task の静的な説明があります。 関数自体は、追加する新しいタスクを表す文字列を受け取ります。 この関数を実行すると、タスクがカスタム項目ストアの新しい todo 項目として追加され、ストアからの応答が返されます。
@skills.function_name("AddTodo")
@skills.assistant_skill_trigger(
arg_name="taskDescription", function_description="Create a new todo task"
)
def add_todo(taskDescription: str) -> None:
if not taskDescription:
raise ValueError("Task description cannot be empty")
logging.info(f"Adding todo: {taskDescription}")
todo_id = str(uuid.uuid4())[0:6]
todo_manager.add_todo(TodoItem(id=todo_id, task=taskDescription))
return
属性
AssistantSkillTrigger 属性を適用して、次のパラメーターをサポートするアシスタント トリガーを定義します。
| パラメーター | 説明 |
|---|---|
| FunctionDescription | モデルに提供されるアシスタント関数の説明を取得します。 |
| FunctionName | 省略可。 アシスタントによって呼び出される関数の名前を取得または設定します。 |
| ParameterDescriptionJson | 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。 |
注釈
AssistantSkillTrigger 注釈を使用すると、次のパラメーターをサポートするアシスタント トリガーを定義できます。
| 要素 | 説明 |
|---|---|
| 名前 | 入力バインドの名前を取得または設定します。 |
| functionDescription | モデルに提供されるアシスタント関数の説明を取得します。 |
| functionName | 省略可。 アシスタントによって呼び出される関数の名前を取得または設定します。 |
| parameterDescriptionJson | 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。 |
デコレーター
プレビュー中に、入力バインドを次のパラメーターをサポートする generic_trigger 型の assistantSkillTrigger バインドとして定義します。
| パラメーター | 説明 |
|---|---|
| function_description | モデルに提供されるアシスタント関数の説明を取得します。 |
| function_name | 省略可。 アシスタントによって呼び出される関数の名前を取得または設定します。 |
| parameterDescriptionJson | 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。 |
構成
このバインドでは、function.json ファイルで設定したこれらの構成プロパティをサポートします。
| プロパティ | 説明 |
|---|---|
| タイプ |
AssistantSkillTriggerである必要があります。 |
| 方向 |
inである必要があります。 |
| 名前 | トリガーの名前。 |
| functionName | アシスタントによって呼び出される関数の名前を取得または設定します。 |
| functionDescription | 言語モデルに提供されるアシスタント関数の説明を取得します。 |
| parameterDescriptionJson | 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。 |
構成
このバインドでは、コードで定義されている、これらのプロパティをサポートします。
| プロパティ | 説明 |
|---|---|
| タイプ |
AssistantSkillTriggerである必要があります。 |
| 名前 | トリガーの名前。 |
| functionName | アシスタントによって呼び出される関数の名前を取得または設定します。 |
| functionDescription | LLM に提供されるアシスタント関数の説明を取得します |
| parameterDescriptionJson | 省略可。 モデルに提供される関数パラメーターの JSON 記述を取得または設定します。 詳細については、「使用」をご覧ください。 |
完全な例については、セクションの例を参照してください。
使用方法
parameterDescriptionJson の JSON 値が指定されていない場合は、自動生成されます。 このオブジェクトの構文の詳細については、 OpenAIの関数呼び出しドキュメントを参照してください。
接続
Azure OpenAIのバインディング拡張を使うには、OpenAIモデル定義への接続を指定する必要があります。 以下のいずれかの方法を使って、バインディング内でOpenAIモデル接続を設定します。
-
AIConnectionNamebindingプロパティ(OpenAI Azure推奨)を使いましょう。 - OpenAI Azureのアプリ設定で
AZURE_OPENAI_ENDPOINTとAZURE_OPENAI_KEYを設定してください。 - アプリの設定で
Open_API_Keyだけに設定してください(https://api.openai.com用)。
接続の設定方法は、モデルAPIと認証方法の両方に依存し、以下の表に示されています:
| 認証/モデルAPI | Azure OpenAI | OpenAI(https://api.openai.com) |
|---|---|---|
| マネージド・アイデンティティ接続 | AIConnectionName |
サポートしていません |
| Key Vault 参照 | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| アプリ設定リファレンス | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
| 共有シークレット | AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY |
Open_API_Key |
管理型アイデンティティベースの接続と AIConnectionName プロパティを活用してください。
AIConnectionNameを使う場合、このプロパティ設定の値は接続の種類によって異なります。
-
マネージド・アイデンティティ接続:
AIConnectionNameプロパティ<CONNECTION_NAME_PREFIX>は、複数の設定群が共有するものであり、これらが共同でOpenAIへのアイデンティティベースの接続を定義しますAzure。 詳細については、「 同一性接続の定義」を参照してください。 -
Key Vault参照:
AIConnectionNameプロパティ設定は、APIキーが中央管理されている場所へのAzure Key Vault参照を返します。 詳細については、「Key Vault connectionsの定義」をご覧ください。 -
App Configuration reference:
AIConnectionNameプロパティ設定はAPIキーまたはKey Vault参照を返すAzure App Configuration参照を返します。 詳細については、接続記事のAzure App Configurationをご覧ください。 -
APIキー:
AIConnectionNameプロパティ設定はエンドポイントとキーを含むアプリ設定に解決されます。 共有鍵は漏洩する可能性があるため、可能な限り管理型ID接続を使用してください。 詳細については、「 接続の定義」を参照してください。
バインディング接続について詳しく知りたい方は、「Azure Functionsの接続管理」をご覧ください。
OpenAIのバインディングには、OpenAIとの接続を定義するアプリ設定群のAIConnectionNameを指定するための<ConnectionNamePrefix>プロパティAzure含まれています。
AIConnectionNameプロパティをmyAzureOpenAIに設定する際は、以下の管理されたID接続設定を考慮してください。
myAzureOpenAI__endpoint=https://contoso.openai.azure.com/myAzureOpenAI__credential=managedidentitymyAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222
実行時には、ホストはこれらの設定を単一の myAzureOpenAI 設定として解釈します。
"myAzureOpenAI":
{
"endpoint": "https://contoso.openai.azure.com/",
"credential": "managedidentity",
"clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}
マネージドIDを使う場合は、必ず Cognitive Services OpenAIユーザー ロールに自分のIDを追加してください。
ローカルで動作する場合は、これらの設定を local.settings.json プロジェクトファイルに追加してください。 詳細については、「 ID ベースの接続を使用したローカル開発」を参照してください。
詳細については、アプリケーション設定の操作に関する記事を参照してください。