Azure OpenAI Semantic Search-indatabindning för Azure Functions

Viktigt!

Azure OpenAI-tillägget för Azure Functions är för närvarande i förhandsversion.

Med bindningen för semantisk sökning i Azure OpenAI kan du använda semantisk sökning i dina inbäddningar.

Information om konfiguration och konfigurationsinformation för Azure OpenAI-tillägget finns i Azure OpenAI-tillägg för Azure Functions. Mer information om semantisk rankning i Azure AI-sökning finns i Semantisk rankning i Azure AI-sökning.

Anmärkning

Referenser och exempel tillhandahålls endast för modellen Node.js v4.

Anmärkning

Referenser och exempel tillhandahålls endast för Python v2-modellen.

Anmärkning

Båda C#-processmodellerna stöds, men endast exempel på isolerade arbetsmodeller tillhandahålls.

Exempel

Go-stöd finns för närvarande inte tillgängligt för denna bindning.

Det här exemplet visar hur du utför en semantisk sökning på en fil.

[Function("PromptFile")]
public static IActionResult PromptFile(
    [HttpTrigger(AuthorizationLevel.Function, "post")] SemanticSearchRequest unused,
    [SemanticSearchInput("AISearchEndpoint", "openai-index", Query = "{prompt}", ChatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", EmbeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", AIConnectionName = "AzureOpenAI")] SemanticSearchContext result)
{
    return new ContentResult { Content = result.Response, ContentType = "text/plain" };
}

Det här exemplet visar hur du utför en semantisk sökning på en fil.

@FunctionName("PromptFile")
public HttpResponseMessage promptFile(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.FUNCTION)
        HttpRequestMessage<SemanticSearchRequest> request,
    @SemanticSearch(name = "search", searchConnectionName = "AISearchEndpoint", collection = "openai-index", query = "{prompt}", chatModel = "%CHAT_MODEL_DEPLOYMENT_NAME%", embeddingsModel = "%EMBEDDING_MODEL_DEPLOYMENT_NAME%", isReasoningModel = false, aiConnectionName = "AzureOpenAI" ) String semanticSearchContext,
    final ExecutionContext context) {
        String response = new JSONObject(semanticSearchContext).getString("Response");
        return request.createResponseBuilder(HttpStatus.OK)
        .header("Content-Type", "application/json")
        .body(response)
        .build();        
}
public class SemanticSearchRequest {
    public String prompt;
    public String getPrompt() {
        return prompt;
    }
    public void setPrompt(String prompt) {
        this.prompt = prompt;
    }        
}

Det här exemplet visar hur du utför en semantisk sökning på en fil.

const semanticSearchInput = input.generic({
    type: "semanticSearch",
    searchConnectionName: "AISearchEndpoint",
    collection: "openai-index",
    query: "{prompt}",
    chatModel: "%CHAT_MODEL_DEPLOYMENT_NAME%",
    embeddingsModel: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
    aiConnectionName: 'AzureOpenAI',
});

app.http('PromptFile', {
    methods: ['POST'],
    authLevel: 'function',
    extraInputs: [semanticSearchInput],
    handler: async (_request, context) => {
        var responseBody = context.extraInputs.get(semanticSearchInput)

        return { status: 200, body: responseBody.Response.trim() }
    }
});
const semanticSearchInput = input.generic({
    type: "semanticSearch",
    searchConnectionName: "AISearchEndpoint",
    collection: "openai-index",
    query: "{prompt}",
    chatModel: "%CHAT_MODEL_DEPLOYMENT_NAME%",
    aiConnectionName: 'AzureOpenAI',
    embeddingsModel: "%EMBEDDING_MODEL_DEPLOYMENT_NAME%"
});

app.http('PromptFile', {
    methods: ['POST'],
    authLevel: 'function',
    extraInputs: [semanticSearchInput],
    handler: async (_request, context) => {
        var responseBody: any = context.extraInputs.get(semanticSearchInput)

        return { status: 200, body: responseBody.Response.trim() }
    }
});

Det här exemplet visar hur du utför en semantisk sökning på en fil.

Här är function.json-filen för att fråga en fil:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    },
    {
      "name": "SemanticSearchInput",
      "type": "semanticSearch",
      "direction": "in",
      "searchConnectionName": "AISearchEndpoint",
      "collection": "openai-index",
      "query": "{prompt}",
      "chatModel": "%CHAT_MODEL_DEPLOYMENT_NAME%",
      "embeddingsModel": "%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
      "aiConnectionName": "AzureOpenAI"
    }
  ]
}

