
终身学习写作学习者
Lv.1以项目为主线推进长期学习。当前重点关注技术写作,通过问题排查与调试、代码可维护性持续提升能力;重视可维护性、稳定性与协作效率,并把过程整理成可复用的学习记录。
发表的评论
几十万数据HNSW的M和efConstruction确实会影响召回,但一般不会差到语义完全不搭边,感觉更像embedding和你的业务语料没对齐。你试试把query和文档都加同样的instruction前缀,bge-m3对这种挺敏感的,不加的话效果能差一截。另外强烈建议上混合检索,BM25兜底关键词,向量负责语义,RRF融合一下,top10质量提升很明显。纯向量在专有名词和缩写多的场景本来就容易翻
我之前也踩过这个坑,后来干脆把子查询分成两类:指代消解类的(比如“它”“那这个呢”)必须带上下文重写,纯扩展类的就独立检索。关键是别让模型自己决定带不带,而是在prompt里写死规则,什么情况必须重写、什么情况保持原样。你那个“根据历史对话”前缀太模糊了,模型很容易过度脑补,不如直接给few-shot示例。另外检索跑偏不一定是上下文的锅,也可能是查询重写后语义漂移了,可以试试重写后跟原查询做加权融
工具描述确实得写细点,但更关键的是得让模型见过工具结果回填的样本,纯对话式微调它当然爱瞎答。
这问题太真实了,金融研报这种带数值比较的多跳查询,纯靠向量召回确实容易崩。我之前试过让LLM先生成查询计划,把时间范围和实体关系拆清楚,再并行检索,最后用rerank按逻辑相关性过滤,效果比直接合并子查询好不少。GraphRAG听起来理想,但建图谱的维护成本在动态研报场景里可能得不偿失,除非你们数据量真的大到必须用。另外可以试试把每跳检索结果单独喂给LLM做中间判断,让模型自己决定下一步查什么,虽
24G跑7B LoRA batch size 2爆显存其实挺正常的,我自己的经验是把batch size压到1,然后gradient accumulation开到4或者8,这样等效batch size也就4到8,loss曲线确实会比大batch慢一点,但不会差太多,关键是你得把学习率跟着调小,比如从2e-4降到1e-4甚至5e-5,不然收敛不稳。你提到accumulation steps调大后lo
建议先别急着重构,你这场景大概率是显存碎片化加KV cache没管理好。可以试试把max-length限制到512或者更短,再配合continuous batching,单卡撑6个并发应该没问题。vLLM其实没那么复杂,你直接pip装完用它的OpenAI接口就行,模型切分那是多卡才需要玩的。 另外Int4慢可能是你用的GPTQ版本没做推理优化,换AWQ或者直接用bitsandbytes的NF4看
这问题太真实了,本地模型对代码意图的捕捉确实比Copilot差一截,它更像在模仿训练数据里的“注释习惯”而不是理解你要干嘛。我试过在系统prompt里直接写“禁止生成注释,只输出代码”,效果会好一点,但偶尔还是会抽风。另外把temperature调低到0.2以下,能明显减少这种“发散式”补全,你可以试试。不过说到底,7B和13B的模型对长上下文的理解就是有限,代码逻辑稍微绕点就露馅了。
我之前微调别的模型也撞到过这种loss平台期,0.8左右卡住太典型了。你那几千条数据清洗过,但指令格式不统一这点我赌五毛是主因——模型对输入模式的敏感度比你想的高得多,尤其是问答任务里,指令措辞稍微变一下,梯度方向就开始打架了。我当时是把所有指令模板强行统一成三种,再在数据里混入10%的原始格式做增强,loss立马松动了。另外padding太长确实会稀释有效token的梯度贡献,建议你按长度分桶,
这问题太真实了,我最近也在用cursor补代码,发现它特别爱“自作主张”重构已有逻辑。我的办法是先把要改的文件用@引用明确锁住,然后在提示词里写死“只准动xxx函数,其他代码保持原样”,能稍微好点。另外建议你开个git分支再搞,反正diff乱就乱吧,回头只挑需要的改动合进去就行,别让它直接改主分支。
我最近也踩过类似的坑,后来发现多半是工具描述写得太模糊,Agent判断结果时容易“脑补”。你试试在工具返回的JSON里加一个明确的是非字段,比如“success”: true,再配合prompt里强调“只认这个字段”,情况会好很多。 另外ReAct框架确实能缓解死循环,但更关键的是给Agent设一个最大迭代次数,超了就强制返回当前最优解。我之前加了memory反而更乱,因为上下文一长GPT-4就
这种情况我碰到过,大概率是数据单一+学习率偏高的叠加效应。你那个loss卡在1.2下不去,很可能就是模型在死记你那2000条API格式,而不是在学泛化规律,3e-4对7B模型微调来说确实有点激进。建议先把学习率降到1e-4或5e-5,然后试试混合训练,按9:1的比例掺入通用代码数据,或者用那种带通用数据回放的LoRA变体。另外可以试试只微调后几层或者用更低的rank,比如8,这样对原知识的破坏会小
试试让模型先对检索段落打分排序再回答,或者直接用Cohere重排序API,能省不少事。
3090跑7B并发10个就OOM挺正常的,你这max_num_seqs开太大了,显存全被预分配出去了,实际并发根本用不到256,调成32或者64试试。另外量化版肯定要上,AWQ或者GPTQ能把显存占用砍一半,你这情况大概率能多扛几个并发。要是还不行就拆两个副本吧,反正VLLM多实例也不难搞,总比老被kill强。
说实话你这情况跟我上个月做项目时一模一样,LangChain那配置看得我脑壳疼,后来换成了自研,反而顺手多了。你提到状态管理容易乱,我建议别自己硬写循环,直接上像StateFlow或者Pregel这种带状态图的库,把节点和转移逻辑显式画出来,出错也好排查。工具调用的话,其实轻量级方案用Function Calling加一个简单的路由函数就够了,真没必要为了“编排”去背框架的复杂度。LlamaInd
这问题太真实了,我本地跑CodeLlama的时候也这样,补注释比补代码还积极。后来我琢磨了下,可能不是prompt的锅,是模型训练数据里开源项目注释占比太高,它学歪了,觉得注释是代码的一部分,写起来顺手。你可以试试在system prompt里直接写死“只输出代码,禁止任何注释”,或者用负面提示,比如“不要解释,不要重复逻辑”。另外温度调低点,比如0.2以下,能减少它自由发挥瞎编注释的概率。但说实
看到你说到表格乱这个问题,我太有同感了,之前做年报问答也是卡在这里。pypdf和pdfplumber对纯文本行还行,遇到跨页表格或者带合并单元格的直接崩,后来我干脆把表格单独拎出来处理,不跟正文混着走。如果你只是要“内容可读”,试试把PDF转成图片后走OCR,但别直接上PaddleOCR那种通用模型,推荐用专门做表格结构的(比如Surya或者TableTransformer),能输出带行列坐标的H
我之前也踩过类似的坑,后来发现多半是数据里tool_call的格式没和模型生成时的template严格对齐。你可以检查下微调时有没有把system prompt里的工具描述和示例里的参数顺序保持一致,有时候模型会学偏。另外,如果数据里“北京”和“city:北京”混着出现,模型确实容易懵,建议全部统一成带key的JSON格式再试一轮。不确定的话,先用推理阶段手动构造一个工具调用的few-shot,看
感觉你八成是撞上vLLM的pre-allocated KV cache坑了,`--gpu-memory-utilization 0.9`这参数看着是给了90%显存,但实际上它默认会按最大并发数预留KV cache,A10上18G权重加9成显存预留,3-4个请求直接把剩余空间撑爆了。建议试试把`--max-num-seqs`降到4甚至2,然后开`--enable-chunked-prefill`,让
说实话你这个问题我太有共鸣了,之前做企业知识库问答也卡在这快两周。后来我复盘发现,问题往往不在chunk_size,而在“切分单位”本身——按字数硬切就像把一本手册撕成碎片,语义边界全断了。我现在改用按“语义块”切,比如markdown的标题层级、列表项、表格行,甚至用LLM先给文档做一次“段落意图标注”,再按意图边界切,效果立竿见影。另外你提到的“标题和正文结构”,其实很关键,我建议把标题作为元
这问题我上周刚踩过一模一样的坑,最后发现是Claude Desktop自带的环境变量把PYTHONPATH给覆盖了,子进程根本找不到FastMCP的依赖。你可以试试在config里给command包一层bash -c,手动source一下虚拟环境再执行python,或者干脆把环境变量写死在command里,比如用env PYTHONPATH=/你的路径 python /绝对路径/server.py