Devextremeaiは、すべてのOpenAIのAPIを完全かつ完全に実装するライブラリです。このライブラリは、OpenAIスペックに完全に準拠しており、OpenAIエラー応答も実装しています。 ASP.NETコアで非常に使いやすく、依存関係の注入を完全にサポートしています(ASP.NET標準パターンとしての単一のコードを使用)。また、依存噴射なしでライブラリで簡単に使用できます(以下のサンプルを参照)。
これは非公式のOpenapi Libraryであることに注意してください(Openai Companyには不満ではありません)。
| 建てる | 状態 | 現在のバージョン |
|---|---|---|
| CI |
このライブラリを使用するには、OpenAI APIキー(およびオプションで組織ID)が必要です。 APIキーを取得するには、openai.comにアカウントを登録する必要があります。登録後、OpenAIアカウントに移動して「APIキーを表示」を検索します。このページでは、Apikeyを作成できます。アカウントページから、組織IDが配置されている設定ページを見つけることができます。
このライブラリは、NugetパッケージDevextremeaiを使用して使用できます
重要なことに、このライブラリは、ソースコードでハードコーディングではなく、それらからApikeyと組織を読み取ることができるように、ドットネットのアイコンフィギュアと依存関係の注入をサポートすることに注意してください。 (ソースコードのハードコードAPIKEYと組織IDをハードコードではなく、GITまたはソースリポジトリにプッシュしないでください)。
このライブラリはOpenAIスペックに完全に付着しており、そのオブジェクトモデルはOpenAIと同じです(dotnet特異性を備えています)。このライブラリは、OpenAIのAPIリファレンスに記載されていないOpenAIエラーコードも実装しています。
プログラムにnugetパッケージdevextremeaiをインストールします。csこれを使用してこれを追加します。
using DevExtremeAI . AspNet ;これにより、ASP.NETサービス拡張機能を使用できます。 WebApplication Builderを使用すると、依存関係噴射に必要なものをすべて登録するAddDevExtremeAI()メソッドを使用できます。
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ;このAddDevExtremeAI() adverloadは、appsettings.jsonまたはappsettings.development.jsonのApikeyを探しているため、ソースコードでハードコードを避けることができます。 Github Action Secretsを使用することをお勧めします。
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;このようにして、APIキーと組織IDは、OpenAI_OrganizationとOpenAI_API_KEYという名前の環境変数から読み取りされます。
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ;上記の例では、 DevExtremeAI.Settings.IAIEnvironmentインターフェイスを実装するオブジェクトタイプを必要とするオーバーロードAddDevExtremeAI<TEnvironment>を使用して、必要な場所からApikeyまたは組織IDを読むことができます。 ( IAIEnvironmentの実装は、Singleton Wayで使用されます)。
最後に、オーバーロードAddDevExtremeAI(string apiKey, string? organization)を使用して、必要な場所から読み取られたApikeyと組織IDの値を渡すことができます(必要な場所から読んでくださいが、ソースコードでハードコードをしないでください)。
それだけです!これからは、ASP.NETプロジェクトでOpenAIを依存噴射を介して使用できます。
これで、コントローラーと友人のコンストラクターをDevExtremeAI.OpenAIClient.IOpenAIAPIClient引数で宣言することができます。
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}コントローラーまたはApicontrollerでのIopenaiapiclientの使用の例は次のとおりです。
// 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 } " ;
}注APIとDTOの完全なドキュメントをIntellisenseで見つけることができます。以下の例、またはOpenai公式APIリファレンスが同じであるためです。
コンソールアプリケーションやdotNetライブラリのように、asp.netコアの外側またはホストビルダーまたは依存関係の注入なしで使用する場合は、ファクトリーメソッドを使用できます。
このシナリオでは、同じパッケージnugetパッケージdevextremeaiが必要です
このパッケージをインストールした後、Devextremeaiライブラリを使用できます。
in program.cs adこれを使用して:
using DevExtremeAI . OpenAIClient ;これで、 OpenAIClientFactoryを使用できます
ライブラリまたはコンソールアプリケーションのメインメソッド内で、この例のようにIOpenAIAPIClientのInstaceを作成できます。
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 ) ;
}
}工場法( CreateInstance )上記の例では、引数なしで過負荷を使用します。この過負荷は、Appsetings.jsonまたはAppsettings.development.jsonのApikeyValueとandyonid Indを探します。 AppSettingsキー名は、OpenAi_Api_keyとOpenAi_organizationでなければなりません。
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient このようにして、APIキーと組織IDは、OpenAI_OrganizationとOpenAI_API_KEYという名前の環境変数から読み取りされます。
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient 自分で実装されたDevExtremeAI.Settings.IAIEnvironmentのインスタンスを必要とするオーバーロードを使用して、希望する場所からApikey値と組織IDを読むことができます。
また、Apikey値と組織IDを引数としてreqire apikey Valueと組織IDを使用することもできます(ただし、ソースコードでハードコードしないでください)。
ただし、ファイル(ソースコードまたはAppSettingsファイル)のハードコードAPIKEYと組織IDは、appsettings.development.jsonをソースリポジトリに押し込まないでください。
DevExtremeAI.OpenAIClient.IOpenAIAPIClientのすべての方法はOpenaiと同じなので、使用できます
公式Openai APIリファレンス。リクエストDTOオブジェクトは、標準の.NETドキュメントでも説明されているため、Intellieseseを使用できます。 IOpenAIAPIClientのすべての方法は、Xunit統合テストに存在しているため、そこでそれらを見ることができます(Devextremeailibtestディレクトリ)。
すべての応答は、 DevExtremeAI.OpenAIDTO.ResponseDTO<T>タイプのものです。このタイプには3つのプロパティがあります。
ErrorResponse 。HasErrorます。OpenAIResponse 。このリリースは、GPT-4およびGPT-3.5ターボへのOpenai APIおよびオブジェクトモデルの苦情をサポートしています。このOpenAI APIバージョンでは、いくつかのAPIが非推奨されており、一部のオブジェクトモデルが変更されました。 UMLスキーマで更新されたオブジェクトモデルを見ることができます。チャットAPIの場合、ベースクラスの「ChatCompertionRolereQuestMessage」から継承するオブジェクトを使用できます。
Object ChatcompletionRolestringContentMessageは、後方互換性のみを対象としています。このオブジェクトを使用すると、古いオブジェクトモデルバージョンのようなロールプロパティを設定できます。
たとえば、このような古いコード:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;この方法で更新することができます:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;変更は次のとおりです。
最新バージョンに完全に更新するには、この方法で更新する必要があります。
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;変更は次のとおりです。
すべてのOpenAI APIタイプをカバーしています:
テストユニットプロジェクトのすべてのAPIの例を見つけることができます。必要に応じて、このreadmeファイルを例で拡張することができます;)
Copyright(c)2023 Andrea Piccioni
このソフトウェアと関連するドキュメントファイル(「ソフトウェア」)のコピーを入手して、制限なしにソフトウェアを扱うために、このソフトウェアを制限する権利を含め、ソフトウェアのコピーをコピー、変更、公開、配布、販売する、ソフトウェアのコピーを許可する人を許可する人を許可することを含めて、許可が無料で許可されます。
上記の著作権通知とこの許可通知は、ソフトウェアのすべてのコピーまたはかなりの部分に含まれるものとします。
このソフトウェアは、商品性、特定の目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示的または黙示的なものを保証することなく、「現状のまま」提供されます。いかなる場合でも、著者または著作権所有者は、契約、不法行為、またはその他の訴訟、ソフトウェアまたはソフトウェアの使用またはその他の取引に関連する、またはその他の契約、またはその他の請求、またはその他の責任について責任を負いません。