مشاركة عبر


تخزن عمليات تضمين Azure OpenAI ربط الإخراج لوظائف Azure

هام

ملحق Azure OpenAI ل Azure Functions قيد المعاينة حاليا.

يسمح لك ربط إخراج مخزن تضمينات Azure OpenAI بكتابة الملفات إلى مخزن مستندات دلالي يمكن الرجوع إليه لاحقا في بحث دلالي.

للحصول على معلومات حول تفاصيل الإعداد والتكوين لملحق Azure OpenAI، راجع ملحقات Azure OpenAI لوظائف Azure. لمعرفة المزيد حول الترتيب الدلالي في Azure الذكاء الاصطناعي Search، راجع الترتيب الدلالي في Azure الذكاء الاصطناعي Search.

إشعار

يتم توفير المراجع والأمثلة فقط لنموذج Node.js v4.

إشعار

يتم توفير المراجع والأمثلة فقط لنموذج Python v2.

إشعار

بينما يتم دعم نموذجي عملية C#، يتم توفير أمثلة نموذج عامل معزول فقط.

مثال

يكتب هذا المثال دفق إدخال HTTP إلى مخزن مستندات دلالي في عنوان URL المتوفر.

public class EmbeddingsRequest
{
    [JsonPropertyName("url")]
    public string? Url { get; set; }
}
[Function("IngestFile")]
public static async Task<EmbeddingsStoreOutputResponse> IngestFile(
    [HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
    using StreamReader reader = new(req.Body);
    string request = await reader.ReadToEndAsync();

    EmbeddingsStoreOutputResponse badRequestResponse = new()
    {
        HttpResponse = new BadRequestResult(),
        SearchableDocument = new SearchableDocument(string.Empty)
    };

    if (string.IsNullOrWhiteSpace(request))
    {
        return badRequestResponse;
    }

    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))
    {
        return badRequestResponse;
    }

    string filename = Path.GetFileName(uri.AbsolutePath);

    return new EmbeddingsStoreOutputResponse
    {
        HttpResponse = new OkObjectResult(new { status = HttpStatusCode.OK }),
        SearchableDocument = new SearchableDocument(filename)
    };
}

يكتب هذا المثال دفق إدخال HTTP إلى مخزن مستندات دلالي في عنوان URL المتوفر.

@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,
            storeConnectionName = "AISearchEndpoint", collection = "openai-index",
            embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%") OutputBinding<EmbeddingsStoreOutputResponse> output,
    final ExecutionContext context) throws URISyntaxException {

    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;
    }
    public SearchableDocument getSearchableDocument() {
        return searchableDocument;
    }

}

يكتب هذا المثال دفق إدخال HTTP إلى مخزن مستندات دلالي في عنوان URL المتوفر.

const embeddingsStoreOutput = output.generic({
    type: "embeddingsStore",
    input: "{url}", 
    inputType: "url", 
    connectionName: "AISearchEndpoint", 
    collection: "openai-index", 
    embeddingsModel: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
});

