Devextremeai adalah perpustakaan dengan implementasi penuh dan lengkap dari semua API Openai. Perpustakaan ini sepenuhnya sesuai dengan spesifikasi OpenAI dan juga mengimplementasikan respons kesalahan OpenAI. Sangat mudah digunakan dengan ASP.NET Core dan memiliki dukungan penuh untuk injeksi ketergantungan (dengan satu baris kode sebagai pola standar ASP.NET). Ini juga mudah digunakan di perpustakaan tanpa injeksi ketergantungan (lihat sampel di bawah).
Harap dicatat bahwa ini adalah Perpustakaan OpenAPI yang tidak resmi (tidak diatasi oleh Perusahaan Openai).
| Membangun | Status | Versi saat ini |
|---|---|---|
| Ci |
Untuk menggunakan perpustakaan ini, Anda memerlukan kunci API OpenAI (dan ID Organisasi Opsial). Untuk mendapatkan kunci API, Anda harus mendaftarkan akun Anda ke openai.com. Setelah terdaftar, buka akun OpenAI Anda dan cari 'Lihat tombol API', di halaman ini Anda dapat membuat apikey Anda. Dari halaman akun Anda, Anda dapat menemukan halaman Pengaturan di mana ditempatkan ID organisasi Anda.
Anda dapat menggunakan pustaka ini melalui paket nuget DevExtremeai
CATATAN PENTING BAHWA PERPUSTAKAAN INI DUKUNGAN DOT NET ICONFIGURASI DAN Suntikan Ketergantungan sehingga dapat membaca Apikey dan Organisasi dari mereka alih -alih coding keras dalam kode sumber. (Tolong jangan kode keras apikey dan id organisasi dalam kode sumber dan jangan mendorong mereka ke git atau repositori sumber apa pun).
Perpustakaan ini sepenuhnya melekat pada spesifikasi openai dan model objeknya sama dengan OpenAi (dengan kekhasan dotnet). Perpustakaan ini juga mengimplementasikan kode kesalahan OpenAI yang tidak didokumentasikan dalam referensi API OpenAI.
Instal Paket Nuget DevExtremeai di Program.cs Tambahkan ini menggunakan:
using DevExtremeAI . AspNet ; Ini menggunakan Anda untuk menggunakan ekstensi layanan ASP.NET. Dengan pembuat aplikasi web sekarang Anda dapat menggunakan metode AddDevExtremeAI() yang mendaftarkan semua yang Anda butuhkan dengan injeksi ketergantungan.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ; AddDevExtremeAI() kelebihan ini terlihat seperti apikey di appsettings.json atau appsettings.development.json sehingga Anda dapat menghindari kode hardcode dalam kode sumber. Saya sarankan Anda untuk menggunakan rahasia aksi github.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;Dengan cara ini API Key dan ID organisasi dibaca dari variabel lingkungan bernama OpenAI_Organization dan OpenAI_API_KEY.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ; Dalam contoh di atas Anda dapat menggunakan overload AddDevExtremeAI<TEnvironment> yang memerlukan jenis objek yang mengimplementasikan antarmuka DevExtremeAI.Settings.IAIEnvironment sehingga Anda dapat membaca Apikey atau ID organisasi dari tempat yang Anda inginkan. (Implementasi IAIEnvironment Anda akan digunakan di Singleton Way).
Akhirnya Anda dapat menggunakan overload AddDevExtremeAI(string apiKey, string? organization) dan lulus nilai -nilai ID Apikey dan organisasi yang dibaca dari tempat yang Anda inginkan (silakan baca dari tempat yang Anda inginkan tetapi jangan kode hardcode dalam kode sumber apa pun).
Itu saja! Dari sekarang Anda dapat menggunakan OpenAI di proyek ASP.NET Anda melalui injeksi ketergantungan.
Sekarang Anda dapat mendeklarasikan konstruktor pengontrol & teman Anda dengan DevExtremeAI.OpenAIClient.IOpenAIAPIClient argumen seperti ini:
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}Contoh penggunaan iopenaiapiclient di controller atau apicontroller bisa:
// GET api/<TestAIController>/5
[ HttpGet ( " {id} " ) ]
public async Task < string > Get ( int id )
{
var chat = new CreateChatCompletionRequest ( ) ;
chat . Model = " gpt-3.5-turbo-1106 " ;
string prompt = $" Is the number { id } even or odd? " ;
chat . AddMessage ( new ChatCompletionUserContentMessage ( ) { Content = prompt } ) ;
var response = await _openAIApiClient . CreateChatCompletionAsync ( chat ) ;
return $" { prompt } -> { response ? . OpenAIResponse ? . Choices [ 0 ] ? . Message ? . Content } " ;
}Catatan Anda dapat menemukan dokumentasi lengkap API dan DTO di Intellisense, contoh di bawah ini atau referensi API resmi OpenAI karena sama.
Jika Anda menggunakan inti ASP.NET di luar atau tanpa hostbuilder atau injeksi ketergantungan seperti dalam aplikasi konsol atau perpustakaan dotnet Anda dapat menggunakan metode pabrik.
Dalam skenario ini Anda memerlukan paket paket nuget yang sama DevExtremeai
Setelah menginstal paket ini, Anda dapat menggunakan perpustakaan DevExtremeai.
Di Program.cs iklan ini menggunakan:
using DevExtremeAI . OpenAIClient ; Sekarang Anda dapat menggunakan OpenAIClientFactory
Di dalam perpustakaan Anda atau metode utama aplikasi konsol Anda dapat membuat instasi IOpenAIAPIClient seperti dalam contoh ini:
internal class Program
{
static async Task Main ( string [ ] args )
{
var openAIClient = OpenAIClientFactory . CreateInstance ( ) ; //create an instance o IOpenAIAPIClient
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Hello! " ,
} ) ;
var response = await openAIClient . CreateChatCompletionAsync ( createCompletionRequest ) ;
Console . WriteLine ( response . OpenAIResponse . Choices [ 0 ] . Message . Content ) ;
}
} Metode pabrik ( CreateInstance ) dalam contoh di atas menggunakan kelebihan beban tanpa argumen, kelebihan ini tampilan apikeyValue dan organisasi ind di appsettings.json atau appsettings.development.json. Nama -nama kunci AppSettings harus OpenAI_API_KEY dan OPENAI_ORGANIZATION.
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient Dengan cara ini API Key dan ID organisasi dibaca dari variabel lingkungan bernama OpenAI_Organization dan OpenAI_API_KEY.
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient Anda dapat menggunakan kelebihan beban yang memerlukan instance DevExtremeAI.Settings.IAIEnvironment yang diimplementasikan sendiri sehingga Anda dapat membaca nilai apikey dan id organisasi dari tempat yang Anda inginkan.
Anda juga dapat menggunakan kelebihan beban yang menata kembali nilai apikey dan ID organisasi sebagai argumen (tetapi pleas tidak menggunakan kode dalam kode sumber).
Namun jangan Hardcode Apikey dan ID Organisasi dalam file apa pun (kode sumber atau file appsettings), jangan mendorong ke repositori sumber appsettings.development.json dan gunakan rahasia tindakan github.
Setiap metode DevExtremeAI.OpenAIClient.IOpenAIAPIClient sama dengan openai, sehingga Anda dapat menggunakan
Referensi API Openai Resmi. Permintaan objek DTO dijelaskan juga dengan dokumentasi .NET standar sehingga Anda dapat menggunakan intelis. Setiap metode IOpenAIAPIClient hadir dalam tes integrasi XUnit sehingga Anda dapat melihatnya di sana (direktori DevExtremeAilibtest).
Setiap respons adalah DevExtremeAI.OpenAIDTO.ResponseDTO<T> tipe. Jenis ini memiliki tiga properti:
ErrorResponse yang berisi detail kesalahan yang dikembalikan oleh OpenAI API jika masalah.HasError itu benar jika kesalahan terjadi jika tidak salah.OpenAIResponse Itu sama dengan respons openai.Rilis ini mendukung API OpenAI dan keluhan model objek ke GPT-4 dan GPT-3.5-Turbo. Dalam versi OpenAI API ini beberapa API telah digunakan dan beberapa model objek telah berubah. Anda dapat melihat model objek yang diperbarui dalam skema UML. Untuk API obrolan sekarang Anda dapat menggunakan objek yang mewarisi dari kelas dasar 'chatcompletionrolerequestmessage'.
Objek chatcompletionrolestringContentMessage hanya untuk kompatibilitas mundur. Dengan objek ini Anda dapat mengatur properti peran seperti versi model objek lama.
Misalnya kode lama seperti ini:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Dapat diperbarui dengan cara ini:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Perubahan adalah:
Untuk sepenuhnya memperbarui untuk pembaruan versi terbaru harus dilakukan dengan cara ini:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;Perubahan adalah:
Ditutupi semua jenis API openai:
Anda dapat menemukan contoh setiap API dalam proyek unit uji. Jika Anda mau, Anda dapat berkontribusi memperluas file readme ini dengan contoh;)
Hak Cipta (C) 2023 Andrea Piccioni
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam perangkat lunak.