速率限制
建议对暴露的 API 端点实施速率限制。ChatGPT 会遵循 429 响应码,并在短时间内收到一定数量的 429 或 500 响应后,动态退避并停止向您的 action 发送请求。
超时
在 actions 体验期间发起 API 调用时,如果超出以下阈值将发生超时:
- API 调用往返时间 45 秒
使用 TLS 和 HTTPS
发送到您的 action 的所有流量必须使用 TLS 1.2 或更高版本,并通过 443 端口搭配有效的公共证书。
IP 出口范围
ChatGPT 将使用以下 CIDR 块 中的某个 IP 地址调用您的 action,详见 chatgpt-connectors.json
您可能希望将这些 IP 地址明确加入白名单。此列表会定期自动更新。
多种身份验证模式
在定义操作时,您可以将单一的身份验证类型(OAuth 或 API 密钥)与不需要身份验证的端点混合使用。
您可以在我们的 操作身份验证页面.
Open API 规范限制
请注意 OpenAPI 规范中的以下限制,这些限制可能会随时更改:
- API 规范中的每个 API 端点描述/摘要字段最多 300 个字符
- API 规范中的每个 API 参数描述字段最多 700 个字符
其他限制
使用 actions 进行构建时,需要注意以下几点限制:
- 不支持自定义请求头
- 除 Google、Microsoft 和 Adobe OAuth 域名外,OAuth 流中使用的所有域名必须与主要端点所使用的域名相同
- 请求和响应的载荷各自必须少于 100,000 个字符
- 请求会在 45 秒后超时
- 请求和响应只能包含文本(不支持图像或视频)
consequential 标志
在 OpenAPI 规范中,您现在可以将某些端点设置为“consequential”,如下所示:
1
2
3
4
5
6
7
8
9
10
paths:
/todo:
get:
operationId: getTODOs
description: Fetches items in a TODO list from the API.
security: []
post:
operationId: updateTODOs
description: Mutates the TODO list.
x-openai-isConsequential: true一个典型的 consequential 操作示例是代表用户预订酒店房间并为其付款。
- 如果
x-openai-isConsequential字段为true,ChatGPT 会将该操作视为“必须始终在运行前提示用户确认”,并且不显示“始终允许”按钮(两者都是 GPTs 的功能,旨在让构建者和用户对操作拥有更多控制权)。 - 如果
x-openai-isConsequential字段为false, ChatGPT 显示“始终允许按钮”。 - 如果该字段不存在,ChatGPT 会默认将所有 GET 操作设为
false而将所有其他操作设为true
提供示例的最佳实践
以下是在编写 GPT 指令和架构描述,以及设计 API 响应时应遵循的一些最佳实践:
-
您的描述不应鼓励 GPT 在用户未要求提供该操作所属特定类别的服务时使用该操作。
错误示例:
每当用户提到任何类型的任务时,询问他们是否想使用 TODO 操作将其添加到待办事项列表中。
正确示例:
TODO 列表可以添加、删除和查看用户的待办事项。
-
您的描述不应为 GPT 指定特定的触发条件来使用该操作。ChatGPT 被设计为在合适的时候自动使用您的操作。
错误示例:
当用户提到一个任务时,回复‘您想将其添加到您的 TODO 列表中吗?回复“yes”以继续。’
正确示例:
[此处不需要说明]
-
来自 API 的 Action 响应应返回原始数据,而不是自然语言响应(除非确有必要)。GPT 将使用返回的数据自行生成自然语言响应。
错误示例:
我找到了您的待办事项列表!您有 2 个待办事项:买杂货和遛狗。如果您需要,我可以添加更多待办事项!
正确示例:
{ "todos": [ "get groceries", "walk the dog" ] }
GPT Action 数据的使用方式
GPT Actions 将 ChatGPT 连接到外部应用。如果用户与 GPT 的自定义操作进行交互,ChatGPT 可能会将其部分对话发送到该操作的端点。
如果您有疑问或遇到其他限制,可以加入以下平台上的讨论: OpenAI 开发者论坛.