Devextremeai는 All OpenAI의 API를 완전히 구현하는 라이브러리입니다. 이 라이브러리는 OpenAI 사양을 완전히 준수하고 OpenAI 오류 응답을 구현합니다. ASP.NET Core에서 사용하기가 매우 쉽고 종속성 주입을 완전히 지원합니다 (단일 코드 라인은 ASP.NET 표준 패턴으로). 의존성 주입이없는 라이브러리에서도 사용하기 쉽습니다 (아래 샘플 참조).
이것은 비공식 OpenApi 라이브러리입니다 (OpenAi Company에서는 화를 내지 않습니다).
| 짓다 | 상태 | 현재 버전 |
|---|---|---|
| CI |
이 라이브러리를 사용하려면 OpenAI API 키 (및 선택적으로 조직 ID)가 필요합니다. API 키를 얻으려면 계정을 OpenAi.com에 등록해야합니다. 등록 후 OpenAI 계정으로 이동하여 'API 키보기보기'를 검색하면이 페이지에서 Apikey를 만들 수 있습니다. 계정 페이지에서 조직 ID를 배치하는 설정 페이지를 찾을 수 있습니다.
Nuget 패키지 Devextremeai를 통해이 라이브러리를 사용할 수 있습니다
이 라이브러리 는 DOT NET IConfiguration 및 종속성 주입을 지원하므로 소스 코드의 하드 코딩 대신 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() 오버로드는 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 } " ;
}참고 Intellisense에서 API 및 DTO의 전체 문서를 찾을 수 있습니다. 아래 예제 또는 OpenAI 공식 API 참조는 동일하기 때문입니다.
Console Application 또는 DotNet 라이브러리에서와 같이 ASP.NET Core 외부 또는 호스트 빌더 또는 종속성 주입이없는 경우 공장 방법을 사용할 수 있습니다.
이 시나리오에서는 동일한 패키지 Nuget 패키지 Devextremeai가 필요합니다.
이 패키지를 설치 한 후 DeVexTremeai 라이브러리를 사용할 수 있습니다.
program.cs ad this this를 사용하여 다음과 같습니다.
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 ) 위의 예에서는 인수없이 과부하를 사용합니다.이 과부하는 ApikeyValue 및 Organization에서 APPSETTINGS.JSON 또는 APPSETTINGS.DEVENCIPMENT.JSON을 찾습니다. 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를 인수로 시험 할 수있는 오버로드를 사용할 수 있습니다 (그러나 소스 코드에서 하드 코딩하지 마십시오).
그러나 모든 파일 (소스 코드 또는 AppSettings 파일)의 하드 코드 Apikey 및 조직 ID를 하드 코드하지 말고 소스 리포지토리를 눌러 AppSettings.Development.json을 사용하여 GitHub 작업 비밀을 사용하지 마십시오.
DevExtremeAI.OpenAIClient.IOpenAIAPIClient 의 모든 방법은 OpenAI와 동일하므로 사용할 수 있습니다.
공식 OpenAI API 참조. 요청 DTO 객체는 표준 .NET 문서로 설명되어 지적을 사용할 수 있습니다. IOpenAIAPIClient 의 모든 방법은 Xunit 통합 테스트에 존재하므로이를 볼 수 있습니다 (Devextremeailibtest 디렉토리).
모든 응답은 DevExtremeAI.OpenAIDTO.ResponseDTO<T> 유형입니다. 이 유형에는 세 가지 속성이 있습니다.
ErrorResponse .HasError 거짓입니다.OpenAIResponse 는 OpenAI 응답과 동일합니다.이 릴리스는 OpenAI API 및 객체 모델 GPT-4 및 GPT-3.5-Turbo에 대한 불만을 지원합니다. 이 OpenAI API 버전에서는 일부 API가 더 이상 사용되지 않았으며 일부 객체 모델이 변경되었습니다. UML 스키마에서 업데이트 된 객체 모델을 볼 수 있습니다. 채팅 API의 경우 이제 기본 클래스 'ChatCompletionRoleRequestMessage'에서 상속되는 객체를 사용할 수 있습니다.
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 파일을 확장 할 수 있습니다.)
저작권 (C) 2023 Andrea Piccioni
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게는 허가가 부여됩니다. 소프트웨어의 사용, 복사, 수정, 합병, 배포, 배포, 숭고 및/또는 소프트웨어의 사본을 판매 할 권한을 포함하여 제한없이 소프트웨어를 처리 할 수 있도록 소프트웨어를 제공 할 권한이 없습니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 소프트웨어의 사용 또는 기타 거래에서 발생하는 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않습니다.