[{"data":1,"prerenderedAt":2919},["ShallowReactive",2],{"projects-all":3},[4,613,1246,1894,2554],{"id":5,"title":6,"body":7,"date":602,"description":603,"extension":604,"meta":605,"navigation":606,"path":607,"seo":608,"stem":609,"summary":610,"tech_stack":611,"__hash__":612},"projects\u002Fprojects\u002Ftokenwise-ai-token-monitor.md","TokenWise - AI编码助手Token监控",{"type":8,"value":9,"toc":579},"minimark",[10,15,20,33,51,73,76,80,84,98,101,139,141,145,148,292,295,355,358,368,370,374,378,417,421,447,451,470,474,491,495,513,515,519,533,535,539,577],[11,12,14],"h1",{"id":13},"tokenwise-ai-编码助手-token-使用监控桌面应用","TokenWise — AI 编码助手 Token 使用监控桌面应用",[16,17,19],"h2",{"id":18},"一项目概述","一、项目概述",[21,22,23,24,28,29,32],"p",{},"随着 AI 编码助手（Claude Code、OpenCode 等）在日常开发中的深度使用，Token 消耗与 API 余额逐渐成为开发者关注的核心成本指标。然而，目前缺乏一款轻量、隐私友好的桌面工具，能帮助开发者",[25,26,27],"strong",{},"实时掌握 Token 用量","并",[25,30,31],{},"按模型\u002F来源精细分析","。",[21,34,35,38,39,42,43,46,47,50],{},[25,36,37],{},"TokenWise"," 是一款基于 ",[25,40,41],{},"Tauri 2 + Vue 3 + Rust"," 构建的桌面应用，通过",[25,44,45],{},"离线日志文件解析","与",[25,48,49],{},"实时 HTTP 代理拦截","两种方式采集数据，配合 Chart.js 可视化仪表盘与系统托盘集成，让开发者在编码过程中对 Token 消耗\"一目了然\"。",[52,53,54,61,67],"ul",{},[55,56,57,60],"li",{},[25,58,59],{},"项目形态","：macOS 桌面应用（Tauri 2 原生窗口）",[55,62,63,66],{},[25,64,65],{},"核心能力","：双源数据采集、按模型分布可视化、API 余额查询、系统托盘实时显示、HTTP 代理实时监控",[55,68,69,72],{},[25,70,71],{},"适用场景","：重度使用 Claude Code \u002F OpenCode 的开发者，需要追踪每日 Token 消耗与成本",[74,75],"hr",{},[16,77,79],{"id":78},"二业务痛点与目标","二、业务痛点与目标",[81,82,83],"h3",{"id":83},"痛点",[52,85,86,89,92,95],{},[55,87,88],{},"AI 编码助手的 Token 消耗分散在不同平台和日志中，难以汇总统计",[55,90,91],{},"多个模型（DeepSeek、Kimi、Claude、Qwen 等）同时使用时，无法按模型维度分析用量",[55,93,94],{},"API 账户余额查询需手动登录各平台，操作繁琐",[55,96,97],{},"缺乏实时监控手段，只能事后查看消耗",[81,99,100],{"id":100},"目标",[52,102,103,112,119,126,133],{},[55,104,105,106,28,109],{},"将 Claude Code \u002F OpenCode 的 Token 数据",[25,107,108],{},"自动采集",[25,110,111],{},"统一展示",[55,113,114,115,118],{},"按",[25,116,117],{},"模型维度","展示 Token 分布，帮助优化模型选择策略",[55,120,121,122,125],{},"支持",[25,123,124],{},"API 余额一键查询","（DeepSeek、Kimi）",[55,127,128,129,132],{},"提供",[25,130,131],{},"系统托盘常驻","，无需打开窗口即可查看今日用量",[55,134,121,135,138],{},[25,136,137],{},"实时代理监控","，在 API 调用时即捕获 Token 数据",[74,140],{},[16,142,144],{"id":143},"三技术方案与架构","三、技术方案与架构",[81,146,147],{"id":147},"技术栈",[149,150,151,167],"table",{},[152,153,154],"thead",{},[155,156,157,161,164],"tr",{},[158,159,160],"th",{},"层级",[158,162,163],{},"技术",[158,165,166],{},"说明",[168,169,170,184,201,214,227,240,253,266,279],"tbody",{},[155,171,172,178,181],{},[173,174,175],"td",{},[25,176,177],{},"桌面框架",[173,179,180],{},"Tauri 2",[173,182,183],{},"Rust 后端 + WebView 前端，轻量原生",[155,185,186,191,194],{},[173,187,188],{},[25,189,190],{},"前端框架",[173,192,193],{},"Vue 3（Composition API）",[173,195,196,200],{},[197,198,199],"code",{},"\u003Cscript setup>"," + TypeScript strict",[155,202,203,208,211],{},[173,204,205],{},[25,206,207],{},"样式方案",[173,209,210],{},"TailwindCSS 4.x",[173,212,213],{},"PostCSS 插件集成，支持明暗主题",[155,215,216,221,224],{},[173,217,218],{},[25,219,220],{},"图表库",[173,222,223],{},"Chart.js 4.x",[173,225,226],{},"环形图 + 折线图，自定义 HTML tooltip",[155,228,229,234,237],{},[173,230,231],{},[25,232,233],{},"后端语言",[173,235,236],{},"Rust（edition 2021）",[173,238,239],{},"高性能数据处理与系统交互",[155,241,242,247,250],{},[173,243,244],{},[25,245,246],{},"HTTP 代理",[173,248,249],{},"hyper 1.0",[173,251,252],{},"内置代理服务器，SSE 流解析",[155,254,255,260,263],{},[173,256,257],{},[25,258,259],{},"本地数据库",[173,261,262],{},"rusqlite（bundled SQLite）",[173,264,265],{},"代理监控数据持久化",[155,267,268,273,276],{},[173,269,270],{},[25,271,272],{},"异步运行时",[173,274,275],{},"tokio 1（多线程）",[173,277,278],{},"Rust 异步任务调度",[155,280,281,286,289],{},[173,282,283],{},[25,284,285],{},"本地存储",[173,287,288],{},"tauri-plugin-store 2",[173,290,291],{},"API Key 等配置安全存储",[81,293,294],{"id":294},"双源数据采集架构",[52,296,297,321],{},[55,298,299,302],{},[25,300,301],{},"来源 1 — 离线日志解析（被动）",[52,303,304,311,318],{},[55,305,306,307,310],{},"OpenCode：直接查询本地 SQLite 数据库（",[197,308,309],{},"~\u002F.local\u002Fshare\u002Fopencode\u002Fopencode.db","），SQL 聚合统计",[55,312,313,314,317],{},"Claude Code：遍历 ",[197,315,316],{},"~\u002F.claude\u002Fprojects\u002F*\u002Fconversations\u002F*.jsonl"," 日志文件，JSONL 逐行解析、去重统计",[55,319,320],{},"自动推断 API 提供商（阿里云百炼、火山引擎、Anthropic、DeepSeek、Kimi 等）",[55,322,323,326],{},[25,324,325],{},"来源 2 — HTTP 代理监控（主动\u002F实时）",[52,327,328,335,338,341,352],{},[55,329,330,331,334],{},"在 ",[197,332,333],{},"127.0.0.1:7890"," 启动内置 hyper HTTP 代理",[55,336,337],{},"自动修改 Claude 配置文件将 API 请求路由至代理",[55,339,340],{},"识别 Claude CLI\u002FCode 请求（User-Agent 过滤），仅拦截相关流量",[55,342,343,344,347,348,351],{},"解析 SSE 响应流，从 ",[197,345,346],{},"message_start"," \u002F ",[197,349,350],{},"message_delta"," 事件中提取 usage 数据",[55,353,354],{},"代理停止时自动恢复原始配置，不破坏用户设置",[81,356,357],{"id":357},"项目组织",[359,360,365],"pre",{"className":361,"code":363,"language":364},[362],"language-text","tauri2-jiankong\u002Fmac\u002F\n├── src\u002F                          # Vue 3 前端\n│   ├── App.vue                   # 根组件（数据加载、页面路由）\n│   ├── components\u002F\n│   │   ├── UsageCard.vue         # Token 使用卡片（环形图 + 指标）\n│   │   ├── BalanceCard.vue       # API 余额卡片\n│   │   ├── DonutChart.vue        # Chart.js 环形图\n│   │   ├── LineChart.vue         # Chart.js 折线图\n│   │   ├── DetailPage.vue        # 详情页（表格 + 趋势）\n│   │   └── Settings.vue          # 设置页（API Key + 代理开关）\n│   └── types\u002F                    # TypeScript 类型定义\n├── src-tauri\u002F                    # Rust 后端\n│   └── src\u002F\n│       ├── lib.rs                # Tauri 命令注册、托盘、插件\n│       ├── claude_query_token.rs # Claude JSONL 日志解析\n│       ├── opencode_query_token.rs # OpenCode SQLite 查询\n│       ├── proxy\u002F                # HTTP 代理模块\n│       │   ├── server.rs         # Hyper 代理服务器\n│       │   ├── handler.rs        # SSE 流解析与 Token 提取\n│       │   ├── config.rs         # Claude 配置备份\u002F修改\u002F恢复\n│       │   └── state.rs          # 代理运行状态\n│       └── storage\u002F              # SQLite 持久化\n│           └── token_db.rs       # 数据库操作（建表、插入、查询）\n","text",[197,366,363],{"__ignoreMap":367},"",[74,369],{},[16,371,373],{"id":372},"四核心功能实现","四、核心功能实现",[81,375,377],{"id":376},"_1双源-token-数据采集","1）双源 Token 数据采集",[52,379,380,386,408],{},[55,381,382,385],{},[25,383,384],{},"OpenCode 数据源","：通过 rusqlite 直接查询本地 SQLite 数据库，SQL 聚合统计今日 input_tokens、output_tokens、cache_creation、cache_read 等指标",[55,387,388,391,392,395,396,399,400,403,404,407],{},[25,389,390],{},"Claude Code 数据源","：使用 walkdir 遍历 JSONL 日志文件，逐行解析后按 ",[197,393,394],{},"message_id"," 去重，",[197,397,398],{},"stop_reason"," 过滤（仅统计 ",[197,401,402],{},"end_turn"," 和 ",[197,405,406],{},"tool_use","），UTC 时间戳自动转换为本地时间",[55,409,410,413,414,416],{},[25,411,412],{},"HTTP 代理源","：基于 hyper 1.0 构建正向代理，对 SSE 响应流进行实时解析，从 ",[197,415,350],{}," 事件提取 usage 写入 SQLite",[81,418,420],{"id":419},"_2可视化仪表盘","2）可视化仪表盘",[52,422,423,429,435,441],{},[55,424,425,428],{},[25,426,427],{},"使用卡片（UsageCard）","：Chart.js 环形图按模型分布展示 Token 消耗，指标行展示输入\u002F输出\u002F缓存写入\u002F缓存读取\u002F调用次数",[55,430,431,434],{},[25,432,433],{},"余额卡片（BalanceCard）","：DeepSeek 和 Kimi 账户余额实时展示，含自定义渐变配色",[55,436,437,440],{},[25,438,439],{},"详情页（DetailPage）","：折线趋势图 + 数据表格，按模型分类的数据集，自定义 HTML tooltip 展示完整指标",[55,442,443,446],{},[25,444,445],{},"模型配色方案","：DeepSeek V4 Flash（天蓝）、DeepSeek V4 Pro（蓝色）、Kimi（紫色）、GLM（绿色）、Claude（橙色）、Qwen（靛蓝）",[81,448,450],{"id":449},"_3api-余额查询","3）API 余额查询",[52,452,453,460,467],{},[55,454,455,456,459],{},"调用 DeepSeek 余额 API（",[197,457,458],{},"\u002Fuser\u002Fbalance","）提取 CNY 余额",[55,461,462,463,466],{},"调用 Kimi 余额 API（",[197,464,465],{},"\u002Fv1\u002Fusers\u002Fme\u002Fbalance","）提取可用余额",[55,468,469],{},"API Key 通过 tauri-plugin-store 安全存储在本地配置文件中",[81,471,473],{"id":472},"_4系统托盘集成","4）系统托盘集成",[52,475,476,482,485,488],{},[55,477,478,479],{},"菜单栏托盘图标实时显示今日 Token 总数：",[197,480,481],{},"{Claude total} | {OpenCode total}",[55,483,484],{},"数字自动格式化（≥1M 显示 \"X.XXM\"，≥1K 显示 \"X.XK\"）",[55,486,487],{},"窗口关闭时隐藏到托盘而非退出，保持统计持续运行",[55,489,490],{},"点击托盘图标显示\u002F聚焦应用窗口",[81,492,494],{"id":493},"_5http-代理实时监控","5）HTTP 代理实时监控",[52,496,497,500,507,510],{},[55,498,499],{},"一键启动\u002F停止代理，实时状态指示（绿色\u002F灰色圆点）",[55,501,502,503,506],{},"代理自动修改 ",[197,504,505],{},"~\u002F.claude\u002Fsettings.json"," 将 API 请求路由至本地代理",[55,508,509],{},"代理停止时自动恢复原始配置，确保用户设置不被破坏",[55,511,512],{},"支持 Android 12+ 精确闹钟权限检查",[74,514],{},[16,516,518],{"id":517},"五项目效果","五、项目效果",[52,520,521,524,527,530],{},[55,522,523],{},"将\"登录各平台后台查余额\"的流程改为\"桌面一键查看\"，大幅提升查询效率",[55,525,526],{},"通过双源数据采集，实现从历史统计到实时监控的全链路覆盖",[55,528,529],{},"按模型维度的可视化分析帮助开发者优化模型选择、降低成本",[55,531,532],{},"系统托盘常驻显示，编码过程中随时掌握消耗动态",[74,534],{},[16,536,538],{"id":537},"六可扩展与复盘","六、可扩展与复盘",[52,540,541,547,553,559,565,571],{},[55,542,543,546],{},[25,544,545],{},"更多 AI 工具支持","：扩展至 Cursor、Windsurf 等 AI 编码助手的日志解析",[55,548,549,552],{},[25,550,551],{},"成本估算","：根据各模型单价自动计算每日\u002F每月 API 花费",[55,554,555,558],{},[25,556,557],{},"历史趋势","：增加周\u002F月维度的时间趋势分析",[55,560,561,564],{},[25,562,563],{},"告警机制","：Token 日消耗或 API 余额低于阈值时推送系统通知",[55,566,567,570],{},[25,568,569],{},"多代理协同","：支持同时监控多个代理端口，适配不同工具的并发使用",[55,572,573,576],{},[25,574,575],{},"Windows\u002FLinux 支持","：当前仅 macOS，可基于 Tauri 2 跨平台能力扩展",[74,578],{},{"title":367,"searchDepth":580,"depth":580,"links":581},3,[582,584,588,593,600,601],{"id":18,"depth":583,"text":19},2,{"id":78,"depth":583,"text":79,"children":585},[586,587],{"id":83,"depth":580,"text":83},{"id":100,"depth":580,"text":100},{"id":143,"depth":583,"text":144,"children":589},[590,591,592],{"id":147,"depth":580,"text":147},{"id":294,"depth":580,"text":294},{"id":357,"depth":580,"text":357},{"id":372,"depth":583,"text":373,"children":594},[595,596,597,598,599],{"id":376,"depth":580,"text":377},{"id":419,"depth":580,"text":420},{"id":449,"depth":580,"text":450},{"id":472,"depth":580,"text":473},{"id":493,"depth":580,"text":494},{"id":517,"depth":583,"text":518},{"id":537,"depth":583,"text":538},"2025-06","基于 Tauri 2 的桌面端 AI 编码助手 Token 使用监控工具","md",{},true,"\u002Fprojects\u002Ftokenwise-ai-token-monitor",{"title":6,"description":603},"projects\u002Ftokenwise-ai-token-monitor","针对 AI 编码助手（Claude Code \u002F OpenCode）Token 消耗难以追踪的痛点，构建基于 Tauri 2 的桌面监控应用。支持离线日志解析与实时 HTTP 代理双重数据采集，提供可视化仪表盘、API 余额查询与系统托盘集成。","Tauri 2, Vue 3, TypeScript, Rust, Chart.js, TailwindCSS","Ojb-cMqCIz-Ipfbbm34g6R-RnQzCW8TPhhu2zG9nqJY",{"id":614,"title":615,"body":616,"date":1237,"description":1238,"extension":604,"meta":1239,"navigation":606,"path":1240,"seo":1241,"stem":1242,"summary":1243,"tech_stack":1244,"__hash__":1245},"projects\u002Fprojects\u002Ffootball-ai-worldcup-prediction.md","预见足球AI - 世界杯AI智能预测",{"type":8,"value":617,"toc":1210},[618,622,624,635,644,661,663,665,667,681,683,709,711,713,715,832,835,841,843,849,851,853,857,892,896,927,931,1002,1006,1032,1036,1057,1061,1075,1077,1079,1103,1105,1109,1112,1132,1136,1153,1156,1164,1166,1170,1208],[11,619,621],{"id":620},"预见足球-ai-世界杯赛事-ai-智能预测小程序","预见足球 AI — 世界杯赛事 AI 智能预测小程序",[16,623,19],{"id":18},[21,625,626,627,630,631,634],{},"2026 年 FIFA 世界杯即将来临，球迷和竞猜爱好者需要一款能",[25,628,629],{},"整合赛事数据、AI 预测与赔率信息","的一站式工具。然而现有应用要么仅有赛程展示，要么预测维度单一，缺少将 AI 预测、市场预期、博彩赔率进行",[25,632,633],{},"多维度对比","的综合平台。",[21,636,637,38,640,643],{},[25,638,639],{},"预见足球 AI",[25,641,642],{},"uni-app + Vue 3"," 构建的微信小程序，接入 BSD Sports Data API 获取赛事与预测数据，为用户提供 48 支参赛球队的赛程浏览、积分榜排名、AI 智能预测推荐、Polymarket 市场预期与多公司赔率对比，帮助用户从多个角度评估比赛走向。",[52,645,646,651,656],{},[55,647,648,650],{},[25,649,59],{},"：微信小程序（主力）+ 多端适配",[55,652,653,655],{},[25,654,65],{},"：赛事数据展示、AI 预测推荐、赔率对比、市场预期、积分榜计算、微信一键登录",[55,657,658,660],{},[25,659,71],{},"：世界杯赛事追踪、AI 预测参考、竞猜策略辅助",[74,662],{},[16,664,79],{"id":78},[81,666,83],{"id":83},[52,668,669,672,675,678],{},[55,670,671],{},"赛事信息分散在官网、体育 App、社交媒体，缺乏聚合展示",[55,673,674],{},"AI 预测、市场预期、博彩赔率三个维度各自独立，无法同屏对比",[55,676,677],{},"积分榜数据需手动计算，小组出线形势判断困难",[55,679,680],{},"48 支参赛队伍，赛程密集，用户难以快速找到关注球队的比赛",[81,682,100],{"id":100},[52,684,685,691,696,703],{},[55,686,687,688],{},"将赛事赛程、AI 预测、市场预期、赔率信息",[25,689,690],{},"整合在同一应用",[55,692,128,693,695],{},[25,694,633],{},"：AI 推荐概率 vs 市场预期概率 vs 博彩赔率，辅助决策",[55,697,698,699,702],{},"自动计算",[25,700,701],{},"积分榜","，支持按球队筛选查看所有比赛",[55,704,128,705,708],{},[25,706,707],{},"48 队全量中文名映射","与队徽加载，降低认知门槛",[74,710],{},[16,712,144],{"id":143},[81,714,147],{"id":147},[149,716,717,727],{},[152,718,719],{},[155,720,721,723,725],{},[158,722,160],{},[158,724,163],{},[158,726,166],{},[168,728,729,742,755,767,780,793,806,819],{},[155,730,731,736,739],{},[173,732,733],{},[25,734,735],{},"跨平台框架",[173,737,738],{},"uni-app (DCloud)",[173,740,741],{},"微信小程序为主力平台",[155,743,744,748,750],{},[173,745,746],{},[25,747,190],{},[173,749,193],{},[173,751,752,754],{},[197,753,199],{}," 模式",[155,756,757,761,764],{},[173,758,759],{},[25,760,207],{},[173,762,763],{},"SCSS + rpx 响应式",[173,765,766],{},"uni.scss 全局变量",[155,768,769,774,777],{},[173,770,771],{},[25,772,773],{},"云服务",[173,775,776],{},"uniCloud 阿里云",[173,778,779],{},"用户认证 + 云函数 + 云数据库",[155,781,782,787,790],{},[173,783,784],{},[25,785,786],{},"数据源",[173,788,789],{},"BSD Sports Data API v2",[173,791,792],{},"赛事、预测、赔率、场馆",[155,794,795,800,803],{},[173,796,797],{},[25,798,799],{},"认证方案",[173,801,802],{},"微信一键登录（openid）",[173,804,805],{},"Token SHA-256 签发",[155,807,808,813,816],{},[173,809,810],{},[25,811,812],{},"构建工具",[173,814,815],{},"Vite + @dcloudio\u002Fvite-plugin-uni",[173,817,818],{},"HBuilderX 管理",[155,820,821,826,829],{},[173,822,823],{},[25,824,825],{},"图标方案",[173,827,828],{},"jk-icon (iconify)",[173,830,831],{},"SVG 图标自定义字体",[81,833,834],{"id":834},"数据流架构",[359,836,839],{"className":837,"code":838,"language":364},[362],"BSD Sports Data API (UTC)\n        │\n        ▼\n   API 封装层 (api\u002F)\n   ├── client.js      # uni.request + Token 注入 + 超时处理\n   ├── events.js      # 赛事列表 + 单场详情\n   ├── predictions.js # AI 预测列表 + 单场预测\n   ├── standings.js   # 积分榜计算逻辑\n   ├── team-names.js  # 48 队英→中映射 + 队徽 CDN\n   └── time.js        # UTC ↔ 北京时间转换\n        │\n        ▼\n   页面层 (pages\u002F)\n   ├── 首页        # 今日赛事 + AI 预测卡片\n   ├── 赛事页      # 积分榜 + 分类浏览 + 球队筛选\n   ├── AI 预测页   # 日期筛选 + 预测统计\n   ├── 详情页      # AI 预测 + 市场预期 + 赔率对比\n   └── 我的        # 登录\u002F注销\u002F使用说明\n        │\n        ▼\n   uniCloud 阿里云\n   ├── user 云函数  # 登录\u002F验证\u002F退出\u002F注销\n   └── users 表    # openid + Token + 注册时间\n",[197,840,838],{"__ignoreMap":367},[81,842,357],{"id":357},[359,844,847],{"className":845,"code":846,"language":364},[362],"预见足球AI\u002F\n├── api\u002F                           # API 封装层\n│   ├── config.js                  # API Token + Base URL + 世界杯联赛 ID\n│   ├── client.js                  # uni.request 封装（Token 注入、超时、错误处理）\n│   ├── events.js                  # 赛事列表 + 单场详情接口\n│   ├── predictions.js             # AI 预测列表 + 单场预测接口\n│   ├── team-names.js              # 48 队英→中映射 + 队徽 CDN URL\n│   ├── time.js                    # UTC ↔ 北京时间转换工具\n│   ├── standings.js               # 积分榜计算逻辑\n│   └── user.js                    # 用户登录\u002FToken 管理\u002F注销\n├── pages\u002F                         # 页面\n│   ├── index\u002Findex.vue            # 首页（世界杯横幅 + 今日赛事 + 数据洞察）\n│   ├── matches\u002Findex.vue          # 赛事页（积分榜 + 分类浏览 + 球队筛选）\n│   ├── ai-predict\u002Findex.vue       # AI 预测页（日期筛选 + 预测统计 + 准确率）\n│   ├── detail\u002Findex.vue           # 比赛详情页（AI 预测 + 市场预期 + 赔率对比）\n│   ├── profile\u002Findex.vue          # 我的页面（微信登录 + 使用说明 + 注销）\n│   └── login\u002Findex.vue            # 独立登录页（备用入口）\n├── components\u002F\n│   └── CustomTabBar\u002F              # 自定义胶囊样式底部导航\n├── uniCloud-aliyun\u002F               # uniCloud 云服务\n│   ├── cloudfunctions\u002Fuser\u002F       # 用户认证云函数\n│   └── database\u002Fusers.schema.json # 用户表 Schema\n└── static\u002F                        # 静态资源 + 图标字体\n",[197,848,846],{"__ignoreMap":367},[74,850],{},[16,852,373],{"id":372},[81,854,856],{"id":855},"_1首页-今日赛事与-ai-预测","1）首页 — 今日赛事与 AI 预测",[52,858,859,865,871,877,883,889],{},[55,860,861,864],{},[25,862,863],{},"世界杯横幅","：纯 CSS 绘制足球场线条（中圈、点球区、球门），深绿色背景 + \"进行中\"徽章",[55,866,867,870],{},[25,868,869],{},"今日赛事卡片","：小组\u002F轮次标签、北京时间、主客队名 + 圆形队徽、比分（完赛\u002F进行中）",[55,872,873,876],{},[25,874,875],{},"AI 预测进度条","：主胜\u002F平局\u002F客胜概率可视化 + 推荐标签（主胜\u002F平局\u002F客胜）",[55,878,879,882],{},[25,880,881],{},"预测结果缎带","：完赛后对比 AI 预测与实际结果，45° 旋转显示\"已中\"（绿色）\u002F \"未中\"（红色）",[55,884,885,888],{},[25,886,887],{},"数据洞察卡片","：今日赛事场数 + 预测准确率统计",[55,890,891],{},"支持下拉刷新和错误重试",[81,893,895],{"id":894},"_2赛事页-积分榜与分类浏览","2）赛事页 — 积分榜与分类浏览",[52,897,898,904,909,915,921],{},[55,899,900,903],{},[25,901,902],{},"两行 Tab 导航","：积分榜、全部比赛、小组赛、1\u002F16 决赛、1\u002F8 决赛、1\u002F4 决赛、半决赛、季军赛、决赛",[55,905,906,908],{},[25,907,701],{},"：按字母分组的 48 队积分表（排名、队徽、场次、胜\u002F平\u002F负、净胜球、积分），支持组别筛选",[55,910,911,914],{},[25,912,913],{},"比赛列表","：按分组头（如\"小组赛·第一轮 3 场\"）分类展示",[55,916,917,920],{},[25,918,919],{},"日期筛选","：横向滚动芯片选择器，支持\"全部\"和具体日期",[55,922,923,926],{},[25,924,925],{},"球队筛选","：点击积分榜队伍自动跳转查看该队所有比赛",[81,928,930],{"id":929},"_3ai-预测页-多维度预测分析","3）AI 预测页 — 多维度预测分析",[52,932,933,938,944,950],{},[55,934,935,937],{},[25,936,919],{},"：双日滚动（全部 + 今天 + 未来天数），切换日期自动拉取对应预测",[55,939,940,943],{},[25,941,942],{},"统计卡片","：已预测场次数 + 预测准确率",[55,945,946,949],{},[25,947,948],{},"预测卡片","：与首页一致的 AI 推荐展示 + 进度条 + 百分比",[55,951,952,955,956],{},[25,953,954],{},"预测字段","：\n",[52,957,958,971,977,984,990,996],{},[55,959,960,961,347,964,347,967,970],{},"胜平负概率（",[197,962,963],{},"prob_home",[197,965,966],{},"prob_draw",[197,968,969],{},"prob_away","）",[55,972,973,974,970],{},"预期进球（",[197,975,976],{},"expected_goals",[55,978,979,980,983],{},"大小球概率（",[197,981,982],{},"over_under","：1.5\u002F2.5\u002F3.5）",[55,985,986,987,970],{},"双方进球概率（",[197,988,989],{},"btts",[55,991,992,993,970],{},"最可能比分（",[197,994,995],{},"most_likely",[55,997,998,999,970],{},"模型置信度（",[197,1000,1001],{},"confidence",[81,1003,1005],{"id":1004},"_4比赛详情页-多维度对比","4）比赛详情页 — 多维度对比",[52,1007,1008,1014,1020,1026],{},[55,1009,1010,1013],{},[25,1011,1012],{},"沉浸式头部","：深色背景 + 自定义导航栏 + 对阵信息（队徽 + 队名 + 比分 + 半场比分）",[55,1015,1016,1019],{},[25,1017,1018],{},"AI 预测区","：主胜\u002F平局\u002F客胜三进度条 + 推荐标签 + 预期进球 + 进球概率 + 最可能比分 + 大球概率 + 置信度",[55,1021,1022,1025],{},[25,1023,1024],{},"市场预期（Polymarket）","：1x2 胜率、半场结果、大小球、让球、双方进球、精确比分 Top 10、进球球员预测",[55,1027,1028,1031],{},[25,1029,1030],{},"赔率对比","：博彩公司最佳赔率（主胜\u002F平局\u002F客胜\u002F大小球\u002F双方进球）+ 多公司赔率详细列表",[81,1033,1035],{"id":1034},"_5用户认证系统","5）用户认证系统",[52,1037,1038,1041,1044,1047,1054],{},[55,1039,1040],{},"基于 uniCloud 阿里云 + 微信 openid",[55,1042,1043],{},"云函数处理 login \u002F checkToken \u002F logout \u002F deleteAccount",[55,1045,1046],{},"Token SHA-256 生成，30 天有效期",[55,1048,1049,1050,1053],{},"App.vue 在 ",[197,1051,1052],{},"onLaunch"," 中静默验证已有 Token",[55,1055,1056],{},"已登录用户显示彩色头像（基于 openid hash 计算颜色）+ ID + 注册时间",[81,1058,1060],{"id":1059},"_6自定义胶囊-tabbar","6）自定义胶囊 TabBar",[52,1062,1063,1066,1069,1072],{},[55,1064,1065],{},"禁用原生 TabBar，使用 CustomTabBar 组件实现圆角胶囊样式",[55,1067,1068],{},"四个 Tab：首页（足球图标）、赛事（奖杯）、AI 预测（机器人）、我的（用户）",[55,1070,1071],{},"选中项绿色填充 + 白色图标，未选中灰色",[55,1073,1074],{},"支持安全区适配",[74,1076],{},[16,1078,518],{"id":517},[52,1080,1081,1088,1094,1100],{},[55,1082,1083,1084,1087],{},"将赛事信息、AI 预测、市场预期、博彩赔率",[25,1085,1086],{},"整合在同一界面","，免去多平台切换",[55,1089,1090,1091],{},"通过 AI 预测概率进度条和推荐标签，用户可",[25,1092,1093],{},"快速获取预测结论",[55,1095,1096,1097],{},"积分榜自动计算 + 球队筛选，帮助用户",[25,1098,1099],{},"快速定位关注球队的比赛",[55,1101,1102],{},"预测结果缎带直观展示 AI 预测准确率，建立用户信任",[74,1104],{},[16,1106,1108],{"id":1107},"六技术亮点","六、技术亮点",[81,1110,1111],{"id":1111},"时区处理",[52,1113,1114,1117,1123],{},[55,1115,1116],{},"API 全部使用 UTC 时间，前端展示使用北京时间（UTC+8）",[55,1118,1119,1122],{},[197,1120,1121],{},"utcWindowForBeijing()"," 生成精确 UTC 窗口，避免跨日边界问题",[55,1124,1125,347,1128,1131],{},[197,1126,1127],{},"toBeijingTime()",[197,1129,1130],{},"toBeijingLabel()"," 统一转换展示格式",[81,1133,1135],{"id":1134},"_48-队全量映射","48 队全量映射",[52,1137,1138,1144,1150],{},[55,1139,1140,1143],{},[197,1141,1142],{},"api\u002Fteam-names.js"," 包含全部 48 支世界杯参赛队英文到中文映射",[55,1145,1146,1147,970],{},"队徽通过 CDN 加载（",[197,1148,1149],{},"https:\u002F\u002Fsports.bzzoiro.com\u002Fimg\u002Fteam\u002F{team_id}\u002F",[55,1151,1152],{},"图片加载失败时显示中文队名首字兜底（如\"中\"代表\"中国\"）",[81,1154,1155],{"id":1155},"空值兜底",[52,1157,1158,1161],{},[55,1159,1160],{},"预测数据在比赛临近时才生成，代码已做\"暂无预测\"空值处理",[55,1162,1163],{},"API 请求封装统一超时和错误处理，网络异常时展示重试按钮",[74,1165],{},[16,1167,1169],{"id":1168},"七可扩展与复盘","七、可扩展与复盘",[52,1171,1172,1178,1184,1190,1196,1202],{},[55,1173,1174,1177],{},[25,1175,1176],{},"实时比分推送","：接入 WebSocket 实现实时比分更新",[55,1179,1180,1183],{},[25,1181,1182],{},"用户预测竞猜","：支持用户提交自己的预测，与 AI 对比排名",[55,1185,1186,1189],{},[25,1187,1188],{},"历史赛事分析","：积累完赛数据后提供球队\u002F联赛维度的历史统计",[55,1191,1192,1195],{},[25,1193,1194],{},"社交分享","：分享预测结果到微信好友\u002F朋友圈",[55,1197,1198,1201],{},[25,1199,1200],{},"多语言支持","：扩展英文、日文等国际化版本",[55,1203,1204,1207],{},[25,1205,1206],{},"多联赛覆盖","：除世界杯外支持欧洲杯、英超、西甲等主流联赛",[74,1209],{},{"title":367,"searchDepth":580,"depth":580,"links":1211},[1212,1213,1217,1222,1230,1231,1236],{"id":18,"depth":583,"text":19},{"id":78,"depth":583,"text":79,"children":1214},[1215,1216],{"id":83,"depth":580,"text":83},{"id":100,"depth":580,"text":100},{"id":143,"depth":583,"text":144,"children":1218},[1219,1220,1221],{"id":147,"depth":580,"text":147},{"id":834,"depth":580,"text":834},{"id":357,"depth":580,"text":357},{"id":372,"depth":583,"text":373,"children":1223},[1224,1225,1226,1227,1228,1229],{"id":855,"depth":580,"text":856},{"id":894,"depth":580,"text":895},{"id":929,"depth":580,"text":930},{"id":1004,"depth":580,"text":1005},{"id":1034,"depth":580,"text":1035},{"id":1059,"depth":580,"text":1060},{"id":517,"depth":583,"text":518},{"id":1107,"depth":583,"text":1108,"children":1232},[1233,1234,1235],{"id":1111,"depth":580,"text":1111},{"id":1134,"depth":580,"text":1135},{"id":1155,"depth":580,"text":1155},{"id":1168,"depth":583,"text":1169},"2025-05","基于 uni-app 的世界杯赛事 AI 预测微信小程序",{},"\u002Fprojects\u002Ffootball-ai-worldcup-prediction",{"title":615,"description":1238},"projects\u002Ffootball-ai-worldcup-prediction","2026 世界杯足球赛事 AI 智能预测应用，接入 BSD Sports Data API 获取赛事与赔率数据，前端进行 AI 预测结果分析与展示。支持赛程浏览、积分榜、AI 预测推荐、赔率对比与市场预期，微信一键登录。","uni-app, Vue 3, uniCloud, BSD Sports Data API, SCSS","kV2fJWn2u6hhkE9b1kvAfc5Bl3TugbD2cFM6OIbNRLs",{"id":1247,"title":1248,"body":1249,"date":1237,"description":1886,"extension":604,"meta":1887,"navigation":606,"path":1888,"seo":1889,"stem":1890,"summary":1891,"tech_stack":1892,"__hash__":1893},"projects\u002Fprojects\u002Fyikang-health-manager.md","宜康管家 - 手绘风服药提醒与血压监测",{"type":8,"value":1250,"toc":1859},[1251,1255,1257,1280,1297,1299,1301,1303,1317,1319,1347,1349,1351,1353,1477,1479,1485,1487,1489,1493,1498,1506,1511,1540,1545,1556,1560,1584,1588,1619,1623,1645,1647,1651,1654,1657,1728,1731,1765,1767,1771,1774,1785,1788,1803,1806,1817,1819,1821,1857],[11,1252,1254],{"id":1253},"宜康管家控压-手绘风服药提醒与血压监测","宜康管家（控压）— 手绘风服药提醒与血压监测",[16,1256,19],{"id":18},[21,1258,1259,1260,1263,1264,1267,1268,1271,1272,1275,1276,1279],{},"高血压患者需要长期按时服药并定期监测血压，但市面上多数健康管理应用界面冰冷、操作复杂，且服药提醒不够精确（依赖 JS 定时器，App 被杀后失效）。",[25,1261,1262],{},"宜康管家（控压）"," 是一款面向高血压患者的手绘风格健康管家应用，以",[25,1265,1266],{},"智能服药提醒","和",[25,1269,1270],{},"血压监测记录","为核心功能，在 Android 端使用",[25,1273,1274],{},"原生 AlarmManager 精确闹钟","确保提醒不遗漏，UI 采用独特的",[25,1277,1278],{},"手绘美学","设计，让健康管理更有温度。",[52,1281,1282,1287,1292],{},[55,1283,1284,1286],{},[25,1285,59],{},"：原生移动应用（Android 主力 + iOS + HarmonyOS）",[55,1288,1289,1291],{},[25,1290,65],{},"：智能服药提醒（原生闹钟）、血压等级监测、服药历史追踪、完全离线使用",[55,1293,1294,1296],{},[25,1295,71],{},"：高血压及慢性病患者日常服药管理与血压监测",[74,1298],{},[16,1300,79],{"id":78},[81,1302,83],{"id":83},[52,1304,1305,1308,1311,1314],{},[55,1306,1307],{},"慢性病患者需长期按时服药，但常因遗忘或外出导致漏服",[55,1309,1310],{},"普通提醒类 App 依赖 JS 定时器，App 被系统杀死后提醒失效",[55,1312,1313],{},"血压数据记录分散，缺乏等级分类与可视化呈现",[55,1315,1316],{},"医疗类应用界面过于冰冷，老年用户使用门槛高",[81,1318,100],{"id":100},[52,1320,1321,1328,1334,1341],{},[55,1322,1323,1324,1327],{},"实现",[25,1325,1326],{},"可靠的服药提醒","，即使 App 不在前台也能准时提醒",[55,1329,128,1330,1333],{},[25,1331,1332],{},"血压等级分类","（正常\u002F正常高值\u002F1-3级高血压），帮助患者自我评估",[55,1335,1336,1337,1340],{},"采用",[25,1338,1339],{},"手绘风格 UI","，降低使用门槛，提升亲和力",[55,1342,1343,1346],{},[25,1344,1345],{},"完全离线运行","，无需注册、无需联网，保护用户隐私",[74,1348],{},[16,1350,144],{"id":143},[81,1352,147],{"id":147},[149,1354,1355,1365],{},[152,1356,1357],{},[155,1358,1359,1361,1363],{},[158,1360,160],{},[158,1362,163],{},[158,1364,166],{},[168,1366,1367,1379,1391,1404,1419,1431,1444,1456,1466],{},[155,1368,1369,1373,1376],{},[173,1370,1371],{},[25,1372,735],{},[173,1374,1375],{},"uni-app x (DCloud)",[173,1377,1378],{},"支持 Android \u002F iOS \u002F HarmonyOS",[155,1380,1381,1385,1387],{},[173,1382,1383],{},[25,1384,190],{},[173,1386,193],{},[173,1388,1389,754],{},[197,1390,199],{},[155,1392,1393,1398,1401],{},[173,1394,1395],{},[25,1396,1397],{},"开发语言",[173,1399,1400],{},"UTS (TypeScript 方言)",[173,1402,1403],{},"uni-app x 原生开发语言",[155,1405,1406,1411,1416],{},[173,1407,1408],{},[25,1409,1410],{},"模板格式",[173,1412,1413],{},[197,1414,1415],{},".uvue",[173,1417,1418],{},"uni-app x Vue 单文件组件",[155,1420,1421,1425,1428],{},[173,1422,1423],{},[25,1424,207],{},[173,1426,1427],{},"SCSS + 手绘主题",[173,1429,1430],{},"不均匀圆角 + 粗边框 + 投影",[155,1432,1433,1438,1441],{},[173,1434,1435],{},[25,1436,1437],{},"原生插件",[173,1439,1440],{},"yk-native-alarm (UTS)",[173,1442,1443],{},"Android AlarmManager 精确闹钟",[155,1445,1446,1450,1453],{},[173,1447,1448],{},[25,1449,285],{},[173,1451,1452],{},"uni.getStorageSync \u002F setStorageSync",[173,1454,1455],{},"完全离线数据持久化",[155,1457,1458,1462,1464],{},[173,1459,1460],{},[25,1461,812],{},[173,1463,815],{},[173,1465,818],{},[155,1467,1468,1472,1474],{},[173,1469,1470],{},[25,1471,825],{},[173,1473,828],{},[173,1475,1476],{},"Material Design Icons 自定义字体",[81,1478,357],{"id":357},[359,1480,1483],{"className":1481,"code":1482,"language":364},[362],"宜康管家\u002F\n├── pages\u002F                         # 5 个应用页面\n│   ├── index\u002Findex.uvue           # 首页 — 今日用药列表 + 状态切换\n│   ├── add-medicine\u002Fadd-medicine.uvue  # 添加\u002F编辑药品表单\n│   ├── detail\u002Fdetail.uvue         # 药品详情（倒计时 + 7天历史）\n│   ├── records\u002Frecords.uvue       # 血压记录（测量 + 历史）\n│   └── mine\u002Fmine.uvue            # \"我的\" 页面（关于 + 使用说明）\n├── components\u002F                    # 可复用组件\n│   ├── TabBar\u002FTabBar.uvue         # 底部导航栏（首页\u002F记录\u002F我的）\n│   ├── TimePicker\u002FTimePicker.uvue # 时间选择器（AM\u002FPM + 小时\u002F分钟网格）\n│   └── FrequencyPicker\u002FFrequencyPicker.uvue  # 频率选择器（每日\u002F自定义星期）\n├── utils\u002F                         # 工具模块\n│   ├── storage.uts                # 数据持久化（药品、历史、血压记录）\n│   ├── frequency.uts              # 频率解析与校验\n│   ├── NotificationService.uts    # 核心提醒引擎（JS + 原生双方案）\n│   └── platform-notification\u002F     # 平台专属通知\n│       ├── android.uts            # Android 原生闹钟调度\n│       └── ios.uts                # iOS push 消息调度\n├── uni_modules\u002F\n│   ├── yk-native-alarm\u002F           # 自定义 UTS 原生 Android 闹钟插件\n│   └── jk-icon\u002F                   # 自定义图标字体生成器\n└── static\u002F                        # 静态资源 + 字体文件\n",[197,1484,1482],{"__ignoreMap":367},[74,1486],{},[16,1488,373],{"id":372},[81,1490,1492],{"id":1491},"_1智能服药提醒双引擎架构","1）智能服药提醒（双引擎架构）",[21,1494,1495],{},[25,1496,1497],{},"JS 引擎（通用兜底）：",[52,1499,1500,1503],{},[55,1501,1502],{},"30 秒轮询间隔 + 每个药品独立的 setTimeout 调度",[55,1504,1505],{},"适用于非 Android 平台或非\"每日1次\"的提醒场景",[21,1507,1508],{},[25,1509,1510],{},"Android 原生引擎（精确可靠）：",[52,1512,1513,1520,1527,1530,1537],{},[55,1514,1515,1516,1519],{},"使用 ",[197,1517,1518],{},"AlarmManager.setAlarmClock()"," 设置精确系统闹钟，App 被杀后仍可触发",[55,1521,1522,1523,1526],{},"自定义 ",[197,1524,1525],{},"BroadcastReceiver","（MedicineAlarmReceiver）接收闹钟广播并发送通知",[55,1528,1529],{},"5 分钟间隔重复提醒，持续 30 分钟，直到用户响应",[55,1531,1532,1533,1536],{},"监听 ",[197,1534,1535],{},"BOOT_COMPLETED"," 广播，设备重启后自动恢复所有闹钟",[55,1538,1539],{},"Android 12+ 自动检查并请求精确闹钟权限",[21,1541,1542],{},[25,1543,1544],{},"通知交互：",[52,1546,1547,1550,1553],{},[55,1548,1549],{},"点击\"已服\"：取消今日所有重复提醒，安排明日闹钟",[55,1551,1552],{},"点击\"稍后\"：清除重复提醒，10 分钟后发送新提醒",[55,1554,1555],{},"点击\"待服\"：重置状态为待处理，恢复提醒",[81,1557,1559],{"id":1558},"_2今日用药管理","2）今日用药管理",[52,1561,1562,1565,1568,1581],{},[55,1563,1564],{},"根据频率规则和当天星期过滤展示今日用药",[55,1566,1567],{},"每个药品卡片展示：时间（24h + AM\u002FPM）、药名、剂量、状态徽章",[55,1569,1570,1571,1574,1575,1574,1578],{},"状态三态切换：",[25,1572,1573],{},"待服"," → ",[25,1576,1577],{},"已服",[25,1579,1580],{},"稍后",[55,1582,1583],{},"支持 FAB 浮动按钮快速添加药品",[81,1585,1587],{"id":1586},"_3血压监测与等级分类","3）血压监测与等级分类",[52,1589,1590,1593,1613,1616],{},[55,1591,1592],{},"输入收缩压（30-300）、舒张压（10-200）、心率（20-300），含范围校验",[55,1594,1595,1596],{},"自动按中国高血压防治指南分级，颜色编码展示：\n",[52,1597,1598,1601,1604,1607,1610],{},[55,1599,1600],{},"🟢 正常（\u003C120\u002F80）",[55,1602,1603],{},"🟡 正常高值（120-139\u002F80-89）",[55,1605,1606],{},"🟠 1级高血压（140-159\u002F90-99）",[55,1608,1609],{},"🔴 2级高血压（160-179\u002F100-109）",[55,1611,1612],{},"⭕ 3级高血压（≥180\u002F110）",[55,1614,1615],{},"最近一次测量大号卡片突出显示",[55,1617,1618],{},"最多存储 30 条历史记录，最新优先",[81,1620,1622],{"id":1621},"_4药品详情与服药历史","4）药品详情与服药历史",[52,1624,1625,1628,1642],{},[55,1626,1627],{},"下次服药倒计时动态计算（\"X小时 Y分钟\"）",[55,1629,1630,1631],{},"7 天服药历史视图，颜色编码：\n",[52,1632,1633,1636,1639],{},[55,1634,1635],{},"红色 = 已服（✓ 图标）",[55,1637,1638],{},"黄色 = 今天（○ 图标）",[55,1640,1641],{},"灰色 = 错过\u002F跳过（✗ 图标）",[55,1643,1644],{},"编辑和删除药品功能",[74,1646],{},[16,1648,1650],{"id":1649},"五设计系统-手绘风格","五、设计系统 — 手绘风格",[21,1652,1653],{},"项目采用独特的手绘风格设计，打破医疗类应用的冰冷感：",[81,1655,1656],{"id":1656},"配色",[149,1658,1659,1671],{},[152,1660,1661],{},[155,1662,1663,1666,1669],{},[158,1664,1665],{},"用途",[158,1667,1668],{},"颜色",[158,1670,166],{},[168,1672,1673,1686,1702,1715],{},[155,1674,1675,1678,1683],{},[173,1676,1677],{},"背景",[173,1679,1680],{},[197,1681,1682],{},"#fdfbf7",[173,1684,1685],{},"暖米白色",[155,1687,1688,1691,1699],{},[173,1689,1690],{},"卡片",[173,1692,1693,347,1696],{},[197,1694,1695],{},"#ffffff",[197,1697,1698],{},"#fff9c4",[173,1700,1701],{},"白色 \u002F 暖黄色",[155,1703,1704,1707,1712],{},[173,1705,1706],{},"主色",[173,1708,1709],{},[197,1710,1711],{},"#ff4d4d",[173,1713,1714],{},"红色 — 行动按钮、已服状态",[155,1716,1717,1720,1725],{},[173,1718,1719],{},"边框",[173,1721,1722],{},[197,1723,1724],{},"#2d2d2d",[173,1726,1727],{},"深灰粗边框",[81,1729,1730],{"id":1730},"手绘特征",[52,1732,1733,1743,1756],{},[55,1734,1735,1738,1739,1742],{},[25,1736,1737],{},"不均匀圆角","：卡片 ",[197,1740,1741],{},"18rpx 6rpx 18rpx 6rpx","，模拟手绘不规则感",[55,1744,1745,1748,1749,1752,1753],{},[25,1746,1747],{},"粗边框 + 偏移投影","：",[197,1750,1751],{},"border: 3rpx solid #2d2d2d"," + ",[197,1754,1755],{},"box-shadow: 8rpx 8rpx 0 0 #2d2d2d",[55,1757,1758,1761,1762],{},[25,1759,1760],{},"手写字体","：标题使用 ",[197,1763,1764],{},"font-family: cursive, sans-serif",[74,1766],{},[16,1768,1770],{"id":1769},"六项目亮点","六、项目亮点",[81,1772,1773],{"id":1773},"可靠性",[52,1775,1776,1779,1782],{},[55,1777,1778],{},"Android 端使用原生 AlarmManager 精确闹钟，即使 App 不在前台也能准时提醒",[55,1780,1781],{},"设备重启后自动恢复所有闹钟，确保提醒不丢失",[55,1783,1784],{},"基于 SharedPreferences 去重，防止重复安排",[81,1786,1787],{"id":1787},"隐私性",[52,1789,1790,1793,1800],{},[55,1791,1792],{},"完全离线运行，无需注册、无需联网",[55,1794,1795,1796,1799],{},"所有数据通过 ",[197,1797,1798],{},"uni.setStorageSync"," 本地存储",[55,1801,1802],{},"无远程推送、无数据上报",[81,1804,1805],{"id":1805},"体验感",[52,1807,1808,1811,1814],{},[55,1809,1810],{},"手绘风格 UI 降低使用门槛，亲和力强",[55,1812,1813],{},"三态状态切换（待服\u002F已服\u002F稍后）交互简洁",[55,1815,1816],{},"血压等级颜色编码，一目了然",[74,1818],{},[16,1820,1169],{"id":1168},[52,1822,1823,1833,1839,1845,1851],{},[55,1824,1825,1828,1829,1832],{},[25,1826,1827],{},"iOS 原生提醒","：当前 iOS 使用 ",[197,1830,1831],{},"uni.createPushMessage"," 延迟调度，后续可开发原生 UTS 插件实现更精确的本地通知",[55,1834,1835,1838],{},[25,1836,1837],{},"数据导出","：支持将血压记录导出为 PDF\u002FExcel，方便就医时提供",[55,1840,1841,1844],{},[25,1842,1843],{},"趋势图表","：增加血压趋势折线图，帮助患者观察长期变化",[55,1846,1847,1850],{},[25,1848,1849],{},"家人共享","：通过局域网或蓝牙实现家属端同步查看老人用药与血压状态",[55,1852,1853,1856],{},[25,1854,1855],{},"鸿蒙原生","：适配 HarmonyOS NEXT 原生开发",[74,1858],{},{"title":367,"searchDepth":580,"depth":580,"links":1860},[1861,1862,1866,1870,1876,1880,1885],{"id":18,"depth":583,"text":19},{"id":78,"depth":583,"text":79,"children":1863},[1864,1865],{"id":83,"depth":580,"text":83},{"id":100,"depth":580,"text":100},{"id":143,"depth":583,"text":144,"children":1867},[1868,1869],{"id":147,"depth":580,"text":147},{"id":357,"depth":580,"text":357},{"id":372,"depth":583,"text":373,"children":1871},[1872,1873,1874,1875],{"id":1491,"depth":580,"text":1492},{"id":1558,"depth":580,"text":1559},{"id":1586,"depth":580,"text":1587},{"id":1621,"depth":580,"text":1622},{"id":1649,"depth":583,"text":1650,"children":1877},[1878,1879],{"id":1656,"depth":580,"text":1656},{"id":1730,"depth":580,"text":1730},{"id":1769,"depth":583,"text":1770,"children":1881},[1882,1883,1884],{"id":1773,"depth":580,"text":1773},{"id":1787,"depth":580,"text":1787},{"id":1805,"depth":580,"text":1805},{"id":1168,"depth":583,"text":1169},"基于 uni-app x 的手绘风格健康管家应用，支持服药提醒与血压监测",{},"\u002Fprojects\u002Fyikang-health-manager",{"title":1248,"description":1886},"projects\u002Fyikang-health-manager","面向高血压患者的移动健康应用，核心功能为智能服药提醒与血压监测记录。采用 uni-app x + Vue 3 + UTS 构建，Android 端使用原生 AlarmManager 精确闹钟，UI 采用独特手绘风格设计，完全离线本地存储。","uni-app x, Vue 3, UTS, Android AlarmManager, SCSS","UI9AhDZyltzDkyRvzjsfLy1ubmTUmOhxrRLRs62z06M",{"id":1895,"title":1896,"body":1897,"date":2545,"description":2546,"extension":604,"meta":2547,"navigation":606,"path":2548,"seo":2549,"stem":2550,"summary":2551,"tech_stack":2552,"__hash__":2553},"projects\u002Fprojects\u002Fenterprise-market-uniapp.md","TOB企服应用市场项目",{"type":8,"value":1898,"toc":2510},[1899,1903,1905,1909,1912,1916,1953,1955,1959,1963,2024,2028,2048,2052,2098,2112,2116,2130,2134,2148,2150,2154,2158,2175,2179,2205,2207,2211,2215,2229,2233,2243,2245,2249,2253,2256,2262,2266,2289,2293,2390,2394,2401,2421,2423,2425,2429,2440,2444,2455,2459,2470,2474,2485,2487,2491,2497,2499,2503,2506],[11,1900,1902],{"id":1901},"企服评测应用市场qidao123com项目介绍","企服评测·应用市场（qidao123.com）项目介绍",[16,1904,19],{"id":18},[81,1906,1908],{"id":1907},"_11-项目背景","1.1 项目背景",[21,1910,1911],{},"企服评测·应用市场（qidao123.com）是国内唯一的企服评测产业互联网平台，致力于为IT行业从业者提供专业的企业服务评测、应用市场及商务职场社区服务。平台汇聚了50万+IT人脉资源，覆盖产品、方案、公司、专家等多维度评测体系。",[81,1913,1915],{"id":1914},"_12-技术架构","1.2 技术架构",[52,1917,1918,1923,1929,1935,1941,1947],{},[55,1919,1920,1922],{},[25,1921,190],{},"：uni-app Vue 2",[55,1924,1925,1928],{},[25,1926,1927],{},"目标平台","：H5网页 + 微信小程序",[55,1930,1931,1934],{},[25,1932,1933],{},"UI组件库","：uview-ui + ColorUI",[55,1936,1937,1940],{},[25,1938,1939],{},"路由方案","：uni-simple-router（自动生成路由）",[55,1942,1943,1946],{},[25,1944,1945],{},"状态管理","：Vuex（单模块 user）",[55,1948,1949,1952],{},[25,1950,1951],{},"开发工具","：HBuilderX IDE",[74,1954],{},[16,1956,1958],{"id":1957},"二核心功能模块","二、核心功能模块",[81,1960,1962],{"id":1961},"_21-首页功能","2.1 首页功能",[149,1964,1965,1974],{},[152,1966,1967],{},[155,1968,1969,1972],{},[158,1970,1971],{},"功能",[158,1973,166],{},[168,1975,1976,1984,1992,2000,2008,2016],{},[155,1977,1978,1981],{},[173,1979,1980],{},"搜索入口",[173,1982,1983],{},"支持搜索人脉\u002F产品\u002F方案\u002F公司\u002F商机\u002F项目\u002F资料\u002F专家",[155,1985,1986,1989],{},[173,1987,1988],{},"轮播广告",[173,1990,1991],{},"动态加载平台广告内容",[155,1993,1994,1997],{},[173,1995,1996],{},"滚动信息栏",[173,1998,1999],{},"实时展示最新动态消息",[155,2001,2002,2005],{},[173,2003,2004],{},"金刚区导航",[173,2006,2007],{},"快速访问各核心功能模块",[155,2009,2010,2013],{},[173,2011,2012],{},"严选\u002F普选展示",[173,2014,2015],{},"产品、方案、公司分类展示（严选\u002F普选）",[155,2017,2018,2021],{},[173,2019,2020],{},"dis区域",[173,2022,2023],{},"论坛\u002F头条\u002F圈子等社区内容聚合",[81,2025,2027],{"id":2026},"_22-产品方案公司详情页","2.2 产品\u002F方案\u002F公司详情页",[52,2029,2030,2033,2036,2039,2042,2045],{},[55,2031,2032],{},"产品信息展示（图片轮播、产品介绍）",[55,2034,2035],{},"厂商关注功能",[55,2037,2038],{},"产品认领机制（厂商可认领自有产品）",[55,2040,2041],{},"分享传播（微信\u002FQQ\u002F微博）",[55,2043,2044],{},"用户评论系统",[55,2046,2047],{},"标签分类导航",[81,2049,2051],{"id":2050},"_23-招标悬赏模块","2.3 招标悬赏模块",[149,2053,2054,2064],{},[152,2055,2056],{},[155,2057,2058,2061],{},[158,2059,2060],{},"服务",[158,2062,2063],{},"描述",[168,2065,2066,2074,2082,2090],{},[155,2067,2068,2071],{},[173,2069,2070],{},"极速匹配",[173,2072,2073],{},"免费需求梳理、精准撮合匹配",[155,2075,2076,2079],{},[173,2077,2078],{},"资金托管",[173,2080,2081],{},"阶段托管费用、电子合同保障",[155,2083,2084,2087],{},[173,2085,2086],{},"项目管家",[173,2088,2089],{},"贴心管家服务、专属客服",[155,2091,2092,2095],{},[173,2093,2094],{},"更多专业",[173,2096,2097],{},"发票开具、争议纠纷仲裁",[52,2099,2100,2103,2106,2109],{},[55,2101,2102],{},"支持发布定制需求",[55,2104,2105],{},"搜索需求任务",[55,2107,2108],{},"按交易模式筛选（悬赏\u002F招标）",[55,2110,2111],{},"投标功能",[81,2113,2115],{"id":2114},"_25-专家智库","2.5 专家智库",[52,2117,2118,2121,2124,2127],{},[55,2119,2120],{},"专家列表展示",[55,2122,2123],{},"专家详情页",[55,2125,2126],{},"预约专家服务",[55,2128,2129],{},"专家申请入驻",[81,2131,2133],{"id":2132},"_26-找人脉模块","2.6 找人脉模块",[52,2135,2136,2139,2142,2145],{},[55,2137,2138],{},"同行\u002F同乡\u002F校友推荐",[55,2140,2141],{},"人脉热度榜",[55,2143,2144],{},"数字名片交换",[55,2146,2147],{},"关注\u002F好友管理",[74,2149],{},[16,2151,2153],{"id":2152},"三用户中心功能","三、用户中心功能",[81,2155,2157],{"id":2156},"_31-内容管理","3.1 内容管理",[52,2159,2160,2163,2166,2169,2172],{},[55,2161,2162],{},"产品管理",[55,2164,2165],{},"方案管理",[55,2167,2168],{},"公司管理",[55,2170,2171],{},"专家智库管理",[55,2173,2174],{},"招标悬赏管理",[81,2176,2178],{"id":2177},"_32-其他功能","3.2 其他功能",[52,2180,2181,2184,2187,2190,2193,2196,2199,2202],{},[55,2182,2183],{},"编辑资料",[55,2185,2186],{},"实名认证",[55,2188,2189],{},"职业认证",[55,2191,2192],{},"隐私设置",[55,2194,2195],{},"意见反馈",[55,2197,2198],{},"我的访客",[55,2200,2201],{},"名片夹",[55,2203,2204],{},"关于我们",[74,2206],{},[16,2208,2210],{"id":2209},"四入驻与认证体系","四、入驻与认证体系",[81,2212,2214],{"id":2213},"_41-申请入驻","4.1 申请入驻",[52,2216,2217,2220,2223,2226],{},[55,2218,2219],{},"产品入驻",[55,2221,2222],{},"方案入驻",[55,2224,2225],{},"公司入驻",[55,2227,2228],{},"产品\u002F方案认领",[81,2230,2232],{"id":2231},"_42-认证体系","4.2 认证体系",[52,2234,2235,2238,2240],{},[55,2236,2237],{},"个人实名认证",[55,2239,2189],{},[55,2241,2242],{},"专家申请认证",[74,2244],{},[16,2246,2248],{"id":2247},"五技术特色","五、技术特色",[81,2250,2252],{"id":2251},"_51-平台条件编译","5.1 平台条件编译",[21,2254,2255],{},"项目采用 uni-app 的条件编译机制，实现一套代码多端运行：",[359,2257,2260],{"className":2258,"code":2259,"language":364},[362],"#ifdef MP-WEIXIN   \u002F\u002F 微信小程序专属代码\n#ifdef WEB         \u002F\u002F H5网页专属代码  \n",[197,2261,2259],{"__ignoreMap":367},[81,2263,2265],{"id":2264},"_52-路由架构","5.2 路由架构",[52,2267,2268,2275,2282],{},[55,2269,2270,2271,2274],{},"H5平台：使用 ",[197,2272,2273],{},"$Router.push({name, params})"," 实现 SEO 友好路由，通过路由映射，统一pc端url地址",[55,2276,2277,2278,2281],{},"小程序平台：使用 ",[197,2279,2280],{},"uni.navigateTo({url})"," 原生路由",[55,2283,2284,2285,2288],{},"路由别名：通过 ",[197,2286,2287],{},"aliasPath"," 定义 SEO 友好 URL",[81,2290,2292],{"id":2291},"_53-api请求封装","5.3 API请求封装",[359,2294,2298],{"className":2295,"code":2296,"language":2297,"meta":367,"style":367},"language-javascript shiki shiki-themes one-dark-pro","\u002F\u002F GET请求\n$get(url, data, config)\n\u002F\u002F POST请求  \n$post(url, data, config)\n\u002F\u002F Token认证\n{needToken: true}  \u002F\u002F 自动添加 Authorization 头\n","javascript",[197,2299,2300,2309,2337,2342,2362,2368],{"__ignoreMap":367},[2301,2302,2305],"span",{"class":2303,"line":2304},"line",1,[2301,2306,2308],{"class":2307},"sV9Aq","\u002F\u002F GET请求\n",[2301,2310,2311,2315,2319,2323,2326,2329,2331,2334],{"class":2303,"line":583},[2301,2312,2314],{"class":2313},"sVbv2","$get",[2301,2316,2318],{"class":2317},"sn6KH","(",[2301,2320,2322],{"class":2321},"sVyAn","url",[2301,2324,2325],{"class":2317},", ",[2301,2327,2328],{"class":2321},"data",[2301,2330,2325],{"class":2317},[2301,2332,2333],{"class":2321},"config",[2301,2335,2336],{"class":2317},")\n",[2301,2338,2339],{"class":2303,"line":580},[2301,2340,2341],{"class":2307},"\u002F\u002F POST请求  \n",[2301,2343,2345,2348,2350,2352,2354,2356,2358,2360],{"class":2303,"line":2344},4,[2301,2346,2347],{"class":2313},"$post",[2301,2349,2318],{"class":2317},[2301,2351,2322],{"class":2321},[2301,2353,2325],{"class":2317},[2301,2355,2328],{"class":2321},[2301,2357,2325],{"class":2317},[2301,2359,2333],{"class":2321},[2301,2361,2336],{"class":2317},[2301,2363,2365],{"class":2303,"line":2364},5,[2301,2366,2367],{"class":2307},"\u002F\u002F Token认证\n",[2301,2369,2371,2374,2377,2380,2384,2387],{"class":2303,"line":2370},6,[2301,2372,2373],{"class":2317},"{",[2301,2375,2376],{"class":2321},"needToken",[2301,2378,2379],{"class":2317},": ",[2301,2381,2383],{"class":2382},"sVC51","true",[2301,2385,2386],{"class":2317},"}  ",[2301,2388,2389],{"class":2307},"\u002F\u002F 自动添加 Authorization 头\n",[81,2391,2393],{"id":2392},"_54-分包加载","5.4 分包加载",[21,2395,2396,2397,2400],{},"通过 ",[197,2398,2399],{},"subPackages"," 实现按需加载，优化首屏性能：",[52,2402,2403,2406,2409,2412,2415,2418],{},[55,2404,2405],{},"detail（详情页）",[55,2407,2408],{},"mine（个人中心）",[55,2410,2411],{},"login（登录注册）",[55,2413,2414],{},"reward（招标悬赏）",[55,2416,2417],{},"expert（专家智库）",[55,2419,2420],{},"等20+分包模块",[74,2422],{},[16,2424,1770],{"id":1769},[81,2426,2428],{"id":2427},"_61-评测体系","6.1 评测体系",[52,2430,2431,2434,2437],{},[55,2432,2433],{},"产品\u002F方案\u002F公司严选与普选分级",[55,2435,2436],{},"用户点评有奖机制",[55,2438,2439],{},"360°全方位评价",[81,2441,2443],{"id":2442},"_62-商务撮合","6.2 商务撮合",[52,2445,2446,2449,2452],{},[55,2447,2448],{},"招标悬赏任务发布",[55,2450,2451],{},"资金托管保障",[55,2453,2454],{},"项目管家服务",[81,2456,2458],{"id":2457},"_63-人脉社交","6.3 人脉社交",[52,2460,2461,2464,2467],{},[55,2462,2463],{},"50万+IT人脉社区",[55,2465,2466],{},"同行\u002F同乡\u002F校友智能推荐",[55,2468,2469],{},"数字名片裂变传播",[81,2471,2473],{"id":2472},"_64-内容生态","6.4 内容生态",[52,2475,2476,2479,2482],{},[55,2477,2478],{},"ToB头条资讯",[55,2480,2481],{},"论坛\u002F圈子\u002F博客",[55,2483,2484],{},"专业资料库",[74,2486],{},[16,2488,2490],{"id":2489},"七项目目录结构","七、项目目录结构",[359,2492,2495],{"className":2493,"code":2494,"language":364},[362],"qidao-h5-front\u002F\n├── pages\u002F              # 页面组件（分包组织）\n│   ├── home\u002F           # 首页\n│   ├── m\u002F              # dis页面（WebView容器）\n│   ├── detail\u002F         # 详情页分包\n│   ├── mine\u002F           # 个人中心分包\n│   ├── login\u002F          # 登录注册分包\n│   ├── reward\u002F         # 招标悬赏分包\n│   ├── expert\u002F         # 专家智库分包\n│   ├── classify\u002F       # 分类页分包\n│   ├── case\u002F           # 案例页分包\n│   ├── peer\u002F           # 找人脉分包\n│   └── ...             # 其他分包\n├── components\u002F         # 共享组件\n│   ├── functional-zone\u002F  # 金刚区导航\n│   ├── home-tab\u002F        # 首页tab组件\n│   ├── dis-tab\u002F         # dis区域组件\n│   ├── login-popup\u002F     # 登录弹窗\n│   ├── tabBar\u002F          # 自定义tabBar\n│   └── ...\n├── utiles\u002F             # 工具函数\u002FAPI（注意拼写）\n│   ├── request.js      # HTTP请求封装\n│   ├── api.js          # API接口定义\n│   ├── common.js       # 公共方法\n│   ├── wechat.js       # 微信SDK配置\n│   └── share.js        # 分享功能\n├── store\u002F              # Vuex状态管理\n│   └── modules\u002F\n│       └── user.js     # 用户模块\n├── uni_modules\u002F        # uni-app插件模块\n│   └── uview-ui\u002F       # uview-ui组件库\n├── colorui\u002F            # ColorUI样式库\n├── static\u002F             # 静态资源\n├── pages.json          # 页面路由配置\n├── manifest.json       # 应用配置\n├── main.js             # 入口文件\n├── App.vue             # 应用根组件\n└── router.js           # 路由配置\n",[197,2496,2494],{"__ignoreMap":367},[74,2498],{},[16,2500,2502],{"id":2501},"八总结","八、总结",[21,2504,2505],{},"企服评测·应用市场是一个功能完善、架构清晰的产业互联网平台，通过 uni-app 实现了 H5 和微信小程序的双端覆盖。项目采用分包加载、条件编译等技术方案，有效提升了开发效率和用户体验。平台核心价值在于构建了产品\u002F方案\u002F公司的专业评测体系，并为IT从业者提供了人脉社交、商务撮合、内容生态等一站式服务。",[2507,2508,2509],"style",{},"html pre.shiki code .sV9Aq, html code.shiki .sV9Aq{--shiki-default:#7F848E;--shiki-default-font-style:italic}html pre.shiki code .sVbv2, html code.shiki .sVbv2{--shiki-default:#61AFEF}html pre.shiki code .sn6KH, html code.shiki .sn6KH{--shiki-default:#ABB2BF}html pre.shiki code .sVyAn, html code.shiki .sVyAn{--shiki-default:#E06C75}html pre.shiki code .sVC51, html code.shiki .sVC51{--shiki-default:#D19A66}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":367,"searchDepth":580,"depth":580,"links":2511},[2512,2516,2523,2527,2531,2537,2543,2544],{"id":18,"depth":583,"text":19,"children":2513},[2514,2515],{"id":1907,"depth":580,"text":1908},{"id":1914,"depth":580,"text":1915},{"id":1957,"depth":583,"text":1958,"children":2517},[2518,2519,2520,2521,2522],{"id":1961,"depth":580,"text":1962},{"id":2026,"depth":580,"text":2027},{"id":2050,"depth":580,"text":2051},{"id":2114,"depth":580,"text":2115},{"id":2132,"depth":580,"text":2133},{"id":2152,"depth":583,"text":2153,"children":2524},[2525,2526],{"id":2156,"depth":580,"text":2157},{"id":2177,"depth":580,"text":2178},{"id":2209,"depth":583,"text":2210,"children":2528},[2529,2530],{"id":2213,"depth":580,"text":2214},{"id":2231,"depth":580,"text":2232},{"id":2247,"depth":583,"text":2248,"children":2532},[2533,2534,2535,2536],{"id":2251,"depth":580,"text":2252},{"id":2264,"depth":580,"text":2265},{"id":2291,"depth":580,"text":2292},{"id":2392,"depth":580,"text":2393},{"id":1769,"depth":583,"text":1770,"children":2538},[2539,2540,2541,2542],{"id":2427,"depth":580,"text":2428},{"id":2442,"depth":580,"text":2443},{"id":2457,"depth":580,"text":2458},{"id":2472,"depth":580,"text":2473},{"id":2489,"depth":583,"text":2490},{"id":2501,"depth":583,"text":2502},"2024-01","基于 Uniapp 的多端应用",{},"\u002Fprojects\u002Fenterprise-market-uniapp",{"title":1896,"description":2546},"projects\u002Fenterprise-market-uniapp","国内唯一的企服评测产业互联网平台，汇聚50万+IT人脉资源，覆盖产品、方案、公司、专家等多维度评测体系。支持 H5 和微信小程序双端。","Uni-app, Vue2, uView-ui, Vuex","viTHJbCtdo6DeFsACxe24uS0_-ewK1YQF6-_tf491qg",{"id":2555,"title":2556,"body":2557,"date":2545,"description":2911,"extension":604,"meta":2912,"navigation":606,"path":2913,"seo":2914,"stem":2915,"summary":2916,"tech_stack":2917,"__hash__":2918},"projects\u002Fprojects\u002Frag-intelligent-customer-service.md","RAG 智能客服系统",{"type":8,"value":2558,"toc":2891},[2559,2563,2565,2576,2593,2595,2597,2599,2610,2612,2633,2635,2637,2639,2693,2697,2717,2719,2751,2753,2757,2761,2784,2788,2807,2811,2826,2830,2838,2840,2842,2853,2855,2857,2889],[11,2560,2562],{"id":2561},"产品手册-pdf-智能客服系统fastapi-langchain-chroma-前端聊天-ui","产品手册 PDF 智能客服系统（FastAPI + LangChain + Chroma + 前端聊天 UI）",[16,2564,19],{"id":18},[21,2566,2567,2568,2571,2572,2575],{},"本项目围绕“产品手册内容难检索、客服答复不一致、人工成本高”的痛点，构建了一套",[25,2569,2570],{},"基于产品手册 PDF 的智能客服系统","。系统采用",[197,2573,2574],{},"RAG（检索增强生成）","方案：用户在前端聊天界面提问后，后端先从向量知识库中检索出与问题最相关的手册片段，再将片段作为参考资料交给大模型生成回答，从而在保证体验的同时显著降低“幻觉回答”。",[52,2577,2578,2583,2588],{},[55,2579,2580,2582],{},[25,2581,59],{},"：Web 端聊天 UI + FastAPI 后端接口",[55,2584,2585,2587],{},[25,2586,65],{},"：PDF 知识库导入、语义检索、受控生成、流式回复、答案可追溯（来源页码）",[55,2589,2590,2592],{},[25,2591,71],{},"：产品使用说明咨询、功能指引、参数\u002F报错解释、安装部署流程问答等",[74,2594],{},[16,2596,79],{"id":78},[81,2598,83],{"id":83},[52,2600,2601,2604,2607],{},[55,2602,2603],{},"客服\u002F用户需要在 PDF 手册里手动搜索，效率低、容易漏查",[55,2605,2606],{},"不同客服口径不一致，质量难以稳定",[55,2608,2609],{},"直接使用 LLM 回答会编造信息，可信度不足",[81,2611,100],{"id":100},[52,2613,2614,2621,2624,2630],{},[55,2615,2616,2617,2620],{},"将产品手册 PDF 快速构建为",[25,2618,2619],{},"可语义检索","的知识库",[55,2622,2623],{},"回答必须“有依据”：以检索片段为主，资料不足时明确说明",[55,2625,121,2626,2629],{},[25,2627,2628],{},"流式输出","提升对话体验",[55,2631,2632],{},"架构可扩展：后续支持多份手册、多版本、增量更新、权限过滤",[74,2634],{},[16,2636,144],{"id":143},[81,2638,147],{"id":147},[52,2640,2641,2647,2657,2666,2672,2678,2687],{},[55,2642,2643,2646],{},[25,2644,2645],{},"后端","：FastAPI",[55,2648,2649,2652,2653,2656],{},[25,2650,2651],{},"RAG 框架","：LangChain 1.x（LCEL + Runnable，统一 ",[197,2654,2655],{},"invoke\u002Fstream"," 调用范式）",[55,2658,2659,1748,2662,2665],{},[25,2660,2661],{},"文档加载",[197,2663,2664],{},"PyPDFLoader","（PDF → Document）",[55,2667,2668,2671],{},[25,2669,2670],{},"向量数据库","：Chroma（支持持久化存储与复用）",[55,2673,2674,2677],{},[25,2675,2676],{},"Embedding","：文本嵌入模型（将 chunk 向量化）",[55,2679,2680,1748,2683,2686],{},[25,2681,2682],{},"输出解析",[197,2684,2685],{},"StrOutputParser","（将模型输出统一为可直接返回的字符串）",[55,2688,2689,2692],{},[25,2690,2691],{},"前端","：聊天 UI（支持增量渲染流式内容）",[81,2694,2696],{"id":2695},"rag-标准流程","RAG 标准流程",[52,2698,2699,2705,2711],{},[55,2700,2701,2704],{},[25,2702,2703],{},"索引 Indexing","：PDF 加载 → 文本切分 → Embedding → 写入 Chroma",[55,2706,2707,2710],{},[25,2708,2709],{},"检索 Retrieval","：问题向量化 → top_k 相似检索 → 得到参考片段",[55,2712,2713,2716],{},[25,2714,2715],{},"生成 Generation","：将参考片段 + 用户问题组成 Prompt → LLM 生成 → 流式返回",[81,2718,357],{"id":357},[52,2720,2721,2724,2727,2730,2733,2736,2739,2742,2745,2748],{},[55,2722,2723],{},"【agent】            Agent实现和工具",[55,2725,2726],{},"【model】            模型工厂",[55,2728,2729],{},"【rag】              RAG服务和向量存储",[55,2731,2732],{},"【utils】            配置、日志、工具函数",[55,2734,2735],{},"【prompts】          提示词模板",[55,2737,2738],{},"【config】           YAML配置文件",[55,2740,2741],{},"【data】             知识库文件(PDF\u002FTXT)",[55,2743,2744],{},"【tests】            单元测试",[55,2746,2747],{},"【chroma_db】        向量数据库",[55,2749,2750],{},"【logs】             日志文件",[74,2752],{},[16,2754,2756],{"id":2755},"四核心功能实现项目亮点","四、核心功能实现（项目亮点）",[81,2758,2760],{"id":2759},"_1产品手册-pdf-知识库构建","1）产品手册 PDF 知识库构建",[52,2762,2763,2771,2774,2777],{},[55,2764,1515,2765,2767,2768],{},[197,2766,2664],{}," 将 PDF 抽取为 LangChain ",[197,2769,2770],{},"Document",[55,2772,2773],{},"为每段文本保留 metadata（如：文件名、页码、章节信息），方便溯源与展示引用",[55,2775,2776],{},"对手册内容进行 chunk 切分（控制 chunk_size 与 overlap），兼顾召回率与上下文完整性",[55,2778,2779,2780,2783],{},"将 chunk 向量化后写入 ",[25,2781,2782],{},"Chroma","，支持持久化目录，避免每次启动重新建库",[81,2785,2787],{"id":2786},"_2语义检索-受控生成降低幻觉","2）语义检索 + 受控生成（降低幻觉）",[52,2789,2790,2793,2804],{},[55,2791,2792],{},"用户问题进入后端后先做 embedding，在 Chroma 中召回 top_k 相关片段",[55,2794,2795,2796],{},"Prompt 约束回答策略：\n",[52,2797,2798,2801],{},[55,2799,2800],{},"必须基于参考资料回答",[55,2802,2803],{},"若资料不足\u002F未覆盖，直接说明“手册未提及”并建议用户提供更多信息",[55,2805,2806],{},"通过“检索片段驱动回答”显著降低编造内容的风险，提升可信度与一致性",[81,2808,2810],{"id":2809},"_3前端聊天-ui-流式输出","3）前端聊天 UI 流式输出",[52,2812,2813,2820,2823],{},[55,2814,2815,2816,2819],{},"后端基于 LangChain 的 ",[197,2817,2818],{},"stream()"," 将模型输出按 token\u002F片段逐步返回",[55,2821,2822],{},"前端聊天 UI 增量渲染内容，实现“打字机效果”，改善等待体验",[55,2824,2825],{},"支持多轮对话的基础交互（提问、回答、加载状态、错误提示等）",[81,2827,2829],{"id":2828},"_4答案可追溯工程化可落地","4）答案可追溯（工程化可落地）",[52,2831,2832,2835],{},[55,2833,2834],{},"在回答中可选择性输出“引用来源”（如：手册第 X 页 \u002F 某章节），便于客服复核",[55,2836,2837],{},"为后续升级“点击引用跳转到 PDF 对应页”预留接口与数据结构",[74,2839],{},[16,2841,518],{"id":517},[52,2843,2844,2847,2850],{},[55,2845,2846],{},"将“人工翻 PDF 查答案”的流程改为“秒级语义检索 + 自动生成”，显著提升响应效率",[55,2848,2849],{},"统一客服答复口径，减少培训成本与重复劳动",[55,2851,2852],{},"基于检索证据生成回答，降低幻觉，提升用户信任度",[74,2854],{},[16,2856,538],{"id":537},[52,2858,2859,2865,2871,2877,2883],{},[55,2860,2861,2864],{},[25,2862,2863],{},"Rerank","：在向量召回后增加重排序，提高相关性",[55,2866,2867,2870],{},[25,2868,2869],{},"多手册\u002F多版本","：基于 metadata 做过滤检索（产品型号、版本号）",[55,2872,2873,2876],{},[25,2874,2875],{},"增量更新","：手册更新后仅重建变化部分向量",[55,2878,2879,2882],{},[25,2880,2881],{},"评测体系","：构建问题集，对召回质量与最终答案准确率做自动评估",[55,2884,2885,2888],{},[25,2886,2887],{},"对话记忆","：引入 RunnableWithMessageHistory 支持连续追问与上下文承接",[74,2890],{},{"title":367,"searchDepth":580,"depth":580,"links":2892},[2893,2894,2898,2903,2909,2910],{"id":18,"depth":583,"text":19},{"id":78,"depth":583,"text":79,"children":2895},[2896,2897],{"id":83,"depth":580,"text":83},{"id":100,"depth":580,"text":100},{"id":143,"depth":583,"text":144,"children":2899},[2900,2901,2902],{"id":147,"depth":580,"text":147},{"id":2695,"depth":580,"text":2696},{"id":357,"depth":580,"text":357},{"id":2755,"depth":583,"text":2756,"children":2904},[2905,2906,2907,2908],{"id":2759,"depth":580,"text":2760},{"id":2786,"depth":580,"text":2787},{"id":2809,"depth":580,"text":2810},{"id":2828,"depth":580,"text":2829},{"id":517,"depth":583,"text":518},{"id":537,"depth":583,"text":538},"基于 RAG 的智能客服系统，通过向量检索实现知识库问答",{},"\u002Fprojects\u002Frag-intelligent-customer-service",{"title":2556,"description":2911},"projects\u002Frag-intelligent-customer-service","围绕\"产品手册内容难检索、客服答复不一致、人工成本高\"痛点，构建基于产品手册 PDF 的智能客服系统。采用 RAG 方案实现语义检索与受控生成，支持流式回复与答案可追溯。","FastAPI, LangChain, Chroma, 前端聊天 UI","5KBjIgMSqI3R-HM8nPy3RXEhXECJ3CviZOxshsCJirA",1780651451817]