【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

Description

@eurekaneon

比赛提交材料

参赛项目名称

OneTrail 一径:徒步路线规划助手

团队 / 作者

成员:eurekaneon、RealTapeL

项目简介

周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

我做了什么

我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

1. 从“我想去走走”到“我知道今天怎么走”

  • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
  • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
  • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
  • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

2. 让阿里云百炼 Agent 自主完成路线规划协同

  • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
  • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
  • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
  • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
  • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
  • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
  • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
  • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

3. 用暗黑像素风把徒步做成一次可玩的探索

我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

  • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
  • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
  • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
  • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
  • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
  • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

4. 完成路线库与路线可信档案

  • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
  • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
  • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
  • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
  • 支持登录用户继续录入真实路线,路线库可持续扩充。

5. 完成出行执行助手

  • 将选中的路线转化为可执行行程。
  • 展示驾车、公交/地铁等交通方案和到达信息。
  • 展示出发时间、徒步时间、关键节点等行程时间线。
  • 查询路线起点附近的补给点。
  • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

6. 完成装备推荐与比选

  • 建立真实装备目录,按品类浏览和筛选。
  • 根据路线特点、天气、预算和用户已有装备生成装备参考。
  • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
  • 实现装备评分、真实评价、评价聚合和装备对比卡片。
  • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

7. 完成账号、用户画像与徒步成长数据

  • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
  • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
  • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
  • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
  • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

8. 完成双端产品与工程交付

  • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
  • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
  • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
  • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
  • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

技术亮点

OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

用户需求与画像
↓
百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
↓
百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
↓
路线/天气/交通/补给/装备数据汇总
↓
硬约束筛选:距离、爬升、耗时、难度、安全
↓
可解释评分与排序
↓
Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单

系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

使用的工具与技术

· 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
· 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
· 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
· OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
· 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
· OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
· 前端:Vue 3、Vite、Vue Router、Capacitor。
· 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
· 外部数据:高德 Web Service API。
· 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

百炼官方技术参考:

· 百炼应用类型:Agent、Workflow 与高代码应用
· 百炼官方 MCP 服务
· 百炼 Skill
· 百炼模型上下文协议 MCP
· 百炼向量化模型

效果展示与项目链接

· 在线 Demo:http://150.158.126.172:8082
· 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
· 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
· GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

ImageImageImageImageImage

产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

踩坑与解决

· Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
· 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
· Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
· 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
· 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
       blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
      }
      } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
      })();
      (function(){
      try {
      var __m = "github.com";
      var __re = new RegExp('^' + "github\\.com" + '
      
      Skip to content

      【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

      Description

      @eurekaneon

      比赛提交材料

      参赛项目名称

      OneTrail 一径:徒步路线规划助手

      团队 / 作者

      成员:eurekaneon、RealTapeL

      项目简介

      周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

      OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

      产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

      我做了什么

      我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

      1. 从“我想去走走”到“我知道今天怎么走”

      • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
      • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
      • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
      • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

      我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

      这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

      2. 让阿里云百炼 Agent 自主完成路线规划协同

      • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
      • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
      • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
      • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
      • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
      • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
      • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
      • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

      注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

      这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

      3. 用暗黑像素风把徒步做成一次可玩的探索

      我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

      • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
      • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
      • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
      • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
      • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
      • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

      4. 完成路线库与路线可信档案

      • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
      • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
      • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
      • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
      • 支持登录用户继续录入真实路线,路线库可持续扩充。

      5. 完成出行执行助手

      • 将选中的路线转化为可执行行程。
      • 展示驾车、公交/地铁等交通方案和到达信息。
      • 展示出发时间、徒步时间、关键节点等行程时间线。
      • 查询路线起点附近的补给点。
      • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

      6. 完成装备推荐与比选

      • 建立真实装备目录,按品类浏览和筛选。
      • 根据路线特点、天气、预算和用户已有装备生成装备参考。
      • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
      • 实现装备评分、真实评价、评价聚合和装备对比卡片。
      • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

      7. 完成账号、用户画像与徒步成长数据

      • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
      • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
      • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
      • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
      • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

      8. 完成双端产品与工程交付

      • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
      • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
      • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
      • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
      • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

      技术亮点

      OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

      用户需求与画像
      ↓
      百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
      ↓
      百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
      ↓
      路线/天气/交通/补给/装备数据汇总
      ↓
      硬约束筛选:距离、爬升、耗时、难度、安全
      ↓
      可解释评分与排序
      ↓
      Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
      

      系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

      使用的工具与技术

      · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
      · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
      · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
      · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
      · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
      · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
      · 前端:Vue 3、Vite、Vue Router、Capacitor。
      · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
      · 外部数据:高德 Web Service API。
      · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

      百炼官方技术参考:

      · 百炼应用类型:Agent、Workflow 与高代码应用
      · 百炼官方 MCP 服务
      · 百炼 Skill
      · 百炼模型上下文协议 MCP
      · 百炼向量化模型

      效果展示与项目链接

      · 在线 Demo:http://150.158.126.172:8082
      · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
      · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
      · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

      ImageImageImageImageImage

      产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

      踩坑与解决

      · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
      · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
      · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
      · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
      · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
          Skip to content

          【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

          Description

          @eurekaneon

          比赛提交材料

          参赛项目名称

          OneTrail 一径:徒步路线规划助手

          团队 / 作者

          成员:eurekaneon、RealTapeL

          项目简介

          周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

          OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

          产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

          我做了什么

          我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

          1. 从“我想去走走”到“我知道今天怎么走”

          • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
          • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
          • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
          • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

          我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

          这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

          2. 让阿里云百炼 Agent 自主完成路线规划协同

          • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
          • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
          • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
          • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
          • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
          • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
          • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
          • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

          注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

          这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

          3. 用暗黑像素风把徒步做成一次可玩的探索

          我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

          • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
          • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
          • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
          • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
          • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
          • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

          4. 完成路线库与路线可信档案

          • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
          • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
          • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
          • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
          • 支持登录用户继续录入真实路线,路线库可持续扩充。

          5. 完成出行执行助手

          • 将选中的路线转化为可执行行程。
          • 展示驾车、公交/地铁等交通方案和到达信息。
          • 展示出发时间、徒步时间、关键节点等行程时间线。
          • 查询路线起点附近的补给点。
          • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

          6. 完成装备推荐与比选

          • 建立真实装备目录,按品类浏览和筛选。
          • 根据路线特点、天气、预算和用户已有装备生成装备参考。
          • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
          • 实现装备评分、真实评价、评价聚合和装备对比卡片。
          • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

          7. 完成账号、用户画像与徒步成长数据

          • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
          • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
          • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
          • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
          • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

          8. 完成双端产品与工程交付

          • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
          • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
          • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
          • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
          • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

          技术亮点

          OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

          用户需求与画像
          ↓
          百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
          ↓
          百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
          ↓
          路线/天气/交通/补给/装备数据汇总
          ↓
          硬约束筛选:距离、爬升、耗时、难度、安全
          ↓
          可解释评分与排序
          ↓
          Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
          

          系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

          使用的工具与技术

          · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
          · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
          · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
          · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
          · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
          · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
          · 前端:Vue 3、Vite、Vue Router、Capacitor。
          · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
          · 外部数据:高德 Web Service API。
          · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

          百炼官方技术参考:

          · 百炼应用类型:Agent、Workflow 与高代码应用
          · 百炼官方 MCP 服务
          · 百炼 Skill
          · 百炼模型上下文协议 MCP
          · 百炼向量化模型

          效果展示与项目链接

          · 在线 Demo:http://150.158.126.172:8082
          · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
          · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
          · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

          ImageImageImageImageImage

          产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

          踩坑与解决

          · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
          · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
          · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
          · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
          · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

              Description

              @eurekaneon

              比赛提交材料

              参赛项目名称

              OneTrail 一径:徒步路线规划助手

              团队 / 作者

              成员:eurekaneon、RealTapeL

              项目简介

              周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

              OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

              产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

              我做了什么

              我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

              1. 从“我想去走走”到“我知道今天怎么走”

              • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
              • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
              • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
              • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

              我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

              这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

              2. 让阿里云百炼 Agent 自主完成路线规划协同

              • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
              • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
              • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
              • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
              • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
              • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
              • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
              • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

              注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

              这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

              3. 用暗黑像素风把徒步做成一次可玩的探索

              我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

              • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
              • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
              • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
              • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
              • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
              • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

              4. 完成路线库与路线可信档案

              • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
              • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
              • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
              • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
              • 支持登录用户继续录入真实路线,路线库可持续扩充。

              5. 完成出行执行助手

              • 将选中的路线转化为可执行行程。
              • 展示驾车、公交/地铁等交通方案和到达信息。
              • 展示出发时间、徒步时间、关键节点等行程时间线。
              • 查询路线起点附近的补给点。
              • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

              6. 完成装备推荐与比选

              • 建立真实装备目录,按品类浏览和筛选。
              • 根据路线特点、天气、预算和用户已有装备生成装备参考。
              • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
              • 实现装备评分、真实评价、评价聚合和装备对比卡片。
              • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

              7. 完成账号、用户画像与徒步成长数据

              • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
              • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
              • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
              • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
              • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

              8. 完成双端产品与工程交付

              • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
              • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
              • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
              • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
              • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

              技术亮点

              OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

              用户需求与画像
              ↓
              百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
              ↓
              百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
              ↓
              路线/天气/交通/补给/装备数据汇总
              ↓
              硬约束筛选:距离、爬升、耗时、难度、安全
              ↓
              可解释评分与排序
              ↓
              Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
              

              系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

              使用的工具与技术

              · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
              · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
              · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
              · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
              · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
              · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
              · 前端:Vue 3、Vite、Vue Router、Capacitor。
              · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
              · 外部数据:高德 Web Service API。
              · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

              百炼官方技术参考:

              · 百炼应用类型:Agent、Workflow 与高代码应用
              · 百炼官方 MCP 服务
              · 百炼 Skill
              · 百炼模型上下文协议 MCP
              · 百炼向量化模型

              效果展示与项目链接

              · 在线 Demo:http://150.158.126.172:8082
              · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
              · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
              · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

              ImageImageImageImageImage

              产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

              踩坑与解决

              · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
              · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
              · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
              · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
              · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions

                  , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
                  Skip to content

                  【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

                  Description

                  @eurekaneon

                  比赛提交材料

                  参赛项目名称

                  OneTrail 一径:徒步路线规划助手

                  团队 / 作者

                  成员:eurekaneon、RealTapeL

                  项目简介

                  周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

                  OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

                  产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

                  我做了什么

                  我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

                  1. 从“我想去走走”到“我知道今天怎么走”

                  • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
                  • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
                  • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
                  • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

                  我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

                  这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

                  2. 让阿里云百炼 Agent 自主完成路线规划协同

                  • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
                  • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
                  • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
                  • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
                  • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
                  • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
                  • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
                  • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

                  注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

                  这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

                  3. 用暗黑像素风把徒步做成一次可玩的探索

                  我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

                  • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
                  • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
                  • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
                  • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
                  • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
                  • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

                  4. 完成路线库与路线可信档案

                  • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
                  • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
                  • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
                  • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
                  • 支持登录用户继续录入真实路线,路线库可持续扩充。

                  5. 完成出行执行助手

                  • 将选中的路线转化为可执行行程。
                  • 展示驾车、公交/地铁等交通方案和到达信息。
                  • 展示出发时间、徒步时间、关键节点等行程时间线。
                  • 查询路线起点附近的补给点。
                  • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

                  6. 完成装备推荐与比选

                  • 建立真实装备目录,按品类浏览和筛选。
                  • 根据路线特点、天气、预算和用户已有装备生成装备参考。
                  • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
                  • 实现装备评分、真实评价、评价聚合和装备对比卡片。
                  • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

                  7. 完成账号、用户画像与徒步成长数据

                  • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
                  • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
                  • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
                  • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
                  • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

                  8. 完成双端产品与工程交付

                  • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
                  • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
                  • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
                  • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
                  • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

                  技术亮点

                  OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

                  用户需求与画像
                  ↓
                  百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
                  ↓
                  百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
                  ↓
                  路线/天气/交通/补给/装备数据汇总
                  ↓
                  硬约束筛选:距离、爬升、耗时、难度、安全
                  ↓
                  可解释评分与排序
                  ↓
                  Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
                  

                  系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

                  使用的工具与技术

                  · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
                  · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
                  · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
                  · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
                  · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
                  · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
                  · 前端:Vue 3、Vite、Vue Router、Capacitor。
                  · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
                  · 外部数据:高德 Web Service API。
                  · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

                  百炼官方技术参考:

                  · 百炼应用类型:Agent、Workflow 与高代码应用
                  · 百炼官方 MCP 服务
                  · 百炼 Skill
                  · 百炼模型上下文协议 MCP
                  · 百炼向量化模型

                  效果展示与项目链接

                  · 在线 Demo:http://150.158.126.172:8082
                  · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
                  · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
                  · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

                  ImageImageImageImageImage

                  产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

                  踩坑与解决

                  · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
                  · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
                  · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
                  · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
                  · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

                  Metadata

                  Metadata

                  Assignees

                  No one assigned

                    Labels

                    Type

                    No type

                    Projects

                    No projects

                      Milestone

                      No milestone

                      Relationships

                      None yet

                      Development

                      No branches or pull requests

                      Issue actions

                      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                      Skip to content

                      【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

                      Description

                      @eurekaneon

                      比赛提交材料

                      参赛项目名称

                      OneTrail 一径:徒步路线规划助手

                      团队 / 作者

                      成员:eurekaneon、RealTapeL

                      项目简介

                      周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

                      OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

                      产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

                      我做了什么

                      我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

                      1. 从“我想去走走”到“我知道今天怎么走”

                      • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
                      • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
                      • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
                      • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

                      我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

                      这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

                      2. 让阿里云百炼 Agent 自主完成路线规划协同

                      • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
                      • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
                      • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
                      • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
                      • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
                      • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
                      • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
                      • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

                      注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

                      这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

                      3. 用暗黑像素风把徒步做成一次可玩的探索

                      我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

                      • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
                      • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
                      • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
                      • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
                      • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
                      • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

                      4. 完成路线库与路线可信档案

                      • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
                      • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
                      • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
                      • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
                      • 支持登录用户继续录入真实路线,路线库可持续扩充。

                      5. 完成出行执行助手

                      • 将选中的路线转化为可执行行程。
                      • 展示驾车、公交/地铁等交通方案和到达信息。
                      • 展示出发时间、徒步时间、关键节点等行程时间线。
                      • 查询路线起点附近的补给点。
                      • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

                      6. 完成装备推荐与比选

                      • 建立真实装备目录,按品类浏览和筛选。
                      • 根据路线特点、天气、预算和用户已有装备生成装备参考。
                      • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
                      • 实现装备评分、真实评价、评价聚合和装备对比卡片。
                      • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

                      7. 完成账号、用户画像与徒步成长数据

                      • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
                      • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
                      • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
                      • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
                      • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

                      8. 完成双端产品与工程交付

                      • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
                      • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
                      • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
                      • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
                      • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

                      技术亮点

                      OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

                      用户需求与画像
                      ↓
                      百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
                      ↓
                      百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
                      ↓
                      路线/天气/交通/补给/装备数据汇总
                      ↓
                      硬约束筛选:距离、爬升、耗时、难度、安全
                      ↓
                      可解释评分与排序
                      ↓
                      Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
                      

                      系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

                      使用的工具与技术

                      · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
                      · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
                      · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
                      · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
                      · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
                      · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
                      · 前端:Vue 3、Vite、Vue Router、Capacitor。
                      · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
                      · 外部数据:高德 Web Service API。
                      · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

                      百炼官方技术参考:

                      · 百炼应用类型:Agent、Workflow 与高代码应用
                      · 百炼官方 MCP 服务
                      · 百炼 Skill
                      · 百炼模型上下文协议 MCP
                      · 百炼向量化模型

                      效果展示与项目链接

                      · 在线 Demo:http://150.158.126.172:8082
                      · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
                      · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
                      · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

                      ImageImageImageImageImage

                      产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

                      踩坑与解决

                      · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
                      · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
                      · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
                      · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
                      · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

                      Metadata

                      Metadata

                      Assignees

                      No one assigned

                        Labels

                        Type

                        No type

                        Projects

                        No projects

                          Milestone

                          No milestone

                          Relationships

                          None yet

                          Development

                          No branches or pull requests

                          Issue actions

                          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
                          Skip to content

                          【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

                          Description

                          @eurekaneon

                          比赛提交材料

                          参赛项目名称

                          OneTrail 一径:徒步路线规划助手

                          团队 / 作者

                          成员:eurekaneon、RealTapeL

                          项目简介

                          周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

                          OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

                          产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

                          我做了什么

                          我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

                          1. 从“我想去走走”到“我知道今天怎么走”

                          • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
                          • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
                          • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
                          • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

                          我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

                          这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

                          2. 让阿里云百炼 Agent 自主完成路线规划协同

                          • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
                          • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
                          • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
                          • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
                          • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
                          • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
                          • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
                          • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

                          注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

                          这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

                          3. 用暗黑像素风把徒步做成一次可玩的探索

                          我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

                          • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
                          • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
                          • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
                          • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
                          • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
                          • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

                          4. 完成路线库与路线可信档案

                          • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
                          • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
                          • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
                          • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
                          • 支持登录用户继续录入真实路线,路线库可持续扩充。

                          5. 完成出行执行助手

                          • 将选中的路线转化为可执行行程。
                          • 展示驾车、公交/地铁等交通方案和到达信息。
                          • 展示出发时间、徒步时间、关键节点等行程时间线。
                          • 查询路线起点附近的补给点。
                          • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

                          6. 完成装备推荐与比选

                          • 建立真实装备目录,按品类浏览和筛选。
                          • 根据路线特点、天气、预算和用户已有装备生成装备参考。
                          • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
                          • 实现装备评分、真实评价、评价聚合和装备对比卡片。
                          • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

                          7. 完成账号、用户画像与徒步成长数据

                          • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
                          • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
                          • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
                          • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
                          • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

                          8. 完成双端产品与工程交付

                          • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
                          • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
                          • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
                          • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
                          • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

                          技术亮点

                          OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

                          用户需求与画像
                          ↓
                          百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
                          ↓
                          百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
                          ↓
                          路线/天气/交通/补给/装备数据汇总
                          ↓
                          硬约束筛选:距离、爬升、耗时、难度、安全
                          ↓
                          可解释评分与排序
                          ↓
                          Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
                          

                          系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

                          使用的工具与技术

                          · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
                          · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
                          · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
                          · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
                          · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
                          · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
                          · 前端:Vue 3、Vite、Vue Router、Capacitor。
                          · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
                          · 外部数据:高德 Web Service API。
                          · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

                          百炼官方技术参考:

                          · 百炼应用类型:Agent、Workflow 与高代码应用
                          · 百炼官方 MCP 服务
                          · 百炼 Skill
                          · 百炼模型上下文协议 MCP
                          · 百炼向量化模型

                          效果展示与项目链接

                          · 在线 Demo:http://150.158.126.172:8082
                          · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
                          · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
                          · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

                          ImageImageImageImageImage

                          产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

                          踩坑与解决

                          · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
                          · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
                          · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
                          · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
                          · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

                          Metadata

                          Metadata

                          Assignees

                          No one assigned

                            Labels

                            Type

                            No type

                            Projects

                            No projects

                              Milestone

                              No milestone

                              Relationships

                              None yet

                              Development

                              No branches or pull requests

                              Issue actions

                              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                              Skip to content

                              【外滩大会2026】OneTrail 一径:徒步路线规划助手 #69

                              Description

                              @eurekaneon

                              比赛提交材料

                              参赛项目名称

                              OneTrail 一径:徒步路线规划助手

                              团队 / 作者

                              成员:eurekaneon、RealTapeL

                              项目简介

                              周末临时想去徒步时,真正让人犹豫的往往不是“哪里有山”,而是几个连续的问题:这条路线会不会太累?当天会不会下雨?从我现在的位置怎么过去?要不要带登山杖?同行的人能不能走完?这些信息通常散落在地图、天气、攻略和购物 App 里,用户需要自己拼出一个决定,最后还可能因为信息过多而放弃出发。

                              OneTrail 一径就是从这个真实场景出发做的产品。它把一次徒步看成一个完整的决策过程:先理解人,再理解路线,最后把结论变成可以照着执行的行程。用户填写日期、目的地、人数、预算、体能、兴趣和已有装备后,不是得到一堆搜索结果,而是得到“为什么推荐这条路、有什么风险、怎么到、需要带什么”的完整答案。

                              产品体验上,我们没有把徒步做成冷冰冰的工具,而是用暗黑像素风构建一种带有游戏感的户外探索体验:深色底、像素化图标、荧光绿/橙色状态提示、等高线与网格纹理,结合 Stats HUD、路线等级、风险警报和任务式清单,让用户感觉自己正在解锁一张真实地图、准备一次真实冒险。规划页用明确的目标卡和少量关键输入降低开始门槛;推荐页用 Top 卡片、路线评分和“适合你的理由”制造探索动力;路线详情用海拔、距离、难度和安全标签呈现户外硬核数据;执行页用时间线、补给点和装备清单把计划变成行动;移动端则用底部 Tab 让用户在规划、路线库、行程和装备之间快速切换。整体风格追求“游戏化但不幼稚、科技感但不疏离”,让用户愿意迈出第一步,并在一次次完成路线后爱上徒步。

                              我做了什么

                              我使用百炼 AI 编程能力完成了 OneTrail 从产品原型、前后端开发、智能决策逻辑、数据接入到部署打包的完整工程落地,并与队友通过 Git 分支协作完成合并、联调和验证。整个过程不是先做一个“看起来像 App”的页面,而是围绕用户从产生想法到真正出发的路径,逐步解决每一个体验断点。

                              1. 从“我想去走走”到“我知道今天怎么走”

                              • 设计并实现“开始规划”入口:收集日期、目的地/当前位置、同行人数、预算、体能、兴趣标签和已有装备。
                              • 实现智能路线规划:先根据距离、爬升、预计耗时和难度进行硬筛选,再结合用户偏好、历史能力、兴趣、天气、位置距离等因素进行多维度评分,输出 Top 3/Top 5 推荐和备选路线。
                              • 为每条推荐生成可解释的决策依据,说明路线为什么适合用户,并给出天气影响、泥泞风险、体能匹配度和安全注意事项。
                              • 将路线推荐结果继续串联到路线详情、加入计划和执行助手,形成从“想去”到“出发”的完整旅程。

                              我们把一次使用拆成了一个很具体的故事:周五晚上,用户打开 OneTrail,输入“周六、杭州、半天、预算有限、体能一般、想看溪流、已有背包”。系统先确认用户真正关心的不是路线数量,而是强度、时间和景观是否匹配;随后给出几条可比较的路线。用户点开其中一条,可以看到适合自己的原因、天气影响、交通方式和风险提示;点击“加入计划”后,推荐结果不再停留在卡片里,而是进入执行页,变成出发时间、交通、补给和装备清单。

                              这个闭环解决的是“信息找到了,但仍然不敢出发”的问题:每个结论都尽量回答一个实际疑问,每一步都能回到下一步行动。

                              2. 让阿里云百炼 Agent 自主完成路线规划协同

                              • 在阿里云百炼中采用 Agent 应用承载自主路线规划:Agent 负责理解“我想在周六去杭州、半天、体能一般、想看溪流”等自然语言需求,自主判断需要查询哪些数据并组织回答。百炼官方将旅行规划列为 Agent 适用场景,Agent 可以调用知识库和 MCP 服务完成任务。
                              • 通过百炼 MCP 接入地图与实时地理信息工具,优先使用官方 Amap Maps MCP 查询天气、地理位置和交通等信息;路线库、用户偏好、历史徒步、补给点和装备目录等项目数据,则通过自定义 MCP 服务或高代码应用中的工具接入百炼 Agent。
                              • 使用百炼知识库承载路线说明、地形标签、安全须知和装备知识;明确选用 text-embedding-v4 作为路线语义向量模型,将路线描述与用户需求向量化,用于语义召回,再结合距离、爬升、耗时、难度等结构化字段过滤。知识库需要更高精度时,可叠加 qwen3-rerank 对召回结果二次排序。
                              • 使用百炼平台的自定义 Skill 能力挂载徒步领域能力,具体配置为:onetrail-route-retrieval(路线语义检索)、onetrail-route-decision(体能/时间/兴趣/预算综合决策)、onetrail-weather-risk(天气与泥泞风险评估)、onetrail-trip-builder(交通、时间线、补给点编排)、onetrail-gear-check(已有装备与装备缺口分析)和 onetrail-recommendation-explainer(生成可解释推荐理由)。这些是 OneTrail 自定义 Skill,不冒充百炼官方预置 Skill;每个 Skill 的 ZIP 根目录包含 SKILL.md,定义名称、描述、触发条件、输入字段和结构化输出。
                              • Agent 先把自然语言需求整理成结构化约束,再按需调用 MCP、知识库和向量检索:当前位置不明确时先做定位/逆地理编码,天气影响较大时优先检查预报和泥泞风险,路线确定后再查询交通、补给点和装备缺口。
                              • 百炼 Agent 的主模型明确选用 qwen3.7-plus:负责需求理解、工具选择、候选路线分析、风险摘要和推荐理由生成;路线知识检索使用 text-embedding-v4,知识库检索需要二次排序时使用 qwen3-rerank。最终推荐仍受到后端距离、爬升、耗时、难度和天气等硬约束校验,避免只凭自然语言做不安全的路线决定。
                              • 让模型输出结构化的路线分析结果,包括候选排序、匹配原因、风险提示、行程建议和装备建议,前端以卡片、时间线和清单形式展示。
                              • 对天气、路线、装备和历史记录进行统计分析,形成用户能力画像、偏好画像和路线适配度,为后续推荐提供数据基础。

                              注:百炼 API/MCP 负责智能分析、上下文编排和解释生成;高德 Web Service API 负责真实的地图、天气、逆地理编码、交通和周边地点数据;业务规则负责硬筛选和安全兜底。

                              这套设计的重点是“自主,但不失控”:百炼 Agent 负责理解需求、选择工具、组织分析和解释结果,后端业务规则负责安全边界;如果外部数据没有配置或调用失败,系统明确提示依赖不可用,不用虚构天气、路线或装备信息。模型输出采用结构化字段,前端只展示经过校验的路线、风险和建议,用户可以看懂,也可以自行判断。对于固定的筛选和输出链路,也可以使用百炼 Workflow 固化为可重复执行的流程。

                              3. 用暗黑像素风把徒步做成一次可玩的探索

                              我参与了前端信息架构、视觉语言和交互取舍,把功能收束为四个清晰入口:开始规划、路线库、我的行程、装备。桌面端使用顶部导航,移动端使用底部 Tab,保持同一套用户心智模型。视觉上以暗黑像素风为主线,将徒步路线、海拔、天气和装备数据设计成类似游戏 HUD 的信息模块;用户不是在填写复杂表格,而是在领取一次探索任务、查看路线属性、补齐装备并完成挑战。页面之间通过按钮串联,而不是让用户反复回到首页:需求输入 → 推荐结果 → 路线详情 → 执行助手,装备缺口再自然进入装备比选。

                              • 规划页:用暗色背景、像素化控件和清晰的任务目标,让用户像接受一次探索任务一样开始规划。
                              • 推荐页:用 Top 3 卡片、路线等级、匹配理由和荧光状态色承载决策,让用户产生“想解锁这条路线”的动力。
                              • 路线详情:用数据 HUD、等高线/网格视觉、地形与安全标签呈现硬核户外信息,同时保留评价和“值得去”判断建立信任。
                              • 执行助手:用时间线、交通、补给和装备清单模拟任务面板,降低临出发前的记忆负担。
                              • 装备页:用品类 Tab、对比卡和 GAP PICKS,让“缺什么”比“买什么”更明确,像完成出发前的装备检查。
                              • 移动端:针对拇指操作、状态栏遮挡、WebView 回弹和底部导航重新适配,让户外场景下的单手操作更直接,而不是简单缩小桌面页面。

                              4. 完成路线库与路线可信档案

                              • 实现路线搜索、标题/描述/区域关键词检索和景观标签筛选。
                              • 实现路线列表、路线详情、距离/爬升/耗时/难度等数据展示。
                              • 增加地形、安全信息、适合人群、路线标签和路线气质印象。
                              • 实现路线评价、评分聚合、印象投票、“值得去”判断和“想去/去过”收藏。
                              • 支持登录用户继续录入真实路线,路线库可持续扩充。

                              5. 完成出行执行助手

                              • 将选中的路线转化为可执行行程。
                              • 展示驾车、公交/地铁等交通方案和到达信息。
                              • 展示出发时间、徒步时间、关键节点等行程时间线。
                              • 查询路线起点附近的补给点。
                              • 提供装备清单、装备缺口提示、海拔/路线信息和出发前操作提醒,帮助用户从规划切换到实际执行。

                              6. 完成装备推荐与比选

                              • 建立真实装备目录,按品类浏览和筛选。
                              • 根据路线特点、天气、预算和用户已有装备生成装备参考。
                              • 过滤用户已经拥有的装备,识别需要补齐的 GAP PICKS。
                              • 实现装备评分、真实评价、评价聚合和装备对比卡片。
                              • 将装备建议与路线规划结果联动,避免泛化地推荐无关装备。

                              7. 完成账号、用户画像与徒步成长数据

                              • 实现邮箱密码注册、登录、JWT 鉴权和个人信息读取。
                              • 保存用户的距离、爬升、耗时、难度和兴趣偏好。
                              • 支持记录历史徒步活动,并据此计算能力画像;没有历史样本时明确提示使用静态偏好。
                              • 实现徒步打卡和感受记录,让用户可以沉淀自己的徒步数据。
                              • 完成 TBTI 徒步人格测试:参考 MBTI 的 16 型结构设计徒步者人格测评,将测试结果绑定账号,并参与路线推荐和个性化文案展示。

                              8. 完成双端产品与工程交付

                              • 使用 Vue 3 + Vite 完成 Web 单页应用,并接通 FastAPI 后端真实接口。
                              • 使用 FastAPI、SQLAlchemy、PostgreSQL 完成身份、路线、推荐、历史、评价、收藏、装备和平台服务等后端模块。
                              • 使用高德 Web Service API 接入逆地理编码、天气预报、驾车/公交路线规划和周边徒步地查询。
                              • 通过 Capacitor 打包安卓 APK,并完成移动端底部 Tab、状态栏安全区、WebView 滚动行为和响应式布局适配。
                              • 增加健康检查、集成状态、前端错误上报和自动化测试,确保外部服务未配置时明确返回依赖错误或空结果,不伪造天气、路线、装备和评价数据。

                              技术亮点

                              OneTrail 的核心不是简单地“搜索一条路线”,而是把多源数据转化为可执行决策:

                              用户需求与画像
                              ↓
                              百炼 Agent + Qwen + MCP + Skill:自主规划、工具调用、数据分析、推荐解释
                              ↓
                              百炼知识库 + text-embedding-v4/v3:路线语义召回与相关性匹配
                              ↓
                              路线/天气/交通/补给/装备数据汇总
                              ↓
                              硬约束筛选:距离、爬升、耗时、难度、安全
                              ↓
                              可解释评分与排序
                              ↓
                              Top 推荐 + 备选路线 + 风险提示 + 行程时间线 + 装备清单
                              

                              系统在真实数据不可用时不会编造外部结果;模型生成内容也必须基于已获取的结构化数据,并经过业务规则校验。

                              使用的工具与技术

                              · 百炼 CLI / 百炼 AI 编程能力:代码生成、代码审查、报错诊断、文档理解、调试、部署和打包。
                              · 阿里云百炼 Agent 主模型:qwen3.7-plus,负责自主规划、Function Calling/MCP 工具选择、路线分析和解释生成。
                              · 阿里云百炼官方 MCP:Amap Maps MCP,用于地理编码、天气、地点搜索和交通路线等实时地理信息。
                              · OneTrail 自定义 MCP:onetrail-route-data-mcp,暴露 search_routes、get_route_detail、get_user_profile、get_hiking_history、get_supply_points、list_equipment 等工具;通过百炼 MCP 管理部署并挂载到 Agent。
                              · 百炼向量模型:text-embedding-v4,用于路线描述、标签、用户需求的语义向量化;可选 qwen3-rerank 对召回路线进行精排。
                              · OneTrail 自定义 Skills:onetrail-route-retrieval、onetrail-route-decision、onetrail-weather-risk、onetrail-trip-builder、onetrail-gear-check、onetrail-recommendation-explainer,均以带 SKILL.md 的 Skill ZIP 包上传到百炼 Skill 管理并添加到 Agent。
                              · 前端:Vue 3、Vite、Vue Router、Capacitor。
                              · 后端:Python 3.11、FastAPI、Pydantic、SQLAlchemy 2.0、PostgreSQL、JWT、Argon2。
                              · 外部数据:高德 Web Service API。
                              · 工程协作:Git、GitHub、GitHub Release、Docker Compose、pytest、frp 内网穿透。

                              百炼官方技术参考:

                              · 百炼应用类型:Agent、Workflow 与高代码应用
                              · 百炼官方 MCP 服务
                              · 百炼 Skill
                              · 百炼模型上下文协议 MCP
                              · 百炼向量化模型

                              效果展示与项目链接

                              · 在线 Demo:http://150.158.126.172:8082
                              · 演示账号:admin@onetrail.dev / admin123456(登录页也提供一键进入)
                              · 安卓 APK:https://github.com/RealTapeL/Onetrail/releases/tag/v0.3.0
                              · GitHub 仓库:https://github.com/RealTapeL/Onetrail(develop 分支)

                              ImageImageImageImageImage

                              产出为一个可注册登录、可定位、可生成个性化路线推荐、可查看天气与交通、可执行行程、可查询补给点、可比选装备、可评价收藏路线、可记录徒步、可完成 TBTI 测评的完整双端应用。

                              踩坑与解决

                              · Git 本地对象损坏:排查损坏 commit 对象后清理对应对象并重新拉取。
                              · 域名备案拦截:改用公网 IP + 端口 + frp 内网穿透保证服务访问。
                              · Failed to fetch:逐层排查 CORS、安全组端口和 frp 代理链路。
                              · 安卓 WebView 整页拖动:通过 fixed 布局和 overscroll-behavior: none 修复。
                              · 安卓状态栏遮挡:引入 safe-area 适配并调整移动端头部布局。

                              Metadata

                              Metadata

                              Assignees

                              No one assigned

                                Labels

                                Type

                                No type

                                Projects

                                No projects

                                  Milestone

                                  No milestone

                                  Relationships

                                  None yet

                                  Development

                                  No branches or pull requests

                                  Issue actions