Veri API'nizde Azure OpenAI Başvurusu
Bu makalede, yeni Azure OpenAI On Your Data API için Python ve REST için başvuru belgeleri sağlanır. En son API sürümü Swagger belirtimidir 2024-05-01-preview
.
Not
API sürümünden 2024-02-15-preview
bu yana, önceki API sürümleriyle karşılaştırıldığında aşağıdaki hataya neden olan değişiklikleri kullanıma sunulmuştur:
- API yolu olarak
/extensions/chat/completions
/chat/completions
değiştirilir. - Özellik anahtarlarının ve sabit listesi değerlerinin adlandırma kuralı, deve kasasından yılan kasasına değiştirilir. Örnek:
deploymentName
olarakdeployment_name
değiştirildi. - Veri kaynağı türü
AzureCognitiveSearch
olarakazure_search
değiştirilir. - Alıntılar ve amaç, açık şema tanımlı olarak yardımcı iletinin bağlam aracı iletilerinden yardımcı iletinin bağlam kök düzeyine taşınır.
POST {endpoint}/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}
Desteklenen sürümler
-
2024-02-15-preview
Swagger belirtimi. -
2024-02-01
Swagger belirtimi. -
2024-05-01-preview
Swagger belirtimi
Not
Pinecone ve Elasticsearch önizleme olarak desteklenir.
URI parametreleri
Veri Akışı Adı | İçinde | Type | Zorunlu | Açıklama |
---|---|---|---|---|
deployment-id |
yol | Dize | True | Bu istek için kullanılacak sohbet tamamlama modeli dağıtım adını belirtir. |
endpoint |
yol | Dize | True | Azure OpenAI uç noktaları. Örneğin: https://{YOUR_RESOURCE_NAME}.openai.azure.com |
api-version |
query | Dize | True | Bu işlem için kullanılacak API sürümü. |
Request body
İstek gövdesi, sohbet tamamlama API'sinin isteğinin aynı şemasını devralır. Bu tabloda, Verilerinizde Azure OpenAI için benzersiz parametreler gösterilir.
Adı | Tür | Zorunlu | Açıklama |
---|---|---|---|
data_sources |
DataSource[] | True | Verilerinizde Azure OpenAI yapılandırma girişleri. Dizide tam olarak bir öğe olmalıdır. Sağlanmazsa data_sources , hizmet doğrudan sohbet tamamlama modelini kullanır ve Verilerinizde Azure OpenAI kullanmaz. parametresini belirttiğinizde data_sources veya top_logprobs parametrelerini kullanamazsınızlogprobs . |
Yanıt gövdesi
Yanıt gövdesi, sohbet tamamlama API yanıtının aynı şemasını devralır. Yanıt sohbeti iletisi , Verilerinizde Azure OpenAI için eklenen bir context
özelliğe sahiptir.
Sohbet iletisi
Yanıt yardımcısı ileti şeması, sohbet tamamlama yardımcısı sohbet iletisinden devralınır ve özelliğiyle context
genişletilir.
Adı | Tür | Zorunlu | Açıklama |
---|---|---|---|
context |
Bağlam | False | Alınan belgeler de dahil olmak üzere isteği işlerken Verilerinizde Azure OpenAI tarafından gerçekleştirilen artımlı adımları temsil eder. |
Bağlam
Adı | Tür | Zorunlu | Açıklama |
---|---|---|---|
citations |
Alıntı[] | False | Yanıtta yardımcı iletisini oluşturmak için kullanılan veri kaynağı alma sonucu. İstemciler alıntılardan başvuruları işleyebilir. |
intent |
Dize | False | Sohbet geçmişinden algılanan amaç. Önceki amacı geri geçirmek artık gerekli değildir. Bu özelliği yoksayın. |
all_retrieved_documents |
Alınan belgeler[] | False | Alınan tüm belgeler. |
Alıntı
Adı | Tür | Zorunlu | Açıklama |
---|---|---|---|
content |
Dize | True | Alıntının içeriği. |
title |
Dize | False | Alıntının başlığı. |
url |
Dize | False | Alıntının URL'si. |
filepath |
Dize | False | Alıntının dosya yolu. |
chunk_id |
Dize | False | Alıntının öbek kimliği. |
Alınan belgeler
Adı | Tür | Zorunlu | Açıklama |
---|---|---|---|
search_queries |
string[] | True | Belgeyi almak için kullanılan arama sorguları. |
data_source_index |
integer | True | Veri kaynağının dizini. |
original_search_score |
çift | True | Alınan belgenin özgün arama puanı. |
rerank_score |
çift | False | Alınan belgenin yeniden kırpma puanı. |
filter_reason |
Dize | False | Belgeyi filtrelemek için rasyonaliteyi temsil eder. Belgede filtreleme yapılmazsa, bu alan ayarsız kalır. Belge tarafından strictness tanımlanan özgün arama puanı eşiğine göre filtrelenmişse olacaktırscore . Belge özgün arama puanı eşiğine göre filtrelenmez, ancak yeniden dilim puanı ve top_n_documents ile filtrelenirse olurrerank . |
Data source
Bu listede desteklenen veri kaynakları gösterilir.
- Azure AI Arama
- MongoDB için Azure Cosmos DB sanal çekirdeği
- Elasticsearch (önizleme)
- Pinecone (önizleme)
Örnekler
Bu örnekte, daha iyi sonuçlar elde etmek için konuşma geçmişini geçirme gösterilmektedir.
Ön koşullar:
- Azure OpenAI sistemi tarafından atanan yönetilen kimlikten Azure arama hizmetine rol atamalarını yapılandırın. Gerekli roller:
Search Index Data Reader
,Search Service Contributor
. - Kullanıcıdan Azure OpenAI kaynağına rol atamalarını yapılandırın. Gerekli rol:
Cognitive Services OpenAI User
. - Az CLI'yı yükleyin ve komutunu çalıştırın
az login
. - Aşağıdaki ortam değişkenlerini tanımlayın:
AzureOpenAIEndpoint
,ChatCompletionsDeploymentName
,SearchEndpoint
,SearchIndex
.
export AzureOpenAIEndpoint=https://example.openai.azure.com/
export ChatCompletionsDeploymentName=turbo
export SearchEndpoint=https://example.search.windows.net
export SearchIndex=example-index
En son pip paketlerini openai
yükleyin, azure-identity
.
import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
endpoint = os.environ.get("AzureOpenAIEndpoint")
deployment = os.environ.get("ChatCompletionsDeploymentName")
search_endpoint = os.environ.get("SearchEndpoint")
search_index = os.environ.get("SearchIndex")
token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")
client = AzureOpenAI(
azure_endpoint=endpoint,
azure_ad_token_provider=token_provider,
api_version="2024-05-01-preview",
)
completion = client.chat.completions.create(
model=deployment,
messages=[
{
"role": "user",
"content": "Who is DRI?",
},
{
"role": "assistant",
"content": "DRI stands for Directly Responsible Individual of a service. Which service are you asking about?"
},
{
"role": "user",
"content": "Opinion mining service"
}
],
extra_body={
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": search_endpoint,
"index_name": search_index,
"authentication": {
"type": "system_assigned_managed_identity"
}
}
}
]
}
)
print(completion.model_dump_json(indent=2))
# render the citations
content = completion.choices[0].message.content
context = completion.choices[0].message.context
for citation_index, citation in enumerate(context["citations"]):
citation_reference = f"[doc{citation_index + 1}]"
url = "https://example.com/?redirect=" + citation["url"] # replace with actual host and encode the URL
filepath = citation["filepath"]
title = citation["title"]
snippet = citation["content"]
chunk_id = citation["chunk_id"]
replaced_html = f"<a href='{url}' title='{title}\n{snippet}''>(See from file {filepath}, Part {chunk_id})</a>"
content = content.replace(citation_reference, replaced_html)
print(content)