Выходная привязка azure OpenAI для Функции Azure
Внимание
Расширение Azure OpenAI для Функции Azure в настоящее время находится в предварительной версии.
Выходная привязка хранилища Azure OpenAI позволяет записывать файлы в хранилище семантических документов, на которое можно ссылаться позже в семантическом поиске.
Сведения о настройке и настройке расширения Azure OpenAI см. в Функции Azure расширения Azure OpenAI. Дополнительные сведения о семантике ранжирования в службе "Поиск ИИ Azure" см. в статье "Семантический ранжирование" в службе "Поиск ИИ Azure".
Примечание.
Ссылки и примеры предоставляются только для модели Node.js версии 4.
Примечание.
Ссылки и примеры предоставляются только для модели Python версии 2.
Примечание.
Хотя поддерживаются обе модели процессов C#, предоставляются только примеры изолированных рабочих моделей .
Пример
В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.
[Function("IngestFile")]
public static async Task<EmbeddingsStoreOutputResponse> IngestFile(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
ArgumentNullException.ThrowIfNull(req);
using StreamReader reader = new(req.Body);
string request = await reader.ReadToEndAsync();
if (string.IsNullOrWhiteSpace(request))
{
throw new ArgumentException("Request body is empty.");
}
EmbeddingsRequest? requestBody = JsonSerializer.Deserialize<EmbeddingsRequest>(request);
if (string.IsNullOrWhiteSpace(requestBody?.Url))
{
throw new ArgumentException("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
}
if (!Uri.TryCreate(requestBody.Url, UriKind.Absolute, out Uri? uri))
{
throw new ArgumentException("Invalid Url format.");
}
string filename = Path.GetFileName(uri.AbsolutePath);
return new EmbeddingsStoreOutputResponse
{
HttpResponse = new OkObjectResult(new { status = HttpStatusCode.OK }),
SearchableDocument = new SearchableDocument(filename)
};
В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.
import com.microsoft.azure.functions.openai.annotation.search.SemanticSearch;
import com.sun.jndi.toolkit.url.Uri;
public class FilePrompt {
@FunctionName("IngestFile")
public HttpResponseMessage ingestFile(
@HttpTrigger(
name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<EmbeddingsRequest> request,
@EmbeddingsStoreOutput(name="EmbeddingsStoreOutput", input = "{url}", inputType = InputType.Url,
connectionName = "AISearchEndpoint", collection = "openai-index",
model = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") OutputBinding<EmbeddingsStoreOutputResponse> output,
final ExecutionContext context) throws MalformedURLException {
if (request.getBody() == null || request.getBody().getUrl() == null)
{
throw new IllegalArgumentException("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
}
Uri uri = new Uri(request.getBody().getUrl());
String filename = Paths.get(uri.getPath()).getFileName().toString();
EmbeddingsStoreOutputResponse embeddingsStoreOutputResponse = new EmbeddingsStoreOutputResponse(new SearchableDocument(filename));
output.setValue(embeddingsStoreOutputResponse);
JSONObject response = new JSONObject();
response.put("status", "success");
response.put("title", filename);
return request.createResponseBuilder(HttpStatus.CREATED)
.header("Content-Type", "application/json")
.body(response)
.build();
}
public class EmbeddingsStoreOutputResponse {
private SearchableDocument searchableDocument;
public EmbeddingsStoreOutputResponse(SearchableDocument searchableDocument) {
this.searchableDocument = searchableDocument;
}
Примеры пока недоступны.
В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.
const embeddingsHttpInput = input.generic({
input: '{rawText}',
inputType: 'RawText',
type: 'embeddings',
model: '%EMBEDDING_MODEL_DEPLOYMENT_NAME%'
})
app.http('generateEmbeddings', {
methods: ['POST'],
route: 'embeddings',
authLevel: 'function',
extraInputs: [embeddingsHttpInput],
handler: async (request, context) => {
let requestBody: EmbeddingsHttpRequest = await request.json();
let response: any = context.extraInputs.get(embeddingsHttpInput);
context.log(
`Received ${response.count} embedding(s) for input text containing ${requestBody.RawText.length} characters.`
);
// TODO: Store the embeddings into a database or other storage.
return {status: 202}
}
});
interface EmbeddingsFilePath {
FilePath?: string;
}
const embeddingsFilePathInput = input.generic({
input: '{filePath}',
В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.
Ниже приведен файл function.json для приема файлов:
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
},
{
"name": "EmbeddingsStoreOutput",
"type": "embeddingsStore",
"direction": "out",
"input": "{url}",
"inputType": "Url",
"connectionName": "AISearchEndpoint",
"collection": "openai-index",
"model": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
}
]
}
Дополнительные сведения о свойствах файла function.json см. в разделе "Конфигурация ".
using namespace System.Net
param($Request, $TriggerMetadata)
$ErrorActionPreference = 'Stop'
$inputJson = $Request.Body
if (-not $inputJson -or -not $inputJson.Url) {
throw 'Invalid request body. Make sure that you pass in {\"url\": value } as the request body.'
}
$uri = [URI]$inputJson.Url
$filename = [System.IO.Path]::GetFileName($uri.AbsolutePath)
Push-OutputBinding -Name EmbeddingsStoreOutput -Value @{
"title" = $filename
}
$response = @{
"status" = "success"
"title" = $filename
}
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $response
Headers = @{
"Content-Type" = "application/json"
}
})
В этом примере записывается поток входных данных HTTP в хранилище семантических документов по указанному URL-адресу.
@app.function_name("IngestFile")
@app.route(methods=["POST"])
@app.embeddings_store_output(arg_name="requests", input="{url}", input_type="url", connection_name="AISearchEndpoint", collection="openai-index", model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%")
def ingest_file(req: func.HttpRequest, requests: func.Out[str]) -> func.HttpResponse:
user_message = req.get_json()
if not user_message:
return func.HttpResponse(json.dumps({"message": "No message provided"}), status_code=400, mimetype="application/json")
file_name_with_extension = os.path.basename(user_message["url"])
title = os.path.splitext(file_name_with_extension)[0]
create_request = {
"title": title
}
requests.set(json.dumps(create_request))
response_json = {
"status": "success",
"title": title
}
return func.HttpResponse(json.dumps(response_json), status_code=200, mimetype="application/json")
Атрибуты
EmbeddingsStoreOutput
Примените атрибут, чтобы определить выходную привязку хранилища внедрения, которая поддерживает следующие параметры:
Параметр | Описание |
---|---|
Входные данные | Входная строка, для которой создается внедрение. |
Модель | Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002 . Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование". |
MaxChunkLength | Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование". |
MaxOverlap | Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками. |
InputType | Необязательно. Возвращает тип входных данных. |
ConnectionName | Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок. |
Коллекция | Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок. |
Заметки
Заметка EmbeddingsStoreOutput
позволяет определить выходную привязку хранилища внедрения, которая поддерживает следующие параметры:
Элемент | Description |
---|---|
name | Возвращает или задает имя выходной привязки. |
input | Входная строка, для которой создается внедрение. |
model | Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002 . Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование". |
maxChunkLength | Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование". |
maxOverlap | Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками. |
inputType | Необязательно. Возвращает тип входных данных. |
connectionName | Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок. |
collection | Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок. |
Декораторы
Во время предварительной версии определите выходную привязку как привязку generic_output_binding
типа semanticSearch
, которая поддерживает следующие параметры:
Параметр | Описание |
---|---|
arg_name | Имя переменной, представляющей параметр привязки. |
input | Входная строка, для которой создается внедрение. |
model | Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002 . Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование". |
maxChunkLength | Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование". |
max_overlap | Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками. |
input_type | Возвращает тип входных данных. |
connection_name | Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок. |
collection | Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок. |
Настройка
Привязка поддерживает эти свойства конфигурации, заданные в файле function.json.
Свойство | Описание |
---|---|
type | Этот параметр должен содержать значение embeddingsStore . |
direction | Этот параметр должен содержать значение out . |
name | Имя выходной привязки. |
input | Входная строка, для которой создается внедрение. |
model | Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002 . Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование". |
maxChunkLength | Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование". |
maxOverlap | Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками. |
inputType | Необязательно. Возвращает тип входных данных. |
connectionName | Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок. |
collection | Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок. |
Настройка
Привязка поддерживает эти свойства, определенные в коде:
Свойство | Description |
---|---|
input | Входная строка, для которой создается внедрение. |
model | Необязательно. Идентификатор модели, используемой по умолчанию text-embedding-ada-002 . Модель для существующей базы данных не следует изменять. Дополнительные сведения см. в разделе "Использование". |
maxChunkLength | Необязательно. Максимальное количество символов, используемых для блокирования входных данных. Дополнительные сведения см. в разделе "Использование". |
maxOverlap | Необязательно. Возвращает или задает максимальное количество символов, перекрывающихся между блоками. |
inputType | Необязательно. Возвращает тип входных данных. |
connectionName | Имя параметра приложения или переменной среды, содержащей значение строка подключения. Это свойство поддерживает выражения привязок. |
collection | Имя коллекции или таблицы или индекса для поиска. Это свойство поддерживает выражения привязок. |
Использование
Подробные примеры см. в разделе Примеры.