OmniRelay.aiPRODUCT & ENGINEERING打开控制台 ↗
OMNIRELAY / HANDBOOK

从产品设想到
可运行的业务闭环。

需求调研、产品设计、技术架构、接口与部署。
An eight-language product MVP with persistent data and an isolated demo.

体验 Demo ↗

01 · 需求调研与产品定位

调研日期:2026-09-16。范围:对用户提供的 Eden AI 与 TokenSeq 进行实际浏览,并结合开发者平台常见任务推导首版需求。没有做用户访谈,也没有验证两家平台的服务质量或商业数据。

参考观察

参考实际观察OmniRelay 的设计响应
Eden AI ↗官网以统一接入多种 AI 能力为主线,提供模型、文档、价格入口;黑白底色、蓝色连线图说明统一网关首屏表达统一 API;用路由示意连接产品与模型;单独设置开发者接入说明
TokenSeq ↗登录后的导航包含仪表盘、访问令牌、用量汇总、模型价格和操作手册;用量展示请求数、Token 与金额以账户余额、令牌、用量、模型和账单构成客户工作流

不移植竞品的认证、用户规模、可用率或客户背书。竞品的品牌和模型商标只用于说明生态,不意味着合作关系。

目标用户与待验证假设

上述为产品假设。正式定价前,建议访谈 5–8 位开发者,验证主要任务、月度用量、可接受的服务加价和结算偏好。

定位

OmniRelay = 模型接入入口 + 令牌访问控制 + 用量与余额 + 运营控制台。

首版优势不依赖模型数量宣传,而是让一次调用的配置、执行、计量和账单关系清楚可见。

范围决策

需要商业验证而非臆测的内容

供应商转售授权、模型可用地域、真实采购价与加价、账期、退款、发票、隐私条款、可用性承诺、生产管理员名单以及域名所有权均未得到业务确认。首版不将其作为已成立事实展示。

02 · 产品需求与验收标准

目标

交付一个可以演示完整业务流程、具备持久化和服务端权限的 MVP。让用户从官网进入后台,创建令牌,发起模拟请求,查看消费,再由管理员调整服务配置。

角色

角色可访问限制
访客官网、登录、注册、文档不能访问业务数据
已注册客户自己的资料、令牌、模型目录、用量、账单不具备管理员角色;真实调用与支付关闭
演示客户独立空间的模拟调用、演示充值及客户功能不能访问其他空间;可显式切换到本演示空间的管理员
演示管理员当前演示空间的用户、模型、渠道、请求、审计不能管理其他空间或真实注册账户

演示角色切换是隔离的产品体验,不是生产权限提升入口。非演示账户请求该接口返回 403。

P0 功能与验收

模块用户故事验收标准
官网理解服务并开始体验首屏明确定位;导航可达;模型、接入、计费、FAQ 完整
国际化使用中、英、西、法、德、葡、日、韩八种语言官网和两类后台核心流程、表单、错误提示切换;刷新保留偏好
主题适应不同使用环境浅色、深色、跟随系统;刷新保留偏好,官网与后台共用
账户注册并再次登录新账户使用 Supabase Auth、邮箱验证与密码恢复;Google/GitHub 登录已接入,完整用户授权验收待完成;旧账户保留独立入口
令牌为应用创建和撤销密钥明文只显示一次;列表只展示前缀;撤销即拒绝请求
模型找到并体验模型搜索、供应商筛选有效;停用模型不可调用
Playground验证调用闭环模拟响应标识明确;显示估算 Token 与费用;用量/账单同步
账单增加演示余额并查看消费同一充值 reference 不重复入账;余额不足不产生成功记录
用户运营停用与恢复客户停用撤销会话且阻止其令牌调用;不能停用自己
模型运营改价格或暂停模型新请求按新单价计费;历史记录保存当时 cost
渠道运营暂停某个供应商状态 disabled 或权重为 0 时,对应调用拒绝
审计追踪修改保存操作者、动作、对象、时间;无普通用户写日志入口

主要流程

1. 官网 → 登录页 → 客户演示 → 创建令牌并保存。

2. 模型广场 → 模型体验 → 输入消息 → 模拟响应 → 用量记录 → 扣费流水。

3. 账单 → 演示充值 → 余额增加 → 刷新后仍保留。

