

該項目是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助理指南》官方指南。
能夠自行運行與官方OpenAI助手100%兼容的自定義OpenAi助手,可以解鎖各種有用的可能性:
最重要的是,如果OpenAI“ GPT Store”最終會吸引Chatgpt每週的1億個活躍用戶,那麼可以可靠地運行,調試和自定義OpenAI兼容的助手的能力最終將在未來變得非常重要。
我什至可以想像一個未來的助理商店與Openai的GPT完全兼容,但是它不再依靠Openai作為看門人,而是可以完全或部分分散。 ?
先決條件:
安裝DEPS:
pnpm install在本地生成Prisma類型:
pnpm generatecp .env.example .envDATABASE_URL Postgres連接字符串brew install postgresql && brew services start postgresqlnpx prisma db push根據我們的Prisma架構設置數據庫OPENAI_API_KEY -OpenAI API鍵,用於運行基礎聊天完成電話brew install redis && brew services start redisREDIS_HOST可選;默認為localhostREDIS_PORT可選;默認為6379REDIS_USERNAME可選;默認為defaultREDIS_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文檔)SECRET_ACCESS_KEY必需(CloudFlare R2文檔)該應用程序由兩個服務組成:一個RESTFUL 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函數的端到端助手腳本。
您可以使用node.js的官方OpenAi客戶端對https://api.openai.com/v1託管的默認OpenAI API運行。
npx tsx e2e要針對本地API運行相同的測試套件,您可以運行:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e使用官方的OpenAi Node.js客戶端看到這兩個測試套件都在運行完全相同的助手代碼非常酷 - 兩種版本之間沒有任何明顯的差異。 huzzah! ?
此示例包含一個端到端的助手腳本,該腳本將內置的retrieval工具與此readme.md文件作為附件。
您可以使用node.js的官方OpenAi客戶端對https://api.openai.com/v1託管的默認OpenAI API運行。
npx tsx e2e/retrieval.ts要針對本地API運行相同的測試套件,您可以運行:
OPENAI_API_BASE_URL= ' http://127.0.0.1:3000 ' npx tsx e2e/retrieval.ts由於OpenAI的內置檢索實現和我們的默認,幼稚的檢索實現,輸出可能會略有不同。
請注意,當前的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
您可以通過運行服務器來查看服務器的自動生成的OpenAPI規格,然後訪問http://127.0.0.1:3000/openapi
狀態:所有API路線均已與官方的OpenAI API並排測試,並正在按預期工作。目前唯一缺少的功能是支持內置code_interpreter工具(問題),並使用內置retrieval工具(問題)支持非文本文件。所有其他功能都應完全支持並與官方API兼容。
托多:
code_interpreter工具(問題)retrieval工具的非文本文件(問題)麻省理工學院©Travis Fischer
如果您發現這個項目有用,請考慮贊助我或在Twitter上關注我