Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

【2026飞猪AI旅行创新大赛】 -- GoGather 聚行 —— 团体出行一站式智能助手

オープン
#204 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
1/100
issue の種類
機能追加
明瞭さ
説明が足りない
活発さ
活発
技術スタック
css, fastapi, html, javascript, python, sqlite
領域
web-dev

調査の方向性

The issue describes a complete travel-planning product and links its implementation at https://github.com/mikelgh/gogather, but gives no specific change to make in this repository. Start by checking the repository’s contribution guidance and existing site structure to see whether this submission needs a defined update. Done would require a concrete requested change and acceptance criteria; none are provided here.

索引モデルが issue の本文から書いたものです。

説明

2026飞猪AI旅行创新大赛 showcase

参赛项目名称

GoGather 聚行 —— 团体出行的「可执行方案」生成器


团队 / 作者与奖品领取人

  • 团队名称:睿欣达
  • 主要提交人 GitHub ID(仅 1 位,必填):mikelgh
  • 其他成员(可选,仅用于署名):无

旅行场景与目标用户

场景:行程规划 —— 但我们解决的不是「去哪玩」,而是「怎么把 N 个人按时按预算组织起来」。

现有的 AI 旅行产品绝大多数停在「生成一篇攻略」:一篇图文并茂的 Markdown。
但团建、聚会、家庭游的真正难点在攻略之后 ——

  • 50 人的预算到底怎么分摊到人头?分房怎么分?
  • 几点集合、几点退房、哪个车次、哪家酒店、多少钱?
  • 团员没装 App、不注册账号,怎么把方案发到每个人手上?

目标用户

用户 典型诉求
企业 HR / 行政 20–60 人团建,跨城出行,需要预算明细、分房方案、可对外分享
同学聚会 / 校友会召集人 30 人左右,跨城 2–5 天,预算敏感,要能直接下单
家庭游 / 多代同行 需要儿童数、老人数、无障碍信息在行程里被真正考虑

痛点一句话:团体出行缺的不是攻略,是一份能直接照着执行、并且能发下去的方案。


我做了什么

GoGather 把「一句话描述活动」变成「一份可预订、可跟进、可分享的执行清单」。

核心链路
用户一句话 → 百炼抽取结构化参数 → 百炼生成逐日大纲(卡片确认)
          → 飞猪真实数据(机票/高铁/酒店/景点/餐厅)
          → 百炼编排完整方案 → 地图时间线 + 主动提醒 + 一键分享
差异化能力

1. 数据是真的,不是编的
交通、酒店、景点、餐厅全部来自飞猪 AI 开放平台(flyai-cli),带实时价格和一键预订链接。
车次号、航班号、酒店星级、门票链接都来自真实库存 —— 这是「攻略」和「方案」的分界线。

2. 大纲先行,确认后再生成
不让用户等一个黑盒结果。先用百炼出一张逐日行程大纲卡片(D1/D2 主题 + 上午/下午/晚上条目 + 类型标签),
用户确认或提出修改(「第二天换个景点」)后再生成完整方案。可改可迭代,不是一次性抽奖。

3. 地图时间线(空间感知)
把时间线按天着色映射到地图上。团队一眼看出「这三天在哪一片区域」,
重叠地点做环形偏移避免标记互相遮挡,支持自动播放逐点巡视。

4. 主动提醒(主动服务)
不是被动查询,而是到点该做什么 —— 「11-01 06:30 广州飞往成都(川航 3U6710)」、
「11-01 14:00 酒店入住与休整」,由行程节点自动推导,演示方案生成 18 条。

5. 分享即协作
一键生成分享链接,团员无需注册即可查看。分享页服务端渲染 OpenGraph meta tags,
微信 / 社交平台抓取直接出卡片(城市、日期、人数、摘要 + AI 生成的城市专属封面)。

6. 方案可迭代
已生成的方案支持二次调整、重新生成、版本回滚,每次修订都进版本历史。

产品完成度