4. 切换管理员 → 模型与定价 → 停用模型 → 客户调用被阻止 → 恢复模型。

5. 管理员 → 用户停用 → 用户会话与 API Key 调用被拒绝。

非功能要求

P1 / 生产化差距

真实供应商适配、流式 SSE、准确 Token 结算、支付回调及退款、认证端到端验收、防刷、MFA、生产管理员配置、组织成员邀请、多渠道加权选路和熔断、失败请求日志、监控告警、留存清理、完整灾难恢复演练与隐私合规(单份数据库备份恢复已验证)。邮箱验证和密码恢复已经接入 Supabase,但不能用本地模拟测试代替真实邮件与回调验收。

当前 demo 不被描述为已具备以上生产能力。

03 · 产品设计与多语言规范

视觉方向

白色主表面、深墨色标题、电光蓝主操作。官网采用宽留白与连接示意;后台采用固定侧栏、浅灰蓝画布、清晰的数据分组。模型供应商只作为生态说明,避免堆叠虚构社会证明。

信息架构

官网 / → 产品优势 / 模型生态 / 开发者 / 计费 / FAQ。

认证:/login/register

客户:/console/console/keys/console/models/console/playground/console/usage/console/billing/console/settings

管理员:/admin/admin/users/admin/models/admin/channels/admin/usage/admin/audit/admin/settings

文档:/docs.html

核心交互

多语言

