Öğretici: Visual Studio Code'da işlevlerinize Azure OpenAI metin tamamlama ipuçları ekleme
Bu makalede, önceki hızlı başlangıç makalesinde oluşturduğunuz işlev uygulamasına HTTP uç noktası eklemek için Visual Studio Code'un nasıl kullanılacağı gösterilmektedir. Bu yeni HTTP uç noktası tetiklendiğinde, veri modelinizden metin tamamlama ipuçlarını almak için bir Azure OpenAI metin tamamlama giriş bağlaması kullanır.
Bu öğretici sırasında şu görevleri gerçekleştirmeyi öğreneceksiniz:
- Azure OpenAI'de kaynak oluşturma.
- OpenAI kaynağında bir model dağıtın.
- Model kaynağına erişim izinlerini ayarlayın.
- İşlev uygulamanızın OpenAI'ye bağlanması için etkinleştirin.
- HTTP ile tetiklenen işlevinize OpenAI bağlamaları ekleyin.
1. Önkoşulları denetleyin
- Visual Studio Code hızlı başlangıcının 1. bölümündeki adımları tamamlayın.
- Visual Studio Code hızlı başlangıcının 1. bölümündeki adımları tamamlayın.
- Visual Studio Code hızlı başlangıcının 1. bölümündeki adımları tamamlayın.
- Visual Studio Code hızlı başlangıcının 1. bölümündeki adımları tamamlayın.
- Visual Studio Code hızlı başlangıcının 1. bölümündeki adımları tamamlayın.
- Visual Studio Code hızlı başlangıcının 1. bölümündeki adımları tamamlayın.
- Azure aboneliğinizde Azure OpenAI'ye erişim elde edin. Henüz erişim izni verilmediyse, erişim istemek için bu formu doldurun.
- .NET Core CLI araçlarını yükleyin.
- Azurite depolama öykünücüsü. Gerçek bir Azure Depolama hesabı da kullanabilirsiniz ancak makalede bu öykünücüyü kullandığınız varsayılır.
2. Azure OpenAI kaynaklarınızı oluşturma
Aşağıdaki adımlarda, Azure portalında Azure OpenAI veri modelinin nasıl oluşturulacağı gösterilmektedir.
Azure portalında Azure aboneliğinizle oturum açın.
Kaynak oluştur'u seçin ve Azure OpenAI'yi arayın. Hizmeti bulurken Oluştur'u seçin.
Azure OpenAI Oluştur sayfasında, Temel Bilgiler sekmesindeki alanlar için aşağıdaki bilgileri sağlayın:
Alan Açıklama Abonelik Azure OpenAI kullanmak üzere eklenen aboneliğiniz. Kaynak grubu Önceki makalede işlev uygulaması için oluşturduğunuz kaynak grubu. Azure Kaynakları tarayıcısında işlev uygulamasına sağ tıklayıp özellikleri seçip döndürülen JSON kaynak dosyasında ayarı arayarak resourceGroup
bu kaynak grubu adını bulabilirsiniz.Bölge İdeal olan işlev uygulamasıyla aynı konumdur. Ad Azure OpenAI Hizmeti kaynağınız için mySampleOpenAI gibi açıklayıcı bir ad. Fiyatlandırma Katmanı Kaynağın fiyatlandırma katmanı. Şu anda Azure OpenAI Hizmeti için yalnızca Standart katman kullanılabilir. Fiyatlandırma hakkında daha fazla bilgi için Azure OpenAI fiyatlandırma sayfasını ziyaret edin Hem Ağ hem de Etiketler sekmelerinin varsayılan değerlerini kabul etmek için İleri'yi iki kez seçin. Oluşturduğunuz hizmetin İnternet dahil olmak üzere herhangi bir ağ kısıtlaması yoktur.
İşlemin son aşamasına geçmek için Son bir kez İleri'yi seçin: Gözden geçir + gönder.
Yapılandırma ayarlarınızı onaylayın ve Oluştur'u seçin.
Azure portalı, yeni kaynak kullanılabilir olduğunda bir bildirim görüntüler. Bildirimde Kaynağa git'i seçin veya yeni Azure OpenAI kaynağınızı ada göre arayın.
Yeni kaynağınızın Azure OpenAI kaynağı sayfasında Temel Uç>Noktalar'ın altındaki uç noktaları görüntülemek için buraya tıklayın'ı seçin. Uç nokta URL'sini ve anahtarları kopyalayın. Bu değerleri kaydedin, daha sonra ihtiyacınız olacak.
Artık Azure OpenAI'de modelinize bağlanmak için kimlik bilgileriniz olduğuna göre, bu erişim kimlik bilgilerini uygulama ayarlarında ayarlamanız gerekir.
3. Model dağıtma
Artık bir model dağıtabilirsiniz. Azure OpenAI Studio'daki çeşitli kullanılabilir modellerden birini seçebilirsiniz.
Modeli dağıtmak için şu adımları izleyin:
Oluşturduğunuz aboneliği ve Azure OpenAI kaynağını seçin ve kaynağı kullan'ı seçin.
Yönetim'in altında Dağıtımlar'ı seçin.
Yeni dağıtım oluştur'u seçin ve aşağıdaki alanları yapılandırın:
Alan Açıklama Dağıtım adı Bir adı dikkatle seçin. Dağıtım adı, kodunuzda istemci kitaplıklarını ve REST API'lerini kullanarak modeli çağırmak için kullanılır, bu nedenle daha sonra kullanmak üzere kaydetmeniz gerekir. Bir model seçin Modelin kullanılabilirlik durumu bölgeye göre değişir. Bölge başına kullanılabilir modellerin listesi için bkz . Model özet tablosu ve bölge kullanılabilirliği. Önemli
Modele API aracılığıyla eriştiğinizde, OpenAI ile Azure OpenAI arasındaki temel farklardan biri olan API çağrılarında temel model adı yerine dağıtım adına başvurmanız gerekir. OpenAI yalnızca model adını gerektirir. Azure OpenAI, model parametresini kullanırken bile her zaman dağıtım adı gerektirir. Belgelerimizde, hangi modelin belirli bir API uç noktasıyla çalıştığını belirtmeye yardımcı olmak için genellikle dağıtım adlarının model adlarıyla aynı olarak gösterildiği örnekler bulunur. Sonuç olarak dağıtım adlarınız, kullanım örneğiniz için en uygun adlandırma kuralını izleyebilir.
Ayarın geri kalanı için varsayılan değerleri kabul edin ve Oluştur'u seçin.
Dağıtımlar tablosu, yeni oluşturduğunuz modele karşılık gelen yeni bir girdi gösterir.
Artık işlev uygulamanıza Azure OpenAI tabanlı metin tamamlama eklemek için ihtiyacınız olan her şeye sahipsiniz.
4. Uygulama ayarlarını güncelleştirme
Visual Studio Code'da, önceki makaleyi tamamladığınızda oluşturduğunuz yerel kod projesini açın.
Proje kök klasöründeki local.settings.json dosyasında, ayarını olarak
UseDevelopmentStorage=true
güncelleştirinAzureWebJobsStorage
. local.settings.json ayarı yerineUseDevelopmentStorage=true
mevcut bir Azure Depolama hesabının bağlantı dizesi olarak ayarlandıysaAzureWebJobsStorage
bu adımı atlayabilirsiniz.local.settings.json dosyasına şu ayar değerlerini ekleyin:
AZURE_OPENAI_ENDPOINT
: bağlama uzantısı tarafından gereklidir. Bu değeri daha önce oluşturduğunuz Azure OpenAI kaynağının uç noktası olarak ayarlayın.AZURE_OPENAI_KEY
: bağlama uzantısı tarafından gereklidir. Bu değeri Azure OpenAI kaynağının anahtarı olarak ayarlayın.CHAT_MODEL_DEPLOYMENT_NAME
: giriş bağlamasını tanımlamak için kullanılır. Bu değeri model dağıtımınız için seçtiğiniz ada ayarlayın.
Dosyayı kaydedin. Azure'a dağıttığınızda, bu ayarları işlev uygulamanıza da eklemeniz gerekir.
5. Bağlama uzantılarını kaydetme
Azure OpenAI çıkış bağlaması kullandığınızdan, projeyi çalıştırmadan önce ilgili bağlama uzantısını yüklemiş olmanız gerekir.
HTTP ve zamanlayıcı tetikleyicileri dışında bağlamalar uzantı paketleri olarak uygulanır. Azure OpenAI uzantı paketini projenize eklemek için Terminal penceresinde şu dotnet add package komutunu çalıştırın:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.OpenAI --prerelease
5. Uzantı paketini güncelleştirme
Azure OpenAI bağlamalarının önizlemesine erişmek için bu uzantıyı içeren uzantı paketinin önizleme sürümünü kullanmanız gerekir.
extensionBundle
Geçerli host.json
dosyanızdaki ayarı şu JSON ile değiştirin:
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
"version": "[4.*, 5.0.0)"
}
Artık projenizde Azure OpenAI çıkış bağlamasını kullanabilirsiniz.
6. Modelden metin tamamlama döndürme
Eklediğiniz kod, mevcut projenizde bir whois
HTTP işlev uç noktası oluşturur. Bu işlevde, bir GET isteğinin URL name
parametresinde geçirilen veriler dinamik olarak tamamlama istemi oluşturmak için kullanılır. Bu dinamik istem, modelden istem temelinde bir yanıt döndüren bir metin tamamlama giriş bağlamasına bağlıdır. Modelin tamamlanması HTTP yanıtında döndürülür.
Mevcut
HttpExample
sınıf dosyanıza şuusing
deyimi ekleyin:using Microsoft.Azure.Functions.Worker.Extensions.OpenAI.TextCompletion;
Aynı dosyaya adlı
whois
yeni bir HTTP tetikleyici uç noktasını tanımlayan bu kodu ekleyin:[Function(nameof(WhoIs))] public IActionResult WhoIs([HttpTrigger(AuthorizationLevel.Function, Route = "whois/{name}")] HttpRequest req, [TextCompletionInput("Who is {name}?", Model = "%CHAT_MODEL_DEPLOYMENT_NAME%")] TextCompletionResponse response) { if(!String.IsNullOrEmpty(response.Content)) { return new OkObjectResult(response.Content); } else { return new NotFoundObjectResult("Something went wrong."); } }
Koleksiyona
pom.xml
bu başvuruyu eklemek için proje dosyasını güncelleştirinproperties
:<azure-functions-java-library-openai>0.4.0-preview</azure-functions-java-library-openai>
Aynı dosyada bu bağımlılığı koleksiyona
dependencies
ekleyin:<dependency> <groupId>com.microsoft.azure.functions</groupId> <artifactId>azure-functions-java-library-openai</artifactId> <version>${azure-functions-java-library-openai}</version> </dependency>
Mevcut
Function.java
proje dosyasına şuimport
deyimleri ekleyin:import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletion; import com.microsoft.azure.functions.openai.annotation.textcompletion.TextCompletionResponse;
Aynı dosyaya adlı
whois
yeni bir HTTP tetikleyici uç noktasını tanımlayan bu kodu ekleyin:@FunctionName("WhoIs") public HttpResponseMessage whoIs( @HttpTrigger( name = "req", methods = {HttpMethod.GET}, authLevel = AuthorizationLevel.ANONYMOUS, route = "whois/{name}") HttpRequestMessage<Optional<String>> request, @BindingName("name") String name, @TextCompletion(prompt = "Who is {name}?", model = "%CHAT_MODEL_DEPLOYMENT_NAME%", name = "response") TextCompletionResponse response, final ExecutionContext context) { return request.createResponseBuilder(HttpStatus.OK) .header("Content-Type", "application/json") .body(response.getContent()) .build(); }
Visual Studio Code'da F1 tuşuna basın ve komut paleti türünde
Azure Functions: Create Function...
HTTP tetikleyicisi'ni seçin, işlev adınıwhois
yazın ve Enter tuşuna basın.Yeni
whois.js
kod dosyasında dosyanın içeriğini şu kodla değiştirin:const { app, input } = require("@azure/functions"); // This OpenAI completion input requires a {name} binding value. const openAICompletionInput = input.generic({ prompt: 'Who is {name}?', maxTokens: '100', type: 'textCompletion', model: '%CHAT_MODEL_DEPLOYMENT_NAME%' }) app.http('whois', { methods: ['GET'], route: 'whois/{name}', authLevel: 'function', extraInputs: [openAICompletionInput], handler: async (_request, context) => { var response = context.extraInputs.get(openAICompletionInput) return { body: response.content.trim() } } });
Visual Studio Code'da F1 tuşuna basın ve komut paleti türünde
Azure Functions: Create Function...
HTTP tetikleyicisi'ni seçin, işlev adınıwhois
yazın ve Enter tuşuna basın.Yeni
whois.ts
kod dosyasında dosyanın içeriğini şu kodla değiştirin:import { app, input } from "@azure/functions"; // This OpenAI completion input requires a {name} binding value. const openAICompletionInput = input.generic({ prompt: 'Who is {name}?', maxTokens: '100', type: 'textCompletion', model: '%CHAT_MODEL_DEPLOYMENT_NAME%' }) app.http('whois', { methods: ['GET'], route: 'whois/{name}', authLevel: 'function', extraInputs: [openAICompletionInput], handler: async (_request, context) => { var response: any = context.extraInputs.get(openAICompletionInput) return { body: response.content.trim() } } });
Mevcut
function_app.py
proje dosyasına şuimport
deyimi ekleyin:import json
Aynı dosyaya adlı
whois
yeni bir HTTP tetikleyici uç noktasını tanımlayan bu kodu ekleyin:@app.route(route="whois/{name}", methods=["GET"]) @app.text_completion_input(arg_name="response", prompt="Who is {name}?", max_tokens="100", model = "%CHAT_MODEL_DEPLOYMENT_NAME%") def whois(req: func.HttpRequest, response: str) -> func.HttpResponse: response_json = json.loads(response) return func.HttpResponse(response_json["content"], status_code=200) @app.route(route="genericcompletion", methods=["POST"]) @app.text_completion_input(arg_name="response", prompt="{Prompt}", model = "%CHAT_MODEL_DEPLOYMENT_NAME%") def genericcompletion(req: func.HttpRequest, response: str) -> func.HttpResponse: response_json = json.loads(response) return func.HttpResponse(response_json["content"], status_code=200)
Visual Studio Code'da F1 tuşuna basın ve komut paleti türünde
Azure Functions: Create Function...
HTTP tetikleyicisi'ni seçin, işlev adınıwhois
yazın, Anonim'i seçin ve Enter tuşuna basın.Yeni
whois/function.json
kod dosyasını açın ve içeriğini giriş bağlaması içinTextCompletionResponse
bir tanım ekleyen şu kodla değiştirin:{ "bindings": [ { "authLevel": "function", "type": "httpTrigger", "direction": "in", "name": "Request", "route": "whois/{name}", "methods": [ "get" ] }, { "type": "http", "direction": "out", "name": "Response" }, { "type": "textCompletion", "direction": "in", "name": "TextCompletionResponse", "prompt": "Who is {name}?", "maxTokens": "100", "model": "%CHAT_MODEL_DEPLOYMENT_NAME%" } ] }
Kod dosyasının
whois/run.ps1
içeriğini, giriş bağlama yanıtını döndüren şu kodla değiştirin:using namespace System.Net param($Request, $TriggerMetadata, $TextCompletionResponse) Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ StatusCode = [HttpStatusCode]::OK Body = $TextCompletionResponse.Content })
7. İşlevi çalıştırma
Visual Studio Code'da F1 tuşuna basın ve komut paleti türünde
Azurite: Start
Enter tuşuna basarak Azurite depolama öykünücüsü başlatın.İşlev uygulaması projesini ve Çekirdek Araçları'nı hata ayıklama modunda başlatmak için F5 tuşuna basın.
Core Tools çalışırken, uç nokta işlevine
whois
, yolda şu URL gibi bir adla bir GET isteği gönderin:http://localhost:7071/api/whois/<NAME>
Dizeyi
<NAME>
, istemine geçirilmesini"Who is {name}?"
istediğiniz değerle değiştirin.<NAME>
, gibiAbraham%20Lincoln
bir genel şeklin URL ile kodlanmış adı olmalıdır.Gördüğünüz yanıt, Azure OpenAI modelinizden gelen metin tamamlama yanıtıdır.
Yanıt döndürüldükten sonra Çekirdek Araçları'nı durdurmak için Ctrl + C tuşlarına basın.
8. Kaynakları temizleme
Azure'da kaynaklar işlev uygulamaları, işlevler, depolama hesapları vb. ifade eder. Bunlar kaynak grupları halinde gruplandırılır ve grubu silerek gruptaki her şeyi silebilirsiniz.
Bu hızlı başlangıçları tamamlamak için kaynaklar oluşturdunuz. Hesap durumunuz ve hizmet fiyatlandırmanıza bağlı olarak bu kaynaklar için faturalandırılabilirsiniz. Kaynaklara artık ihtiyacınız yoksa, şunları yaparak silebilirsiniz:
Visual Studio Code'da F1 tuşuna basarak komut paletini açın. Komut paletinde araması yapın ve öğesini seçin
Azure: Open in portal
.İşlev uygulamanızı seçin ve Enter tuşuna basın. İşlev uygulaması sayfası Azure portalında açılır.
Genel Bakış sekmesinde Kaynak grubunun yanındaki adlandırılmış bağlantıyı seçin.
Kaynak grubu sayfasında, dahil edilen kaynakların listesini gözden geçirin ve bunların silmek istediğiniz kaynaklar olduğunu doğrulayın.
Kaynak grubunu sil’i seçin ve yönergeleri izleyin.
Silme işlemi birkaç dakika sürebilir. İşlem tamamlandığında, birkaç saniye boyunca bir bildirim görüntülenir. Bildirimi görüntülemek için sayfanın üst kısmındaki zil simgesini de seçebilirsiniz.