
一只乌鸦爱看日志
Lv.1在需求、Bug和灵感之间来回奔跑。关注技术学习与项目实践,主要分享持续成长、读书与思考和日常踩坑;不追求堆砌概念,只记录验证过的经验。记录不一定完美,但力求真实、清楚、可验证。
发表的评论
四五百条确实有点少,尤其你要是想让模型学新场景,这点数据可能连“入门”都算不上。我之前试过一千多条才勉强看到点变化,而且学习率调太大反而容易崩。你可以先拿一小部分数据跑几个不同参数对比下,看看loss曲线有没有异常。可视化的话,wandb或者tensorboard都挺方便的,能直观看到训练过程的变化。
我之前也是直接HTTP暴露的,后来换成Caddy反代加OAuth2 Proxy做前置认证,IDE那边配一次token就行,省事不少。SSH隧道其实更简单粗暴,本地起个端口转发直接走stdio,连HTTPS证书都不用折腾。WebSocket这块你没理解错,MCP官方transport目前就是stdio和HTTP+SSE,WebSocket得自己封装一层,不推荐。
可以试试在prompt里明确说只改指定文件别动Hook,或者用.cursorrules锁住已有代码。我一般先让AI读一遍再动手,不然它老自作主张。
all-MiniLM-L6-v2 在中文场景下确实不太行,它训练语料以英文为主,中文语义空间压得很糊,检索跑偏很正常。3090 跑 bge-m3 其实还好,FP16 大概占 2G 多显存,关键它支持 8192 长度,你长文档细节定位这个痛点它是对症的,不用切太碎的 chunk。dense-x 和 colbert 这类晚交互确实召回更细,但索引体积和检索延迟都上来了,3090 单卡做在线服务会比较紧
先粗排再精排是标配,bge-reranker直接上就行,别纠结cross-encoder了。
MCP的分布式环境变量得手动设对,torchrun的默认参数跟它不兼容,试试加--nnodes和--node_rank。
推理结果别老往列表里塞,改成每批直接转CPU或写文件,八成就是它把图给拖住了。
我之前也踩过类似的坑,最后发现是MCP回调里做了同步的日志刷盘,把主线程给拖住了。你可以先抓一下py-spy看看那多出来的0.7秒到底耗在哪,别急着怀疑CUDA stream。另外每10步才调一次的话,我倾向于用独立进程加队列通信,别在线程池里跟DataLoader抢GIL,那个锁竞争比你想的严重。
别直接拿Q-A对去微调,效果会很飘。我踩过坑,最好构造(query, positive_doc, negative_doc)三元组,正样本用检索结果里人工标注的相关文档,负样本从top-20里挑那些看着相关但实际不相关的,这样模型才能学会区分细微差异。正负比例我试下来1:3到1:5比较稳,负样本太多会把模型带偏。另外注意负样本别全选随机文档,那种简单负例训完提升不大,得掺点hard negativ
你这需求我太懂了,之前处理类似报表也折腾半天。关键不是把所有细节都塞进去,而是给AI一个“最小可行样本”,比如贴两行真实数据和目标输出格式,让它照着模板做。另外把“合并”明确成“按行堆叠”或“按列拼接”,再顺手让它加个编码检测和异常跳过,基本一次就能跑通。