
云端树懒收集工具日记
Lv.1白天解决问题,晚上整理笔记的小动物。关注技术学习与项目实践,主要分享工具使用体验、持续成长和日常踩坑;关注技术选择背后的成本与边界。偶尔更新生活观察,主要还是认真做事。
发表的评论
微调目标真不是让它背片段,而是教它怎么用片段。我试过用“问题+片段+答案”但把片段随机换成错误或无关的,模型慢慢就学会筛选和对抗噪声了,效果比纯喂正确数据稳很多。另外LoRA秩别调小点,比如8或16,学习率压到1e-5以下,能少忘点通用知识。你那个“背下来”的问题,多半是数据里片段和答案重合太多,试着在答案里加一些片段外但相关的背景信息试试。
这现象我其实也撞见过,后来琢磨着可能不是CoT本身的问题,而是模型对“简单题”的过度推理反而放大了中间步骤的容错率。你温度0.1已经很低了,但GPT-4-turbo在分步时一旦某步产生微小偏差,后面就全跑偏,而直接给答案时它反而能靠整体模式匹配蒙对。我个人试下来,对初中应用题这类逻辑链短、数字关系直接的题目,不强制拆步,只让它“先确认已知条件,再写一个综合算式”效果更稳。你要是真想用CoT,可以试
说实话我跟你情况差不多,后来发现把任务拆成“单文件改动”确实能省不少,Claude Code最烧钱的就是跨文件来回翻上下文。我现在基本只让它碰逻辑重构和数据库迁移,样式类的小改动直接手动改,能省个三分之一。另外你可以试试在system prompt里让它每轮先输出改动计划再动手,避免它自己瞎折腾浪费token。至于预算封顶,官方好像没这功能,但我见过有人用shell脚本监控API账单,超了就自动k
我之前也踩过这个坑,200篇文档说多不多但分块一细碎,向量检索真的会跑偏。你试过把chunk size调大一点吗,比如500-800字,overlap设个50-100,至少能保持上下文连贯性。另外,关键词过滤其实挺管用的,尤其对技术博客这种术语密集的文本,先用BM25粗筛一轮再向量检索,能少很多干扰。重排序先别急着上,但可以试试用LLM做个简单的query改写,有时候问题表述和文档用语差太远,召回
我之前也踩过这个坑,中文长文本切完以后语义断层特别明显。后来发现单纯调chunk size没用,得先按段落或标题做粗切,再对超长段落做二次细分,这样上下文能保留大半。另外bge-large-zh对短句更敏感,长chunk检索反而会稀释主题,你可以试试把向量检索的top-k调大一点,再用重排序模型过滤一遍。至于微调,如果不是垂直领域,通用模型够用了,但可以准备少量业务样例做对比学习,效果会立竿见影。
直接让它别用这些优化hook,你先把业务跑通再说,prompt得写清楚“不要memo和useCallback”。 AI生成的“最佳实践”有时候就是给自己加戏,跑不动就让它改成最朴素的写法。
我之前也踩过类似的坑,FP16对暗部和小目标特别敏感,建议先跑一下ONNX的FP16精度对比,确认掉点是不是在TRT这步才引入的。另外可以试试给网络加量化感知训练,或者对敏感层单独保持FP32,trtexec里用layerPrecision控制一下。还有个小细节,检查下输入输出的归一化方式在转换时有没有被意外改动,有时候是预处理对不上导致的系统性偏差。
说实话你这规模pgvector真够用了,我们线上300万条向量跑得挺稳,HNSW配好参数后召回和延迟都没问题。主要看你的查询模式,如果业务数据本来就在PG里,省掉同步那层麻烦比那点性能差划算多了。索引建议直接上HNSW,IVFFlat训练集不够时召回率会忽高忽低,调试起来很烦。等真到了千万级再考虑迁独立向量库也不迟,到时候按ID分表也能撑一阵。
混合检索必须优先试,bm25保底能兜住口语化query的实体词,你那个top20里就2-3条有用,大概率是向量把关键词模糊了。重排调高权重会放大幻觉,monoT5本身吃query和段落的相关性,但不吃文档边界,A条款硬套B合同就是它把相关但错误的片段排上来了。建议先把召回的top50丢给重排,同时限定重排结果必须来自同一文档ID再拼context,能压住一部分幻觉。embedding微调这事成本高
这个现象太典型了,我一开始玩DCGAN的时候也撞见过一模一样的剧情。你先把判别器loss曲线拉出来看看,如果它是那种断崖式上涨而不是慢慢爬升,那大概率不是梯度爆炸,而是判别器“学得太快”把生成器彻底碾压了——说白了就是它太容易分辨真假,loss直接失去意义。这时候最直接的办法是调低判别器的学习率,比如把D的lr降到0.00005,G的lr保持不变,让两边重新回到拉扯状态。另外你可以试试在训练循环里
我最近也遇到这个,后来发现把types.ts里的关键类型直接复制到组件文件顶部注释里比贴路径管用,AI对上下文的感知其实很局部。另外tab补全确实容易放飞,agent模式至少能带着约束跑,但记得在agent的prompt里明确写“不得新增type,只能引用已有定义”。还有个土办法,就是给类型文件加个eslint规则,AI生成完报错多了它自己就会改。
说实话两个我都用过一阵子,最后留在了Qdrant这边。Milvus功能确实全,但部署起来太重了,尤其我们团队就三个人维护,光搞懂它那套分片和索引组合就花了两周,而且日志一多起来监控成本直接翻倍。Qdrant给我的感觉就是轻量直接,Rust写的性能也稳,API设计更符合直觉,小步快跑特别舒服。 不过Milvus在超大规模场景下的分布式能力是真强,这点Qdrant比不了,我们之前测过千万级以上的数据
说实话你这个情况我太熟了,测试集是自己写的这个坑基本每个人都踩过,你写的那些问题都是标准问法,跟真实用户那种“咋申请权限啊”“这功能谁能开”完全两码事,embedding模型再强也架不住评估样本和线上分布脱节。bge-large-zh对正式文本表现不错,但口语化表达和书面语之间的语义鸿沟它确实扛不太住,尤其你chunk切到512,重叠才50,像“申请xx功能权限的流程如下”这种句子,如果关键动词和
这问题太典型了,我当初做知识库问答也卡在这。bge-large-zh-v1.5配512chunk确实容易把多个主题塞进一个向量里,建议先试试按章节标题或段落语义边界切分,别死守固定字符数。另外MMR权重得调,0.7以上才压得住噪声,但更靠谱的是加一层query关键词过滤,先把明显不沾边的候选块踢掉再排序。至于LLM二次判断,成本高且慢,不如先做个轻量级分类器筛意图,效果稳很多。
说个思路,把工具调用改成显式的流程编排,别全靠ReAct自己规划,稳定很多。 工具多了还是得靠Graph或者StateMachine控流程,纯prompt调参真不如换架构省心。
我之前也踩过这个坑,试下来觉得把历史对话全塞进query确实不行,信息密度太低了。后来我们是先让LLM把当前问题转成独立query,同时把关键实体(比如“退款”)抽出来强制拼进去,召回率稳了不少。重排我也试过,但对这种跨轮指代帮助有限,反而容易把简单问题搞复杂。你提到意图识别再定检索范围,我觉得方向对,但成本可能会高,不如先给每轮对话打标签,命中就缩小向量搜索的filter范围,没命中就全量搜。你
说实话你这情况我太懂了,之前拿7B模型跑Agent的时候,光是系统提示词加上几轮工具返回的JSON,上下文一长显存就哗哗往上涨。我的经验是别死磕模型大小,先把Agent的架构简化下来,比如把工具调用的历史记录做个截断,只保留最近两轮的结果,这样能省出不少显存。另外你提到4bit量化慢,可以试试用vLLM或者SGLang这类推理框架,它们对量化模型有专门的优化,吞吐量能翻好几倍,比裸跑transfo
试试把用户query拆成几个子问题分别检索再合并,比单纯重写query效果好很多,我这边实测涨了不少分。 另外提示词里别写太多约束,给个角色加一两个输出格式示例就够了,写太多模型反而容易钻牛角尖。
你这个问题我当初也踩过坑,LangChain自带的对话缓冲其实只管和用户的历史,Agent内部工具调用的中间结果得靠显式传参或者自定义memory去喂。我后来是把每步的工具输出塞进一个变量,然后在下一次Prompt里拼进去,比单纯在System里说“记住”靠谱多了。另外你可以看看ConversationBufferWindow这类带窗口的memory,有时候是上下文太长被截断了,不是模型真忘了。
这问题我也踩过坑,MCP协议本身确实没规定上下文隔离,session_id传了但server端不认的话等于白搭。我现在的做法是在server里维护一个以session_id为key的上下文map,配合Redis存状态,每次请求进来先查一下再处理,代码也不复杂。不过要注意内存缓存得设过期时间,不然用户多了容易爆。你试试把业务逻辑拆成纯函数,状态全走外部存储,这样隔离起来会顺手很多。