使用 Azure OpenAI 和 AI 搜索与 Python SDK 进行 RAG 的最佳方法

问题描述 投票:0回答:1

我很难理解使用 Azure OpenAI、AI Search 作为源和 Python SDK 来实现 RAG 的每种方法的优缺点。两者都工作得很好,但选项 B 看起来更干净。为什么我们要自己费心去执行选项 A 中的所有步骤呢?我是不是错过了什么?

我只能考虑一些需要获取 AI 搜索块进行评估 (RAGAS) 的用例,而选项 B 可能无法做到这一点。

A) 自行查询AI搜索

openai_client = AzureOpenAI(
     api_version="2024-06-01",
     azure_endpoint=AZURE_OPENAI_ACCOUNT,
     azure_ad_token_provider=token_provider
 )

 search_client = SearchClient(
     endpoint=AZURE_SEARCH_SERVICE,
     index_name="hotels-sample-index",
     credential=credential
 )

 GROUNDED_PROMPT="""
 You are a friendly assistant that recommends hotels based on activities and amenities.
 Query: {query}
 Sources:\n{sources}
 """

 query="Can you recommend a few hotels with complimentary breakfast?"

 search_results = search_client.search(
     search_text=query,
     top=5,
     select="Description,HotelName,Tags"
 )
 sources_formatted = "\n".join([f'{document["HotelName"]}:{document["Description"]}:{document["Tags"]}' for document in search_results])

 response = openai_client.chat.completions.create(
     messages=[
         {
             "role": "user",
             "content": GROUNDED_PROMPT.format(query=query, sources=sources_formatted)
         }
     ],
     model=AZURE_DEPLOYMENT_MODEL
 )

B) 让 Azure OpenAI 查询 AI Search 本身

endpoint = os.environ.get("AZURE_OPENAI_ENDPOINT")
api_key = os.environ.get("AZURE_OPENAI_API_KEY")
deployment = os.environ.get("AZURE_OPENAI_DEPLOYMENT_ID")

client = openai.AzureOpenAI(
    azure_endpoint=endpoint,
    api_key=api_key,
    api_version="2024-02-01",
)

completion = client.chat.completions.create(
    model=deployment,
    messages=[
        {
            "role": "user",
            "content": "What are my available health plans?",
        },
    ],
    extra_body={
        "data_sources":[
            {
                "type": "azure_search",
                "parameters": {
                    "endpoint": os.environ["AZURE_AI_SEARCH_ENDPOINT"],
                    "index_name": os.environ["AZURE_AI_SEARCH_INDEX"],
                    "authentication": {
                        "type": "api_key",
                        "key": os.environ["AZURE_AI_SEARCH_API_KEY"],
                    }
                }
            }
        ],
    }
)
python azure-openai rag azure-ai-search
1个回答
0
投票

您可以使用 Azure OpenAI 和 AI 搜索执行多种方法,从您的选项 A 和 B 来看,它属于:

什么更好?

A 简单明了。如果您搜索某个项目并且 AI Search 没有返回任何信息,则 OpenAI 不会采取进一步的操作,并且对话会提前结束。这种情况经常发生,因为并非每个用户都会在第一个查询中询问信息,或者可能不知道如何表达他们的问题。

B 有助于扩展对话上下文,并允许 OpenAI 决定运行哪个功能,使交互感觉更加人性化。这绝对取决于您的业务需求以更可定制的方式分支对话场景。例如,当用户询问“今天天气怎么样?”时,需要有两个参数:“位置”和“单位”(摄氏度或华氏度)。如果没有提供足够的参数,OpenAI 将提示用户类似“请让我知道您的位置和单位”之类的内容。它会不断询问是否缺少任何一个参数,并在获得所有必要信息后运行该函数。

© www.soinside.com 2019 - 2024. All rights reserved.