Snabbstart: Chatta med Azure OpenAI-modeller med dina egna data
I den här snabbstarten kan du använda dina egna data med Azure OpenAI-modeller. Genom att använda Azure OpenAI:s modeller på dina data kan du få en kraftfull ai-plattform för konversationer som möjliggör snabbare och mer exakt kommunikation.
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Chattlekplats
Börja utforska Azure OpenAI-funktioner med en metod utan kod via chattlekplatsen. Det är bara en textruta där du kan skicka en uppmaning för att generera ett slutförande. Från den här sidan kan du snabbt iterera och experimentera med funktionerna.
Lekplatsen ger dig alternativ för att skräddarsy din chattupplevelse. Till höger kan du välja Distribution för att avgöra vilken modell som genererar ett svar med hjälp av sökresultaten från ditt index. Du väljer antalet tidigare meddelanden som ska inkluderas som konversationshistorik för framtida genererade svar. Konversationshistorik ger kontext för att generera relaterade svar men förbrukar även tokenanvändning. Förloppsindikatorn för indatatoken håller reda på antalet token för den fråga som du skickar.
Avancerade inställningar till vänster är körningsparametrar som ger dig kontroll över hämtning och sökning efter relevant information från dina data. Ett bra användningsfall är när du vill se till att svar endast genereras baserat på dina data eller om du upptäcker att modellen inte kan generera ett svar baserat på befintlig information om dina data.
Strikthet avgör systemets aggressivitet vid filtrering av sökdokument baserat på deras likhetspoäng. Att ange strikthet till 5 anger att systemet aggressivt filtrerar bort dokument och tillämpar ett mycket högt tröskelvärde för likhet. Semantisk sökning kan vara till hjälp i det här scenariot eftersom rangordningsmodellerna gör ett bättre jobb med att härleda frågans avsikt. Lägre nivåer av strikthet ger mer utförliga svar, men kan också innehålla information som inte finns i ditt index. Detta är inställt på 3 som standard.
Hämtade dokument är ett heltal som kan anges till 3, 5, 10 eller 20 och styr antalet dokumentsegment som tillhandahålls till den stora språkmodellen för att formulera det slutliga svaret. Som standard är detta inställt på 5.
När Begränsa svar på dina data är aktiverat försöker modellen bara förlita sig på dina dokument för svar. Detta är inställt på true som standard.
Skicka din första fråga. Chattmodellerna fungerar bäst i fråge- och svarsövningar. Till exempel "Vad är mina tillgängliga hälsoplaner?" eller "Vad är alternativet hälsa plus?".
Frågor som kräver dataanalys skulle förmodligen misslyckas, till exempel "Vilken hälsoplan är mest populär?". Frågor som kräver information om alla dina data kommer sannolikt också att misslyckas, till exempel "Hur många dokument har jag laddat upp?". Kom ihåg att sökmotorn letar efter segment med exakta eller liknande termer, fraser eller konstruktion till frågan. Och även om modellen kan förstå frågan, är det inte rätt information för att besvara den typen av frågor om sökresultaten är segment från datauppsättningen.
Chattar begränsas av antalet dokument (segment) som returneras i svaret (begränsat till 3–20 i Azure OpenAI Studio Playground). Som du kan föreställa dig kräver en fullständig genomsökning av hela vektorarkivet att ställa en fråga om "alla titlar".
Distribuera din modell
När du är nöjd med upplevelsen i Azure OpenAI Studio kan du distribuera en webbapp direkt från Studio genom att välja knappen Distribuera till .
Detta ger dig möjlighet att antingen distribuera till ett fristående webbprogram eller en andrepilot i Copilot Studio (förhandsversion) om du använder dina egna data i modellen.
Om du till exempel väljer att distribuera en webbapp:
Första gången du distribuerar en webbapp bör du välja Skapa en ny webbapp. Välj ett namn för appen, som blir en del av appens URL. Exempel: https://<appname>.azurewebsites.net
Välj din prenumeration, resursgrupp, plats och prisplan för den publicerade appen. Om du vill uppdatera en befintlig app väljer du Publicera till en befintlig webbapp och väljer namnet på din tidigare app på den nedrullningsbara menyn.
Om du väljer att distribuera en webbapp kan du läsa de viktiga övervägandena för att använda den.
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
- .NET 8 SDK
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Skapa en ny .NET Core-app
I ett konsolfönster (till exempel cmd, PowerShell eller Bash) använder du dotnet new
kommandot för att skapa en ny konsolapp med namnet azure-openai-quickstart
. Det här kommandot skapar ett enkelt "Hello World"-projekt med en enda C#-källfil: Program.cs.
dotnet new console -n azure-openai-quickstart
Ändra katalogen till den nyligen skapade appmappen. Du kan skapa programmet med:
dotnet build
Kompileringsutdata får inte innehålla några varningar eller fel.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Installera OpenAI .NET-klientbiblioteket med:
dotnet add package Azure.AI.OpenAI --prerelease
Öppna filen Program.cs från projektkatalogen och ersätt dess innehåll med följande kod:
Utan strömning av svar
using Azure;
using Azure.AI.OpenAI;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using System.Text.Json;
using static System.Environment;
string azureOpenAIEndpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_ID");
string searchEndpoint = GetEnvironmentVariable("AZURE_AI_SEARCH_ENDPOINT");
string searchKey = GetEnvironmentVariable("AZURE_AI_SEARCH_API_KEY");
string searchIndex = GetEnvironmentVariable("AZURE_AI_SEARCH_INDEX");
#pragma warning disable AOAI001
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
ChatCompletion completion = chatClient.CompleteChat(
[
new UserChatMessage("What are my available health plans?"),
], options);
Console.WriteLine(completion.Content[0].Text);
AzureChatMessageContext onYourDataContext = completion.GetAzureMessageContext();
if (onYourDataContext?.Intent is not null)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (AzureChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.WriteLine($"Citation: {citation.Content}");
}
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
dotnet run program.cs
Output
Contoso Electronics offers two health plans: Northwind Health Plus and Northwind Standard [doc1]. Northwind Health Plus is a comprehensive plan that provides coverage for medical, vision, and dental services, prescription drug coverage, mental health and substance abuse coverage, and coverage for preventive care services. It also offers coverage for emergency services, both in-network and out-of-network. On the other hand, Northwind Standard is a basic plan that provides coverage for medical, vision, and dental services, prescription drug coverage, and coverage for preventive care services. However, it does not offer coverage for emergency services, mental health and substance abuse coverage, or out-of-network services [doc1].
Intent: ["What are the available health plans?", "List of health plans available", "Health insurance options", "Types of health plans offered"]
Citation:
Contoso Electronics plan and benefit packages
Thank you for your interest in the Contoso electronics plan and benefit packages. Use this document to
learn more about the various options available to you...// Omitted for brevity
Detta väntar tills modellen har genererat hela svaret innan resultatet skrivs ut. Om du vill strömma svaret asynkront och skriva ut resultatet kan du ersätta innehållet i Program.cs med koden i nästa exempel.
Async med strömning
using Azure;
using Azure.AI.OpenAI;
using Azure.AI.OpenAI.Chat;
using OpenAI.Chat;
using static System.Environment;
string azureOpenAIEndpoint = GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string azureOpenAIKey = GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
string deploymentName = GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_ID");
string searchEndpoint = GetEnvironmentVariable("AZURE_AI_SEARCH_ENDPOINT");
string searchKey = GetEnvironmentVariable("AZURE_AI_SEARCH_API_KEY");
string searchIndex = GetEnvironmentVariable("AZURE_AI_SEARCH_INDEX");
#pragma warning disable AOAI001
AzureOpenAIClient azureClient = new(
new Uri(azureOpenAIEndpoint),
new AzureKeyCredential(azureOpenAIKey));
ChatClient chatClient = azureClient.GetChatClient(deploymentName);
ChatCompletionOptions options = new();
options.AddDataSource(new AzureSearchChatDataSource()
{
Endpoint = new Uri(searchEndpoint),
IndexName = searchIndex,
Authentication = DataSourceAuthentication.FromApiKey(searchKey),
});
var chatUpdates = chatClient.CompleteChatStreamingAsync(
[
new UserChatMessage("What are my available health plans?"),
], options);
AzureChatMessageContext onYourDataContext = null;
await foreach (var chatUpdate in chatUpdates)
{
if (chatUpdate.Role.HasValue)
{
Console.WriteLine($"{chatUpdate.Role}: ");
}
foreach (var contentPart in chatUpdate.ContentUpdate)
{
Console.Write(contentPart.Text);
}
if (onYourDataContext == null)
{
onYourDataContext = chatUpdate.GetAzureMessageContext();
}
}
Console.WriteLine();
if (onYourDataContext?.Intent is not null)
{
Console.WriteLine($"Intent: {onYourDataContext.Intent}");
}
foreach (AzureChatCitation citation in onYourDataContext?.Citations ?? [])
{
Console.Write($"Citation: {citation.Content}");
}
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Mer information finns i Lägga till dina data med Hjälp av Azure AI Studio.
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Du hittar det här värdet i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resource.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Du hittar det här värdet i avsnittet Resurshanteringsnycklar>och slutpunkt när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPEN_AI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Du hittar det här värdet under Resurshanteringsdistributioner> i Azure Portal eller under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Du hittar det här värdet i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Du hittar det här värdet i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
Kommentar
Spring AI standardmodellnamnet till gpt-35-turbo
. Det är bara nödvändigt att ange SPRING_AI_AZURE_OPENAI_MODEL
värdet om du har distribuerat en modell med ett annat namn.
export SPRING_AI_AZURE_OPENAI_ENDPOINT=REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
export SPRING_AI_AZURE_OPENAI_API_KEY=REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_ENDPOINT=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_API_KEY=REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
export SPRING_AI_AZURE_COGNITIVE_SEARCH_INDEX=REPLACE_WITH_YOUR_INDEX_NAME_HERE
export SPRING_AI_AZURE_OPENAI_MODEL=REPLACE_WITH_YOUR_MODEL_NAME_HERE
Skapa ett nytt Spring-program
Spring AI stöder för närvarande inte de AzureCognitiveSearchChatExtensionConfiguration
alternativ som gör att en Azure AI-fråga kan kapsla in rag-metoden (Retrieval Augmented Generation) och dölja informationen från användaren. Alternativt kan du fortfarande anropa RAG-metoden direkt i ditt program för att köra frågor mot data i ditt Azure AI Search-index och använda hämtade dokument för att utöka frågan.
Spring AI har stöd för en VectorStore-abstraktion, och du kan omsluta Azure AI Search i en Spring AI VectorStore-implementering för att köra frågor mot dina anpassade data. Följande projekt implementerar en anpassad VectorStore som backas upp av Azure AI Search och kör DIREKT RAG-åtgärder.
I ett Bash-fönster skapar du en ny katalog för din app och navigerar till den.
mkdir ai-custom-data-demo && cd ai-custom-data-demo
Kör kommandot från arbetskatalogen spring init
. Det här kommandot skapar en standardkatalogstruktur för ditt Spring-projekt, inklusive huvudkällfilen för Java-klassen och den pom.xml fil som används för att hantera Maven-baserade projekt.
spring init -a ai-custom-data-demo -n AICustomData --force --build maven -x
De genererade filerna och mapparna liknar följande struktur:
ai-custom-data-demo/
|-- pom.xml
|-- mvn
|-- mvn.cmd
|-- HELP.md
|-- src/
|-- main/
| |-- resources/
| | |-- application.properties
| |-- java/
| |-- com/
| |-- example/
| |-- aicustomdatademo/
| |-- AiCustomDataApplication.java
|-- test/
|-- java/
|-- com/
|-- example/
|-- aicustomdatademo/
|-- AiCustomDataApplicationTests.java
Redigera Spring-program
Redigera filen pom.xml .
Öppna filen pom.xml i önskad redigerare eller IDE från roten i projektkatalogen och skriv över filen med följande innehåll:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.2.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>ai-custom-data-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>AICustomData</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.experimental.ai</groupId> <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId> <version>0.7.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.azure</groupId> <artifactId>azure-search-documents</artifactId> <version>11.6.0-beta.10</version> <exclusions> <!-- exclude this to avoid changing the default serializer and the null-value behavior --> <exclusion> <groupId>com.azure</groupId> <artifactId>azure-core-serializer-json-jackson</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> </project>
Från mappen src/main/java/com/example/aicustomdatademo öppnar du AiCustomDataApplication.java i önskad redigerare eller IDE och klistrar in följande kod:
package com.example.aicustomdatademo; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.springframework.ai.client.AiClient; import org.springframework.ai.document.Document; import org.springframework.ai.embedding.EmbeddingClient; import org.springframework.ai.prompt.Prompt; import org.springframework.ai.prompt.SystemPromptTemplate; import org.springframework.ai.prompt.messages.MessageType; import org.springframework.ai.prompt.messages.UserMessage; import org.springframework.ai.vectorstore.VectorStore; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import com.azure.core.credential.AzureKeyCredential; import com.azure.core.util.Context; import com.azure.search.documents.SearchClient; import com.azure.search.documents.SearchClientBuilder; import com.azure.search.documents.models.IndexingResult; import com.azure.search.documents.models.SearchOptions; import com.azure.search.documents.models.RawVectorQuery; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.extern.jackson.Jacksonized; @SpringBootApplication public class AiCustomDataApplication implements CommandLineRunner { private static final String ROLE_INFO_KEY = "role"; private static final String template = """ You are a helpful assistant. Use the information from the DOCUMENTS section to augment answers. DOCUMENTS: {documents} """; @Value("${spring.ai.azure.cognitive-search.endpoint}") private String acsEndpoint; @Value("${spring.ai.azure.cognitive-search.api-key}") private String acsApiKey; @Value("${spring.ai.azure.cognitive-search.index}") private String acsIndexName; @Autowired private AiClient aiClient; @Autowired private EmbeddingClient embeddingClient; public static void main(String[] args) { SpringApplication.run(AiCustomDataApplication.class, args); } @Override public void run(String... args) throws Exception { System.out.println(String.format("Sending custom data prompt to AI service. One moment please...\r\n")); final var store = vectorStore(embeddingClient); final String question = "What are my available health plans?"; final var candidateDocs = store.similaritySearch(question); final var userMessage = new UserMessage(question); final String docPrompts = candidateDocs.stream().map(entry -> entry.getContent()).collect(Collectors.joining("\n")); final SystemPromptTemplate promptTemplate = new SystemPromptTemplate(template); final var systemMessage = promptTemplate.createMessage(Map.of("documents", docPrompts)); final var prompt = new Prompt(List.of(systemMessage, userMessage)); final var resps = aiClient.generate(prompt); System.out.println(String.format("Prompt created %d generated response(s).", resps.getGenerations().size())); resps.getGenerations().stream() .forEach(gen -> { final var role = gen.getInfo().getOrDefault(ROLE_INFO_KEY, MessageType.ASSISTANT.getValue()); System.out.println(String.format("Generated respose from \"%s\": %s", role, gen.getText())); }); } @Bean public VectorStore vectorStore(EmbeddingClient embeddingClient) { final SearchClient searchClient = new SearchClientBuilder() .endpoint(acsEndpoint) .credential(new AzureKeyCredential(acsApiKey)) .indexName(acsIndexName) .buildClient(); return new AzureCognitiveSearchVectorStore(searchClient, embeddingClient); } public static class AzureCognitiveSearchVectorStore implements VectorStore { private static final int DEFAULT_TOP_K = 4; private static final Double DEFAULT_SIMILARITY_THRESHOLD = 0.0; private SearchClient searchClient; private final EmbeddingClient embeddingClient; public AzureCognitiveSearchVectorStore(SearchClient searchClient, EmbeddingClient embeddingClient) { this.searchClient = searchClient; this.embeddingClient = embeddingClient; } @Override public void add(List<Document> documents) { final var docs = documents.stream().map(document -> { final var embeddings = embeddingClient.embed(document); return new DocEntry(document.getId(), "", document.getContent(), embeddings); }).toList(); searchClient.uploadDocuments(docs); } @Override public Optional<Boolean> delete(List<String> idList) { final List<DocEntry> docIds = idList.stream().map(id -> DocEntry.builder().id(id).build()) .toList(); var results = searchClient.deleteDocuments(docIds); boolean resSuccess = true; for (IndexingResult result : results.getResults()) if (!result.isSucceeded()) { resSuccess = false; break; } return Optional.of(resSuccess); } @Override public List<Document> similaritySearch(String query) { return similaritySearch(query, DEFAULT_TOP_K); } @Override public List<Document> similaritySearch(String query, int k) { return similaritySearch(query, k, DEFAULT_SIMILARITY_THRESHOLD); } @Override public List<Document> similaritySearch(String query, int k, double threshold) { final var searchQueryVector = new RawVectorQuery() .setVector(toFloatList(embeddingClient.embed(query))) .setKNearestNeighborsCount(k) .setFields("contentVector"); final var searchResults = searchClient.search(null, new SearchOptions().setVectorQueries(searchQueryVector), Context.NONE); return searchResults.stream() .filter(r -> r.getScore() >= threshold) .map(r -> { final DocEntry entry = r.getDocument(DocEntry.class); final Document doc = new Document(entry.getId(), entry.getContent(), Collections.emptyMap()); doc.setEmbedding(entry.getContentVector()); return doc; }) .collect(Collectors.toList()); } private List<Float> toFloatList(List<Double> doubleList) { return doubleList.stream().map(Double::floatValue).toList(); } } @Data @Builder @Jacksonized @AllArgsConstructor @NoArgsConstructor static class DocEntry { private String id; private String hash; private String content; private List<Double> contentVector; } }
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
Gå tillbaka till projektrotmappen och kör appen med hjälp av följande kommando:
./mvnw spring-boot:run
Output
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.1.5)
2023-11-07T14:40:45.250-06:00 INFO 18557 --- [ main] c.e.a.AiCustomDataApplication : No active profile set, falling back to 1 default profile: "default"
2023-11-07T14:40:46.035-06:00 INFO 18557 --- [ main] c.e.a.AiCustomDataApplication : Started AiCustomDataApplication in 1.095 seconds (process running for 1.397)
Sending custom data prompt to AI service. One moment please...
Prompt created 1 generated response(s).
Generated response from "assistant": The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Förutsättningar
En Azure-prenumeration – Skapa en kostnadsfritt.
Azure CLI används för lösenordslös autentisering i en lokal utvecklingsmiljö och skapar den nödvändiga kontexten genom att logga in med Azure CLI.
En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
Ladda ned exempeldata från GitHub om du inte har egna data.
Referensdokumentation Källkodspaket | (npm)Exempel | |
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Initiera ett Node.js program
Skapa en ny katalog för din app i ett konsolfönster (till exempel cmd, PowerShell eller bash) och navigera till den. Kör npm init
sedan kommandot för att skapa ett nodprogram med en package.json fil.
npm init
Installera klientbiblioteket
Installera Azure OpenAI-klienten och Azure Identity-biblioteken för JavaScript med npm:
npm install @azure/openai @azure/identity
Appens package.json-fil uppdateras med beroendena.
Lägg till JavaScript-koden
Öppna en kommandotolk där du vill ha det nya projektet och skapa en ny fil med namnet
ChatWithOwnData.js
. Kopiera följande kod tillChatWithOwnData.js
filen.const { DefaultAzureCredential, getBearerTokenProvider } = require("@azure/identity"); const { AzureOpenAI } = require("openai"); // Set the Azure and AI Search values from environment variables const endpoint = process.env["AZURE_OPENAI_ENDPOINT"]; const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"]; const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"]; // keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); // Required Azure OpenAI deployment name and API version const deploymentName = "gpt-4"; const apiVersion = "2024-07-01-preview"; function getClient() { return new AzureOpenAI({ endpoint, azureADTokenProvider, deployment: deploymentName, apiVersion, }); } async function main() { const client = getClient(); const messages = [ { role: "user", content: "What are my available health plans?" }, ]; console.log(`Message: ${messages.map((m) => m.content).join("\n")}`); const events = await client.chat.completions.create({ stream: true, messages: [ { role: "user", content: "What's the most common feedback we received from our customers about the product?", }, ], max_tokens: 128, model: "", data_sources: [ { type: "azure_search", parameters: { endpoint: searchEndpoint, index_name: searchIndex, authentication: { type: "api_key", key: searchKey, }, }, }, ], }); let response = ""; for await (const event of events) { for (const choice of event.choices) { const newText = choice.delta?.content; if (newText) { response += newText; // To see streaming results as they arrive, uncomment line below // console.log(newText); } } } console.log(response); } main().catch((err) => { console.error("The sample encountered an error:", err); });
Kör programmet med följande kommando:
node ChatWithOwnData.js
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
Output
Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Förutsättningar
En Azure-prenumeration – Skapa en kostnadsfritt.
Azure CLI används för lösenordslös autentisering i en lokal utvecklingsmiljö och skapar den nödvändiga kontexten genom att logga in med Azure CLI.
En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
Ladda ned exempeldata från GitHub om du inte har egna data.
Referensdokumentation Källkodspaket | (npm)Exempel | |
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Initiera ett Node.js program
Skapa en ny katalog för din app i ett konsolfönster (till exempel cmd, PowerShell eller bash) och navigera till den. Kör npm init
sedan kommandot för att skapa ett nodprogram med en package.json fil.
npm init
Installera klientbiblioteket
Installera Azure OpenAI-klienten och Azure Identity-biblioteken för JavaScript med npm:
npm install openai @azure/identity @azure/openai
Beroendet @azure/openai/types
ingår för att utöka Azure OpenAI-modellen för data_sources
egenskapen. Den här importen är endast nödvändig för TypeScript.
Appens package.json-fil uppdateras med beroendena.
Lägg till TypeScript-koden
Öppna en kommandotolk där du vill ha det nya projektet och skapa en ny fil med namnet
ChatWithOwnData.ts
. Kopiera följande kod tillChatWithOwnData.ts
filen.import { AzureOpenAI } from "openai"; import { DefaultAzureCredential, getBearerTokenProvider } from "@azure/identity"; import "@azure/openai/types"; // Set the Azure and AI Search values from environment variables const endpoint = process.env["AZURE_OPENAI_ENDPOINT"]; const searchEndpoint = process.env["AZURE_AI_SEARCH_ENDPOINT"]; const searchIndex = process.env["AZURE_AI_SEARCH_INDEX"]; // keyless authentication const credential = new DefaultAzureCredential(); const scope = "https://cognitiveservices.azure.com/.default"; const azureADTokenProvider = getBearerTokenProvider(credential, scope); // Required Azure OpenAI deployment name and API version const deploymentName = "gpt-4"; const apiVersion = "2024-07-01-preview"; function getClient(): AzureOpenAI { return new AzureOpenAI({ endpoint, azureADTokenProvider, deployment: deploymentName, apiVersion, }); } async function main() { const client = getClient(); const messages = [ { role: "user", content: "What are my available health plans?" }, ]; console.log(`Message: ${messages.map((m) => m.content).join("\n")}`); const events = await client.chat.completions.create({ stream: true, messages: [ { role: "user", content: "What's the most common feedback we received from our customers about the product?", }, ], max_tokens: 128, model: "", data_sources: [ { type: "azure_search", parameters: { endpoint: searchEndpoint, index_name: searchIndex, authentication: { type: "api_key", key: searchKey, }, }, }, ], }); let response = ""; for await (const event of events) { for (const choice of event.choices) { const newText = choice.delta?.content; if (newText) { response += newText; // To see streaming results as they arrive, uncomment line below // console.log(newText); } } } console.log(response); } main().catch((err) => { console.error("The sample encountered an error:", err); });
Skapa programmet med följande kommando:
tsc
Kör programmet med följande kommando:
node ChatWithOwnData.js
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
Output
Message: What are my available health plans?
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
Exempel på referenskällkodpaket | | (pypi) |
Dessa länkar refererar till OpenAI API för Python. Det finns ingen Azure-specifik OpenAI Python SDK. Lär dig hur du växlar mellan OpenAI-tjänsterna och Azure OpenAI-tjänsterna.
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Skapa en Python-miljö
- Skapa en ny mapp med namnet openai-python för projektet och en ny Python-kodfil med namnet main.py. Ändra till den katalogen:
mkdir openai-python
cd openai-python
- Installera följande Python-bibliotek:
pip install openai
pip install python-dotenv
Skapa Python-appen
- Öppna filen main.py från projektkatalogen och lägg till följande kod:
import os
import openai
import dotenv
dotenv.load_dotenv()
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"],
}
}
}
],
}
)
print(completion.model_dump_json(indent=2))
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
- Kör följande kommando:
python main.py
Programmet skriver ut svaret i ett JSON-format som är lämpligt för användning i många scenarier. Den innehåller både svar på din fråga och citat från dina uppladdade filer.
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Exempel på PowerShell-kommandon
Azure OpenAI-chattmodellerna är optimerade för att fungera med indata som är formaterade som en konversation. Variabeln messages
skickar en matris med ordlistor med olika roller i konversationen som avgränsas av system, användare, verktyg och assistent. Variabeln dataSources
ansluter till ditt Azure Cognitive Search-index och gör att Azure OpenAI-modeller kan svara med dina data.
Om du vill utlösa ett svar från modellen bör du sluta med ett användarmeddelande som anger att det är assistentens tur att svara.
Dricks
Det finns flera parametrar som du kan använda för att ändra modellens svar, till exempel temperature
eller top_p
. Mer information finns i referensdokumentationen.
# Azure OpenAI metadata variables
$openai = @{
api_key = $Env:AZURE_OPENAI_API_KEY
api_base = $Env:AZURE_OPENAI_ENDPOINT # your endpoint should look like the following https://YOUR_RESOURCE_NAME.openai.azure.com/
api_version = '2023-07-01-preview' # this may change in the future
name = 'YOUR-DEPLOYMENT-NAME-HERE' #This will correspond to the custom name you chose for your deployment when you deployed a model.
}
$acs = @{
search_endpoint = 'YOUR ACS ENDPOINT' # your endpoint should look like the following https://YOUR_RESOURCE_NAME.search.windows.net/
search_key = 'YOUR-ACS-KEY-HERE' # or use the Get-Secret cmdlet to retrieve the value
search_index = 'YOUR-INDEX-NAME-HERE' # the name of your ACS index
}
# Completion text
$body = @{
dataSources = @(
@{
type = 'AzureCognitiveSearch'
parameters = @{
endpoint = $acs.search_endpoint
key = $acs.search_key
indexName = $acs.search_index
}
}
)
messages = @(
@{
role = 'user'
content = 'What are my available health plans?'
}
)
} | convertto-json -depth 5
# Header for authentication
$headers = [ordered]@{
'api-key' = $openai.api_key
}
# Send a completion call to generate an answer
$url = "$($openai.api_base)/openai/deployments/$($openai.name)/extensions/chat/completions?api-version=$($openai.api_version)"
$response = Invoke-RestMethod -Uri $url -Headers $headers -Body $body -Method Post -ContentType 'application/json'
return $response.choices.messages[1].content
Exempel på utdata
The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans.
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som PowerShell Secret Management med Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
Chatta med din modell med hjälp av en webbapp
Om du vill börja chatta med Azure OpenAI-modellen som använder dina data kan du distribuera en webbapp med hjälp av Azure OpenAI Studio eller exempelkod som vi tillhandahåller på GitHub. Den här appen distribueras med Hjälp av Azure App Service och tillhandahåller ett användargränssnitt för att skicka frågor. Den här appen kan användas med Azure OpenAI-modeller som använder dina data eller modeller som inte använder dina data. Mer information om krav, konfiguration och distribution finns i readme-filen på lagringsplatsen. Du kan också anpassa klientdels- och serverdelslogik för webbappen genom att göra ändringar i källkoden.
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
Exempel på referenskällkodspaket | | (Go) |
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Skapa en Go-miljö
Skapa en ny mapp med namnet openai-go för projektet och en ny Go-kodfil med namnet sample.go. Ändra till den katalogen:
mkdir openai-go cd openai-go
Installera följande Go-paket:
go get github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai
Aktivera beroendespårning för din kod.
go mod init example/azure-openai
Skapa Go-appen
Öppna filen sample.go från projektkatalogen och lägg till följande kod:
package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai" "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" ) func main() { azureOpenAIKey := os.Getenv("AZURE_OPENAI_API_KEY") modelDeploymentID := os.Getenv("AZURE_OPENAI_DEPLOYMENT_ID") // Ex: "https://<your-azure-openai-host>.openai.azure.com" azureOpenAIEndpoint := os.Getenv("AZURE_OPENAI_ENDPOINT") // Azure AI Search configuration searchIndex := os.Getenv("AZURE_AI_SEARCH_INDEX") searchEndpoint := os.Getenv("AZURE_AI_SEARCH_ENDPOINT") searchAPIKey := os.Getenv("AZURE_AI_SEARCH_API_KEY") if azureOpenAIKey == "" || modelDeploymentID == "" || azureOpenAIEndpoint == "" || searchIndex == "" || searchEndpoint == "" || searchAPIKey == "" { fmt.Fprintf(os.Stderr, "Skipping example, environment variables missing\n") return } keyCredential := azcore.NewKeyCredential(azureOpenAIKey) // In Azure OpenAI you must deploy a model before you can use it in your client. For more information // see here: https://learn.microsoft.com/azure/cognitive-services/openai/how-to/create-resource client, err := azopenai.NewClientWithKeyCredential(azureOpenAIEndpoint, keyCredential, nil) if err != nil { // TODO: Update the following line with your application specific error handling logic log.Fatalf("ERROR: %s", err) } resp, err := client.GetChatCompletions(context.TODO(), azopenai.ChatCompletionsOptions{ Messages: []azopenai.ChatRequestMessageClassification{ &azopenai.ChatRequestUserMessage{Content: azopenai.NewChatRequestUserMessageContent("What are my available health plans?")}, }, MaxTokens: to.Ptr[int32](512), AzureExtensionsOptions: []azopenai.AzureChatExtensionConfigurationClassification{ &azopenai.AzureSearchChatExtensionConfiguration{ // This allows Azure OpenAI to use an Azure AI Search index. // // > Because the model has access to, and can reference specific sources to support its responses, answers are not only based on its pretrained knowledge // > but also on the latest information available in the designated data source. This grounding data also helps the model avoid generating responses // > based on outdated or incorrect information. // // Quote from here: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/use-your-data Parameters: &azopenai.AzureSearchChatExtensionParameters{ Endpoint: &searchEndpoint, IndexName: &searchIndex, Authentication: &azopenai.OnYourDataAPIKeyAuthenticationOptions{ Key: &searchAPIKey, }, }, }, }, DeploymentName: &modelDeploymentID, }, nil) if err != nil { // TODO: Update the following line with your application specific error handling logic log.Fatalf("ERROR: %s", err) } fmt.Fprintf(os.Stderr, "Extensions Context Role: %s\nExtensions Context (length): %d\n", *resp.Choices[0].Message.Role, len(*resp.Choices[0].Message.Content)) fmt.Fprintf(os.Stderr, "ChatRole: %s\nChat content: %s\n", *resp.Choices[0].Message.Role, *resp.Choices[0].Message.Content, ) }
Viktigt!
För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information om säkerhet för autentiseringsuppgifter finns i artikeln om Säkerhet för Azure AI-tjänster.
Kör följande kommando:
go run sample.go
Programmet skriver ut svaret med både svar på din fråga och citat från dina uppladdade filer.
Förutsättningar
Följande resurser:
- Azure OpenAI
- Azure Blob Storage
- Azure AI Search
- En Azure OpenAI-resurs som distribueras i en region som stöds och med en modell som stöds.
- Se till att du har tilldelats rollen Cognitive Services-deltagare för Azure OpenAI-resursen.
- Ladda ned exempeldata från GitHub om du inte har egna data.
Lägga till dina data med Azure OpenAI Studio
Dricks
Du kan använda Azure Developer CLI för att programmatiskt skapa de resurser som behövs för Azure OpenAI På dina data
Gå till Azure OpenAI Studio och logga in med autentiseringsuppgifter som har åtkomst till din Azure OpenAI-resurs. Under eller efter inloggningsarbetsflödet väljer du lämplig katalog, Azure-prenumeration och Azure OpenAI-resurs.
Välj panelen Bring your own data (Ta med egna data )
I chattlekplatsen väljer du Lägg till dina data och sedan Lägg till en datakälla
I fönstret som visas väljer du Ladda upp filer (förhandsversion) under Välj datakälla. Azure OpenAI behöver både en lagringsresurs och en sökresurs för att komma åt och indexera dina data.
Dricks
- Mer information finns i följande resurs:
- För dokument och datauppsättningar med lång text rekommenderar vi att du använder det tillgängliga skriptet för förberedelse av data.
För att Azure OpenAI ska få åtkomst till ditt lagringskonto måste du aktivera CORS (Cross-origin resource sharing). Om CORS inte redan är aktiverat för Azure Blob Storage-resursen väljer du Aktivera CORS.
Välj din Azure AI Search-resurs och välj bekräftelsen att anslutningen medför användning för ditt konto. Välj sedan Nästa.
I fönstret Ladda upp filer väljer du Bläddra efter en fil och väljer de filer som du laddade ned från avsnittet förutsättningar eller dina egna data. Välj sedan Ladda upp filer. Välj sedan Nästa.
I fönstret Datahantering kan du välja om du vill aktivera semantisk sökning eller vektorsökning för ditt index.
Viktigt!
- Semantisk sökning och vektorsökning omfattas av ytterligare priser. Du måste välja Grundläggande eller högre SKU för att aktivera semantisk sökning eller vektorsökning. Mer information finns i prisnivåskillnad och tjänstgränser .
- För att förbättra kvaliteten på svar på informationshämtning och modell rekommenderar vi att du aktiverar semantisk sökning efter följande datakällspråk: engelska, franska, spanska, portugisiska, italienska, Tyskland, kinesiska(Zh), japanska, koreanska, ryska och arabiska.
Granska informationen du angav och välj Spara och stäng. Nu kan du chatta med modellen och den använder information från dina data för att konstruera svaret.
Hämta nödvändiga variabler
För att kunna göra ett anrop mot Azure OpenAI behöver du följande variabler. Den här snabbstarten förutsätter att du har laddat upp dina data till ett Azure Blob Storage-konto och har skapat ett Azure AI Search-index. Se Lägga till dina data med Hjälp av Azure AI Studio
Variabelnamn | Värde |
---|---|
AZURE_OPENAI_ENDPOINT |
Det här värdet finns i avsnittet Nycklar och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan också hitta värdet i vyn Chattkod>i Azure AI Studio>. En exempelslutpunkt är: https://my-resoruce.openai.azure.com . |
AZURE_OPENAI_API_KEY |
Det här värdet finns i avsnittet Resurshanteringsnycklar>och slutpunkter när du undersöker din Azure OpenAI-resurs från Azure Portal. Du kan använda antingen KEY1 eller KEY2 . Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_OPENAI_DEPLOYMENT_ID |
Det här värdet motsvarar det anpassade namn som du valde för distributionen när du distribuerade en modell. Det här värdet finns under Resurshanteringsdistributioner> i Azure Portal eller alternativt under Hanteringsdistributioner> i Azure AI Studio. |
AZURE_AI_SEARCH_ENDPOINT |
Det här värdet finns i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
AZURE_AI_SEARCH_API_KEY |
Det här värdet finns i avsnittet Inställningar>nycklar när du undersöker din Azure AI Search-resurs från Azure Portal. Du kan använda antingen den primära administratörsnyckeln eller den sekundära administratörsnyckeln. Om du alltid har två nycklar kan du rotera och återskapa nycklar på ett säkert sätt utan att orsaka avbrott i tjänsten. |
AZURE_AI_SEARCH_INDEX |
Det här värdet motsvarar namnet på det index som du skapade för att lagra dina data. Du hittar den i avsnittet Översikt när du undersöker din Azure AI Search-resurs från Azure Portal. |
Miljövariabler
Skapa och tilldela beständiga miljövariabler för din nyckel och slutpunkt.
Viktigt!
Om du använder en API-nyckel lagrar du den på ett säkert sätt någon annanstans, till exempel i Azure Key Vault. Inkludera inte API-nyckeln direkt i koden och publicera den aldrig offentligt.
Mer information om säkerhet för AI-tjänster finns i Autentisera begäranden till Azure AI-tjänster.
setx AZURE_OPENAI_ENDPOINT REPLACE_WITH_YOUR_AOAI_ENDPOINT_VALUE_HERE
setx AZURE_OPENAI_API_KEY REPLACE_WITH_YOUR_AOAI_KEY_VALUE_HERE
setx AZURE_OPENAI_DEPLOYMENT_ID REPLACE_WITH_YOUR_AOAI_DEPLOYMENT_VALUE_HERE
setx AZURE_AI_SEARCH_ENDPOINT REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_VALUE_HERE
setx AZURE_AI_SEARCH_API_KEY REPLACE_WITH_YOUR_AZURE_SEARCH_RESOURCE_KEY_VALUE_HERE
setx AZURE_AI_SEARCH_INDEX REPLACE_WITH_YOUR_INDEX_NAME_HERE
Exempel på cURL-kommandon
Azure OpenAI-chattmodellerna är optimerade för att fungera med indata som är formaterade som en konversation. Variabeln messages
skickar en matris med ordlistor med olika roller i konversationen som avgränsas av system, användare, verktyg och assistent. Variabeln dataSources
ansluter till ditt Azure AI Search-index och gör att Azure OpenAI-modeller kan svara med dina data.
Om du vill utlösa ett svar från modellen bör du sluta med ett användarmeddelande som anger att det är assistentens tur att svara.
Dricks
Det finns flera parametrar som du kan använda för att ändra modellens svar, till exempel temperature
eller top_p
. Mer information finns i referensdokumentationen.
curl -i -X POST $AZURE_OPENAI_ENDPOINT/openai/deployments/$AZURE_OPENAI_DEPLOYMENT_ID/chat/completions?api-version=2024-02-15-preview \
-H "Content-Type: application/json" \
-H "api-key: $AZURE_OPENAI_API_KEY" \
-d \
'
{
"data_sources": [
{
"type": "azure_search",
"parameters": {
"endpoint": "'$AZURE_AI_SEARCH_ENDPOINT'",
"key": "'$AZURE_AI_SEARCH_API_KEY'",
"index_name": "'$AZURE_AI_SEARCH_INDEX'"
}
}
],
"messages": [
{
"role": "user",
"content": "What are my available health plans?"
}
]
}
'
Exempel på utdata
{
"id": "12345678-1a2b-3c4e5f-a123-12345678abcd",
"model": "gpt-4",
"created": 1709835345,
"object": "extensions.chat.completion",
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": "The available health plans in the Contoso Electronics plan and benefit packages are the Northwind Health Plus and Northwind Standard plans. [doc1].",
"end_turn": true,
"context": {
"citations": [
{
"content": "...",
"title": "...",
"url": "https://mysearch.blob.core.windows.net/xyz/001.txt",
"filepath": "001.txt",
"chunk_id": "0"
}
],
"intent": "[\"Available health plans\"]"
}
}
}
],
"usage": {
"prompt_tokens": 3779,
"completion_tokens": 105,
"total_tokens": 3884
}
}
Chatta med din modell med hjälp av en webbapp
Om du vill börja chatta med Azure OpenAI-modellen som använder dina data kan du distribuera en webbapp med hjälp av Azure OpenAI Studio eller exempelkod som vi tillhandahåller på GitHub. Den här appen distribueras med Hjälp av Azure App Service och tillhandahåller ett användargränssnitt för att skicka frågor. Den här appen kan användas med Azure OpenAI-modeller som använder dina data eller modeller som inte använder dina data. Mer information om krav, konfiguration och distribution finns i readme-filen på lagringsplatsen. Du kan också anpassa klientdels- och serverdelslogik för webbappen genom att göra ändringar i källkoden.
Rensa resurser
Om du vill rensa och ta bort en Azure OpenAI- eller Azure AI Search-resurs kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort.