V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
blueeon
V2EX  ›  程序员

为什么放弃了 RAG? RAG 的六大难题

  •  2
     
  •   blueeon · 13 小时 17 分钟前 · 3069 次点击

    RAG 本身并不算是个坏主意。我们认真实践过,也确实在某些场景下跑通了。

    去年,我们花了几个月搭过几套完整的 RAG 管线:三阶段处理( Extract 、Chunk 、Embed ),三种搜索策略( Vector 、BM25 、Hybrid + Reranking )。从文本提取,粗排,到 Rerank 精排,每一个环节都认真做了一遍。工程量不小,技术上看着很漂亮。

    但最终不得不承认一个事实:效果不好

    这篇文章不是要批判 RAG ,而是诚实地分享下我们具体遇到了哪些问题,以及我们后来怎么想的。以及,小广告。。。

    问题一:Embedding 模型两难

    做本地桌面应用,Embedding 模型的选择是一个没有好答案的问题。

    小模型(参数量 < 500M )在设备上跑得动,但语义理解质量不稳定——碰到专业文档、跨语言搜索、长文档时,召回率明显下降。大模型( 1B+)质量好,但在普通用户的笔记本上内存和计算开销太大,后台常驻时对系统资源的占用让人无法接受。

    桌面应用没有服务器可以依赖,只能在"跑得动"和"效果好"之间妥协。选了一个,另一个就要让步。这个困境在服务端应用里不存在,在本地优先应用里却是无解的。

    问题二:领域词汇不敏感

    向量语义搜索有一个根本性的弱点:它对专业术语的理解很差。

    原因并不复杂。Embedding 模型是在通用语料上训练的,而代码函数名、医学缩写、法律条款、产品专名这些词在训练语料里出现频率低,在向量空间里的位置偏僻且不稳定。

    实际表现是什么样的?用户搜 "RLHF",不一定能找到写着 "Reinforcement Learning from Human Feedback" 的文档。搜"LTV",可能匹配不到写着"用户生命周期价值"的分析报告。搜某个产品的型号,向量搜索根本抓不住这个词的准确语义。

    这不是配置问题,不是参数调优能解决的,业内常见做法是做 embedding 模型的微调,但一般都是针对特定领域,只能在 ToB 场景中 work 。

    Embedding 优势是模糊语义匹配,它的劣势恰好就是精确词汇匹配。而用户的真实需求往往是两者都要。

    问题三:Rerank 的代价

    召回率低和准确性差,是 RAG 管线的两个经典问题。针对准确性问题,业界的标准解法是引入 Rerank 模型做最后一步的精排。

    我们也做了这一步,然后发现问题并没有被解决,只是被转移了。

    Rerank 模型比 Embedding 模型更重、更慢。引入它之后,整个检索链路的延迟大幅上升,对本地应用来说尤其明显。更关键的是,Rerank 模型同样是在通用语料上训练的,同样存在专业词汇不敏感的问题——它只是在你已经召回的候选里重新排序,而不能召回那些一开始就没被捞到的文档。

    最终结果:链路变慢了,架构变复杂了,根本问题还在。引入 Rerank 后,排序质量的提升非常有限,反而让 BM25 的作用几乎被掩盖了。

    问题四:碎片化的上下文

    分块( Chunking )是 RAG 最无法绕开的问题。

    文档被切成固定大小的片段之后,每个片段都与它的前后文脱节了。AI 拿到的是一段从报告中间截取的内容,不知道这段话在哪个章节,不知道前一段在讲什么,也不知道后续有没有结论。

    最糟糕的情况是:一个关键段落恰好横跨两个 Chunk 的边界,两个 Chunk 都能匹配到,但又各自不完整。AI 拿到的两份碎片都沾了边,却都缺少关键信息,最终给出一个似是而非的回答。

    这个问题业内有很多补丁办法,比如:加大 Chunk 重叠,加入父 Chunk 检索,引入 Small-to-Big 策略……每个补丁都能在某个维度上改善问题,但也都会带来新的代价——更多 Token 、更复杂的管线、更难调试的行为、更加无法通用。

    我们把这些补丁叠在一起,得到了一个复杂、易出错,但仍然不够好的系统。

    问题五:不同文档类型需要特殊处理

    通用分块策略对不同文档类型的效果差异极大,这是我们当初没有充分预判到的。

    论文有 Abstract + 正文 + References 的结构;书籍有章节层级和页眉页脚;合同有条款编号和交叉引用;代码文档有 API 列表和示例代码;表格类文档的"内容"是列名和数据类型,而不是单元格里的文字……

    固定窗口切块的策略不理解这些结构,分块点往往切在语义中间,把标题和它的正文分开,把条款编号和条款内容切断,把表头和数据分离。

    每种文档类型其实需要完全不同的处理逻辑。但针对每种类型都写特化的解析器和分块策略,工作量巨大,维护成本也高——而且即使都做完了,效果也只是"比通用策略好一些",仍然是碎片化的。

    问题六:Agent 使用体验极差

    以上五个问题单独看,每个都还在可接受的范围内,但当 RAG 被实际接入 AI Agent 使用的时候,所有问题叠加在一起,效果非常糟糕。

    一个真实的场景:AI 在帮用户分析一份合同,调用 search() 检索相关条款,拿到了 10 个 Chunk 。有几个 Chunk 沾了边,但信息不完整。AI 无法判断该怎么继续,只好调整关键词重新搜索。再拿到 10 个 Chunk ,还是不够。再换关键词,再搜一次。

    每次搜索都是黑盒:AI 不知道换哪个关键词才能找到它需要的内容,不知道文档里到底有没有这个信息,不知道自己距离答案有多远。这种低效不是 Agent 能力不够,而是工具本身的设计不支持它做出合理的决策。

    RAG 在设计上是为"用户直接提问"场景优化的,不是为"Agent 自主探索"场景设计的。

    行业也在转移

    这些问题不是我们独有的,业内已经有明显的应对趋势:

    微软的 GraphRAG 引入知识图谱来缓解上下文碎片化问题,把相关实体和关系显式地存储下来,而不是靠碎片拼凑。

    PageIndex 不按固定大小切 Chunk ,而是以页面为单位建立索引,保留文档的自然边界。

    Agentic RAG 尝试让 AI 自主决定检索策略,而不是走固定管线——方向是对的,但在 RAG 架构上叠加 Agent 逻辑,复杂度随之翻倍。

    最彻底的转向来自 Claude Code 和 Manus 。它们干脆放弃了 RAG ,回到最原始的方式:Glob + Grep + Read。找文件、搜关键词、读内容。没有向量数据库,没有 Embedding 模型,没有 Chunk 管线。效果反而更好。

    这让我们想明白了一件事:RAG 的设计假设是"LLM 不够聪明,需要我们帮它把信息预处理好"。这在 GPT-3.5 时代是合理的。但现在的 LLM 已经有能力自主使用工具完成多步检索任务——它们不需要预切碎片,它们需要的是线索:文件在哪,结构是什么,然后它自己能决定读什么、读多少。

    我们的解法:Outline Index

    Glob + Grep + Read 对代码库很有效,但对用户文档行不通。代码库里 src/services/auth.ts 这个路径本身就在告诉你这是认证服务;但 2024 年度总结(修改版)(最终版).docx,路径告诉你的信息约等于零。更别提 PDF 和 Word 是二进制格式,grep 根本读不了。

    所以我们的问题变成了:能不能给文档也建立一套等价的"目录索引",让 AI 用 search → outline → read 的方式渐进式地翻阅你的文件?

    我们把这套方案叫做 Outline Index

    核心思想一句话:不替 AI 预切信息,而是给它一张地图。

    为每个文档建立一份结构化"名片",包含文档的元数据(标题、作者、关键词、摘要)和结构大纲(章节标题、层级关系、行号范围)。AI 按三层路径访问文档:

    • search:搜索相关文档,返回文件列表和 Metadata ,约 50 tokens/文件
    • outline:查看文档的结构地图,约 200-500 tokens/文件
    • read:精准读取指定章节的原文,按需加载

    这与人类阅读的方式完全一致:先找书,看目录,翻到对应章节精读。AI 在这个过程中有完整的上下文,知道自己在文档的什么位置,可以决定"再多看一点",也可以跨文档对比。

    对比传统 RAG:同样的场景下,Outline Index 方式的 Token 消耗约 800-3400 ,AI 拿到有完整上下文的精确信息。传统 RAG 返回 10 个预切碎片,消耗 4000-6000 tokens ,AI 对文档结构一无所知。

    另一个副产品:Embedding 的对象从原文 Chunk 变成了 Outline Index 本身。一个文档只需要一个向量。10000 个文档 ≈ 10000 个向量 ≈ 30MB 存储,检索速度也快得多。

    关于领域词汇不敏感的问题,BM25 全文检索补上了这块短板。双路检索( BM25 精确匹配 + 向量语义理解),通过 RRF 融合,不再需要 Rerank 模型。

    最后,是广告时间:

    45 条回复    2026-03-14 03:26:05 +08:00
    metalvest
        1
    metalvest  
       12 小时 55 分钟前   ❤️ 2
    大纲索引生效的前提是文档本身是高度结构化的,而且章节内容极度聚焦
    moxida
        2
    moxida  
       12 小时 54 分钟前
    感谢分享
    xdongiang
        3
    xdongiang  
       12 小时 24 分钟前 via iPhone
    和 lcm 啥区别
    MIUIOS
        4
    MIUIOS  
       12 小时 16 分钟前
    写得非常好
    Fish1024
        5
    Fish1024  
       12 小时 12 分钟前
    明年再来一篇:为什么放弃了 Outline Index ? Outline Index 的三大顽疾
    zhengfan2016
        6
    zhengfan2016  
       12 小时 11 分钟前   ❤️ 1
    感觉没用对场景,rag 就是给用户不知道搜什么精确关键词,不知道自己到底想看什么的时候用的,比如 b 站首页视频推荐,小红薯笔记的相似笔记推荐。

    像 RLHF->Reinforcement Learning from Human Feedback 这种有规律可循的完全可以通过普通搜索提前预热,没必要为了 rag 而 rag
    ovtfkw
        7
    ovtfkw  
       12 小时 10 分钟前
    这是啥 完全不知所云
    murmur
        8
    murmur  
       12 小时 4 分钟前
    @zhengfan2016 那不是向量数据库么,推荐算法也不是 rag 啊
    CoderGeek
        9
    CoderGeek  
       12 小时 2 分钟前
    这个远古时期的推荐系统打标签 多维度数据有何区别 - -
    CoderGeek
        10
    CoderGeek  
       11 小时 58 分钟前
    分词 检索 权重 - - 感觉企业知识库 定制客服之类的 还是那样 提取完加 AI 选择一下 走个聊天机器人 一直没太搞懂这个 RAG 我本地搭了 dify 把我自己之前学 MBA 的整体资料罐给他 做个 MBA 课程老师玩 配着配着感觉都是问题
    karld
        11
    karld  
       11 小时 54 分钟前
    真假 效果提升多少!
    orion1
        12
    orion1  
    PRO
       11 小时 54 分钟前
    没玩过,感谢
    murmur
        13
    murmur  
       11 小时 52 分钟前
    @zhengfan2016 说错了,你说小红书我可能还认为高深,b 站的推荐系统完全是基于 tag 做的,因为当你喜欢上一个内容之后,带着标签的黑稿全推到首页上来了,所以证明他完全不检测相似度,就是看打了什么 tag

    而且首页 5 个视频里必定一个商单一个广告

    简而言之 b 站推荐系统屎中屎,不具备技术研究讨论的价值
    MoozLee
        14
    MoozLee  
       11 小时 52 分钟前
    ai 能力提升的必然吧。本来需要更多人为的编排流程,现在 ai 能力强了自然就减少了这块的需求。
    qaqbreak
        15
    qaqbreak  
       11 小时 44 分钟前
    这个是不是相当于做了个摘要,然后用摘要进行检索了
    NoobNoob030
        16
    NoobNoob030  
       11 小时 41 分钟前
    思路很好,感谢分享
    imxiaolong
        17
    imxiaolong  
       11 小时 37 分钟前
    现在用 google 的 notebookLm ,挺好用的。可以根据以往文件生成我想要的方案。
    zwithz1998
        18
    zwithz1998  
       11 小时 31 分钟前
    主要还是看使用场景,你的使用场景很明确了,是本地应用,使用 RAG 成本反而很高。

    像企业知识库(如飞书)这类的协同文档平台,只能构建 RAG ,并且协同文档涉及到文档权限的问题,直接使用路径去构建上下文,反而会导致信息泄露。
    Ketteiron
        19
    Ketteiron  
       11 小时 28 分钟前
    @zhengfan2016 #6 这是用户画像系统+推荐系统。
    RAG 主要是节约成本的前提下为 AI 提供合理的上下文,但目前向量搜索的命中率实在扯淡,很长一段时间直到现在,这种模式一般是用来骗投资的,没多少现实意义。
    最合理的还得是 Agentic RAG + 深度预处理,将资料完全数字化,让 AI 整理、打标签、抽样、归纳、建立依赖关系,当需要检索时让 AI 自主决定调取什么资料。
    OP 的方案本质上也是深度预处理的一种,比知识图谱化省钱,但其正确性由文档本身的结构化程度决定
    zhengfan2016
        20
    zhengfan2016  
       11 小时 18 分钟前
    @murmur #13 举个例子,像独立开发者做一些 saas 的推荐还是能用用的 ,我自己做的图库和音乐网站的推荐系统就打算用这个,使用用户 like 过的内容 embedding 之后算出一个大概的范围,再使用向量 db 搜索最接近这个范围的结果
    op351
        21
    op351  
       11 小时 16 分钟前
    我觉得可以不要太局限于文档类的(PDF,docx,纯文本等等)
    可以往专业性强一点的文件类型扩展,应用场景才可能更广,更有生产力
    比如你文章里也提了 Claude 能通过读软件开发领域的源代码,代码中的引用声明来了解路径信息和项目结构
    其实在工作中,其他类型的文件也会有很多
    比如制造业里大量的机械图纸,3d 文件,再比如影视行业大量的视频素材,音频素材
    对于偏视觉系的资料,我觉得按现在多模态模型的能力 做视觉识别,总结,然后结构化列出文件大纲信息也是不错的 idea
    YanSeven
        22
    YanSeven  
       11 小时 6 分钟前
    @Ketteiron 请教一下,知识图谱化当前在 RAG 领域有一定的落地价值吗
    coefu
        23
    coefu  
       10 小时 55 分钟前
    有一点思考,但不多,解决了一些小 case 。指望这个当主业务赚钱,还是差点味道。
    AoEiuV020JP
        24
    AoEiuV020JP  
       10 小时 52 分钟前
    别和 rag 比,要比就和把文档一对一转成 txt 之后 ai 自己搜索的效果比,
    telemsg
        25
    telemsg  
       10 小时 52 分钟前
    这篇文章的作者指出的痛点(如上下文碎片化、本地资源开销、专业词汇不敏感)是非常真实的,确实反映了**早期/基础 RAG ( Naive RAG )**在实际落地中的普遍困境。

    但是,如果要反驳这篇文章,核心切入点在于:**作者是在用“2023 年的基础 RAG”的缺点,来衬托“2024 年高级 RAG”的优点,然后通过“偷换概念”宣称自己放弃了 RAG ,本质上是一篇为自己产品( Linkly AI )带货的精彩软文。**

    以下是具体的反驳逻辑和视角:

    ### 1. 概念偷换:他并没有放弃 RAG ,只是做了一个“层级 RAG”

    作者提出的终极解法是 **Outline Index (搜索 -> 看大纲 -> 精读)**。

    * **反驳**:这根本不是放弃 RAG ,这在业界被称为 **Hierarchical Retrieval (层级检索)**、**Document Summary Index** 或者类似 RAPTOR 的树状检索结构,LlamaIndex 等框架早就支持了。
    * 本质上,它依然是“检索( Retrieval )+ 增强( Augmented )+ 生成( Generation )”的管线。作者只是把“直接检索碎片( Chunk )”改成了“先检索大纲( Outline ),再按需加载大区块( Section )”,这是 RAG 架构的演进,而非颠覆。

    ### 2. 逻辑自相矛盾:解析难度问题

    * **作者的论点(问题四、五)**:文档被固定大小切块后语义破碎。并且不同文档类型(表格、合同、代码)结构不同,提取和分块的开发维护成本极高,效果还不好。
    * **反驳(致命漏洞)**:如果一份排版复杂的 PDF (包含多级标题、跨页表格、双栏文本),你连准确的文本分块都做不到,**你的 Outline Index 是如何凭空为它生成完美的“结构化大纲(章节、层级、行号)”的?**
    * **真相是**:无论做高级 RAG 还是做 Outline Index ,核心瓶颈都是**文档版面分析与结构化提取**( Document Parsing )。只要你能完美解析出文档结构,传统的语义切块( Semantic Chunking )加上父子文档关联( Parent-Child Retriever )同样能完美解决碎片化问题。作者把文档解析的锅,硬扣在了 RAG 的头上。

    ### 3. 以偏概全:拿“纯向量检索”的弱点当作整个 RAG 的弱点

    * **作者的论点(问题二、三)**:Embedding 对专业词汇不敏感,Rerank 模型太重且不能解决根本的召回问题。
    * **反驳**:现代生产环境的 RAG 标配是 **混合检索( Hybrid Search = 向量 Dense + 关键词 Sparse/BM25 )**。作者在文末也承认自己的方案也是用“BM25 + 向量”双路召回来解决领域词汇问题的。既然大家都在用双路召回,为什么这成了传统 RAG 的缺点,却成了他们产品的卖点?此外,API 化的 Rerank 模型(如 Cohere 、BGE )速度极快,几百毫秒的延迟在动辄数秒的 LLM 生成时间面前几乎可以忽略不计。

    ### 4. 场景局限:把“本地优先”的短板无限放大

    * **作者的论点(问题一)**:本地桌面应用跑大 Embedding 模型太吃资源,跑小模型效果差,陷入两难。
    * **反驳**:这是“本地桌面端”的软硬件限制,而不是 RAG 技术的限制。绝大多数企业级 RAG 或 SaaS 应用都在云端运行,调用顶级的 Embedding API 成本极低且效果极好。即便在本地端,随着端侧 NPU/Apple Silicon 的普及以及诸如 BGE-M3 等轻量级高性能模型的出现,这个门槛正在迅速降低。

    ### 5. 成本与效果的掩耳盗铃(关于大模型长文本陷阱)

    * **作者的方案**:给 AI 一张地图,AI 看完大纲后决定按需加载精读(甚至加载整个章节)。
    * **反驳**:这种做法极度依赖大模型的**超长上下文能力( Long Context )**和**推理能力**。
    * **Token 成本极高**:如果用户问一个简单的数据点(例如“Q3 的利润是多少?”),传统 RAG 返回 3 个精准的 Chunk 可能只消耗 1000 Token 。而 Outline Index 需要先让 AI 读几百 Token 的大纲,然后加载可能长达 5000 Token 的整个财报章节去“精读”,Token 消耗和首字等待时间( TTFT )反而飙升。
    * **迷失在中间( Lost in the middle )**:即便是现在的长文本模型,在塞入一个巨大的章节让其自己寻找细节时,依然很容易出现幻觉或遗漏。精准的 Chunk 召回反而是降低 LLM 幻觉的最有效手段。



    ### 总结

    如何一针见血地评价并反驳这篇帖子?

    > “文章写得很好,对早期无脑切块( Naive RAG )的批判刀刀见血。但作者用 2023 年最基础的 Fixed Chunk + 纯向量检索作为‘靶子’,刻意无视了 2024 年业界早已普及的**混合检索、语义切块、父子文档结构( Auto-merging retrieval )以及多步 Agentic RAG**。
    > 作者兜售的『 Outline Index 』本质就是带 Metadata 的层级检索( Hierarchical RAG ),依然是 RAG 家族的一员。这就像是说:**‘为什么我放弃了汽车?因为三轮车太颠簸了,而且拉货太少。所以我现在改用四个轮子、带独立悬挂的交通工具了。’** 这是一次精彩的降维打击式营销,但从技术层面来看,RAG 并没有被放弃,只是在向着更精细的结构化和 Agent 化演进。”
    nullEDYT
        26
    nullEDYT  
       10 小时 47 分钟前
    解法感觉是变相 RAG
    cfer
        27
    cfer  
       10 小时 39 分钟前
    我个人最初使用方法是把问题和答案进行结构化处理,然后将问题作为索引内容作为文档保存到向量数据库中,它效果很好,但是一旦问题数据量多起来的话,命中的索引也会成倍的增加,最终效果就不好了。只适用于小型数据量的处理。
    hahiru
        28
    hahiru  
       10 小时 24 分钟前
    嗯不错,我先试试你的软件效果怎么样。
    Ketteiron
        29
    Ketteiron  
       10 小时 14 分钟前
    @YanSeven #22 知识图谱化召回率非常高,这肯定是有价值的。对于知识密集型行业效果很好,例如医疗、法律、历史、地理等等,至于像企业内部知识库等场景或许划不来,烧掉的 token 实在太多了。
    有没有价值还是得看资料的质量如何,garbage in, garbage out
    kulove
        30
    kulove  
       9 小时 50 分钟前 via Android
    写的不错 之前也发现 RAG 有这些问题 所以干脆不搞了 等大模型能力上来再说
    la2la
        31
    la2la  
       8 小时 53 分钟前
    你们主要的盈利方式是什么
    没有商业模式必定整不久的
    blueeon
        32
    blueeon  
    OP
       5 小时 21 分钟前
    @metalvest 你说的对,并且不同类型的文档需要不同的大纲来导航。
    blueeon
        33
    blueeon  
    OP
       5 小时 19 分钟前
    @CoderGeek 技术原理上类似。大纲除了做检索,更重要是给 llm 下一步阅读做导航用。就像书的目录。
    blueeon
        34
    blueeon  
    OP
       5 小时 18 分钟前
    @qaqbreak 检索环节的确可以这么认为,检索后提取相关片段时在当导航使用
    blueeon
        35
    blueeon  
    OP
       5 小时 17 分钟前
    @op351 好的,感谢。的确有用户提到检索更多格式,比如 cad 之类的。
    blueeon
        36
    blueeon  
    OP
       5 小时 15 分钟前
    @telemsg 换一个 AI 用用吧
    blueeon
        37
    blueeon  
    OP
       5 小时 14 分钟前
    @nullEDYT 应该算是 agentic rag 的一种吧
    blueeon
        38
    blueeon  
    OP
       5 小时 13 分钟前
    @cfer 这个方式也做过,预处理麻烦,使用场景还是比较有限
    blueeon
        39
    blueeon  
    OP
       5 小时 13 分钟前
    @la2la 中肯~
    ztm0929
        40
    ztm0929  
       5 小时 9 分钟前 via iPhone
    @telemsg 请尽量不要粘贴 AI 的回复…

    https://www.sunp.eu.org/help/anti-flood
    raydied
        41
    raydied  
       4 小时 46 分钟前
    RAG 的设计假设是"LLM 不够聪明,需要我们帮它把信息预处理好"。
    ---
    核心原因其实是:1. LLM 上下文/KV 缓存有限,2. token 成本很高。
    ---
    你们产品的 rag 正确率是如何评估的?内部测试 rag 的正确率能达到多少?
    kafm
        42
    kafm  
       3 小时 4 分钟前
    “渐进式披露大量文档”蛮有意思,思路像 skills 。区别在于 skills 的场景是合理加载 SOP 手册,整个放到上下文里并不浪费。RAG 加载整个文档还是有点奢侈,但效果应该还不错?
    kafm
        43
    kafm  
       3 小时 2 分钟前
    哦哦,不是加载整个文档,是章节*
    charleslin
        44
    charleslin  
       2 小时 0 分钟前
    RAG 好像也就只能用于忽悠下老板 AI 欲
    BenHunDun
        45
    BenHunDun  
       8 分钟前
    简单了解过 RAG 的内容, 自己觉得一个比较大的问题是 Embedding 模型其实还在发展. 生成的 RAG 一定程度上是绑定 Embedding 的. 感觉很难推动一个大规模的落地, 一个现在 RAG 效果没有特别好, 不够成熟. 一个如果有新的, 优质的 Embedding 出现可能就会变成需要全量重建.

    问题 1 感觉是用户群体的问题.
    问题 2 专业化的应该如果真的要效果好估计还是要对通用模型微调训练.

    还是感谢分享. 学到了一点新的东西, 针对不同的需求和资源, 调整合适的技术方案, 达到好的效果. 刚好看到前几天 Google 推了新的 Embedding 模型.
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   969 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:34 · PVG 03:34 · LAX 12:34 · JFK 15:34
    ♥ Do have faith in what you're doing.