Low Gravity

在这里,我们用算法解决问题,用代码表达思想

Anchr 最开始只有一条比较传统的 RAG 流程:用户提出问题,系统搜索相关内容,对候选结果重新排序,把前几个片段交给模型,最后生成带引用的回答。

1
用户提问 → 检索 → 重排 → 构造上下文 → 生成回答

对大量事实型问题,这条链路已经够用。比如问“文档重新解析后旧索引怎么处理”,只要知识库里存在对应说明,一次检索通常就能拿到主要材料。后面的工作,主要是让模型把这些材料整理成一段连贯的回答。

后来我开始遇到另一类问题:

找出几份设计文档里所有关于任务恢复的内容,再比较进程重启、网络断开和主动取消三种情况下分别会发生什么。

这类问题很少有一个现成片段能直接回答。第一次搜索可能只找到 Agent 运行恢复的说明;读完才发现这里还提到了异步 Task;继续查 Task,又会遇到进程内状态和持久化状态的区别。等到查部署约束时,对“恢复”这个词的理解可能已经和第一次检索时不一样了。

下一步应该搜什么,开始依赖上一步读到的内容。Anchr 的 Agent RAG 就是从这个问题开始的。

阅读全文 »

最开始做 Anchr,我想解决的问题很具体:手里的文档越来越多以后,怎么把里面的信息重新找出来、用起来?

目录能解决文件放在哪里,系统自带的全文搜索则要求我记得原文里的词。资料少时这些都够用,多起来以后,情况往往变成了:我记得某份文档讲过这件事,却忘了文件名,也不记得当时用了什么表达。

Anchr 于是从文档搜索开始。搜索基本可用后,我才在检索结果上生成回答;再往后,一次检索覆盖不了跨文档问题,Agent 才加进来。表面上是功能从 Search 增加到 RAG 和 Agent,实际开发时,工作重心一直是同一条链路:让原始资源稳定地变成模型可以使用、用户又能回到原文核对的证据。

阅读全文 »

第一次接触 INTJ,很容易留下一个不错的印象。

他们通常说话有分寸,做事有条理,遇到问题也不太慌。该承担的事情会承担,不熟悉的领域很少随口评价,面对不同身份的人,也往往能保持差不多的礼貌。这样的相处并不热络,却让人觉得稳定、可靠。

但接触久了,有些人会察觉到另一面:礼貌还在,距离却一直没有缩短。

你可以和他共事,可以讨论具体问题,甚至会得到认真而坦率的建议,却很难自然地进入他的私人世界。那种疏离未必来自某次矛盾,也不一定是在表达不满。他只是没有因为认识得更久,就默认彼此应该更亲近。

这大概是理解 INTJ 时最容易被忽略的一点:礼貌是他对人的基本态度,亲近则要经过另一套标准。

阅读全文 »

如果只记得一张图的内容,却忘了文件名,怎么把它找出来?PicIndex 就是为了回答这个问题。

我用多模态 Embedding 把图片和文字映射到同一个向量空间。这样一来,搜索“赛博朋克风格的雨夜街道”或者“一只坐在窗边的猫”,系统就能按照画面语义找到相近的图片。功能跑起来以后,问题也接着冒了出来:图片里的订单号搜不准,大图调用模型太慢,同一个查询还会一遍遍地计算向量。

这些问题最后都没有靠换一个更强的模型解决。PicIndex 后来的大部分调整,发生在模型之外。

阅读全文 »

这世上有如此多的“流行语”和“最佳实践”,但是让我们把注意力转向更基础的方面。即——开发人员在浏览代码时所感受到的“困惑程度”。

困惑是以时间和金钱为代价的。困惑是由高认知负荷造成的。这不是什么花哨的抽象概念,而是一种人类的基本限制因素

由于我们花在阅读和理解代码上的时间远远多于编写代码的时间,所以我们应该不断地问自己,我们是否在代码中嵌入了过多会给人带来认知负荷的内容。

