Microsoft เอื้อมมือมาหาฉันเกี่ยวกับการเปลี่ยนห้องสมุดนี้เป็นห้องสมุด C# Openai อย่างเป็นทางการใหม่และตอนนี้ก็พร้อมแล้ว! เริ่มต้นด้วย v2.0.0-beta.3 ตอนนี้ห้องสมุดอย่างเป็นทางการมีความคุ้มครองเต็มรูปแบบและจะอยู่ล่าสุด รายละเอียดเพิ่มเติมในบล็อกโพสต์ที่นี่: https://devblogs.microsoft.com/dotnet/openai-dotnet-library
repo gitHub นี้จะยังคงอยู่ที่นี่เพื่อจัดทำเอกสารเวอร์ชันดั้งเดิมของห้องสมุดของฉันผ่านเวอร์ชัน 1.11 ซึ่งยังคงมีอยู่ใน Nuget เช่นกัน -
ไลบรารี W# .NET แบบง่าย ๆ ที่ใช้กับ API ของ OpenAI บริบทเพิ่มเติมในบล็อกของฉัน นี่คือห้องสมุดเสื้อคลุมที่ไม่เป็นทางการดั้งเดิมของฉันรอบ OpenAI API
var api = new OpenAI_API . OpenAIAPI ( " YOUR_API_KEY " ) ;
var result = await api . Chat . CreateChatCompletionAsync ( " Hello! " ) ;
Console . WriteLine ( result ) ;
// should print something like "Hi! How can I help you?" เริ่มต้นด้วย v2.0.0-beta ห้องสมุดนี้ได้รับการรับรองโดย Microsoft ห้องสมุดเวอร์ชันอย่างเป็นทางการใหม่จะมีความคุ้มครองเต็มรูปแบบและจะอยู่ได้ทันสมัยอย่างเต็มที่ รายละเอียดเพิ่มเติมในบล็อกโพสต์ที่นี่: https://devblogs.microsoft.com/dotnet/openai-dotnet-library/ repo github นี้จะยังคงอยู่ที่นี่เพื่อจัดทำเอกสารเวอร์ชันดั้งเดิมของฉันผ่านเวอร์ชัน 1.11 ซึ่งยังคงมีอยู่ใน Nuget เช่นกัน
ไลบรารีนี้ใช้. NET Standard 2.0 ดังนั้นควรทำงานในทุกรุ่นของ. NET จากเฟรมเวิร์ก. NET แบบดั้งเดิม> = 4.7.2 ถึง. NET (Core)> = 3.0 มันควรทำงานข้ามแอพคอนโซล, winforms, WPF, ASP.NET, Unity, Xamarin และอื่น ๆ มันควรทำงานข้าม Windows, Linux และ Mac และอาจเป็นมือถือ มีการพึ่งพาน้อยที่สุดและได้รับอนุญาตในโดเมนสาธารณะ
ติดตั้งแพ็คเกจ OpenAI v1.11 จาก NuGet นี่คือวิธีการผ่าน Commandline:
Install-Package OpenAI - Version 1.11 . 0มี 3 วิธีในการจัดหาคีย์ API ของคุณตามลำดับความสำคัญ:
APIAuthentication(string key) ตัวสร้าง.openai และมีบรรทัด: OPENAI_API_KEY=sk-aaaabbbbbccccddddd คุณใช้ APIAuthentication เมื่อคุณเริ่มต้น API ดังที่แสดง:
// for example
OpenAIAPI api = new OpenAIAPI ( " YOUR_API_KEY " ) ; // shorthand
// or
OpenAIAPI api = new OpenAIAPI ( new APIAuthentication ( " YOUR_API_KEY " ) ) ; // create object manually
// or
OpenAIAPI api = new OpenAIAPI ( APIAuthentication LoadFromEnv ( ) ) ; // use env vars
// or
OpenAIAPI api = new OpenAIAPI ( APIAuthentication LoadFromPath ( ) ) ; // use config file (can optionally specify where to look)
// or
OpenAIAPI api = new OpenAIAPI ( ) ; // uses default, env, or config fileคุณอาจเลือกใช้ OpenAiORGANIZATION (OpenAI_ORGANIZATION ใน ENV หรือ FILE) ระบุว่าองค์กรใดที่ใช้สำหรับคำขอ API การใช้งานจากคำขอ API เหล่านี้จะนับรวมกับโควต้าการสมัครสมาชิกขององค์กรที่ระบุ รหัสองค์กรสามารถพบได้ในหน้าการตั้งค่าองค์กรของคุณ
// for example
OpenAIAPI api = new OpenAIAPI ( new APIAuthentication ( " YOUR_API_KEY " , " org-yourOrgHere " ) ) ; API แชทสามารถเข้าถึงได้ผ่าน OpenAIAPI.Chat มีสองวิธีในการใช้จุดสิ้นสุดการแชทไม่ว่าจะผ่านการสนทนาที่ง่ายขึ้นหรือด้วยวิธีการร้องขอ/การตอบกลับแบบเต็ม
คลาสการสนทนาช่วยให้คุณสามารถโต้ตอบกับ CHATGPT ได้อย่างง่ายดายโดยการเพิ่มข้อความลงในการแชทและขอให้ CHATGPT ตอบกลับ
var chat = api . Chat . CreateConversation ( ) ;
chat . Model = Model . GPT4_Turbo ;
chat . RequestParameters . Temperature = 0 ;
/// give instruction as System
chat . AppendSystemMessage ( " You are a teacher who helps children understand if things are animals or not. If the user tells you an animal, you say " yes " . If the user tells you something that is not an animal, you say " no " . You only ever respond with " yes " or " no " . You do not say anything else. " ) ;
// give a few examples as user and assistant
chat . AppendUserInput ( " Is this an animal? Cat " ) ;
chat . AppendExampleChatbotOutput ( " Yes " ) ;
chat . AppendUserInput ( " Is this an animal? House " ) ;
chat . AppendExampleChatbotOutput ( " No " ) ;
// now let's ask it a question
chat . AppendUserInput ( " Is this an animal? Dog " ) ;
// and get the response
string response = await chat . GetResponseFromChatbotAsync ( ) ;
Console . WriteLine ( response ) ; // "Yes"
// and continue the conversation by asking another
chat . AppendUserInput ( " Is this an animal? Chair " ) ;
// and get another response
response = await chat . GetResponseFromChatbotAsync ( ) ;
Console . WriteLine ( response ) ; // "No"
// the entire chat history is available in chat.Messages
foreach ( ChatMessage msg in chat . Messages )
{
Console . WriteLine ( $" { msg . Role } : { msg . Content } " ) ;
} การสตรีมช่วยให้คุณได้รับผลลัพธ์คือการสร้างซึ่งสามารถช่วยให้แอปพลิเคชันของคุณรู้สึกตอบสนองได้ดีขึ้น
ใช้ตัววนซ้ำ C# 8.0 ใหม่:
var chat = api . Chat . CreateConversation ( ) ;
chat . AppendUserInput ( " How to make a hamburger? " ) ;
await foreach ( var res in chat . StreamResponseEnumerableFromChatbotAsync ( ) )
{
Console . Write ( res ) ;
}หรือถ้าใช้เฟรมเวิร์ก. NET แบบคลาสสิกหรือ C# <8.0:
var chat = api . Chat . CreateConversation ( ) ;
chat . AppendUserInput ( " How to make a hamburger? " ) ;
await chat . StreamResponseFromChatbotAsync ( res =>
{
Console . Write ( res ) ;
} ) ; คุณสามารถส่งภาพไปยังแชทเพื่อใช้รุ่น GPT-4 Vision ใหม่ สิ่งนี้ใช้ได้เฉพาะกับรุ่น Model.GPT4_Vision โปรดดู https://platform.openai.com/docs/guides/Vision สำหรับข้อมูลและข้อ จำกัด เพิ่มเติม
// the simplest form
var result = await api . Chat . CreateChatCompletionAsync ( " What is the primary non-white color in this logo? " , ImageInput . FromFile ( " path/to/logo.png " ) ) ;
// or in a conversation
var chat = api . Chat . CreateConversation ( ) ;
chat . Model = Model . GPT4_Vision ;
chat . AppendSystemMessage ( " You are a graphic design assistant who helps identify colors. " ) ;
chat . AppendUserInput ( " What are the primary non-white colors in this logo? " , ImageInput . FromFile ( " path/to/logo.png " ) ) ;
string response = await chat . GetResponseFromChatbotAsync ( ) ;
Console . WriteLine ( response ) ; // "Blue and purple"
chat . AppendUserInput ( " What are the primary non-white colors in this logo? " , ImageInput . FromImageUrl ( " https://rogerpincombe.com/templates/rp/center-aligned-no-shadow-small.png " ) ) ;
response = await chat . GetResponseFromChatbotAsync ( ) ;
Console . WriteLine ( response ) ; // "Blue, red, and yellow"
// or when manually creating the ChatMessage
messageWithImage = new ChatMessage ( ChatMessageRole . User , " What colors do these logos have in common? " ) ;
messageWithImage . images . Add ( ImageInput . FromFile ( " path/to/logo.png " ) ) ;
messageWithImage . images . Add ( ImageInput . FromImageUrl ( " https://rogerpincombe.com/templates/rp/center-aligned-no-shadow-small.png " ) ) ;
// you can specify multiple images at once
chat . AppendUserInput ( " What colors do these logos have in common? " , ImageInput . FromFile ( " path/to/logo.png " ) , ImageInput . FromImageUrl ( " https://rogerpincombe.com/templates/rp/center-aligned-no-shadow-small.png " ) ) ; หากประวัติการสนทนาของแชทยาวเกินไปอาจไม่เหมาะสมกับความยาวบริบทของโมเดล โดยค่าเริ่มต้นข้อความที่ไม่ใช่ระบบที่เร็วที่สุดจะถูกลบออกจากประวัติการแชทและการเรียก API จะถูกลองใหม่ คุณสามารถปิดการใช้งานสิ่งนี้ได้โดยการตั้งค่า chat.AutoTruncateOnContextLengthExceeded = false หรือคุณสามารถแทนที่อัลกอริทึมการตัดทอนเช่นนี้:
chat . OnTruncationNeeded += ( sender , args ) =>
{
// args is a List<ChatMessage> with the current chat history. Remove or edit as nessisary.
// replace this with more sophisticated logic for your use-case, such as summarizing the chat history
for ( int i = 0 ; i < args . Count ; i ++ )
{
if ( args [ i ] . Role != ChatMessageRole . System )
{
args . RemoveAt ( i ) ;
return ;
}
}
} ; คุณอาจต้องการใช้โมเดลใหม่ที่มีความยาวบริบทที่ใหญ่ขึ้น คุณสามารถทำได้โดยการตั้งค่า chat.Model = Model.GPT4_Turbo หรือ chat.Model = Model.ChatGPTTurbo_16k ฯลฯ
คุณสามารถดูการใช้โทเค็นผ่าน chat.MostRecentApiResult.Usage.PromptTokens Mostrecentapiresult.usage.prompttokens และคุณสมบัติที่เกี่ยวข้อง
คุณสามารถเข้าถึงการควบคุมเต็มรูปแบบของแชท API โดยใช้ OpenAIAPI.Chat.CreateChatCompletionAsync() และวิธีการที่เกี่ยวข้อง
async Task < ChatResult > CreateChatCompletionAsync ( ChatRequest request ) ;
// for example
var result = await api . Chat . CreateChatCompletionAsync ( new ChatRequest ( )
{
Model = Model . ChatGPTTurbo ,
Temperature = 0.1 ,
MaxTokens = 50 ,
Messages = new ChatMessage [ ] {
new ChatMessage ( ChatMessageRole . User , " Hello! " )
}
} )
// or
var result = api . Chat . CreateChatCompletionAsync ( " Hello! " ) ;
var reply = results . Choices [ 0 ] . Message ;
Console . WriteLine ( $" { reply . Role } : { reply . Content . Trim ( ) } " ) ;
// or
Console . WriteLine ( results ) ; มันส่งคืน ChatResult ซึ่งส่วนใหญ่เป็นข้อมูลเมตาดังนั้นใช้วิธี .ToString() เพื่อรับข้อความหากสิ่งที่คุณต้องการคือข้อความตอบกลับของผู้ช่วย
นอกจากนี้ยังมี API สตรีมมิ่ง ASYNC ซึ่งทำงานคล้ายกับผลลัพธ์การสตรีมปลายทางที่สมบูรณ์
ด้วย Model.GPT4_Turbo ใหม่ GPT4_TURBO หรือ gpt-3.5-turbo-1106 รุ่นคุณสามารถตั้งค่า ChatRequest.ResponseFormat เป็น ChatRequest.ResponseFormats.JsonObject เพื่อเปิดใช้งานโหมด JSON เมื่อเปิดใช้งานโหมด JSON โมเดลจะถูก จำกัด ให้สร้างเฉพาะสตริงที่แยกวิเคราะห์เป็นวัตถุ JSON ที่ถูกต้อง ดู https://platform.openai.com/docs/guides/text-generation/json-mode สำหรับรายละเอียดเพิ่มเติม
ChatRequest chatRequest = new ChatRequest ( )
{
Model = model ,
Temperature = 0.0 ,
MaxTokens = 500 ,
ResponseFormat = ChatRequest . ResponseFormats . JsonObject ,
Messages = new ChatMessage [ ] {
new ChatMessage ( ChatMessageRole . System , " You are a helpful assistant designed to output JSON. " ) ,
new ChatMessage ( ChatMessageRole . User , " Who won the world series in 2020? Return JSON of a 'wins' dictionary with the year as the numeric key and the winning team as the string value. " )
}
} ;
var results = await api . Chat . CreateChatCompletionAsync ( chatRequest ) ;
Console . WriteLine ( results ) ;
/* prints:
{
"wins": {
2020: "Los Angeles Dodgers"
}
}
*/ ความสำเร็จถือว่าเป็นมรดกโดย OpenAI API ที่เสร็จสมบูรณ์สามารถเข้าถึงได้ผ่าน OpenAIAPI.Completions :
async Task < CompletionResult > CreateCompletionAsync ( CompletionRequest request ) ;
// for example
var result = await api . Completions . CreateCompletionAsync ( new CompletionRequest ( " One Two Three One Two " , model : Model . CurieText , temperature : 0.1 ) ) ;
// or
var result = await api . Completions . CreateCompletionAsync ( " One Two Three One Two " , temperature : 0.1 ) ;
// or other convenience overloads คุณสามารถสร้าง CompletionRequest ของคุณล่วงหน้าก่อนเวลาหรือใช้หนึ่งในผู้ช่วยที่โอเวอร์โหลดเพื่อความสะดวก มันส่งคืน CompletionResult ซึ่งส่วนใหญ่เป็นข้อมูลเมตาดังนั้นใช้วิธี .ToString() เพื่อรับข้อความหากสิ่งที่คุณต้องการคือความสมบูรณ์
การสตรีมช่วยให้คุณได้รับผลลัพธ์คือการสร้างซึ่งสามารถช่วยให้แอปพลิเคชันของคุณรู้สึกตอบสนองได้ดีขึ้นโดยเฉพาะอย่างยิ่งในรุ่นที่ช้าเช่น Davinci
ใช้ตัววนซ้ำ C# 8.0 ใหม่:
IAsyncEnumerable < CompletionResult > StreamCompletionEnumerableAsync ( CompletionRequest request ) ;
// for example
await foreach ( var token in api . Completions . StreamCompletionEnumerableAsync ( new CompletionRequest ( " My name is Roger and I am a principal software engineer at Salesforce. This is my resume: " , Model . DavinciText , 200 , 0.5 , presencePenalty : 0.1 , frequencyPenalty : 0.1 ) ) )
{
Console . Write ( token ) ;
}หรือถ้าใช้เฟรมเวิร์ก. NET แบบคลาสสิกหรือ C# <8.0:
async Task StreamCompletionAsync ( CompletionRequest request , Action < CompletionResult > resultHandler ) ;
// for example
await api . Completions . StreamCompletionAsync (
new CompletionRequest ( " My name is Roger and I am a principal software engineer at Salesforce. This is my resume: " , Model . DavinciText , 200 , 0.5 , presencePenalty : 0.1 , frequencyPenalty : 0.1 ) ,
res => ResumeTextbox . Text += res . ToString ( ) ) ;Audio API เป็นข้อความถึงการพูดการถอดความ (การพูดถึงข้อความ) และการแปล (คำพูดที่ไม่ใช่ภาษาอังกฤษเป็นข้อความภาษาอังกฤษ)
TTS API เข้าถึงได้ผ่าน OpenAIAPI.TextToSpeech :
await api . TextToSpeech . SaveSpeechToFileAsync ( " Hello, brave new world! This is a test. " , outputPath ) ;
// You can open it in the defaul audio player like this:
Process . Start ( outputPath ) ; นอกจากนี้คุณยังสามารถระบุพารามิเตอร์คำขอทั้งหมดด้วยวัตถุ TextToSpeechRequest :
var request = new TextToSpeechRequest ( )
{
Input = " Hello, brave new world! This is a test. " ,
ResponseFormat = ResponseFormats . AAC ,
Model = Model . TTS_HD ,
Voice = Voices . Nova ,
Speed = 0.9
} ;
await api . TextToSpeech . SaveSpeechToFileAsync ( request , " test.aac " ) ; แทนที่จะบันทึกไปยังไฟล์คุณสามารถรับสตรีมเสียงไบต์ด้วย api.TextToSpeech.GetSpeechAsStreamAsync(request) :
using ( Stream result = await api . TextToSpeech . GetSpeechAsStreamAsync ( " Hello, brave new world! " , Voices . Fable ) )
using ( StreamReader reader = new StreamReader ( result ) )
{
// do something with the audio stream here
} API การถอดความเสียงช่วยให้คุณสามารถสร้างข้อความจากเสียงในภาษาใด ๆ ที่รองรับ สามารถเข้าถึงได้ผ่าน OpenAIAPI.Transcriptions :
string resultText = await api . Transcriptions . GetTextAsync ( " path/to/file.mp3 " ) ;คุณสามารถขอผลลัพธ์ verbose ซึ่งจะให้ข้อมูลเซ็กเมนต์และระดับโทเค็นรวมถึงข้อมูลเมตา OpenAI มาตรฐานเช่นเวลาประมวลผล:
AudioResultVerbose result = await api . Transcriptions . GetWithDetailsAsync ( " path/to/file.m4a " ) ;
Console . WriteLine ( result . ProcessingTime . TotalMilliseconds ) ; // 496ms
Console . WriteLine ( result . text ) ; // "Hello, this is a test of the transcription function."
Console . WriteLine ( result . language ) ; // "english"
Console . WriteLine ( result . segments [ 0 ] . no_speech_prob ) ; // 0.03712
// etcนอกจากนี้คุณยังสามารถขอผลลัพธ์ในรูปแบบ SRT หรือ VTT ซึ่งมีประโยชน์สำหรับการสร้างคำบรรยายสำหรับวิดีโอ:
string result = await api . Transcriptions . GetAsFormatAsync ( " path/to/file.m4a " , AudioRequest . ResponseFormats . SRT ) ;พารามิเตอร์เพิ่มเติมเช่นอุณหภูมิ, พรอมต์, ภาษา, ฯลฯ สามารถระบุได้ทั้งแบบต่อเนื่องหรือเป็นค่าเริ่มต้น:
// inline
result = await api . Transcriptions . GetTextAsync ( " conversation.mp3 " , " en " , " This is a transcript of a conversation between a medical doctor and her patient: " , 0.3 ) ;
// set defaults
api . Transcriptions . DefaultTranscriptionRequestArgs . Language = " en " ;แทนที่จะให้ไฟล์ท้องถิ่นบนดิสก์คุณสามารถให้สตรีมเสียงไบต์ สิ่งนี้จะเป็นประโยชน์สำหรับการสตรีมเสียงจากไมโครโฟนหรือแหล่งอื่นโดยไม่ต้องเขียนลงบนดิสก์ก่อน โปรดไม่คุณต้องระบุชื่อไฟล์ซึ่งไม่จำเป็นต้องมีอยู่ แต่ต้องมีส่วนขยายที่แม่นยำสำหรับประเภทของเสียงที่คุณส่ง OpenAI ใช้ส่วนขยายชื่อไฟล์เพื่อกำหนดรูปแบบสตรีมเสียงของคุณ
using ( var audioStream = File . OpenRead ( " path-here.mp3 " ) )
{
return await api . Transcriptions . GetTextAsync ( audioStream , " file.mp3 " ) ;
} การแปลช่วยให้คุณถอดความข้อความจากภาษาใด ๆ ที่รองรับเป็นภาษาอังกฤษ OpenAI ไม่สนับสนุนการแปลเป็นภาษาอื่น ๆ เฉพาะภาษาอังกฤษ สามารถเข้าถึงได้ผ่าน OpenAIAPI.Translations รองรับฟังก์ชั่นทั้งหมดเช่นเดียวกับการถอดความ
string result = await api . Translations . GetTextAsync ( " chinese-example.m4a " ) ; API Embedding สามารถเข้าถึงได้ผ่าน OpenAIAPI.Embeddings :
async Task < EmbeddingResult > CreateEmbeddingAsync ( EmbeddingRequest request ) ;
// for example
var result = await api . Embeddings . CreateEmbeddingAsync ( new EmbeddingRequest ( " A test text for embedding " , model : Model . AdaTextEmbedding ) ) ;
// or
var result = await api . Embeddings . CreateEmbeddingAsync ( " A test text for embedding " ) ;ผลการฝังมีข้อมูลเมตาจำนวนมากเวกเตอร์ที่แท้จริงของการลอยอยู่ในผลลัพธ์ data []. การฝัง
เพื่อความเรียบง่ายคุณสามารถขอเวกเตอร์ของลอยและแยกแยะข้อมูลเมตาพิเศษด้วย api.Embeddings.GetEmbeddingsAsync("test text here")
API Moderation สามารถเข้าถึงได้ผ่าน OpenAIAPI.Moderation :
async Task < ModerationResult > CreateEmbeddingAsync ( ModerationRequest request ) ;
// for example
var result = await api . Moderation . CallModerationAsync ( new ModerationRequest ( " A test text for moderating " , Model . TextModerationLatest ) ) ;
// or
var result = await api . Moderation . CallModerationAsync ( " A test text for moderating " ) ;
Console . WriteLine ( result . results [ 0 ] . MainContentFlag ) ; ผลลัพธ์อยู่ใน .results[0] และมีวิธีการช่วยตัวช่วยที่ดีเช่น FlaggedCategories และ MainContentFlag
จุดสิ้นสุดของไฟล์ API ผ่านทาง OpenAIAPI.Files :
// uploading
async Task < File > UploadFileAsync ( string filePath , string purpose = " fine-tune " ) ;
// for example
var response = await api . Files . UploadFileAsync ( " fine-tuning-data.jsonl " ) ;
Console . Write ( response . Id ) ; //the id of the uploaded file
// listing
async Task < List < File > > GetFilesAsync ( ) ;
// for example
var response = await api . Files . GetFilesAsync ( ) ;
foreach ( var file in response )
{
Console . WriteLine ( file . Name ) ;
}นอกจากนี้ยังมีวิธีการรับเนื้อหาไฟล์ลบไฟล์ ฯลฯ
จุดสิ้นสุดการปรับแต่งเองยังไม่ได้ดำเนินการ แต่จะเพิ่มในไม่ช้า
API การสร้างภาพ Dall-E สามารถเข้าถึงได้ผ่าน OpenAIAPI.ImageGenerations :
async Task < ImageResult > CreateImageAsync ( ImageGenerationRequest request ) ;
// for example
var result = await api . ImageGenerations . CreateImageAsync ( new ImageGenerationRequest ( " A drawing of a computer writing a test " , 1 , ImageSize . _512 ) ) ;
// or
var result = await api . ImageGenerations . CreateImageAsync ( " A drawing of a computer writing a test " ) ;
Console . WriteLine ( result . Data [ 0 ] . Url ) ;ผลลัพธ์ของภาพมี URL สำหรับภาพออนไลน์หรือภาพที่เข้ารหัส base64 ขึ้นอยู่กับ ImageGenerationRequest.ResponseFormat (URL เป็นค่าเริ่มต้น)
ใช้ Dall-e 3 แบบนี้:
async Task < ImageResult > CreateImageAsync ( ImageGenerationRequest request ) ;
// for example
var result = await api . ImageGenerations . CreateImageAsync ( new ImageGenerationRequest ( " A drawing of a computer writing a test " , OpenAI_API . Models . Model . DALLE3 , ImageSize . _1024x1792 , " hd " ) ) ;
// or
var result = await api . ImageGenerations . CreateImageAsync ( " A drawing of a computer writing a test " , OpenAI_API . Models . Model . DALLE3 ) ;
Console . WriteLine ( result . Data [ 0 ] . Url ) ; สำหรับการใช้บริการ Azure OpenAI คุณต้องระบุชื่อของทรัพยากร Azure OpenAI ของคุณรวมถึงรหัสการปรับใช้โมเดลของคุณ
ฉันไม่สามารถเข้าถึงบริการ Microsoft Azure Openai ได้ดังนั้นฉันจึงไม่สามารถทดสอบฟังก์ชั่นนี้ได้ หากคุณมีการเข้าถึงและสามารถทดสอบได้โปรดส่งปัญหาที่อธิบายผลลัพธ์ของคุณ การประชาสัมพันธ์กับการทดสอบการรวมจะได้รับการชื่นชมอย่างมาก โดยเฉพาะอย่างยิ่งมันไม่ชัดเจนสำหรับฉันที่การระบุโมเดลทำงานในลักษณะเดียวกันกับ Azure
อ้างอิงเอกสาร Azure OpenAI และภาพหน้าจอโดยละเอียดใน #64 สำหรับข้อมูลเพิ่มเติม
การกำหนดค่าควรมีลักษณะเช่นนี้สำหรับบริการ Azure:
OpenAIAPI api = OpenAIAPI . ForAzure ( " YourResourceName " , " deploymentId " , " api-key " ) ;
api . ApiVersion = " 2023-03-15-preview " ; // needed to access chat endpoint on Azure จากนั้นคุณอาจใช้วัตถุ api เหมือนปกติ นอกจากนี้คุณยังสามารถระบุ APIAuthentication เป็นวิธีอื่น ๆ ที่ระบุไว้ในส่วนการตรวจสอบด้านบน ปัจจุบันห้องสมุดนี้รองรับ API-KEY FLOW เท่านั้นไม่ใช่การไหลของโฆษณา
ณ วันที่ 2 เมษายน 2566 คุณต้องเลือก API เวอร์ชัน 2023-03-15-preview ด้วยตนเองตามที่แสดงไว้ด้านบนเพื่อเข้าถึงจุดแชทบน Azure เมื่อไม่ได้ดูตัวอย่างแล้วฉันจะอัปเดตค่าเริ่มต้น
คุณสามารถระบุ IHttpClientFactory ที่จะใช้สำหรับคำขอ HTTP ซึ่งช่วยให้สามารถปรับแต่งคุณสมบัติการร้องขอ HTTP การเชื่อมต่อการเชื่อมต่อและการเยาะเย้ย รายละเอียดใน #103
OpenAIAPI api = new OpenAIAPI ( ) ;
api . HttpClientFactory = myIHttpClientFactoryObject ; ทุกคลาสวิธีการและทรัพย์สินมีเอกสาร XML ที่กว้างขวางดังนั้นจึงควรปรากฏขึ้นโดยอัตโนมัติใน Intellisense ที่รวมกับเอกสาร OpenAI อย่างเป็นทางการควรจะเพียงพอที่จะเริ่มต้น อย่าลังเลที่จะเปิดปัญหาที่นี่หากคุณมีคำถามใด ๆ เอกสารที่ดีกว่าอาจมาในภายหลัง
โดเมนสาธารณะ CC-0
ห้องสมุดนี้ได้รับใบอนุญาต CC-0 ในโดเมนสาธารณะ คุณสามารถใช้มันสำหรับสิ่งที่คุณต้องการสาธารณะหรือส่วนตัวโดยไม่ต้องกังวลเกี่ยวกับการอนุญาตหรือการออกใบอนุญาตหรืออะไรก็ตาม มันเป็นเพียงเสื้อคลุมรอบ OpenAI API ดังนั้นคุณยังต้องเข้าถึง OpenAI จากพวกเขาโดยตรง ฉันไม่ได้เป็นพันธมิตรกับ OpenAI และห้องสมุดนี้ไม่ได้รับการรับรองจากพวกเขาฉันแค่เข้าถึงเบต้าและต้องการสร้างห้องสมุด C# เพื่อเข้าถึงได้ง่ายขึ้น หวังว่าคนอื่นจะพบว่าสิ่งนี้มีประโยชน์เช่นกัน อย่าลังเลที่จะเปิดประชาสัมพันธ์หากมีสิ่งใดที่คุณต้องการมีส่วนร่วม