

该项目是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上关注我