环境变量参考
按字母顺序排列。必需性标记基于最小可用部署。
| 变量 | 必需性 | 默认值 | 描述 |
|---|---|---|---|
| 推荐设置 | - | 逗号分隔的 CORS 允许的编辑器源列表。跨域编辑器部署必需。格式、通配符和验证见 跨域请求。 |
| 是 | - | 数据库名称(通常为 |
| 是 | - |
|
| 是 | - | 数据库主机名或 IP。 |
| 是 | - | 数据库密码。 |
| 否 | 3306 (MySQL) / 5432 (PostgreSQL) | 数据库端口。 |
| 仅 PostgreSQL |
| PostgreSQL schema 名称。需预先创建或设置为 |
| 否 | - | 数据库 TLS 的 CA 证书路径。 |
| 否 | - | 客户端证书路径。 |
| 否 | - | 客户端密钥路径。 |
| 是 | - | 数据库用户。 |
| 否 |
| 向标准输出发送 JSON 请求日志。 |
| 是 | - | 管理面板登录密钥。不用于签名用户 JSON Web Tokens (JWTs)。 |
| 否 |
| 自托管 Langfuse URL。 |
| 否 | - | 详细 Langfuse 日志。 |
| 如果使用 Langfuse | - | Langfuse 公钥。 |
| 如果使用 Langfuse | - | Langfuse 密钥。 |
| 是 | - | AI 服务许可证密钥(来自 Tiny 的长字符串)。同一密钥可在所有部署副本中共享——无需每个 pod 单独许可。 |
| 否 |
| 主要 OpenTelemetry 开关。 |
| 否 | 180000 | 每个请求的大语言模型 (LLM) 超时时间(毫秒)。对于大型自托管模型,需调大此值。 |
| 如果使用 MCP OAuth | - | 集成的 Web 应用托管的 OAuth 回调页面 URL。用作所有启用 OAuth 的 MCP 服务器的 OAuth |
| 否 | - | JSON 对象;Model Context Protocol (MCP) 服务器配置。支持每个服务器的静态令牌和 OAuth 2.0 认证。参见 MCP 集成。 |
| 是 (Azure、Bedrock、Vertex、openai-compatible);推荐所有提供商设置 | - | 定义暴露模型的 JSON 数组。Azure、Bedrock、Vertex 和 openai-compatible 提供商必需。推荐 OpenAI、Anthropic 和 Google 直连设置。参见 LLM 提供商。 |
| 否 | - | 详细 OpenTelemetry Protocol (OTLP) 诊断日志。 |
| 如果使用 OTEL | - | OTLP 追踪端点 URL。 |
| 否 |
| OTLP 采样率 (0.0 至 1.0)。 |
| 是 | - | JSON 对象;LLM 提供商配置。参见 LLM 提供商。 |
| 否 | - | 逗号分隔的 |
| 否 | 1 | Redis 数据库编号。 |
| 是 | - | Redis 主机名。 |
| 否 | - | 设置为 |
| 否 | - | Redis 密码。 |
| 否 | 6379 | Redis 端口。 |
| 否 | - | Redis TLS 的 CA 证书路径。 |
| 否 | - | Redis 客户端证书路径。 |
| 否 |
| 启用 Redis TLS。 |
| 否 | - | Redis 客户端密钥路径。 |
| 否 | - | Redis 用户名 (ACL)。 |
| 如果使用 S3 | - | S3 访问密钥 ID。 |
| 如果使用 Azure Blob | - | Azure 存储帐户密钥。 |
| 如果使用 Azure Blob | - | Azure 存储帐户名称。 |
| 如果使用 S3 | - | S3 存储桶名称。 |
| 如果使用 Azure Blob | - | Azure 容器名称。 |
| 是 | - |
|
| 否 | - | 自定义端点 (S3 兼容或 Azure 兼容)。 |
| 如果使用 filesystem | - | filesystem 存储的挂载点。必须可由容器用户写入。 |
| 如果使用 S3 | - | S3 区域。 |
| 如果使用 S3 | - | S3 秘密访问密钥。 |
| 否 |
| 启用网页抓取端点转发。请参阅网页抓取。 |
| 如果已启用 web resources | - | 抓取器 URL。 |
| 否 | - | 抓取器请求超时时间(毫秒)。 |
| 否 |
| 启用网页搜索转发。请参阅网页搜索。 |
| 如果已启用网页搜索 | - | 搜索 URL。 |
| 否 | - | 冒号 CSV 格式 ( |
| 否 | - | 搜索请求超时时间(毫秒)。 |
完整的 docker run 参考
一个包含最小化生产部署 (MySQL、OpenAI、S3 存储) 所需所有环境变量的单个命令:
docker run --init -d -p 8000:8000 \
--name ai-service \
-e LICENSE_KEY='<license-key>' \
-e ENVIRONMENTS_MANAGEMENT_SECRET_KEY='<management-secret>' \
-e DATABASE_DRIVER='mysql' \
-e DATABASE_HOST='<database-host>' \
-e DATABASE_PORT='3306' \
-e DATABASE_USER='<database-user>' \
-e DATABASE_PASSWORD='<database-password>' \
-e DATABASE_DATABASE='ai_service' \
-e REDIS_HOST='<redis-host>' \
-e REDIS_PORT='6379' \
-e PROVIDERS='{"openai":{"type":"openai","apiKeys":["<openai-api-key>"]}}' \
-e MODELS='[{"id":"gpt-4.1","provider":"openai","name":"GPT-4.1","features":["conversations","reviews","actions"]}]' \
-e STORAGE_DRIVER='s3' \
-e STORAGE_BUCKET='<s3-bucket-name>' \
-e STORAGE_REGION='<aws-region>' \
-e STORAGE_ACCESS_KEY_ID='<s3-access-key>' \
-e STORAGE_SECRET_ACCESS_KEY='<s3-secret-key>' \
-e ALLOWED_ORIGINS='https://<your-app-domain>' \
-e ENABLE_METRIC_LOGS='true' \
registry.containers.tiny.cloud/ai-service-tiny:<version>对于 PostgreSQL,将 DATABASE_DRIVER 更改为 'postgres' 并添加 -e DATABASE_SCHEMA='cs-on-premises' (或 'public')。对于 Redis 身份验证,添加 -e REDIS_PASSWORD='<redis-password>'。对于 Redis TLS,添加 -e REDIS_TLS_ENABLE='true'。
API 端点参考
| 方法 | 路径 | 身份验证 | 描述 |
|---|---|---|---|
GET |
| 无 | 活跃度探测。返回 |
GET |
| 无 | 重定向(HTTP 301)到 |
GET |
| 无 | ReDoc 渲染的 API 文档。 |
GET |
| 无 | OpenAPI 3 JSON 规范。 |
GET |
| 管理密钥(登录表单) | 管理面板用户界面。通过浏览器登录表单使用 |
GET |
| JWT | 列出当前令牌可用的模型。兼容性版本标识符 |
POST |
| JWT | 创建对话。请求体必须包含客户端提供的 |
GET |
| JWT | 列出当前 |
GET |
| JWT | 读取一个对话。 |
POST |
| JWT | 发送消息。返回 Server-Sent Events (SSE) 流。 |
POST |
| JWT | 通过配置的抓取端点获取网页。请求体: |
GET |
| JWT | 列出为某对话获取的网页资源。 |
DELETE |
| JWT | 从对话中移除网页资源。 |
POST |
| JWT | 以 |
DELETE |
| JWT | 从对话中移除文件。 |
POST | /v1/conversations/{id}/documents | JWT | 向对话添加文档。 |
GET | /v1/conversations/{id}/documents/{documentId} | JWT | 读取一个对话文档。 |
DELETE | /v1/conversations/{id} | JWT | 删除对话。 |
POST | /v1/actions/system/{actionName}/calls | JWT | 运行内置快速操作,例如 |
POST | /v1/reviews/system/{reviewName}/calls | JWT | 运行内置评审,例如 |
POST | /v1/actions/custom/calls | JWT | 使用提示和模型运行自定义操作。返回 SSE 流。 |
POST | /v1/reviews/custom/calls | JWT | 使用提示和模型运行自定义评审。返回 SSE 流。 |
GET | /v1/mcp/oauth/status | JWT | 所有启用 OAuth 的 MCP 服务器的连接状态。参见 OAuth REST 端点。 |
POST | /v1/mcp/oauth/{serverName}/initialize | JWT | 启动 OAuth 授权流程。 |
POST | /v1/mcp/oauth/{serverName}/complete | JWT | 使用授权码完成 OAuth 流程。 |
DELETE | /v1/mcp/oauth/{serverName} | JWT | 撤销调用用户的 OAuth 连接。 |
OAuth 端点仅在至少一个 MCP 服务器配置了oauth块时可用。位于/v1/api/docs的交互式 API 文档可能不包含这些端点;它们记录在 MCP OAuth 部分。
环境管理(创建、读取、更新、删除)通过位于 /panel/ 的管理面板用户界面处理。Server-Sent Events 参考
该消息端点返回 Content-Type: text/event-stream。事件使用命名类型。下表列出了主要事件。有关每个事件及其有效负载,请参阅 API 参考。
| 事件 | 有效负载形状 | 含义 |
|---|---|---|
|
| 在每条消息开始时发送一次。 |
|
| 增量文本片段。编辑器会连接这些片段。 |
|
| 当 MCP 工具调用完成时发出。 |
|
| 提供方错误。HTTP 状态仍为 200;错误在流内。 |
没有流结束事件。当服务关闭响应时,流结束。
正常流示例:
event: message-metadata
data: {"messageId":"abc123"}
event: text-delta
data: {"textDelta":"Hello "}
event: text-delta
data: {"textDelta":"there!"}错误流示例:
event: message-metadata
data: {"messageId":"abc123"}
event: error
data: {"message":"Incorrect API key provided","cause":{"providerStatusCode":401}}浏览器客户端解析说明:
每个事件有两行:
event: <name>和data: <json>,与下一个事件之间用空行分隔。data始终是有效的 JSON。未知的
event类型带有信息性有效负载,出于向前兼容性考虑可以忽略。text-delta带有可见的回复文本,modification-delta带有建议的文档修改文本。
action 和 review 端点也返回 SSE 流,并有自己的事件。有关 操作 和 审查,请参阅 API 参考。
错误代码参考
在 HTTP 4xx 响应中和 SSE event: error 有效负载内返回的错误代码。
每个错误响应都带有一个 traceId。请参阅 追踪失败的请求。
| 代码 | 来源 | 可能的原因 | 解决方法 |
|---|---|---|---|
| JWT 验证器 | API Secret 错误,或使用了 | 使用正确的 API Secret 重新以 HS256 签名 |
| JWT 验证器 |
| 从 |
| JWT 验证器 | 令牌在 | 签发生命周期更短的令牌,并更早地刷新 |
| AI 运行时 | 与 | 通过面板 UI 重新创建环境 |
| 权限检查器 |
| 添加缺失的权限字符串 |
| 输入验证器 | 字段验证失败(最常见的是 100,000 字符的提示上限) | 修复请求体。请参阅错误消息 |
| AI 运行时 | 与 | 通过面板 UI 重新创建 |
| 对话运行时 | 流中止留下了陈旧的状态 | 开始一个新的对话 |
| 对话运行时 | 对 | 开始一个新的对话 |
| Bedrock / Vertex 适配器 | 缺少内联凭据 | 在 |
| Bedrock | 缺少模型访问权限或 IAM 权限 | 启用 Bedrock 模型访问;附加来自 LLM 提供方 的 IAM 策略 |
| Bedrock | 在没有 Marketplace 订阅的情况下在 Bedrock 上使用 Anthropic | 通过 AWS Marketplace 订阅 |
| Bedrock | 模型 ID 格式错误(区域 ID 而不是跨区域 ID) |
使用 Claude 4.x 的推理配置文件 ID
DeploymentNotFound
Azure
MODELS[].id 与 Azure 部署名称不匹配
将 MODELS[].id 设置为确切的部署名称
invalid_grant
Vertex
private_key 的换行符格式损坏
通过 SA 密钥的 json.dumps() 构建 PROVIDERS
SERVICE_DISABLED
Vertex
aiplatform.googleapis.com 未启用
gcloud services enable aiplatform.googleapis.com
API_KEY_INVALID
Vertex
与账户绑定的 API 密钥被组织策略阻止
授予策略例外
Incorrect API key provided
OpenAI / Anthropic / Google
API 密钥无效
更新 PROVIDERS 并使用 --force-recreate
Wrong license key.
AI 服务启动
许可证密钥被截断或包含空白字符
重新粘贴为单行
已知限制
| 限制项 | 值 | 说明 |
|---|---|---|
最大提示长度 | 100,000 字符 | 服务强制执行的硬性限制。超过此限制的请求将返回 |
会话创建 | 需要客户端提供 | 插件会自动生成 |
流中止恢复 | 停止按钮会留下陈旧状态 | 下一条消息将返回 |
内置速率限制 | 无 | 使用 nginx |
文件支持(OpenAI 兼容提供商) | 仅支持图像( | PDF、文本和 Office 文件不会转发给 OpenAI 兼容提供商。对于非图像文件附件,请使用非 OpenAI 兼容的提供商。 |
MCP 工具可用性 | 仅在会话中可用 | MCP 工具在审查或快速操作中不可用。 |
MCP 身份验证 | 静态令牌或 OAuth 2.0,每个服务器独立配置 | 静态令牌使用 |
PostgreSQL 默认 schema |
| 使用 |
| 仅接受 | 诸如 |
通过原始 API 创建环境 | 不支持 | 始终通过管理面板 UI 创建环境。 |
Bedrock 凭据 | 仅支持内联 | 不会使用 SDK 默认凭据链(服务账户 IAM 角色 (IRSA)、实例角色、 |
Vertex 凭据 | 仅支持内联 | 不会使用 Application Default Credentials、 |
Azure | 必须等于部署名称 | 没有单独的 |
OpenAI 兼容 | 必须包含 | 省略该后缀会产生“Not Found”SSE 错误。 |