阅读全文 »

很长一段时间里,我一直有一个困惑:为什么我们明明知道学习很重要,也有想要实现的目标,开始以后却总会拖延、分心,很难坚持太久?

以前,我很容易把这些问题归结为自制力不够,或者认为自己还不够努力。后来接触了一些认知科学和心理学的内容,我开始换一个角度理解这件事。学习的回报通常来得很慢,而短视频、游戏和美食都能迅速给出反馈。面对两者,大脑更容易被眼前的奖励吸引,并不奇怪。

理解这一点以后,我关心的问题也变了:学习是否一定要靠痛苦和意志力维持?能不能调整过程,让它变得自然一些,也更容易长期继续?下面这些,是我在学习和调整方法时留下的一些思考。

阅读全文 »

有一段时间,我经常想起一种变化:有些人明明一直很努力,却越来越觉得生活没有意义;也有人曾经对未来充满期待,在承受了几年持续的压力后,渐渐只想说一句“算了”。

这种变化有时会走向两个看似相反的方向。一种是否定:“努力有什么用,成功又有什么意义?”另一种是及时享乐:“人生这么短,为什么不先让自己开心?”于是,吃一顿好的、买喜欢的东西、玩游戏、看电影和旅行,开始比遥远的目标更有吸引力。

一个趋向虚无,一个转向当下,但它们也许共享着一部分来源:长期没有得到缓解的焦虑,以及随之减弱的掌控感。

这里所说的“虚无”,主要指日常生活中的虚无感,并不是要讨论完整的哲学意义上的虚无主义。我更关心的是:一个人为什么会从“我还想改变未来”,走到“做什么都没有意义”,或者“至少先抓住眼前的快乐”。

阅读全文 »

第一次接触 MBTI 时,我并没有太认真对待。人格测试很容易制造一种错觉:只要知道自己的类型,就能解释所有行为,甚至提前写好以后会成为怎样的人。

后来继续了解认知功能,我才觉得它有意思的地方并不在于给出答案,而在于提供了一套观察自己的语言。为什么我习惯提前考虑很远?为什么面对问题时,第一反应通常是分析原因,而不是表达情绪?为什么有些事别人很快就能放下,我却会在脑中反复推演?

这些问题当然不能完全由四个字母解释。成长环境、个人经历和所处阶段都会影响一个人。不过,在 INTJ 的描述里,我确实认出了一些熟悉的倾向。

按照常见的认知功能模型,INTJ 的功能顺序是:

  • 主导功能:内倾直觉(Ni)
  • 辅助功能:外倾思考(Te)
  • 第三功能:内倾情感(Fi)
  • 劣势功能:外倾感觉(Se)

这套模型可以被理解为一种观察框架:Ni 倾向于寻找规律和长期方向,Te 关心如何把想法落到现实,Fi 指向个人价值与感受,Se 则提醒人回到当下的具体经验。它不必成为固定标签,却能帮助我看见自己的惯性,以及那些容易被忽略的部分。

阅读全文 »

最近看到一个词,叫“妈人旷”。

它来自一句很流行的话:

妈妈人生是旷野。

大概意思是,人生不应该只有一条标准答案,不一定非要按照社会设定好的路径前进——读好学校、找好工作、升职加薪、买房结婚。

人的一生可以有很多可能,可以选择不同的生活方式。

这个观点本身没有什么问题。

阅读全文 »

线上偶发 RejectedExecutionException 时,我先检查了线程池配置:32 个核心线程,最大线程数也是 32,队列长度 16。任务按批提交,每批完成后才会进入下一批。单看这些数字,线程池似乎留有余量,不应该轻易触发拒绝。

调大队列以后,异常暂时消失了,但这只能说明故障和瞬时容量有关,并没有解释为什么。后面的排查发现,我对 corePoolSize + queueCapacity 的理解更深了一层:它描述的是某一时刻能够容纳多少在途任务,并不保证每次批量提交都能被接住。

阅读全文 »
0%