Azure Functions 的 Azure OpenAI 语义搜索输入绑定

重要

适用于 Azure Functions 的 Azure OpenAI 扩展目前为预览版。

Azure OpenAI 语义搜索输入绑定允许对嵌入内容使用语义搜索。

要了解 Azure OpenAI 扩展的设置和配置详细信息,请参阅适用于 Azure Functions 的 Azure OpenAI 扩展。 若要详细了解 Azure AI 搜索中的语义排名,请参阅 Azure AI 搜索中的语义排名

注释

仅提供了适用于 Node.js v4 模型的参考和示例。

注释

仅提供了适用于 Python v2 模型的参考和示例。

注释

虽然支持这两个 C# 进程模型,但仅 提供了独立的辅助角色模型 示例。

示例:

此示例演示如何对文件执行语义搜索。

[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%")] SemanticSearchContext result)
{
    return new ContentResult { Content = result.Response, ContentType = "text/plain" };
}

此示例演示如何对文件执行语义搜索。

@FunctionName("PromptFile")
public HttpResponseMessage promptFile(
    @HttpTrigger(
        name = "req", 
        methods = {HttpMethod.POST},
        authLevel = AuthorizationLevel.ANONYMOUS)
        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 ) 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;
    }        
}

此示例演示如何对文件执行语义搜索。

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

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",
    connectionName: "AISearchEndpoint",
    collection: "openai-index",
    query: "{prompt}",
    chatModel: "%CHAT_MODEL_DEPLOYMENT_NAME%",
    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() }
    }
});

此示例演示如何对文件执行语义搜索。

下面是提示文件的 function.json 文件:

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

有关 function.json 文件属性的详细信息,请参阅配置部分。

using namespace System.Net

param($Request, $TriggerMetadata, $SemanticSearchInput)

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

此示例演示如何对文件执行语义搜索。

@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%",
    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"
    )

特性

应用特性 SemanticSearchInput 来定义语义搜索输入绑定,该绑定支持以下参数:

参数 DESCRIPTION
SearchConnectionName 包含连接字符串值的应用设置或环境变量的名称。 此属性支持绑定表达式。
集合 要搜索的集合、表或索引的名称。 此属性支持绑定表达式。
查询 用于搜索的语义查询文本。 此属性支持绑定表达式。
EmbeddingsModel 可选。 要用于嵌入的模型的 ID。 默认值是 text-embedding-3-small。 此属性支持绑定表达式。
ChatModel 可选。 获取或设置要为聊天响应调用的大型语言模型的名称。 默认值是 gpt-3.5-turbo。 此属性支持绑定表达式。
AIConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
SystemPrompt 可选。 获取或设置用于提示大型语言模型的系统提示。 系统会在系统提示后面追加知识,该知识是由于该作而提取的 Query。 合并的提示将发送到 OpenAI 聊天 API。 此属性支持绑定表达式。
MaxKnowledgeCount 可选。 获取或设置要注入到其中 SystemPrompt的知识项数。
IsReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

批注

通过 SemanticSearchInput 批注可以定义语义搜索输入绑定,该绑定支持以下参数:

元素 DESCRIPTION
名字 获取或设置输入绑定的名称。
searchConnectionName 包含连接字符串值的应用设置或环境变量的名称。 此属性支持绑定表达式。
集合 要搜索的集合、表或索引的名称。 此属性支持绑定表达式。
查询 用于搜索的语义查询文本。 此属性支持绑定表达式。
embeddingsModel 可选。 要用于嵌入的模型的 ID。 默认值是 text-embedding-3-small。 此属性支持绑定表达式。
chatModel 可选。 获取或设置要为聊天响应调用的大型语言模型的名称。 默认值是 gpt-3.5-turbo。 此属性支持绑定表达式。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
systemPrompt 可选。 获取或设置用于提示大型语言模型的系统提示。 系统会在系统提示后面追加知识,该知识是由于该作而提取的 Query。 合并的提示将发送到 OpenAI 聊天 API。 此属性支持绑定表达式。
maxKnowledgeCount 可选。 获取或设置要注入到其中 SystemPrompt的知识项数。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