从 0 到 1 完成了完整的产品化:品牌设计令牌与 Logo 体系、集中式文案表、
/guide 功能说明页、首次使用 3 步遮罩式引导、空状态与错误态、品牌 404 页、
响应式布局(1440 / 1280 / 1024 / 390px 全适配)。


百炼使用说明(必填)

  • 百炼能力 / 模型:

    • qwen-plus —— 完整方案编排、行程文案润色
    • qwen-turbo —— 参数抽取、大纲生成、方案修订等低延迟环节
    • 调用形态:Chat Completions,开启 response_format: {"type": "json_object"} 强制结构化输出
  • 调用方式:百炼 API(DashScope OpenAI 兼容模式 HTTP 接口)
    POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions,
    Authorization: Bearer $DASHSCOPE_API_KEY。
    统一封装在 app/llm_client.py,主备供应商链:百炼(qwen)为默认主供应商,
    配置了 MiniMax 密钥时作为故障备援,带冷却期避免反复打到已挂的供应商。

  • 使用环节与输入输出(百炼位于运行时链路,用户每次对话都会调用):

    # 环节 模型 输入 输出 代码位置
    1 参数抽取 qwen-turbo 最近 6 轮对话 + 用户本轮消息 + UI 已选预算/交通/偏好 结构化参数:出发地、目的地、入住/退房、人数、预算档次、活动类型、儿童数、老人数、无障碍需求、兴趣标签 app/chat.py:98
    2 大纲生成 qwen-turbo 结构化参数 + 对话上下文 逐日大纲 JSON:days[].{day, theme, items[].{slot, title, type}} app/structured_planner.py:157
    3 完整方案编排 qwen-plus 大纲 + 飞猪真实数据(机/酒/景/餐)+ 参数 结构化方案 JSON:行动项、时间线、预算明细、分房、人均预算、摘要 app/structured_planner.py:297
    4 方案修订 qwen-turbo 原方案结构化数据 + 用户修改意见 修订后的完整结构化方案(用于版本历史与回滚) app/structured_planner.py:504
    5 行程文案润色 qwen-plus 结构化方案 + 行程原始素材 面向人阅读的行程叙述文案 app/planner.py:111

    设计要点:把「快思考」和「慢思考」拆开 —— 抽取、大纲、修订这类需要在秒级返回的环节走
    qwen-turbo;真正做长文本编排的环节走 qwen-plus。用户感知到的首屏时间因此可控。

  • Skill 名称(如有):无。本作品使用百炼的 Chat Completions 结构化输出能力,
    未使用百炼 Agent / Skill 编排,链路完全自研。

  • 其他工具 / 技术栈:

    • 飞猪 AI 开放平台:@fly-ai/flyai-cli,子进程调用 ai-search / search-hotel /
      search-poi / search-flight / search-train,提供实时价格与预订链接(app/flyai_client.py)
    • 高德 Web 服务:地理编码兜底,修正飞猪坐标缺失导致的跨省误定位(app/amap_geocode.py)
    • 地图:Leaflet.js + 高德瓦片;时间线/提醒/封面共用 map_component.js
    • 后端:FastAPI + SQLite(用户、方案、对话、AI 用量、版本历史)
    • 前端:原生 HTML / CSS / JS,无框架
    • 部署:单服务器 uvicorn + Caddy 反向代理 + HTTPS

效果展示

在线演示(建议评委直接点开)
内容 链接
主站(新建方案对话态) https://gogather.partystack.cn/
主演示方案(广州→成都→九寨沟→乐山,50 人,6 天 5 晚) https://gogather.partystack.cn/share/h5ydji
使用指南页 https://gogather.partystack.cn/guide

主演示方案数据:18 个行程节点、14 项预算明细、人均 ¥3,602、18 条主动提醒、
含真实航班号(川航 3U6710 / 九元 AQ1116)与酒店分房方案。

其他可看方案

以下全部为线上可直接点击的分享链接(无需注册),覆盖不同人数、不同天数、不同场景:

