test2123213
79 行
2.4 KiB
Markdown
79 行
2.4 KiB
Markdown
# 武汉 OPC AI 活动共创 Demo
|
||
|
||
面向武汉一人公司(OPC)与独立创造者社区的活动提案平台。成员可以提交线下或线上活动,
|
||
也可以先用一句自然语言想法生成结构化草案,确认后再补齐真实信息并提交。
|
||
|
||
## 功能
|
||
|
||
- AI 共创:输入一句活动想法,结合已填写的类型、区域、日期和场地生成活动草案。
|
||
- 人工确认:预览草案后主动回填表单;AI 不会直接提交或覆盖真实安排。
|
||
- 活动征集:记录活动名称、发起人、类型、区域、日期、地点、说明和私密联系方式。
|
||
- 提案广场:公开展示活动信息,不返回提交人的联系方式。
|
||
- 模型接入:通过 WeHub `model_router` 调用 OpenAI 兼容的 Chat Completions API。
|
||
- 自动建表:函数首次访问数据库时创建 `app.opc_events`。
|
||
|
||
页面主流程为:**写下想法 → 生成 AI 草案 → 人工确认回填 → 补充真实信息 → 提交征集**。
|
||
|
||
## WeHub 资源
|
||
|
||
- `static_site web`:`frontend/dist`
|
||
- `function api`:Node.js 20,路由 `/api/cloud/*`
|
||
- `postgres_database app_db`:活动提案持久化
|
||
- `model_router models`:AI 活动草案生成
|
||
|
||
函数环境变量由 `wehub.manifest.json` 通过资源引用注入:
|
||
|
||
- `DATABASE_URL`
|
||
- `OPENAI_BASE_URL`
|
||
- `OPENAI_API_KEY`
|
||
- `OPENAI_MODEL`
|
||
|
||
模型密钥只注入后端函数,不会出现在静态页面中。
|
||
|
||
## API
|
||
|
||
- `GET /api/cloud/health`
|
||
- `GET /api/cloud/events`
|
||
- `POST /api/cloud/events`
|
||
- `POST /api/cloud/event-draft`
|
||
|
||
活动想法 `idea` 必填,其余上下文字段可选:
|
||
|
||
```json
|
||
{
|
||
"idea": "想办一场独立开发者互相体验产品的周末活动",
|
||
"category": "产品交流",
|
||
"district": "武昌区",
|
||
"venue": "",
|
||
"event_date": ""
|
||
}
|
||
```
|
||
|
||
成功响应只包含后端校验通过的结构化字段:
|
||
|
||
```json
|
||
{
|
||
"ok": true,
|
||
"draft": {
|
||
"title": "周末产品互诊室",
|
||
"category": "产品交流",
|
||
"district": "武昌区",
|
||
"venue": "武昌区交通便利、可分组交流的共享空间",
|
||
"description": "邀请武汉独立开发者带上正在打磨的产品,通过分组体验和反馈交换真实用户视角。"
|
||
}
|
||
}
|
||
```
|
||
|
||
模型输出缺字段、不是有效 JSON、类别或区域不在允许范围内、字段长度不合规时,接口返回 `502`,
|
||
草案不会进入表单。
|
||
|
||
## 本地测试
|
||
|
||
```sh
|
||
cd functions/api
|
||
npm ci
|
||
npm test
|
||
```
|
||
|
||
完整部署产物由 `wehub-runner build` 生成,不提交 `.wehub/`。
|