Mer information om function.json filegenskaper finns i avsnittet Konfiguration .

using namespace System.Net

param($Request, $TriggerMetadata, $SemanticSearchInput)

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
        StatusCode = [HttpStatusCode]::OK
        Body       = $SemanticSearchInput.Response
    })

Det här exemplet visar hur du utför en semantisk sökning på en fil.

@app.function_name("PromptFile")
@app.route(methods=["POST"])
@app.semantic_search_input(
    arg_name="result",
    search_connection_name="AISearchEndpoint",
    collection="openai-index",
    query="{prompt}",
    embeddings_model="%EMBEDDING_MODEL_DEPLOYMENT_NAME%",
    ai_connection_name="AzureOpenAI",
    chat_model="%CHAT_MODEL_DEPLOYMENT_NAME%",
)
def prompt_file(req: func.HttpRequest, result: str) -> func.HttpResponse:
    result_json = json.loads(result)
    response_json = {
        "content": result_json.get("Response"),
        "content_type": "text/plain",
    }
    return func.HttpResponse(
        json.dumps(response_json), status_code=200, mimetype="application/json"
    )

Egenskaper

SemanticSearchInput Använd attributet för att definiera en semantisk sökindatabindning som stöder följande parametrar:

Parameter Beskrivning
SearchConnectionName Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck.
Samling Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck.
Fråga Den semantiska frågetext som ska användas för sökning. Den här egenskapen stöder bindningsuttryck.
EmbeddingsModel Valfritt. ID:t för modellen som ska användas för inbäddningar. Standardvärdet är text-embedding-3-small. Den här egenskapen stöder bindningsuttryck.
ChatModel Valfritt. Hämtar eller anger namnet på den stora språkmodellen som ska anropas för chattsvar. Standardvärdet är gpt-3.5-turbo. Den här egenskapen stöder bindningsuttryck.
AIConnectionName Valfritt. Hämtar eller anger namnet på konfigurationsavsnittet för anslutningsinställningar för AI-tjänsten. För Azure OpenAI: Om det anges söker du efter värdena "Slutpunkt" och "Nyckel" i det här konfigurationsavsnittet. Om det inte anges eller om avsnittet inte finns återgår du till miljövariabler: AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_KEY. För användartilldelad hanterad identitetsautentisering krävs den här egenskapen. För OpenAI-tjänsten (icke-Azure) anger du miljövariabeln OPENAI_API_KEY.
SystemPrompt Valfritt. Hämtar eller ställer in systemprompten som ska användas för att fråga den stora språkmodellen. Systemprompten läggs till med kunskap som hämtas som ett resultat av Query. Den kombinerade prompten skickas till OpenAI Chat-API:et. Den här egenskapen stöder bindningsuttryck.
MaxKnowledgeCount Valfritt. Hämtar eller anger antalet kunskapsobjekt som ska matas SystemPromptin i .
IsReasoningModel Valfritt. Hämtar eller anger ett värde som anger om chattens slutförandemodell är en resonemangsmodell. Det här alternativet är experimentellt och associerat med resonemangsmodellen tills alla modeller har paritet i de förväntade egenskaperna, med standardvärdet false.

Anteckningar

Med anteckningen SemanticSearchInput kan du definiera en semantisk sökindatabindning som stöder följande parametrar:

