Devextremeai é uma biblioteca com implementação completa e completa de todas as APIs do OpenAI. Esta biblioteca é totalmente compatível com as especificações do OpenAI e também implementa a resposta de erro do OpenAI. É muito fácil de usar com o ASP.NET Core e possui suporte total à injeção de dependência (com uma única linha de código como padrão padrão do ASP.NET). Também é fácil de usar em bibliotecas sem injeção de dependência (consulte as amostras abaixo).
Observe que esta é a biblioteca OpenAPI não oficial (não é mantida pela Openai Company).
| Construir | Status | Versão atual |
|---|---|---|
| CI |
Para usar esta biblioteca, você precisa da chave da API do OpenAI (e opcionalmente ID da organização). Para obter a chave da API, você deve registrar sua conta no OpenAI.com. Após o registro, vá para a sua conta do OpenAI e pesquise 'View API Keys', nesta página, você pode criar seu APIKEY. Na página da sua conta, você pode encontrar a página de configurações onde é colocado seu ID da organização.
Você pode usar esta biblioteca via Nuget Package Devextremeai
Observe importante que esta biblioteca suporta a injeção de iconfiguração e dependência da Biblioteca, para que possa ler o Apikey e a organização deles, em vez de codificação dura no código -fonte. (Não codifique o código de código e o ID da organização no código -fonte e não os pressione para o Git ou qualquer repositório de origem).
Essa biblioteca adere totalmente às especificações do OpenAI e seu modelo de objeto é o mesmo do OpenAI (com peculiaridades dotnet). Esta biblioteca também implementa códigos de erro OpenAI que não estão documentados na referência de APIs do OpenAI.
Instale o pacote Nuget Devextremeai no programa.cs Adicionar isso usando:
using DevExtremeAI . AspNet ; Isso permite que você use a extensão do serviço ASP.NET. Com o WebApplication Builder agora, você pode usar o método AddDevExtremeAI() que registre tudo o que você precisa na injeção de dependência.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ; Essa sobrecarga AddDevExtremeAI() procura o apikey em appSsettings.json ou appSsettings.development.json para que você possa evitar o código de código no código -fonte. Eu sugiro que você use segredos de ação do GitHub.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;Dessa maneira, a chave da API e o ID da organização são lidos a partir de variáveis de ambiente chamadas OpenAI_organization e OpenAI_API_KEY.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ; No exemplo acima, você pode usar a sobrecarga AddDevExtremeAI<TEnvironment> que exige um tipo de objeto que implemente a interface DevExtremeAI.Settings.IAIEnvironment para que você possa ler o ID APIKEY ou da organização de onde deseja. (Sua implementação do IAIEnvironment será usada no Singleton Way).
Finalmente, você pode usar os valores AddDevExtremeAI(string apiKey, string? organization) e APIKEY e ID da organização lidos de onde você deseja (leia -os de onde você deseja, mas não use o código -fonte em nenhum código -fonte).
Isso é tudo! A partir de agora você pode usar o OpenAI no seu projeto ASP.NET por meio de injeção de dependência.
Agora você pode declarar o construtor do seu controlador e amigos com DevExtremeAI.OpenAIClient.IOpenAIAPIClient argumento como este:
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}Um exemplo de uso de iopenapiclient em controlador ou apicontroller poderia ser:
// 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 } " ;
}Observe que você pode encontrar a documentação completa da API e DTO em IntelliSense, exemplos abaixo ou referência oficial da API OpenAI porque são os mesmos.
Se você usar o núcleo do ASP.NET externo ou sem injeção de hostbuilder ou dependência, como no aplicativo de console ou na biblioteca dotnet, poderá usar métodos de fábrica.
Nesse cenário, você precisa do mesmo pacote Nuget Package Devextremeii
Depois de instalar este pacote, você pode usar a biblioteca Devextremeai.
No programa.cs anúncio usando:
using DevExtremeAI . OpenAIClient ; Agora você pode usar o OpenAIClientFactory
Dentro da sua biblioteca ou método principal do aplicativo de console, você pode criar um instace de IOpenAIAPIClient , como neste exemplo:
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 ) ;
}
} O método da fábrica ( CreateInstance ) no exemplo acima use a sobrecarga sem argumentos, essa sobrecarga procura apikeyvalue e organização IND em appsets.json ou appSettings.development.json. Os nomes de teclas appSettings devem ser openai_api_key e openai_organization.
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient Dessa maneira, a chave da API e o ID da organização são lidos a partir de variáveis de ambiente chamadas OpenAI_organization e OpenAI_API_KEY.
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient Você pode usar a sobrecarga que exige uma instância de DevExtremeAI.Settings.IAIEnvironment implementada por si mesmo para que você possa ler o valor do APIKEY e o ID da organização de onde deseja.
Além disso, você pode usar a sobrecarga que requer valor APIKEY e ID da organização como argumentos (mas os pedidos não os codificam no código -fonte).
No entanto, não codifique o APIKEY e o ID da organização em nenhum arquivo (código -fonte ou arquivos de AppSettings), não entre no repositório de origem The AppSsets.Development.json e use o GitHub Action Secrets.
Todos os métodos de DevExtremeAI.OpenAIClient.IOpenAIAPIClient são os mesmos do OpenAI, para que você possa usar o
Referência oficial da API OpenAI. Os objetos DTO de solicitação também são descritos com a documentação do .NET padrão para que você possa usar o IntelliSese. Todos os métodos de IOpenAIAPIClient estão presentes nos testes de integração do XUnit, portanto, você pode olhar para eles lá (Diretório Devextremeailibtest).
Cada resposta é de DevExtremeAI.OpenAIDTO.ResponseDTO<T> Tipo. Este tipo tem três propriedades:
ErrorResponse que contém os detalhes do erro retornados pela API OpenAI em caso de problema.HasError é verdadeiro se um erro aconteceu de outra forma for falso.OpenAIResponse que é o mesmo da resposta do Openai.Este lançamento suporta a reclamação dos modelos de API e objetos do OpenAI para GPT-4 e GPT-3.5-Turbo. Nesta versão da API OpenAI, alguma API foi preterida e algum modelo de objeto mudou. Você pode ver o modelo de objeto atualizado no esquema UML. Para a API de bate -papo agora, você pode usar objetos que herda da classe base 'ChatCompletionRolereQuestMessage'.
O objeto ChatCompletionRolestringContentMessage é apenas para compatibilidade com versões anteriores. Com este objeto, você pode definir a propriedade de função como a versão antiga do modelo de objeto.
por exemplo, código antigo como este:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Pode ser atualizado desta maneira:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;As mudanças são:
Para atualizar totalmente para a atualização da versão mais recente, deve ser feita dessa maneira:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;As mudanças são:
São cobertos todos os tipos de API OpenAI:
Você pode encontrar os exemplos de cada API no projeto da unidade de teste. Se você quiser, você pode contribuir com estendendo este arquivo de leitura com exemplos;)
Copyright (C) 2023 Andrea Piccioni
A permissão é concedida, gratuita, a qualquer pessoa que obtenha uma cópia deste software e arquivos de documentação associados (o "software"), para lidar com o software sem restrição, inclusive sem limitação os direitos de usar, copiar, modificar, mesclar, publicar, distribuir, mobilizar o software e/ou vender cópias do software e permitir que as pessoas a quem
O aviso de direitos autorais acima e este aviso de permissão devem ser incluídos em todas as cópias ou em partes substanciais do software.
O software é fornecido "como está", sem garantia de qualquer tipo, expresso ou implícito, incluindo, entre outros, as garantias de comercialização, aptidão para uma finalidade específica e não innoculação. Em nenhum caso os autores ou detentores de direitos autorais serão responsáveis por qualquer reclamação, danos ou outro passivo, seja em uma ação de contrato, delito ou não, decorrente de, fora ou em conexão com o software ou o uso ou outras negociações no software.