

Este projeto é uma versão auto-hospedada da nova API de assistentes de estado do OpenAI. ?
Todas as definições e tipos de rota da API são 100% gerados automaticamente da especificação oficial do OpenAPI da OpenAI, então tudo o que é necessário para alternar entre a API oficial e sua API personalizada está alterando o baseURL . ?
Isso significa que todos os parâmetros, respostas e tipos da API são compatíveis com a API oficial do OpenAI, e o fato de serem gerados automaticamente significa que será relativamente fácil mantê-los sincronizados ao longo do tempo.
Aqui está um exemplo usando o pacote oficial Node.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.'
} ) Aqui está o mesmo exemplo usando o pacote oficial do 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."
)Observe que este projeto não deve ser uma recriação completa de toda a API Openai. Em vez disso, está focado apenas nas partes com estado da nova API de assistentes . Os seguintes tipos de recursos são suportados:
Consulte o Guia Oficial de Assistentes do Openai para obter mais informações sobre como os assistentes funcionam.
Ser capaz de executar seus próprios assistentes personalizados do OpenAI que são 100% compatíveis com os assistentes oficiais do Openai desbloqueia todos os tipos de possibilidades úteis:
Mais importante, se a "loja GPT" do Openai acabar ganhando força com os usuários ativos semanais de 100m da ChatGPT, a capacidade de executar, depurar e personalizar de forma confiável e personalizar assistentes compatíveis com o OpenAi acabará sendo incrivelmente importante no futuro.
Eu podia até imaginar uma futura loja de assistentes que é totalmente compatível com os GPTs do OpenAI, mas, em vez de confiar no OpenAI como gatekeeper, ele poderia ser total ou parcialmente descentralizado . ?
Pré -requisitos:
Instalar deps:
pnpm installGerar os tipos de prisma localmente:
pnpm generatecp .env.example .envDATABASE_URL - string de conexão PostGresbrew install postgresql && brew services start postgresqlnpx prisma db push para configurar seu banco de dados de acordo com nosso esquema PRISMAOPENAI_API_KEY - OpenAI para executar as chamadas de conclusão de bate -papo subjacentebrew install redis && brew services start redisREDIS_HOST - opcional; Padrões para localhostREDIS_PORT - Opcional; Padrões para 6379REDIS_USERNAME - Opcional; Padrões para o defaultREDIS_PASSWORD - Opcionalbrew install localstack/tap/localstack-cli && localstack start -dbrew install minio/stable/minio && minio server /dataS3_BUCKET - necessárioS3_REGION - opcional; Padrões para autoS3_ENDPOINT - requerido; Exemplo: https://<id>.r2.cloudflarestorage.comACCESS_KEY_ID - Necessário (Cloudflare R2 Docs)SECRET_ACCESS_KEY - Necessário (Cloudflare R2 Docs)O aplicativo é composto por dois serviços: um servidor API RESTful e um corredor de tarefas assíncronas. Ambos os serviços estão sem estado e podem ser escalados horizontalmente.
Existem duas maneiras de executar esses serviços localmente. A maneira mais rápida é via 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/runnerComo alternativa, você pode transpilar a fonte TS para JS primeiro, o que é preferido para a execução da produção:
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 exemplo contém um script de assistente de ponta a ponta que usa uma função get_weather personalizada.
Você pode executá -lo usando o cliente oficial do OpenAI para Node.js contra a API padrão do OpenAI hospedado em https://api.openai.com/v1 .
npx tsx e2ePara executar a mesma suíte de teste em relação à sua API local, você pode executar:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2eÉ muito legal ver as duas suítes de teste executando exatamente o mesmo código de assistentes usando o cliente oficial do OpenAI Node.js - sem diferenças perceptíveis entre as duas versões. Huzzah! ?
Este exemplo contém um script de assistente de ponta a ponta que usa a ferramenta retrieval interna com este arquivo readme.md como anexo.
Você pode executá -lo usando o cliente oficial do OpenAI para Node.js contra a API padrão do OpenAI hospedado em https://api.openai.com/v1 .
npx tsx e2e/retrieval.tsPara executar a mesma suíte de teste em relação à sua API local, você pode executar:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e/retrieval.tsA saída provavelmente diferirá ligeiramente devido a diferenças na implementação de recuperação interna do OpenAI e em nossa implementação ingênua de recuperação ingênua.
Observe que a implementação atual retrieval suporta apenas arquivos de texto como text/plain e marcação, pois nenhum pré -processamento ou conversões é feito no momento. Também usamos um método de recuperação muito ingênuo no momento, que sempre retorna o conteúdo completo do arquivo, em vez de pré-processá-los e retornar apenas os pedaços mais semanticamente relevantes. Veja este problema para obter mais informações.
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
Você pode visualizar a especificação OpenAPI gerada automaticamente do servidor executando o servidor e depois visitando http://127.0.0.1:3000/openapi
Status : Todas as rotas de API foram testadas lado a lado com a API oficial do OpenAI e estão funcionando como esperado. Os únicos recursos ausentes no momento são o suporte para a ferramenta code_interpreter interna (Issue) e o suporte para arquivos não textos com a ferramenta retrieval interna (edição). Todas as outras funcionalidades devem ser totalmente suportadas e compatíveis com a API oficial.
PENDÊNCIA :
code_interpreter embutida (edição)retrieval interna (edição)MIT © Travis Fischer
Se você achou este projeto útil, considere me patrocinar ou me seguir no Twitter