

Este proyecto es una versión autohospedada de la nueva API de asistentes de estado de OpenAI. ?
Todas las definiciones y tipos de ruta de la API se generan 100% generadas automáticamente de la especificación oficial de OpenAPI de OpenAI, por lo que todo lo que se necesita para cambiar entre la API oficial y su API personalizada está cambiando el baseURL . ?
Esto significa que todos los parámetros, respuestas y tipos de API son compatibles con el cable con la API oficial de OpenAI, y el hecho de que se generan automáticamente que será relativamente fácil mantenerlos sincronizados con el tiempo.
Aquí hay un ejemplo usando el paquete oficial de nodo.js openai :
import OpenAI from 'openai'
// The only difference is the `baseURL` pointing to your custom API server
const openai = new OpenAI ( {
baseURL : 'http://localhost:3000'
} )
// Since the custom API is spec-compliant with OpenAI, you can use the sdk normally ?
const assistant = await openai . beta . assistants . create ( {
model : 'gpt-4-1106-preview' ,
instructions : 'You are a helpful assistant.'
} ) Aquí está el mismo ejemplo usando el paquete oficial de Python openai :
from openai import OpenAI
client = OpenAI (
base_url : "http://localhost:3000"
)
# Now you can use the sdk normally!
# (only file and beta assistant resources are currently supported)
# You can even switch back and forth between the official and custom APIs!
assistant = client . beta . assistants . create (
model = "gpt-4-1106-preview" ,
description = "You are a helpful assistant."
)Tenga en cuenta que este proyecto no está destinado a ser una recreación completa de toda la API de Operai. Más bien, se centra solo en las porciones con estado de la API de los nuevos asistentes . Se admiten los siguientes tipos de recursos:
Consulte la Guía oficial de asistentes de Operai para obtener más información sobre cómo funcionan los asistentes.
Poder ejecutar sus propios asistentes de OpenAI personalizados que son 100% compatibles con los asistentes oficiales de OpenAI desbloquean todo tipo de posibilidades útiles:
Lo más importante, si la "tienda GPT" de OpenAI termina ganando tracción con los usuarios activos semanales de 100 metros de ChatGPT, entonces la capacidad de ejecutar, depurar y personalizar de manera confiable asistentes compatibles con OpenAI terminará siendo increíblemente importante en el futuro.
Incluso podría imaginar una futura tienda asistente que es totalmente compatible con los GPT de OpenAi, pero en lugar de confiar en OpenAi como el guardián, podría ser total o parcialmente descentralizado . ?
Prerrequisitos:
Instalar DEPS:
pnpm installGenere los tipos de prisma localmente:
pnpm generatecp .env.example .envDATABASE_URL - Cadena de conexión de Postgresbrew install postgresql && brew services start postgresqlnpx prisma db push para configurar su base de datos de acuerdo con nuestro esquema de prismaOPENAI_API_KEY - Clave API de OpenAI para ejecutar las llamadas de finalización de chat subyacentesbrew install redis && brew services start redisREDIS_HOST - opcional; El valor predeterminado a localhostREDIS_PORT - opcional; El valor predeterminado a 6379REDIS_USERNAME - opcional; predeterminado es defaultREDIS_PASSWORD - opcionalbrew install localstack/tap/localstack-cli && localstack start -dbrew install minio/stable/minio && minio server /dataS3_BUCKET - requeridoS3_REGION - opcional; predeterminado es autoS3_ENDPOINT - requerido; Ejemplo: https://<id>.r2.cloudflarestorage.comACCESS_KEY_ID - requerido (documentos de CloudFlare R2)SECRET_ACCESS_KEY - requerido (documentos de CloudFlare R2)La aplicación está compuesta por dos servicios: un servidor API RESTFUL y un corredor de tareas async. Ambos servicios son apátridas y pueden escalarse horizontalmente.
Hay dos formas de ejecutar estos servicios localmente. La forma más rápida es a través de tsx :
# Start the REST API server in one shell
npx tsx src/server
# Start an async task queue runner in another shell
npx tsx src/runnerAlternativamente, puede traspilar primero la fuente TS a JS, que se prefiere para ejecutarse en producción:
pnpm build
# Start the REST API server in one shell
npx tsx dist/server
# Start an async task queue runner in another shell
npx tsx dist/runner Este ejemplo contiene un script de asistente de extremo a extremo que utiliza una función get_weather personalizada.
Puede ejecutarlo utilizando el cliente Operai oficial para Node.js contra la API Operai predeterminada alojada en https://api.openai.com/v1 .
npx tsx e2ePara ejecutar la misma suite de prueba contra su API local, puede ejecutar:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2eEs genial ver ambas suites de prueba que ejecutan exactamente el mismo código de asistentes utilizando el cliente oficial de OpenAI Node.js, sin ninguna diferencia notable entre las dos versiones. ¡Huzzah! ?
Este ejemplo contiene un script de asistente de extremo a extremo que utiliza la herramienta retrieval incorporada con este archivo readme.md como archivo adjunto.
Puede ejecutarlo utilizando el cliente Operai oficial para Node.js contra la API Operai predeterminada alojada en https://api.openai.com/v1 .
npx tsx e2e/retrieval.tsPara ejecutar la misma suite de prueba contra su API local, puede ejecutar:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e/retrieval.tsEs probable que la salida difiera ligeramente debido a las diferencias en la implementación de recuperación incorporada de OpenAI y nuestra implementación predeterminada de recuperación de ingenuos.
Tenga en cuenta que la implementación retrieval actual solo admite archivos de texto como text/plain y Markdown, ya que no se realizan preprocesamiento o conversiones en este momento. También utilizamos un método de recuperación muy ingenuo en este momento que siempre devuelve el contenido completo del archivo en lugar de preprocesarlos y solo devolver los trozos más semánticamente relevantes. Vea este tema para obtener más información.
GET /files
POST /files
DELETE /files/:file_id
GET /files/:file_id
GET /files/:file_id/content
GET /assistants
POST /assistants
GET /assistants/:assistant_id
POST /assistants/:assistant_id
DELETE /assistants/:assistant_id
GET /assistants/:assistant_id/files
GET /assistants/:assistant_id/files
POST /assistants/:assistant_id/files
DELETE /assistants/:assistant_id/files/:file_id
GET /assistants/:assistant_id/files/:file_id
POST /threads
GET /threads/:thread_id
POST /threads/:thread_id
DELETE /threads/:thread_id
GET /threads/:thread_id/messages
POST /threads/:thread_id/messages
GET /threads/:thread_id/messages/:message_id
POST /threads/:thread_id/messages/:message_id
GET /threads/:thread_id/messages/:message_id/files
GET /threads/:thread_id/messages/:message_id/files/:file_id
GET /threads/:thread_id/runs
POST /threads/runs
POST /threads/:thread_id/runs
GET /threads/:thread_id/runs/:run_id
POST /threads/:thread_id/runs/:run_id
POST /threads/:thread_id/runs/:run_id/submit_tool_outputs
POST /threads/:thread_id/runs/:run_id/cancel
GET /threads/:thread_id/runs/:run_id/steps
GET /threads/:thread_id/runs/:run_id/steps/:step_id
GET /openapi
Puede ver la especificación de OpenAPI generada automáticamente del servidor ejecutando el servidor y luego visitando http://127.0.0.1:3000/openapi
Estado : Todas las rutas API se han probado de lado a lado con la API oficial de Operai y están trabajando como se esperaba. Las únicas características faltantes en este momento son el soporte para la herramienta code_interpreter (problema) incorporada y el soporte para archivos que no son de texto con la herramienta retrieval incorporada (problema). Toda otra funcionalidad debe ser totalmente compatible y compatible con el cable con la API oficial.
HACER :
code_interpreter incorporada (problema)retrieval incorporada (problema)MIT © Travis Fischer
Si encontró útil este proyecto, considere patrocinarme o seguirme en Twitter