

Dieses Projekt ist eine selbst gehostete Version der neuen staatlichen Assistenten-API von Openai. ?
Alle API-Routendefinitionen und -Typen sind zu 100% automatisch generiert aus OpenAIs offizieller OpenAPI-Spezifikation. Alles, was es braucht, um zwischen der offiziellen API und Ihrer benutzerdefinierten API zu wechseln, ist die Änderung der baseURL . ?
Dies bedeutet, dass alle API-Parameter, Antworten und Typen mit der offiziellen OpenAI-API drahtkompatibel sind, und die Tatsache, dass sie automatisch generiert sind, bedeutet, dass es relativ einfach ist, sie im Laufe der Zeit synchronisiert zu halten.
Hier ist ein Beispiel mit dem offiziellen Node.js openai -Paket:
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.'
} ) Hier ist das gleiche Beispiel mit dem offiziellen Python openai -Paket:
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."
)Beachten Sie, dass dieses Projekt keine vollständige Erholung der gesamten OpenAI -API sein soll. Vielmehr konzentriert es sich nur auf die staatlichen Teile der neuen Assistenten -API . Die folgenden Ressourcentypen werden unterstützt:
Weitere Informationen zur Arbeit Assistenten finden Sie im offiziellen OpenAI -Assistentenhandbuch.
In der Lage zu sein, Ihre eigenen, maßgefertigten OpenAI -Assistenten zu betreiben, die zu 100% kompatibel sind, werden alle möglichen nützlichen Möglichkeiten freigeschaltet:
Vor allem, wenn der OpenAI "GPT Store" mit den 100-m-wöchentlichen aktiven Benutzern von ChatGPT an Traktion gewinnt, wird die Möglichkeit, OpenAI-kompatible Assistenten zuverlässig auszuführen, zu debuggen und anzupassen, in Zukunft unglaublich wichtig sein.
Ich könnte mir sogar einen zukünftigen Assistentengeschäft vorstellen, der mit OpenAIs GPTs vollständig kompatibel ist, aber anstatt sich auf Openai als Gatekeeper zu verlassen, könnte er vollständig oder teilweise dezentralisiert werden. ?
Voraussetzungen:
DEPs installieren:
pnpm installGenerieren Sie die Prisma -Typen lokal:
pnpm generatecp .env.example .envDATABASE_URL - Postgres -Verbindungszeichenfolgebrew install postgresql && brew services start postgresqlnpx prisma db push ausführen, um Ihre Datenbank gemäß unserem Prisma -Schema einzurichtenOPENAI_API_KEY - OpenAI -API -Schlüssel zum Ausführen der zugrunde liegenden Chat -Comate -Anrufebrew install redis && brew services start redisREDIS_HOST - optional; Standardeinstellungen nach localhostREDIS_PORT - optional; Standardeinstellungen zu 6379REDIS_USERNAME - optional; defaultREDIS_PASSWORD - optionalbrew install localstack/tap/localstack-cli && localstack start -dbrew install minio/stable/minio && minio server /dataS3_BUCKET - ErforderlichS3_REGION - optional; standardmäßig autoS3_ENDPOINT - erforderlich; Beispiel: https://<id>.r2.cloudflarestorage.comACCESS_KEY_ID - Erforderlich (CloudFlare R2 -Dokumente)SECRET_ACCESS_KEY - Erforderlich (CloudFlare R2 -Dokumente)Die App besteht aus zwei Diensten: einem erholsamen API -Server und einem Async -Taskläufer . Beide Dienste sind staatenlos und können horizontal skaliert werden.
Es gibt zwei Möglichkeiten, diese Dienste lokal auszuführen. Der schnellste Weg ist über 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/runnerAlternativ können Sie zuerst die Quelle Ts in JS umsetzen, was für die Produktion vorgezogen wird:
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 Dieses Beispiel enthält ein End-to-End-Assistant-Skript, das eine benutzerdefinierte Funktion get_weather verwendet.
Sie können es mit dem offiziellen OpenAI -Client für node.js mit der Standard -OpenAI -API ausführen, die unter https://api.openai.com/v1 gehostet wird.
npx tsx e2eUm dieselbe Testsuite gegen Ihre lokale API durchzuführen, können Sie ausführen:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2eEs ist ziemlich cool zu sehen, dass beide Testsuiten genau den gleichen Assistentencode mit dem offiziellen OpenAI -Node.js -Client ausführen - ohne merkliche Unterschiede zwischen den beiden Versionen. Huzzah! ?
Dieses Beispiel enthält ein End-to-End-Assistant-Skript, das das integrierte retrieval Tool mit dieser readme.md Datei als Anhang verwendet.
Sie können es mit dem offiziellen OpenAI -Client für node.js mit der Standard -OpenAI -API ausführen, die unter https://api.openai.com/v1 gehostet wird.
npx tsx e2e/retrieval.tsUm dieselbe Testsuite gegen Ihre lokale API durchzuführen, können Sie ausführen:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e/retrieval.tsDie Ausgabe wird sich aufgrund der Unterschiede in der integrierten Umsetzung von OpenAI und unserer implementierten Abruf-Implementierung von Naiven wahrscheinlich geringfügig unterscheiden.
Beachten Sie, dass die aktuelle retrieval nur Textdateien wie text/plain und Markdown unterstützt, da momentan keine Vorverarbeitung oder Konvertierungen durchgeführt werden. Wir verwenden derzeit auch eine sehr naive Abrufmethode, die immer die vollständigen Dateiinhalte zurückgibt, anstatt sie vorzubereiten und nur die semantisch relevanten Brocken zurückzugeben. Weitere Informationen finden Sie in dieser Ausgabe.
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
Sie können die automatisch generierte OpenAPI-Spezifikation des Servers anzeigen, indem Sie den Server ausführen und dann http://127.0.0.1:3000/openapi besuchen
Status : Alle API-Routen wurden nebeneinander mit der offiziellen OpenAI-API getestet und arbeiten wie erwartet. Die einzigen fehlenden Funktionen im Moment sind die Unterstützung für das integrierte code_interpreter Tool (Ausgabe) und die Unterstützung für Nicht-Text-Dateien mit dem integrierten retrieval Tool (Ausgabe). Alle anderen Funktionen sollten vollständig unterstützt und mit der offiziellen API einkompatibel sein.
Todo :
code_interpreter Tool (Problem)retrieval -Tool (Ausgabe)MIT © Travis Fischer
Wenn Sie dieses Projekt als nützlich empfanden, sollten Sie mich sponsern oder mir auf Twitter folgen