产品界面支持中文、英文、西班牙语、法语、德语、葡萄牙语(巴西格式)、日语、韩语。源码词典统一位于 locales/*.json,构建为共享 public/i18n.js,覆盖官网、认证、客户及管理员后台、主题与错误提示。数据标识、模型 ID 和审计事件代码不翻译。产品与技术文档正文当前保留中文。

响应式与可访问性

760px 以下后台侧栏折叠;表格在局部容器内滚动;表单堆叠布局。官网 720px 以下导航折叠。使用语义标签、原生输入、可见焦点、dialog、aria-live 反馈和 reduced-motion。

不宣称完成 WCAG 认证;正式上线前补充屏幕阅读器、200% 缩放和完整对比度审计。

主题模式

官网、认证页、客户/管理员后台与文档页共用浅色、深色和跟随系统三种主题。右上角主题图标按「跟随系统 → 深色 → 浅色」循环切换;八语言提示显示当前模式与下一模式。默认跟随系统。

偏好仅保存在设备 localStorage 的 omni-theme 项,不影响账户数据。首屏渲染前应用主题,避免刷新时浅色闪烁;跟随系统模式监听系统配色变化,跨标签页同步偏好。深色主题对表格、输入、弹窗、状态标签和图表分别设置颜色。

04 · 技术架构与安全边界

实现选择

原生 HTML/CSS/JavaScript 前端 + 共享 Fetch API handler。当前公开站点在 AWS EC2 上以 Node.js 24 + SQLite 运行;Cloudflare Workers + D1 为兼容部署方式,既有 Sites 预览独立运行。无客户端框架运行依赖。构建时将静态页面嵌入 Worker,减少不同托管环境的静态资源绑定差异;后续图片/大资源应迁至 CDN/R2。

本地与 EC2 通过 Node.js 24 的 SQLite 适配器运行同一个 Worker handler。数据库结构由 Drizzle schema 生成迁移,不在业务请求中创建/变更表。

flowchart LR
  Browser[八语言官网/客户/管理员] --> CF[Cloudflare DNS与HTTPS代理]
  SDK[OpenAI兼容SDK] --> CF
  CF --> Caddy[EC2上的Caddy]
  Caddy --> Node[Node.js 24 / 共享Fetch handler]
  Node --> Auth[Session / Bearer Key / 角色与空间隔离]
  Auth --> Simulator[模型可用性检查 / 模拟响应]
  Simulator --> DB[(本机持久SQLite / 原子计费)]
  DB --> Backup[每日一致性快照]
  Backup --> S3[私有S3备份]

Cloudflare 到源站使用 Full (strict),源站仅允许 Cloudflare IPv4 访问 80/443;SSM 用于维护,无公网 SSH。当前是单主机部署;SQLite 文件持久化与备份不等于高可用。Sites 预览的数据与公开 AWS 站点互不共享。

数据模型

用途隔离 / 索引
workspaces独立工作空间、demo 标识ID 主键
users账户、角色、密码派生值、余额email 唯一;workspace 索引
sessions不透明会话的 SHA-256 哈希、到期时间hash 主键;user 索引
api_keys令牌前缀、哈希、状态hash 唯一;user 索引
models模型目录、演示输入/输出单价workspace + slug 唯一
channels供应商路由、状态、权重workspace 索引
requests模型、估算 Token、结算费用user/created、workspace/created
ledger追加式资金流水reference 唯一;user/created
audit账户和配置操作workspace/created
limits固定窗口节流计数id 主键

不保存提示词和响应正文。日志保存请求元数据,降低内容数据暴露。当前业务 API 不提供删除或修改 ledger/audit 的操作。

金额

1 USD = 1,000,000 micro-USD。输入、输出价格表示每百万 Token 的 micro-USD 单价。

单次演示费 = ceil((inputTokens × inputRate + outputTokens × outputRate) / 1,000,000),最低 1 micro-USD。余额不足返回 402。

扣款先执行 UPDATE ... WHERE balance >= cost,同一 D1 batch 中仅在更新成功时插入请求和负向流水。充值使用唯一 reference 以及 INSERT OR IGNORE,只有新流水插入成功才增加余额。

正式接真实供应商后,应增加额度预占、真实 usage 结算、超时对账、退款和幂等推理请求设计;当前模拟同步响应没有外部费用窗口。

身份与权限

实现限制

后台是隔离的服务管理演示,不包含跨租户超级管理员。单供应商单渠道;权重只决定是否参与,不实现多渠道加权负载均衡。只记录成功模拟调用与示例记录,失败调用当前返回错误但不进入请求日志。API Key 配额与更精细的组织预算尚未实现。固定窗口记录、会话和 demo 空间需在生产增加自动清理。

Node 适配器串行处理请求,适合演示和小规模验证;不应直接据此承诺并发生产容量。

依据

以上文档于 2026-09-16 查阅;架构容量与生产可靠性仍需实际压测验证。

05 · 接口文档

约定

新账户浏览器接口使用 Supabase access token(Bearer),服务端向 Supabase 验证身份后映射本地账户。演示及旧账户使用 HttpOnly omni_session Cookie。写操作必须带同源 Origin 与 Content-Type: application/json。API 请求体限制 16,000 字符;本地适配层还有 32KB 总大小限制。生产入口仍应增加统一字节级限制。

失败结构:{"error":{"code":"unauthorized"}}。UI 将错误码映射为所选的八种界面语言之一。

状态常见错误
400invalid_input / weak_password / stream_not_supported
401unauthorized / invalid_credentials
402insufficient_balance
403forbidden / invalid_origin / account_suspended
404not_found / model_unavailable
409email_unavailable
429rate_limited
503channel_unavailable / live_provider_not_configured / payments_not_configured / storage_unavailable

服务地址与健康检查

公开演示站点为 https://omnirelay.ai,SDK base URL 为 https://omnirelay.ai/v1

GET /health 无需登录,返回 {"ok":true,"service":"omnirelay","mode":"demo-mvp"}。这仅表示应用响应正常,不证明供应商、支付或备份服务已就绪。

账户

方法路径请求 / 行为
POST/api/auth/register已关闭,返回 410;新注册使用 Supabase Auth
POST/api/auth/login仅旧账户:email, password;创建本地会话
POST/api/auth/logout撤销当前本地会话;Supabase 会话由 SDK signOut 退出
POST/api/auth/demorole: customer 或 admin;创建独立演示空间
POST/api/demo/switchrole;仅当前演示空间内切换
GET/api/me资料、角色、余额、workspace/demo
PATCH/api/profilename

新账户邮箱注册、密码登录、重发验证邮件、密码恢复及 Google/GitHub 登录均由官方 Supabase SDK 发起。邮箱验证回调为 /auth/callback,恢复回调为 /auth/reset。PKCE 邮件链接需在发起流程的同一浏览器打开。前端 60 秒邮件重试倒计时只是交互保护,不能替代服务端限流或 CAPTCHA。详见认证运维文档。

客户与通用数据

方法路径请求 / 行为
GET/api/dashboard客户只汇总自己;管理员汇总当前空间
GET / POST/api/keys列表 / name 创建;创建时返回一次明文 key
DELETE/api/keys/:id仅可撤销自己的令牌
GET/api/models当前空间模型目录
POST/api/playgroundmodel, messages, locale;会话鉴权的模拟调用
GET/api/usage?days=30&model=...days 为 1/7/30/90,最多 500 条
GET/api/billing自己的余额和最近 100 条流水
POST/api/billing/topupamount 为 micro-USD,reference 为调用者提供的幂等键;仅 demo

管理 API

方法路径请求 / 行为
GET / PATCH/api/admin/users用户列表 / id, status;停用清除会话
PATCH/api/admin/modelsid, input, output, status;单价单位 micro-USD / 1M Token
GET / PATCH/api/admin/channels渠道列表 / id, status, weight,weight 为 0–100
GET/api/admin/audit最近 200 条审计事件

上述接口要求 admin,且限定其 workspace。

OpenAI 兼容模拟网关

使用 Authorization: Bearer <从客户后台创建的令牌>

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ['OMNIRELAY_API_KEY'],
    base_url=os.environ['OMNIRELAY_BASE_URL'],  # https://omnirelay.ai/v1
)
result = client.chat.completions.create(
    model='gpt-demo',
    messages=[{'role': 'user', 'content': 'Hello OmniRelay'}],
)
print(result.choices[0].message.content)

此示例调用自有部署的模拟网关,不会访问 OpenAI。私有 Sites 外层还要求站点所有者身份,普通外部 SDK 无法只靠 OmniRelay Key 穿过该外层;SDK 演示优先使用本地服务或自行授权的独立部署。站点访问策略不得为了测试而静默放宽。

成功响应包括标准 choices、usage,并增加 demo:truecost_microusd。Token 按字符数估算,价格仅为演示。

幂等与重试

充值必须在重试时复用同一个 reference。模拟推理目前未提供幂等重放,同一次输入重新提交会形成新的模拟请求并扣除对应演示费用。自动重试推理需由后续网关幂等机制支持。

06 · 部署方案

方案比较

项目Cloudflare Workers + D1AWS EC2 + Docker + SQLite
首版定位推荐预览与轻量 API 部署自主管理、兼容传统服务的演示部署
运行逻辑Fetch handler / env.DB相同 handler / Node SQLite adapter
运维平台托管 Worker 与数据库自行负责主机、证书、备份、补丁
扩容需遵守 Worker 与 D1 限额,先压测当前串行本地适配器只适合小规模;扩容前升级服务层和数据库
数据D1持久 Docker volume,单主机 SQLite
费用依账户计划和实际流量EC2、存储、流量、域名及备份费用

不预设月费数字,也不承诺当前实现的生产吞吐。

A · 本任务的 Sites 托管

项目 .openai/hosting.json 绑定同一个既有 project_id 和逻辑 DB。npm run build 生成 Worker 与迁移元数据。Sites 管理真实 Cloudflare 资源、私有访问策略和部署。

既有 Sites 预览维持 owner-private;omnirelay.ai 自有域名使用下述独立 AWS 部署,两个环境的数据互不共享。

B · 自有 Cloudflare 账户

仓库提供 deploy/wrangler.example.toml,数据库 ID 明确为待填项。

1. 登录自己的 Cloudflare 账户,使用受控 Wrangler 安装。

2. 运行 wrangler d1 create omnirelay,记录实际数据库 ID。

3. 把示例配置复制为项目根 wrangler.toml,替换数据库 ID。

4. npm run build

5. wrangler d1 migrations apply omnirelay --remote

6. wrangler deploy

7. 验证 /health、注册、demo、创建 key、模拟请求、账单和租户隔离。

8. 通过账户中已验证的域名设置 Worker route/custom domain,再启用访问控制、WAF 和容量监控。

不要对已应用的 Drizzle 迁移重写历史;新增 schema 用追加迁移。Cloudflare Wrangler 迁移记录与 Sites 迁移管理应各自使用独立环境,不对同一数据库混用两个迁移执行器。

C · AWS EC2

2026-09-17 已在 AWS 新加坡 ap-southeast-1 部署:CloudFormation 管理 t3.small、加密 30 GiB gp3、Elastic IP、私有 S3 备份及 SSM。Cloudflare 代理 omnirelay.ai,Caddy 提供源站 TLS,应用数据保存在持久 SQLite 中。每日备份已完成独立恢复验证。

实际部署和升级使用仓库 deploy/aws/ 下的 CloudFormation、install-release.sh 和 backup.sh;以下 Compose 步骤仅为另一种手工部署方式。单实例、单数据库架构适用于 MVP,目前不具备高可用能力。

1. 创建 Linux EC2 主机并安装 Docker Engine / Compose,使用 IAM Role 管理后续云权限。

2. 仅开放 80/443;管理端口仅对受信 IP 或 SSM 开放;应用 8080 不对公网发布。

3. 将源码放至主机,设置域名 DNS A/AAAA 到主机。

4. 在 deploy/ 目录创建 .env,设置 OMNI_DOMAIN=你的真实域名

5. 在项目根执行:docker compose -f deploy/compose.yml up -d --build

6. Caddy 在域名正确且端口可达时申请 TLS;应用用 SQLite volume 持久化。

7. 备份数据库请使用 SQLite online backup,或先停应用再复制,不能在 WAL 活跃时只复制主文件。

8. 升级前备份;回滚容器版本时确认 schema 向后兼容。

Compose 仅向公网暴露 Caddy;应用显式 TRUST_PROXY=1 后读取 Caddy 转发的 HTTPS 协议,确保同源检查与 Secure Cookie 正确。不得把应用端口直接暴露给不受信请求。

当前 Node 适配器串行处理请求;正式对外服务前应使用成熟 Node API 服务层,并根据压测采用 PostgreSQL、Redis 限流、异步计费对账及分布式队列。

生产上线顺序

参考

AWS 实际部署与验证记录见仓库 deploy/aws/README.md。自有 Cloudflare Workers / D1 配置仍是备选方案,尚未在该独立账户部署。

07 · 8 分钟演示手册

1. 产品价值(1 分钟)

打开官网,展示统一 API、模型生态与按 Token 计量的产品定位。切换 English,再切回中文,确认语言偏好在后台继续生效。

2. 客户工作流(3 分钟)

3. 管理员工作流(2 分钟)

停用用户后其会话将失效,因此演示用户停用时建议在另一个保留管理员会话的浏览器窗口操作;不要把退出后的新 demo 误认为原来的演示空间。

4. 权限与界限(1 分钟)

5. 技术交付(1 分钟)

展示 /docs.html,介绍相同 Worker 业务逻辑用于 Cloudflare D1 和本地/EC2 SQLite。指出生产上线的供应商、支付、身份和运维工作。

路线图

阶段 A:当前完成

产品官网、八语言、深色/浅色/跟随系统主题、注册/登录、隔离角色演示、Key 管理、模型/渠道管理、模拟网关、Token 估算、钱包与审计、部署配置和文档。AWS 新加坡公开演示已上线,Cloudflare 严格 HTTPS、持久化 SQLite、每日 S3 备份和单份备份恢复验证已完成;代码已推送 GitHub 私有仓库。

阶段 B:首个真实模型闭环

确定供应商与转售许可,安全配置密钥,加入真实 usage、请求预算预占、余额对账、失败重试和错误日志。先限制内部白名单用户。

阶段 C:商业试运行

接入支付、验签 webhook、退款与发票;生产管理员与 MFA;邮件验证/找回密码;告警通知、数据清理与完整灾难恢复演练(现有每日备份继续使用)。小规模邀请制试运行。

阶段 D:扩大规模

多渠道路由、熔断、组织成员/预算、流式调用、模型评测、容量压测与多区域策略。

这些阶段是建议次序,不是承诺的交付时间表。

08 · 验证记录

记录更新:2026-09-18。本地功能验证完成于 2026-09-16,AWS 实机及公开 HTTPS 验证完成于 2026-09-17。下面按环境区分结果,均不代表生产容量认证。

自动化集成验证

npm test:18 个业务检查全部通过(Node runner 汇总含父测试为 19 个)。

浏览器验证

通过 Ego Lite 验证登录演示、客户总览、Playground 模拟响应、创建 Key 弹窗、演示充值及账单更新、管理员切换、英文界面与官网。检查 390px 移动端官网和客户后台,页面无整体横向溢出;检查桌面官网与后台截图。浏览器中确认 WebMCP 工具 read_omnirelay_usage 注册;合法输入返回 requests/tokens/spend,与页面对应;多余参数导致预期错误,未改变数据。

八语言验证

8 套语言字典通过键名与插值占位符完整性检查。Ego Lite 实测官网全部语言切换及跨页面偏好保留;新增 6 种语言的 390px 登录页均无整体横向溢出。日语 Playground 完成模拟调用并显示日语响应;法语管理后台显示本地化金额、数字、日期和模型编辑表单。桌面深色模式截图检查通过。技术文档正文目前为中文。

AWS 与公开域名验证(2026-09-17)

本次文档复查(2026-09-18)

明确未验证

真实供应商调用、真实支付、邮件发送、找回密码、MFA、自有账户中的独立 Wrangler/Workers 部署、生产负载、跨实例/跨区域完整容灾恢复。WebMCP 在本次 Ego Lite 环境中通过注册、合法调用和非法参数检查;其他不支持的浏览器不依赖此增强。

09 · 项目进展与交付状态

更新日期:2026-09-18。范围:OmniRelay.ai;Mirvos 官网及 mirvos.sg 域名不属于本项目。

当前结论

公开演示已上线:https://omnirelay.ai 。从 https://omnirelay.ai/login 进入客户或管理员演示。当前是具备持久化、服务端权限和模拟计费闭环的 MVP;真实推理、收款和生产超级管理功能尚未完成。

交付清单

工作项状态依据
需求调研、PRD、设计、架构与 API 文档已交付文档 01–05;调研日期保留原始日期
官网、注册登录、客户与隔离管理员演示已实现文档 02、05、07、08
中英西法德葡日韩八语言及三种主题已实现并验证文档 03、08;文档正文为中文
Key、模型/渠道、模拟调用、用量与账单已实现并验证文档 05、08;不包含真实模型调用
AWS 新加坡 EC2 与 Cloudflare 严格 HTTPS已上线2026-09-17 实机和公开访问验证
持久化与每日 S3 备份已配置单份备份隔离恢复验证通过
GitHub 私有仓库已创建并推送MIRVOS-AI/omnirelay.ai
Supabase Auth 与 Resend SMTP已接入,完整验收待完成邮件投递已验证;邮箱确认、恢复与 OAuth 完整授权仍需用户操作
模型品牌图标已更新首页 Meta 替换为 Kimi,Qwen/Kimi 使用官网素材,其余来源详见核验记录
自动 CI/CD未配置当前使用源码归档、S3、SSM 手工触发发布
真实模型、支付、生产管理员未完成进入下面生产化阶段

最近里程碑

下一阶段与完成条件

优先级工作完成条件
P0首个真实模型供应商确认转售授权,内部白名单真实调用成功,usage/费用/失败补偿可对账
P0生产身份与管理权限完成已接入的邮箱验证、找回密码和社交登录验收;配置防刷、MFA及独立生产管理员授权
P0支付与资金流程验签 webhook、幂等入账、退款和对账通过,演示余额与真钱隔离
P0运维与恢复告警接收渠道、备份失败通知、日志与留存清理、整机重建演练;确定 RPO/RTO
P0对外商业服务规则OmniRelay 专属隐私政策、服务条款、供应商与支付要求完成审核
P1性能和扩展压测后确定服务层/数据库演进;验证并发、限流和故障处理
P1发布自动化自动构建测试、受控部署与回滚;GitHub 推送不会自动发布
P1网关能力流式 SSE、多渠道选路、熔断、失败日志、组织预算等按优先级交付

运维边界与文档维护

当前为单实例 SQLite,尚无高可用;CloudWatch 实例状态告警没有通知目标,应用日志为本地轮转。详细资源、费用快照、升级和恢复步骤保存在私有仓库的 deploy/aws/README.md。

发布版本、仓库提交与文档版本需分别记录。最近核验的线上应用版本为 20260918-model-brand-audit;实时发布记录以 deploy/aws/README.md 为准。安全接入第一批正在完善邮件重发、倒计时和相关文档,尚不能据此宣称 Turnstile、MFA 或真实推理已上线。构建只更新仓库中的生成页面,不会自动发布或改变云资源。

每次交付应同步本文件、验证记录和部署运行手册;只把实际验证过的项目标为通过,并保留验证日期与环境。研究资料日期不因文档编辑而改成新的调研日期。