app.http('IngestFile', {
    methods: ['POST'],
    authLevel: 'function',
    extraOutputs: [embeddingsStoreOutput],
    handler: async (request, context) => {
        let requestBody = await request.json();
        if (!requestBody || !requestBody.url) {
            throw new Error("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
        }

        let uri = requestBody.url;
        let url = new URL(uri);

        let fileName = path.basename(url.pathname);
        context.extraOutputs.set(embeddingsStoreOutput, { title: fileName });

        let response = {
            status: "success",
            title: fileName
        };

        return { status: 202, jsonBody: response } 
    }
});
interface EmbeddingsRequest {
    url?: string;
}

const embeddingsStoreOutput = output.generic({
    type: "embeddingsStore",
    input: "{url}", 
    inputType: "url", 
    connectionName: "AISearchEndpoint", 
    collection: "openai-index", 
    embeddingsModel: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
});

app.http('IngestFile', {
    methods: ['POST'],
    authLevel: 'function',
    extraOutputs: [embeddingsStoreOutput],
    handler: async (request, context) => {
        let requestBody: EmbeddingsRequest | null = await request.json();
        if (!requestBody || !requestBody.url) {
            throw new Error("Invalid request body. Make sure that you pass in {\"url\": value } as the request body.");
        }

        let uri = requestBody.url;
        let url = new URL(uri);

        let fileName = path.basename(url.pathname);
        context.extraOutputs.set(embeddingsStoreOutput, { title: fileName });

        let response = {
            status: "success",
            title: fileName
        };

        return { status: 202, jsonBody: response } 
    }
});

يكتب هذا المثال دفق إدخال 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",
      "storeConnectionName": "AISearchEndpoint",
      "collection": "openai-index",
      "embeddingsModel": "%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",
    store_connection_name="AISearchEndpoint",
    collection="openai-index",
    embeddings_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 لتعريف ربط إخراج مخزن التضمينات، والذي يدعم هذه المعلمات:

المعلمة ‏‏الوصف‬
الادخال سلسلة الإدخال التي سيتم إنشاء تضمينات لها.
AIConnectionName اختياري. الحصول على اسم قسم التكوين أو تعيينه لإعدادات اتصال الخدمة الذكاء الاصطناعي. بالنسبة إلى Azure OpenAI: إذا تم تحديده، يبحث عن قيم "نقطة النهاية" و"المفتاح" في قسم التكوين هذا. إذا لم يتم تحديده أو لم يكن المقطع موجودا، يعود إلى متغيرات البيئة: AZURE_OPENAI_ENDPOINT AZURE_OPENAI_KEY. لمصادقة الهوية المدارة المعينة من قبل المستخدم، هذه الخاصية مطلوبة. بالنسبة لخدمة OpenAI (غير Azure)، قم بتعيين متغير البيئة OPENAI_API_KEY.
EmbeddingsModel اختياري. معرف النموذج المراد استخدامه، والذي يتم تعيينه افتراضيا إلى text-embedding-ada-002. يجب عدم تغيير النموذج لقاعدة بيانات موجودة. لمزيد من المعلومات، راجع الاستخدام.
MaxChunkLength اختياري. الحد الأقصى لعدد الأحرف المستخدمة لتقسيم الإدخال. لمزيد من المعلومات، راجع الاستخدام.
MaxOverlap اختياري. الحصول على الحد الأقصى لعدد الأحرف أو تعيينه للتداخل بين المجموعات.
نوع الإدخال اختياري. يحصل على نوع الإدخال.
اسم اتصال المتجر اسم إعداد التطبيق أو متغير البيئة الذي يحتوي على قيمة سلسلة الاتصال. تدعم هذه الخاصية تعبيرات الربط.
مجموعة اسم المجموعة أو الجدول أو الفهرس للبحث. تدعم هذه الخاصية تعبيرات الربط.

تعليقات توضيحية

EmbeddingsStoreOutput يمكنك التعليق التوضيحي من تحديد ربط إخراج مخزن التضمينات، والذي يدعم هذه المعلمات:

العنصر ‏‏الوصف‬
الاسم الحصول على اسم ربط الإخراج أو تعيينه.
إدخال سلسلة الإدخال التي سيتم إنشاء تضمينات لها.
aiConnectionName اختياري. الحصول على اسم قسم التكوين أو تعيينه لإعدادات اتصال الخدمة الذكاء الاصطناعي. بالنسبة إلى Azure OpenAI: إذا تم تحديده، يبحث عن قيم "نقطة النهاية" و"المفتاح" في قسم التكوين هذا. إذا لم يتم تحديده أو لم يكن المقطع موجودا، يعود إلى متغيرات البيئة: AZURE_OPENAI_ENDPOINT AZURE_OPENAI_KEY. لمصادقة الهوية المدارة المعينة من قبل المستخدم، هذه الخاصية مطلوبة. بالنسبة لخدمة OpenAI (غير Azure)، قم بتعيين متغير البيئة OPENAI_API_KEY.
embeddingsModel اختياري. معرف النموذج المراد استخدامه، والذي يتم تعيينه افتراضيا إلى text-embedding-ada-002. يجب عدم تغيير النموذج لقاعدة بيانات موجودة. لمزيد من المعلومات، راجع الاستخدام.
maxChunkLength اختياري. الحد الأقصى لعدد الأحرف المستخدمة لتقسيم الإدخال. لمزيد من المعلومات، راجع الاستخدام.
maxOverlap اختياري. الحصول على الحد الأقصى لعدد الأحرف أو تعيينه للتداخل بين المجموعات.
نوع الإدخال اختياري. يحصل على نوع الإدخال.
اسم اتصال المتجر اسم إعداد التطبيق أو متغير البيئة الذي يحتوي على قيمة سلسلة الاتصال. تدعم هذه الخاصية تعبيرات الربط.
مجموعة اسم المجموعة أو الجدول أو الفهرس للبحث. تدعم هذه الخاصية تعبيرات الربط.

الديكور

أثناء المعاينة، حدد ربط الإخراج كربط generic_output_binding من النوع semanticSearch، والذي يدعم هذه المعلمات:

المعلمة ‏‏الوصف‬
arg_name اسم المتغير الذي يمثل معلمة الربط.
إدخال سلسلة الإدخال التي سيتم إنشاء تضمينات لها.
ai_connection_name اختياري. الحصول على اسم قسم التكوين أو تعيينه لإعدادات اتصال الخدمة الذكاء الاصطناعي. بالنسبة إلى Azure OpenAI: إذا تم تحديده، يبحث عن قيم "نقطة النهاية" و"المفتاح" في قسم التكوين هذا. إذا لم يتم تحديده أو لم يكن المقطع موجودا، يعود إلى متغيرات البيئة: AZURE_OPENAI_ENDPOINT AZURE_OPENAI_KEY. لمصادقة الهوية المدارة المعينة من قبل المستخدم، هذه الخاصية مطلوبة. بالنسبة لخدمة OpenAI (غير Azure)، قم بتعيين متغير البيئة OPENAI_API_KEY.
embeddings_model اختياري. معرف النموذج المراد استخدامه، والذي يتم تعيينه افتراضيا إلى text-embedding-ada-002. يجب عدم تغيير النموذج لقاعدة بيانات موجودة. لمزيد من المعلومات، راجع الاستخدام.
maxChunkLength اختياري. الحد الأقصى لعدد الأحرف المستخدمة لتقسيم الإدخال. لمزيد من المعلومات، راجع الاستخدام.
max_overlap اختياري. الحصول على الحد الأقصى لعدد الأحرف أو تعيينه للتداخل بين المجموعات.
input_type يحصل على نوع الإدخال.
store_connection_name اسم إعداد التطبيق أو متغير البيئة الذي يحتوي على قيمة سلسلة الاتصال. تدعم هذه الخاصية تعبيرات الربط.
مجموعة اسم المجموعة أو الجدول أو الفهرس للبحث. تدعم هذه الخاصية تعبيرات الربط.

التكوين

يدعم الربط خصائص التكوين هذه التي قمت بتعيينها في ملف function.json.

الخاصية ‏‏الوصف‬
النوع يجب أن يكونembeddingsStore.
الاتجاه يجب أن يكونout.
الاسم اسم ربط الإخراج.
إدخال سلسلة الإدخال التي سيتم إنشاء تضمينات لها.
aiConnectionName اختياري. الحصول على اسم قسم التكوين أو تعيينه لإعدادات اتصال الخدمة الذكاء الاصطناعي. بالنسبة إلى Azure OpenAI: إذا تم تحديده، يبحث عن قيم "نقطة النهاية" و"المفتاح" في قسم التكوين هذا. إذا لم يتم تحديده أو لم يكن المقطع موجودا، يعود إلى متغيرات البيئة: AZURE_OPENAI_ENDPOINT AZURE_OPENAI_KEY. لمصادقة الهوية المدارة المعينة من قبل المستخدم، هذه الخاصية مطلوبة. بالنسبة لخدمة OpenAI (غير Azure)، قم بتعيين متغير البيئة OPENAI_API_KEY.
embeddingsModel اختياري. معرف النموذج المراد استخدامه، والذي يتم تعيينه افتراضيا إلى text-embedding-ada-002. يجب عدم تغيير النموذج لقاعدة بيانات موجودة. لمزيد من المعلومات، راجع الاستخدام.
maxChunkLength اختياري. الحد الأقصى لعدد الأحرف المستخدمة لتقسيم الإدخال. لمزيد من المعلومات، راجع الاستخدام.
maxOverlap اختياري. الحصول على الحد الأقصى لعدد الأحرف أو تعيينه للتداخل بين المجموعات.
نوع الإدخال اختياري. يحصل على نوع الإدخال.
اسم اتصال المتجر اسم إعداد التطبيق أو متغير البيئة الذي يحتوي على قيمة سلسلة الاتصال. تدعم هذه الخاصية تعبيرات الربط.
مجموعة اسم المجموعة أو الجدول أو الفهرس للبحث. تدعم هذه الخاصية تعبيرات الربط.

التكوين

يدعم الربط هذه الخصائص، والتي يتم تعريفها في التعليمات البرمجية الخاصة بك:

الخاصية ‏‏الوصف‬
إدخال سلسلة الإدخال التي سيتم إنشاء تضمينات لها.
aiConnectionName اختياري. الحصول على اسم قسم التكوين أو تعيينه لإعدادات اتصال الخدمة الذكاء الاصطناعي. بالنسبة إلى Azure OpenAI: إذا تم تحديده، يبحث عن قيم "نقطة النهاية" و"المفتاح" في قسم التكوين هذا. إذا لم يتم تحديده أو لم يكن المقطع موجودا، يعود إلى متغيرات البيئة: AZURE_OPENAI_ENDPOINT AZURE_OPENAI_KEY. لمصادقة الهوية المدارة المعينة من قبل المستخدم، هذه الخاصية مطلوبة. بالنسبة لخدمة OpenAI (غير Azure)، قم بتعيين متغير البيئة OPENAI_API_KEY.
embeddingsModel اختياري. معرف النموذج المراد استخدامه، والذي يتم تعيينه افتراضيا إلى text-embedding-ada-002. يجب عدم تغيير النموذج لقاعدة بيانات موجودة. لمزيد من المعلومات، راجع الاستخدام.
maxChunkLength اختياري. الحد الأقصى لعدد الأحرف المستخدمة لتقسيم الإدخال. لمزيد من المعلومات، راجع الاستخدام.
maxOverlap اختياري. الحصول على الحد الأقصى لعدد الأحرف أو تعيينه للتداخل بين المجموعات.
نوع الإدخال اختياري. يحصل على نوع الإدخال.
اسم اتصال المتجر اسم إعداد التطبيق أو متغير البيئة الذي يحتوي على قيمة سلسلة الاتصال. تدعم هذه الخاصية تعبيرات الربط.
مجموعة اسم المجموعة أو الجدول أو الفهرس للبحث. تدعم هذه الخاصية تعبيرات الربط.

الاستخدام

راجع قسم Example للحصول على أمثلة كاملة.