

이 프로젝트는 OpenAi의 새로운 상태 조수 API의 자체 주최 버전입니다. ?
모든 API 경로 정의 및 유형은 OpenAI의 공식 OpenAPI 사양에서 100% 자동 생성 되므로 공식 API와 사용자 정의 API간에 전환하는 데 필요한 모든 것이 baseURL 변경하고 있습니다. ?
이는 모든 API 매개 변수, 응답 및 유형이 공식 OpenAI API와 와이어 호환되며 자동 생성된다는 사실은 시간이 지남에 따라 동기화되기가 비교적 쉽다는 것을 의미합니다.
다음은 공식 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.'
} ) 공식 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."
)이 프로젝트는 전체 OpenAI API의 전체 레크리에이션이 아닙니다. 오히려 그것은 새로운 조수 API의 상태에만 초점을 맞추고 있습니다 . 다음 리소스 유형이 지원됩니다.
조수의 작동 방식에 대한 자세한 내용은 공식 Openai Assistant Guide를 참조하십시오.
공식 OpenAI 보조원과 100% 호환되는 자신의 Custom OpenAI Assistant를 운영 할 수 있으면 모든 종류의 유용한 가능성을 잠금 해제합니다.
가장 중요한 것은 OpenAi "GPT Store"가 ChatGpt의 주간 활성 사용자로 인한 트랙션을 얻는다면, OpenAI 호환 보조원을 안정적으로 실행, 디버그 및 사용자 정의 할 수있는 능력은 미래에 엄청나게 중요해질 것입니다.
나는 OpenAI의 GPT와 완전히 호환되는 미래의 보조 상점을 상상할 수 있지만 OpenAi에 게이트 키퍼로 의존하는 대신 완전히 또는 부분적으로 분산 될 수 있습니다. ?
전제 조건 :
DEP 설치 :
pnpm install로컬로 프리즘 유형을 생성하십시오.
pnpm generatecp .env.example .envDATABASE_URL Postgres Connection Stringbrew install postgresql && brew services start postgresqlnpx prisma db push 실행해야합니다.OPENAI_API_KEY 기본 채팅 완료를 실행하기위한 OpenAI API 키brew install redis && brew services start redisREDIS_HOST 선택 사항; localhost 의 기본값REDIS_PORT 선택 사항; 기본값은 6379 입니다REDIS_USERNAME 선택 사항; default 으로 기본값REDIS_PASSWORD 선택 사항brew install localstack/tap/localstack-cli && localstack start -dbrew install minio/stable/minio && minio server /dataS3_BUCKET 필수S3_REGION 선택 사항; 기본값으로 autoS3_ENDPOINT 필수; 예 : https://<id>.r2.cloudflarestorage.comACCESS_KEY_ID 필수 (CloudFlare R2 Docs)SECRET_ACCESS_KEY 필수 (CloudFlare R2 Docs)이 앱은 편안한 API 서버 와 비동기 작업 러너 의 두 가지 서비스로 구성됩니다. 두 서비스 모두 무국적이며 수평으로 축소 될 수 있습니다.
이 서비스를 로컬로 운영하는 두 가지 방법이 있습니다. 가장 빠른 방법은 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/runner또는 소스 TS를 JS로 전환 할 수 있으며, 이는 생산에서 실행하는 것이 선호됩니다.
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 이 예제에는 사용자 정의 get_weather 함수를 사용하는 엔드 투 엔드 어시스턴트 스크립트가 포함되어 있습니다.
https://api.openai.com/v1 에서 호스팅 된 기본 OpenAI API에 대해 Node.js의 공식 OpenAI 클라이언트를 사용하여 실행할 수 있습니다.
npx tsx e2e로컬 API에 대해 동일한 테스트 제품군을 실행하려면 다음을 실행할 수 있습니다.
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e두 버전간에 눈에 띄는 차이없이 공식 OpenAi Node.js 클라이언트를 사용하여 동일한 어시스턴트 코드를 실행하는 두 테스트 스위트가 모두 멋지다. 허자! ?
이 예제에는이 readme.md 파일과 함께 내장 retrieval 도구를 첨부 파일로 사용하는 엔드 투 엔드 어시스턴트 스크립트가 포함되어 있습니다.
https://api.openai.com/v1 에서 호스팅 된 기본 OpenAI API에 대해 Node.js의 공식 OpenAI 클라이언트를 사용하여 실행할 수 있습니다.
npx tsx e2e/retrieval.ts로컬 API에 대해 동일한 테스트 제품군을 실행하려면 다음을 실행할 수 있습니다.
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e/retrieval.tsOpenAI의 내장 검색 구현의 차이와 기본의 순진한 검색 구현으로 인해 출력이 약간 다를 수 있습니다.
현재 retrieval 구현은 현재 전처리 나 변환이 수행되지 않으므로 text/plain 및 마크 다운과 같은 텍스트 파일 만 지원합니다. 또한 현재 파일 내용을 사전 처리하는 것과는 달리 전체 파일 내용을 반환하고 가장 의미 적으로 관련된 덩어리 만 반환하는 매우 순진한 검색 방법을 사용합니다. 자세한 내용은이 문제를 참조하십시오.
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
서버를 실행 한 다음 http://127.0.0.1:3000/openapi 를 방문하여 서버의 자동 제작 된 OpenApi 사양을 볼 수 있습니다.
상태 : 모든 API 경로는 공식 OpenAI API와 함께 나란히 테스트되었으며 예상대로 작동합니다. 현재 누락 된 기능은 내장 code_interpreter 도구 (Issue)를 지원하고 내장 retrieval 도구 (이슈)를 사용하여 텍스트가 아닌 파일을 지원하는 것입니다. 다른 모든 기능은 공식 API와 완전히 지원되며 와이어 호환되어야합니다.
TODO :
code_interpreter 도구 (문제)retrieval 도구 (문제)가없는 비 텍스트 파일 지원MIT © Travis Fischer
이 프로젝트가 유용하다고 생각되면 저를 후원하거나 트위터에서 나를 팔로우하십시오.