方案 场景 规模 行程节点 人均预算 链接
杭州 同学聚会 上海出发 30 人 · 4 晚 29 约 ¥3,198 https://gogather.partystack.cn/share/o16u75
西安 文化团建 上海出发 50 人 · 4 天 3 晚 20 ¥2,830 https://gogather.partystack.cn/share/rfvox5
三亚 度假出行 广州出发 30 人 · 2 晚 6 约 ¥1,386 https://gogather.partystack.cn/share/9nwhqj
杭州 小型聚会 上海出发 10 人 · 1 晚 6 约 ¥1,081 https://gogather.partystack.cn/share/ca1gmt

o16u75 的 29 个行程节点是目前最密的一份,可以重点看它的地图时间线和预算拆分。

截图

① 对话态 + 大纲确认卡片

用户一句话描述活动,百炼抽取参数后先出逐日大纲卡片供确认,确认(或提出修改)后再生成完整方案。

对话态与行程大纲确认卡片

② 分享页:AI 封面 + 真实价格 + 一键预订

团员无需注册即可查看。每条行程带真实价格与「飞猪预订/验价」链接。

分享页:AI 生成封面、地图时间线、真实价格与预订入口

③ 全屏地图时间线

18 个地点编号徽章、按天着色、自动播放;重叠地点环形偏移避免遮挡。

全屏地图时间线

④ 使用指南页

使用指南页


项目链接与复现方式

本地复现
# 1. 安装依赖
pip install -r requirements.txt      # Python 3.11+
npm install                           # Node.js 18+(flyai-cli 依赖全局 fetch)

# 2. 配置环境变量
cp .env.example .env
# 至少填入 DASHSCOPE_API_KEY(百炼)与 FLYAI_API_KEY(飞猪)
# AMAP_API_KEY 可选,用于坐标兜底

# 3. 启动
uvicorn app.main:app --host 0.0.0.0 --port 8000

打开首页注册账号,输入一句「10月25日30个同学去杭州聚会,从广州出发」即可完整体验全链路。

仓库不含任何密钥,所有 Key 通过 .env 注入(已在 .gitignore 中)。


踩坑记录(可选)

1. 跨省坐标误定位
早期用硬编码 POI 坐标表按城市名匹配,出现「衡山」被定位到错误省份的情况。
改为:优先透传飞猪返回的坐标,缺失时用高德地理编码兜底,两级都拿不到才退回内置表。
修复后回归验证 15/15 坐标正确。

2. flyai-cli 在 Node < 18 上直接崩
flyai-cli 依赖全局 fetch,服务进程 PATH 上若命中旧版 Node 会报
ReferenceError: fetch is not defined。在 config.resolve_flyai_prefix() 里显式挑选
Node ≥ 18 的可执行文件,找不到则回退 npx。

3. 深链接被自己吃掉
登录逻辑里 history.replaceState 清理 ?token= / ?username= 时,
把地图页带回的 ?plan=<id> 一起清掉了,导致「返回方案页」失效。
改为只在两个认证参数同时存在时才清理。

4. 大纲卡片刷新后退化成一坨文字
conversations 表只存了 content 纯文本,结构化的大纲在刷新后无法还原。
新增 meta 列持久化结构化大纲,回放时以只读模式重新渲染卡片
(隐藏已失效的确认按钮),并给气泡补上 white-space: pre-wrap 兼容存量消息。

5. LLM 单点故障
百炼超时会让整条生成链路中断。做了主备供应商链 + 冷却期:
主供应商连续失败后临时切到备援,冷却结束后自动回切。


**奖品说明:**每个团队最多发放 1 份奖品。同一团队即使提交多个参赛作品,
也只登记 1 位奖品领取人;其他团队成员可以共同署名,但不重复发放奖品。

主要言語
HTML
スター
11
フォーク
3
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

modelstudioai/modelstudioai.github.io のほかの issue

modelstudioai/modelstudioai.github.io の issue をすべて見る

似ている issue

Web Dev の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。