Komponent Beskrivning
Namn Hämtar eller anger namnet på indatabindningen.
searchConnectionName Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck.
samling Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck.
fråga Den semantiska frågetext som ska användas för sökning. Den här egenskapen stöder bindningsuttryck.
embeddingsModel Valfritt. ID:t för modellen som ska användas för inbäddningar. Standardvärdet är text-embedding-3-small. Den här egenskapen stöder bindningsuttryck.
chatModel Valfritt. Hämtar eller anger namnet på den stora språkmodellen som ska anropas för chattsvar. Standardvärdet är gpt-3.5-turbo. Den här egenskapen stöder bindningsuttryck.
aiConnectionName Valfritt. Hämtar eller anger namnet på konfigurationsavsnittet för anslutningsinställningar för AI-tjänsten. För Azure OpenAI: Om det anges söker du efter värdena "Slutpunkt" och "Nyckel" i det här konfigurationsavsnittet. Om det inte anges eller om avsnittet inte finns återgår du till miljövariabler: AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_KEY. För användartilldelad hanterad identitetsautentisering krävs den här egenskapen. För OpenAI-tjänsten (icke-Azure) anger du miljövariabeln OPENAI_API_KEY.
systemPrompt Valfritt. Hämtar eller ställer in systemprompten som ska användas för att fråga den stora språkmodellen. Systemprompten läggs till med kunskap som hämtas som ett resultat av Query. Den kombinerade prompten skickas till OpenAI Chat-API:et. Den här egenskapen stöder bindningsuttryck.
maxKnowledgeCount Valfritt. Hämtar eller anger antalet kunskapsobjekt som ska matas SystemPromptin i .
isReasoningModel Valfritt. Hämtar eller anger ett värde som anger om chattens slutförandemodell är en resonemangsmodell. Det här alternativet är experimentellt och associerat med resonemangsmodellen tills alla modeller har paritet i de förväntade egenskaperna, med standardvärdet false.

Dekoratörer

Under förhandsversionen definierar du indatabindningen som en generic_input_binding bindning av typen semanticSearch, som stöder följande parametrar:

Parameter Beskrivning
arg_name Namnet på variabeln som representerar bindningsparametern.
search_connection_name Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck.
samling Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck.
fråga Den semantiska frågetext som ska användas för sökning. Den här egenskapen stöder bindningsuttryck.
embeddings_model Valfritt. ID:t för modellen som ska användas för inbäddningar. Standardvärdet är text-embedding-3-small. Den här egenskapen stöder bindningsuttryck.
chat_model Valfritt. Hämtar eller anger namnet på den stora språkmodellen som ska anropas för chattsvar. Standardvärdet är gpt-3.5-turbo. Den här egenskapen stöder bindningsuttryck.
ai_connection_name Valfritt. Hämtar eller anger namnet på konfigurationsavsnittet för anslutningsinställningar för AI-tjänsten. För Azure OpenAI: Om det anges söker du efter värdena "Slutpunkt" och "Nyckel" i det här konfigurationsavsnittet. Om det inte anges eller om avsnittet inte finns återgår du till miljövariabler: AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_KEY. För användartilldelad hanterad identitetsautentisering krävs den här egenskapen. För OpenAI-tjänsten (icke-Azure) anger du miljövariabeln OPENAI_API_KEY.
system_prompt Valfritt. Hämtar eller ställer in systemprompten som ska användas för att fråga den stora språkmodellen. Systemprompten läggs till med kunskap som hämtas som ett resultat av Query. Den kombinerade prompten skickas till OpenAI Chat-API:et. Den här egenskapen stöder bindningsuttryck.
max_knowledge_count Valfritt. Hämtar eller anger antalet kunskapsobjekt som ska matas SystemPromptin i .
is_reasoning _model Valfritt. Hämtar eller anger ett värde som anger om chattens slutförandemodell är en resonemangsmodell. Det här alternativet är experimentellt och associerat med resonemangsmodellen tills alla modeller har paritet i de förväntade egenskaperna, med standardvärdet false.

Konfiguration

Bindningen stöder de konfigurationsegenskaper som du anger i filen function.json.

Fastighet Beskrivning
typ Måste vara semanticSearch.
riktning Måste vara in.
Namn Namnet på indatabindningen.
searchConnectionName Hämtar eller anger namnet på en appinställning eller miljövariabel som innehåller ett anslutningssträngsvärde. Den här egenskapen stöder bindningsuttryck.
samling Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck.
fråga Den semantiska frågetext som ska användas för sökning. Den här egenskapen stöder bindningsuttryck.
embeddingsModel Valfritt. ID:t för modellen som ska användas för inbäddningar. Standardvärdet är text-embedding-3-small. Den här egenskapen stöder bindningsuttryck.
chatModel Valfritt. Hämtar eller anger namnet på den stora språkmodellen som ska anropas för chattsvar. Standardvärdet är gpt-3.5-turbo. Den här egenskapen stöder bindningsuttryck.
aiConnectionName Valfritt. Hämtar eller anger namnet på konfigurationsavsnittet för anslutningsinställningar för AI-tjänsten. För Azure OpenAI: Om det anges söker du efter värdena "Slutpunkt" och "Nyckel" i det här konfigurationsavsnittet. Om det inte anges eller om avsnittet inte finns återgår du till miljövariabler: AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_KEY. För användartilldelad hanterad identitetsautentisering krävs den här egenskapen. För OpenAI-tjänsten (icke-Azure) anger du miljövariabeln OPENAI_API_KEY.
systemPrompt Valfritt. Hämtar eller ställer in systemprompten som ska användas för att fråga den stora språkmodellen. Systemprompten läggs till med kunskap som hämtas som ett resultat av Query. Den kombinerade prompten skickas till OpenAI Chat-API:et. Den här egenskapen stöder bindningsuttryck.
maxKnowledgeCount Valfritt. Hämtar eller anger antalet kunskapsobjekt som ska matas SystemPromptin i .
isReasoningModel Valfritt. Hämtar eller anger ett värde som anger om chattens slutförandemodell är en resonemangsmodell. Det här alternativet är experimentellt och associerat med resonemangsmodellen tills alla modeller har paritet i de förväntade egenskaperna, med standardvärdet false.