修饰器

在预览期间,将输入绑定定义为 generic_input_binding 类型的 semanticSearch 绑定,该绑定支持以下参数:

参数 DESCRIPTION
arg_name 表示绑定参数的变量的名称。
search_connection_name 包含连接字符串值的应用设置或环境变量的名称。 此属性支持绑定表达式。
集合 要搜索的集合、表或索引的名称。 此属性支持绑定表达式。
查询 用于搜索的语义查询文本。 此属性支持绑定表达式。
embeddings_model 可选。 要用于嵌入的模型的 ID。 默认值是 text-embedding-3-small。 此属性支持绑定表达式。
chat_model 可选。 获取或设置要为聊天响应调用的大型语言模型的名称。 默认值是 gpt-3.5-turbo。 此属性支持绑定表达式。
ai_connection_name 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
system_prompt 可选。 获取或设置用于提示大型语言模型的系统提示。 系统会在系统提示后面追加知识,该知识是由于该作而提取的 Query。 合并的提示将发送到 OpenAI 聊天 API。 此属性支持绑定表达式。
max_knowledge_count 可选。 获取或设置要注入到其中 SystemPrompt的知识项数。
is_reasoning _model 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

配置

绑定支持在 function.json 文件中设置的这些配置属性。

资产 DESCRIPTION
类型 必须是 semanticSearch
方向 必须是 in
名字 输入绑定的名称。
searchConnectionName 获取或设置包含连接字符串值的应用设置或环境变量的名称。 此属性支持绑定表达式。
集合 要搜索的集合、表或索引的名称。 此属性支持绑定表达式。
查询 用于搜索的语义查询文本。 此属性支持绑定表达式。
embeddingsModel 可选。 要用于嵌入的模型的 ID。 默认值是 text-embedding-3-small。 此属性支持绑定表达式。
chatModel 可选。 获取或设置要为聊天响应调用的大型语言模型的名称。 默认值是 gpt-3.5-turbo。 此属性支持绑定表达式。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
systemPrompt 可选。 获取或设置用于提示大型语言模型的系统提示。 系统会在系统提示后面追加知识,该知识是由于该作而提取的 Query。 合并的提示将发送到 OpenAI 聊天 API。 此属性支持绑定表达式。
maxKnowledgeCount 可选。 获取或设置要注入到其中 SystemPrompt的知识项数。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

配置

绑定支持以下属性,这些属性在代码中定义:

资产 DESCRIPTION
searchConnectionName 包含连接字符串值的应用设置或环境变量的名称。 此属性支持绑定表达式。
集合 要搜索的集合、表或索引的名称。 此属性支持绑定表达式。
查询 用于搜索的语义查询文本。 此属性支持绑定表达式。
embeddingsModel 可选。 要用于嵌入的模型的 ID。 默认值是 text-embedding-3-small。 此属性支持绑定表达式。
chatModel 可选。 获取或设置要为聊天响应调用的大型语言模型的名称。 默认值是 gpt-3.5-turbo。 此属性支持绑定表达式。
aiConnectionName 可选。 获取或设置 AI 服务连接设置的配置节的名称。 对于 Azure OpenAI:如果已指定,请在此配置部分查找“终结点”和“密钥”值。 如果未指定或节不存在,请回退到环境变量:AZURE_OPENAI_ENDPOINT和AZURE_OPENAI_KEY。 对于用户分配的托管标识身份验证,此属性是必需的。 对于 OpenAI 服务(非 Azure),请设置OPENAI_API_KEY环境变量。
systemPrompt 可选。 获取或设置用于提示大型语言模型的系统提示。 系统会在系统提示后面追加知识,该知识是由于该作而提取的 Query。 合并的提示将发送到 OpenAI 聊天 API。 此属性支持绑定表达式。
maxKnowledgeCount 可选。 获取或设置要注入到其中 SystemPrompt的知识项数。
isReasoningModel 可选。 获取或设置一个值,该值指示聊天完成模型是否为推理模型。 此选项是实验性的,与推理模型相关联,直到所有模型都具有预期属性中的奇偶校验,默认值为 false

用法

有关完整示例,请参阅示例部分