Devextremeai es una biblioteca con una implementación completa y completa de todas las API de OpenAI. Esta biblioteca cumple totalmente con las especificaciones de OpenAI y también implementa la respuesta de error de OpenAI. Es muy fácil de usar con ASP.NET Core y tiene soporte completo para la inyección de dependencia (con una sola línea de código como patrón estándar ASP.NET). También es fácil de usar en bibliotecas sin inyección de dependencia (ver muestras a continuación).
Tenga en cuenta que esta es la Biblioteca OpenApi no oficial (no está mantenida por Operai Company).
| Construir | Estado | Versión actual |
|---|---|---|
| CI |
Para usar esta biblioteca, necesita la tecla API de OpenAI (y opcionalmente ID de organización). Para obtener la clave API, debe registrar su cuenta en OpenAI.com. Después de registrarse, vaya a su cuenta de OpenAI y busque 'Ver claves API', en esta página puede crear su apikey. Desde la página de su cuenta, puede encontrar la página de configuración donde se coloca en su ID de organización.
Puede usar esta biblioteca a través del paquete Nuget Devextremeai
Tenga en cuenta que esta biblioteca admite inyección de iconfiguración y dependencia de DOT para que pueda leerle a Apikey y organización en lugar de codificación dura en el código fuente. (No se dure el código APIKEY y la ID de organización en el código fuente y no los presione a GIT o ningún repositorio de fuente).
Esta biblioteca se adhiere completamente a las especificaciones de OpenAI y su modelo de objetos es el mismo de OpenAI (con peculiaridades de Dotnet). Esta biblioteca también implementa códigos de error de OpenAI que no están documentados en la referencia de API de OpenAI.
Instale el paquete Nuget DeVExtremeai en Program.cs Agregue esto usando:
using DevExtremeAI . AspNet ; Esto utilizando le permite usar la extensión del servicio ASP.NET. Con el WebApplication Builder ahora puede usar el método AddDevExtremeAI() que registra todo lo que necesita con la inyección de dependencia.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ; Esta sobrecarga AddDevExtremeAI() busca el apikey en appsettings.json o appSettings.development.json para que pueda evitar codificarlos en el código fuente. Te sugiero que uses los secretos de acción de GitHub.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;De esta manera, la clave API y la ID de organización se leen a partir de variables de entorno llamadas OpenAI_organization y OpenAI_API_KEY.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ; En el ejemplo anterior, puede usar la sobrecarga AddDevExtremeAI<TEnvironment> que requiere un tipo de objeto que implementa la interfaz DevExtremeAI.Settings.IAIEnvironment para que pueda leer apikey u ID de organización desde donde desee. (Su implementación de IAIEnvironment se utilizará en Singleton Way).
Finalmente, puede usar la sobrecarga AddDevExtremeAI(string apiKey, string? organization) y pasar los valores de ID de la organización y los valores de ID de organización que desea (léelos desde donde desea, pero no seifique en ningún código fuente).
¡Eso es todo! A partir de ahora, puede usar OpenAI en su proyecto ASP.NET a través de la inyección de dependencia.
Ahora puede declarar el constructor de su controlador y amigos con DevExtremeAI.OpenAIClient.IOpenAIAPIClient .
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}Un ejemplo de uso de iopenaiapiclient en controlador o apicontroller podría 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 } " ;
}Tenga en cuenta que puede encontrar la documentación completa de API y DTO en IntelliSense, ejemplos a continuación o referencia oficial de API oficial de OpenAI porque son las mismas.
Si usa Outside ASP.NET Core o sin HostBuilder o inyección de dependencia, como en la aplicación de consola o la biblioteca de Dotnet, puede usar métodos de fábrica.
En este escenario necesita el mismo paquete de paquete Nuget DeVextremeai
Después de instalar este paquete, puede usar la biblioteca DeVExtremeai.
En program.cs anuncio que usa:
using DevExtremeAI . OpenAIClient ; Ahora puedes usar la OpenAIClientFactory
Dentro de su biblioteca o método principal de la aplicación de la consola, puede crear una instancia de IOpenAIAPIClient como en este ejemplo:
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 ) ;
}
} El método de fábrica ( CreateInstance ) en el ejemplo anterior usa la sobrecarga sin argumentos, esta sobrecarga busca apikeyvalue y organización ind en appSettings.json o appsettings.development.json. Los nombres de teclas AppSettings deben ser OpenAI_API_KEY y OpenAI_organization.
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient De esta manera, la clave API y la ID de organización se leen a partir de variables de entorno llamadas OpenAI_organization y OpenAI_API_KEY.
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient Puede usar la sobrecarga que requiere una instancia de DevExtremeAI.Settings.IAIEnvironment implementada por usted mismo para que pueda leer el valor y la identificación de la organización de APIKEY desde donde desea.
También puede usar la sobrecarga que reqire apikey valor y identificación de la organización como argumentos (pero las súplicas no los codifican en el código fuente).
Sin embargo, no se hardifique apikey y la identificación de la organización en ningún archivo (código fuente o archivos de appSettings), no presione en el repositorio de origen el appSettings.development.json y use los secretos de acción de Github.
Todos los métodos de DevExtremeAI.OpenAIClient.IOpenAIAPIClient son los mismos de OpenAi, por lo que puede usar el
Referencia oficial de API de Operai. Los objetos de solicitud DTO también se describen con la documentación estándar de .NET para que pueda usar IntelliSese. Todos los métodos de IOpenAIAPIClient están presentes en las pruebas de integración de XUNIT, por lo tanto, puede mirarlos allí (directorio DevextremeailibTest).
Cada respuesta es de DevExtremeAI.OpenAIDTO.ResponseDTO<T> Tipo. Este tipo tiene tres propiedades:
ErrorResponse que contiene los detalles de error devueltos por la API de OpenAI en caso de problema.HasError , eso es cierto si ocurre un error de otra manera es falso.OpenAIResponse que es lo mismo de la respuesta Operai.Este lanzamiento admite la queja de los modelos de API y objetos de OpenAI a GPT-4 y GPT-3.5-TURBO. En esta versión de API de OpenAI, algunas API se han desactivado y algún modelo de objetos ha cambiado. Puede ver el modelo de objeto actualizado en el esquema UML. Para la API de chat ahora puede usar objetos que hereden de la clase base 'ChatCompletionRolerequestMessage'.
Object CHATCompletionRoleRringContentMessage es solo para compatibilidad con versiones anteriores. Con este objeto, puede establecer la propiedad de rol como la versión del modelo de objeto antiguo.
Por ejemplo, el código antiguo como este:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Puede actualizarse de esta manera:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Los cambios son:
Para actualizar completamente la última actualización de la versión debe hacerse de esta manera:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;Los cambios son:
Están cubiertos todos los tipos de API de OpenAI:
Puede encontrar los ejemplos de cada API en el proyecto de la unidad de prueba. Si lo desea, puede contribuir a extender este archivo ReadMe con ejemplos;)
Copyright (c) 2023 Andrea Piccioni
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar en el software sin restricción, incluidos los derechos de los derechos de usar, copiar, modificar, fusionar, publicar, distribuir, sublicense y/o vender copias del software, y para permitir que las personas a quienes se les proporciona el software para hacer, sujeto a las siguientes condiciones: las siguientes condiciones: las siguientes condiciones: las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otra manera, que surge, de o en relación con el software o el uso u otros tratos en el software.