Konfiguration

Bindningen stöder dessa egenskaper, som definieras i koden:

Fastighet Beskrivning
searchConnectionName Namnet på en appinställning eller miljövariabel som innehåller värdet anslutningssträng. Den här egenskapen stöder bindningsuttryck.
samling Namnet på samlingen eller tabellen eller indexet som ska sökas. Den här egenskapen stöder bindningsuttryck.
fråga Den semantiska frågetext som ska användas för sökning. Den här egenskapen stöder bindningsuttryck.
embeddingsModel Valfritt. ID:t för modellen som ska användas för inbäddningar. Standardvärdet är text-embedding-3-small. Den här egenskapen stöder bindningsuttryck.
chatModel Valfritt. Hämtar eller anger namnet på den stora språkmodellen som ska anropas för chattsvar. Standardvärdet är gpt-3.5-turbo. Den här egenskapen stöder bindningsuttryck.
aiConnectionName Valfritt. Hämtar eller anger namnet på konfigurationsavsnittet för anslutningsinställningar för AI-tjänsten. För Azure OpenAI: Om det anges söker du efter värdena "Slutpunkt" och "Nyckel" i det här konfigurationsavsnittet. Om det inte anges eller om avsnittet inte finns återgår du till miljövariabler: AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_KEY. För användartilldelad hanterad identitetsautentisering krävs den här egenskapen. För OpenAI-tjänsten (icke-Azure) anger du miljövariabeln OPENAI_API_KEY.
systemPrompt Valfritt. Hämtar eller ställer in systemprompten som ska användas för att fråga den stora språkmodellen. Systemprompten läggs till med kunskap som hämtas som ett resultat av Query. Den kombinerade prompten skickas till OpenAI Chat-API:et. Den här egenskapen stöder bindningsuttryck.
maxKnowledgeCount Valfritt. Hämtar eller anger antalet kunskapsobjekt som ska matas SystemPromptin i .
isReasoningModel Valfritt. Hämtar eller anger ett värde som anger om chattens slutförandemodell är en resonemangsmodell. Det här alternativet är experimentellt och associerat med resonemangsmodellen tills alla modeller har paritet i de förväntade egenskaperna, med standardvärdet false.

Användning

Se avsnittet Exempel för fullständiga exempel.

Connections

