每个插件都需要一个ai-plugin.json文件,该文件需要托管在 API 的域上。例如,一家名为example.com 的公司,可以通过https://example.com example.com域访问插件 JSON 文件,因为这是托管其 API 的地方。当您通过 ChatGPT UI 安装插件时,我们会在后端查找/.well-known/ai-plugin.json。该文件夹是必需的,并且必须存在于您的域中,以便 ChatGPT 与您的插件连接。如果在/.well-known没有找到文件,则无法安装插件。对于本地开发,您可以使用 HTTP,但如果您指向远程服务器,则需要 HTTPS。
所需文件的最小定义ai-plugin.json如下所示:
{
"schema_version": "v1",
"name_for_human": "TODO List",
"name_for_model": "todo",
"description_for_human": "Manage your TODO list. You can add, remove and view your TODOs.",
"description_for_model": "Help the user with managing a TODO list. You can add, remove and view your TODOs.",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "http://localhost:3333/openapi.yaml"
},
"logo_url": "http://localhost:3333/logo.png",
"contact_email": "support@example.com",
"legal_info_url": "http://www.example.com/legal"
}
如果您想查看插件文件的所有可能选项,可以参考下面的定义。命名您的插件时,请记住我们的品牌指南和以下字段的各种字符限制,不遵守这些指南的插件将不会被批准进入插件商店。
字段 | 类型 | 描述/选项 | 必需的 | 公开的 |
---|---|---|---|---|
schema_version | String | 清单架构版本 | ✅ | |
name_for_model | String | 模型将用于定位插件的名称(不允许空格,只能字母和数字)。最多 50 个字符 | ✅ | |
name_for_human | String | 人类可读的名称,例如公司完整名称。最多 20 个字符 | ✅ | ✅ |
description_for_model | String | 更好地针对模型定制的描述,例如令牌上下文长度注意事项或用于改进插件提示的关键字使用。最多 8,000 个字符 | ✅ | |
description_for_human | String | 人类可读的插件描述。最多 100 个字符 | ✅ | ✅ |
auth | ManifestAuth | 认证架构 | ✅ | |
api | Object | API规范 | ✅ | |
logo_url | String | 用于获取徽标的 URL。建议尺寸:512 x 512。支持透明背景。必须是图片,不允许使用 GIF。 | ✅ | |
contact_email | String | 安全/审核、支持和停用的电子邮件联系 | ✅ | ✅ |
legal_info_url | String | 重定向 URL,供用户查看插件信息 | ✅ | ✅ |
HttpAuthorizationType | HttpAuthorizationType | “bearer”或“basic” | ✅ | |
ManifestAuthType | ManifestAuthType | “none”、“user_http”、“service_http”或“oauth” | ||
interface BaseManifestAuth | BaseManifestAuth | 类型:ManifestAuthType;指令:字符串; | ||
ManifestNoAuth | ManifestNoAuth | 无需身份验证:BaseManifestAuth & { type: 'none', } | ||
ManifestAuth | ManifestAuth | ManifestNoAuth、ManifestServiceHttpAuth、ManifestUserHttpAuth、ManifestOAuthAuth |
请注意,公开的(Public)下面列出的项目将在插件商店中可供用户使用,并且完整的清单文件将传输到用户的客户端,并且可能对他们可见。
以下是不同身份验证方法的示例:
# App-level API keys
type ManifestServiceHttpAuth = BaseManifestAuth & {
type: 'service_http';
authorization_type: HttpAuthorizationType;
verification_tokens: {
[service: string]?: string;
};
}# User-level HTTP authentication
type ManifestUserHttpAuth = BaseManifestAuth & {
type: 'user_http';
authorization_type: HttpAuthorizationType;
}type ManifestOAuthAuth = BaseManifestAuth & {
type: 'oauth';# OAuth URL where a user is directed to for the OAuth authentication flow to begin.
client_url: string;# OAuth scopes required to accomplish operations on the user's behalf.
scope: string;# Endpoint used to exchange OAuth code with access token.
authorization_url: string;# When exchanging OAuth code with access token, the expected header 'content-type'. For example: 'content-type: application/json'
authorization_content_type: string;# When registering the OAuth client ID and secrets, the plugin service will surface a unique token.
verification_tokens: {
[service: string]?: string;
};
}
上述清单文件中某些字段的长度有限制,这些字段可能会发生变化。我们还对 API 响应正文规定了 100,000 个字符的上限,该上限也可能随时间而变化。
一般来说,最佳实践是使描述和响应尽可能简洁,因为模型的上下文窗口有限。
评论