重要
適用於 Azure Functions 的 Azure OpenAI 延伸模組目前為預覽狀態。
Azure OpenAI 助理觸發程序可讓您根據對助理提出的自訂聊天機器人或技能要求來執行程式碼。
如需 Azure OpenAI 延伸模組的安裝和設定詳細資訊,請參閱適用於 Azure Functions 的 Azure OpenAI 延伸模組。 若要深入了解 Azure OpenAI 助理,請參閱 Azure OpenAI 助理 API。
注意
參考和範例僅適用於 Node.js v4 模型。
注意
參考和範例僅適用於 Python v2 模型。
注意
雖然支援這兩個 C# 進程模型,但只會 提供隔離的背景工作模型 範例。
範例
目前這款綁定沒有 Go 支援。
此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。
[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));
}
此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。
/**
* 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);
}
此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。
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))
}
})
此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。
以下是 新增 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
此範例示範如何建立助理,將新的待辦工作新增至資料庫。 觸發程序具有模型所使用的 Create a new todo task 靜態描述。 函式本身會採用字串,表示要加入的新工作。 執行時,函式會將工作新增為自訂項目存放區中的新待辦事項項目,並從存放區傳回回應。
@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 屬性(Azure OpenAI 偏好)。 - 在應用程式內設定並設定
AZURE_OPENAI_ENDPOINTAZURE_OPENAI_KEY(針對 Azure OpenAI)。 - 只
Open_API_Key在應用程式設定中設定(針對https://api.openai.com)。
連線的設定方式取決於模型 API 與認證方法,如下表所示:
| 認證/模型 API | Azure OpenAI | OpenAI (https://api.openai.com) |
|---|---|---|
| 管理身份連線 | AIConnectionName |
不支援 |
| 金鑰保存庫 參考 | 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>一組設定共享,這些設定共同定義了與 Azure OpenAI 的身份基礎連線。 欲了解更多資訊,請參閱定義身份連結。 -
金鑰保存庫 參考:
AIConnectionName屬性設定回傳一個 Azure Key Vault 參考,指向 API 金鑰集中維護的位置。 欲了解更多資訊,請參閱定義 金鑰保存庫 連接。 -
App Configuration 參考:
AIConnectionName屬性設定會回傳一個 Azure 應用程式組態 參考,該參考會回傳 API 金鑰或 金鑰保存庫 參考。 欲了解更多資訊,請參閱連接條目中的 Azure 應用程式組態。 -
API 金鑰:
AIConnectionName屬性設定會解析成包含端點與金鑰的應用程式設定。 由於共享金鑰可能被入侵,請盡可能使用受管理身份連線。 欲了解更多資訊,請參閱定義連結。
想了解更多關於綁定連接的資訊,請參閱 Azure Functions 中的 Manage connections 。
OpenAI 綁定包含一個AIConnectionName屬性,你可以用來指定定義與 Azure OpenAI 連結的應用程式設定群組:<ConnectionNamePrefix>
當你將屬性設定 AIConnectionName 為 myAzureOpenAI:
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"
}
使用受管理身份時,務必將你的身份加入認知 服務 OpenAI 使用者 角色。
本地執行時,請將這些設定加入 local.settings.json 專案檔案。 如需詳細資訊,請參閱 使用身分識別型連線進行本機開發。
如需詳細資訊,請參閱使用應用程式設定。