För att använda Azure OpenAI-bindningstillägget måste du specificera en anslutning till en OpenAI-modelldefinition. Ställ in OpenAI-modellanslutningen i dina bindningar med en av dessa metoder:

  • Använd bindningsegenskapen AIConnectionName (föredragen för Azure OpenAI).
  • Sätt AZURE_OPENAI_ENDPOINT och AZURE_OPENAI_KEY i app-inställningar (för Azure OpenAI).
  • Ställ in endast Open_API_Key i app-inställningarna (för https://api.openai.com).

Hur du ställer in anslutningen beror både på modellens API och autentiseringsmetoden, vilket indikeras i följande tabell:

Autentisering/Modell-API Azure OpenAI OpenAI (https://api.openai.com)
Hanterad identitetsanslutning AIConnectionName Stöds ej
Key Vault-referens AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
Appkonfigurationsreferens AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key
Delad hemlighet AZURE_OPENAI_ENDPOINT
AZURE_OPENAI_KEY
Open_API_Key

Använd hanterade identitetsbaserade kontakter och AIConnectionName egendomen.

När du använder AIConnectionName, beror värdet på denna egenskapsinställning på typen av anslutning:

  • Managed identity-anslutning: Egenskapen AIConnectionName<CONNECTION_NAME_PREFIX> delas av en grupp inställningar som tillsammans definierar en identitetsbaserad anslutning till Azure OpenAI. För mer information, se Definiera identitetskopplingar.
  • Key Vault-referens: Egenskapsinställningen AIConnectionName returnerar en Azure Key Vault-referens till platsen där API-nyckeln underhålls centralt. För mer information, se Definiera Key Vault-anslutningar.
  • App Configuration Reference: Egenskapsinställningen AIConnectionName returnerar en Azure App Configuration-referens som returnerar en API-nyckel eller en Key Vault-referens. För mer information, se Azure App Configuration i artikeln om anslutningar.
  • API-nyckel: Egenskapsinställningen AIConnectionName löses till appinställningar som innehåller endpoint och nyckel direkt. Eftersom delade nycklar kan komprometteras, använd hanterade identitetsanslutningar när det är möjligt. För mer information, se Definiera kopplingar.

För att lära dig mer om bindningsanslutningar, se Hantera anslutningar i Azure Functions.

OpenAI-bindningarna inkluderar en AIConnectionName egenskap som du kan använda för att specificera för <ConnectionNamePrefix> gruppen av appinställningar som definierar anslutningen till Azure OpenAI:

Inställningsnamn Beskrivning
<CONNECTION_NAME_PREFIX>__endpoint Sätter URI-endpoint för Azure OpenAI-tjänsten. Den här inställningen krävs alltid.
<CONNECTION_NAME_PREFIX>__clientId Anger den specifika användartilldelade identiteten som ska användas när du hämtar en åtkomsttoken. Kräver som <CONNECTION_NAME_PREFIX>__credential är inställt på managedidentity. Egenskapen accepterar ett klient-ID som motsvarar en användartilldelad identitet som tilldelats programmet. Det är ogiltigt att ange både ett resurs-ID och ett klient-ID. Om du inte specificerar denna egenskap används den systemtilldelade identiteten. Den här egenskapen används på olika sätt i lokala utvecklingsscenarier, när credential bör inte anges.
<CONNECTION_NAME_PREFIX>__credential Definierar hur en access token hämtas för anslutningen. Används managedidentity för hanterad identitetsautentisering. Det här värdet är endast giltigt när en hanterad identitet är tillgänglig i värdmiljön.
<CONNECTION_NAME_PREFIX>__managedIdentityResourceId När credential är satt till managedidentity, ställ in denna egenskap för att specificera resursidentifieraren som ska användas vid erhållning av en token. Egenskapen accepterar en resursidentifierare som motsvarar resurs-ID:t för den användardefinierade hanterade identiteten. Det är ogiltigt att ange både ett resurs-ID och ett klient-ID. Om du inte specificerar någon av dem används den system-tilldelade identiteten. Den här egenskapen används på olika sätt i lokala utvecklingsscenarier, när credential bör inte anges.
<CONNECTION_NAME_PREFIX>__key Sätter den delade hemliga nyckeln som krävs för att komma åt slutpunkten för Azure OpenAI-tjänsten genom att använda nyckelbaserad autentisering. Som säkerhetspraxis, använd alltid Microsoft Entra ID med hanterade identiteter för autentisering.

Överväg dessa inställningar för managed identity connection när du sätter egenskapen AIConnectionName till myAzureOpenAI:

  • myAzureOpenAI__endpoint=https://contoso.openai.azure.com/
  • myAzureOpenAI__credential=managedidentity
  • myAzureOpenAI__clientId=aaaaaaaa-bbbb-cccc-1111-222222222222

Vid körning tolkar värden dessa inställningar som en enda myAzureOpenAI inställning:

"myAzureOpenAI":
{
    "endpoint": "https://contoso.openai.azure.com/",
    "credential": "managedidentity",
    "clientId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
}

När du använder hanterade identiteter, se till att lägga till din identitet i rollen Cognitive Services OpenAI User .

När du kör lokalt, lägg till dessa inställningar i local.settings.json projektfilen. Mer information finns i Lokal utveckling med identitetsbaserade anslutningar.

Mer information finns i Arbeta med programinställningar.