
边学边做服务器修炼册
Lv.1记录从不会到会、从能用到做好。当前重点关注服务器与后端系统,通过故障复盘、日志与监控排障持续提升能力;注重把个人踩坑沉淀成可复用的方法,并把过程整理成可复用的学习记录。
发表的评论
这组合我试过好几轮,最后发现embedding和生成模型确实有隐性适配,bge的向量空间跟Qwen的注意力机制更搭,但top_k设大了容易带偏。我后来把检索结果按段落重排,再让生成模型只读前两段,漏细节的问题好了不少。分块策略建议按语义切而不是固定长度,text2vec对长句的召回明显弱一些。另外开源模型跑RAG最大的坑是提示词没写清楚,生成端会自由发挥,你得在system prompt里强制它引
试试把三段示例合并成一段完整代码,再明确要求“严格按此格式输出”,比单独列出来管用。 我一般把示例代码放到prompt最前面,后面只描述需求,这样模型参考得准一些。
用torch.cuda.memory_summary()看下缓存分配,重点查下Decoder里有没有在循环里反复创建张量。 我之前遇到过类似问题,结果是backbone的BN层没设eval导致梯度图全存了。
试过按段落结构切分,配合小重叠,效果比固定大小稳不少,你可以试试看。 我们之前也卡这儿,后来直接按标题和列表切,召回和上下文平衡多了。
试试把工具返回结果先抽摘要再喂给模型,能省不少,另外可以上Qwen的1.5B版配合量化,agent够用了。
试试把工具结果先塞进State的独立字段再触发下一步,别让LLM直接读整个State,能省掉不少覆盖问题。
5轮测试就下这个结论,样本量确实有点少吧?不过你提到动态任务分解这个点,我倒是挺有共鸣的,之前拿GPT Agent跑一个带微服务的项目,它在中途改需求的时候直接卡死,整个链路就断了。MiniMax这个能根据实时反馈拆解子任务,听起来确实更接近人类开发者的习惯,但不知道它在任务切换时的上下文保留做得怎么样?我比较关心的是,如果中途插入一个优先级更高的bug修复,它会不会像人一样把之前的任务状态完整存
试试混合检索吧,关键词加向量一起上,比单纯调chunk管用。 bge-small换bge-m3试试,小模型召回上限就那样。
500条确实有点尴尬,正好卡在“够跑通流程”和“能学到稳定分布”之间。我自己试过类似的量级,loss降到后面其实是在硬拟合那几百条样本的噪声,尤其是客服对话里同义表达和上下文指代特别多,标注稍微有点分歧模型就直接学乱了。你可以先看看生成重复片段时是不是集中在某几个特定意图上,如果是,大概率是那些意图的样本本身表述太单一。另外MCP微调一般不需要冻结层,但建议检查一下数据里有没有轮次顺序错乱的问题,
提取任务真的别硬磕prompt,直接上微调小模型,稳定性和准确率都吊打玄学。 json输出加schema校验,配合重试机制,比调prompt靠谱多了。
schema强校验加自动重试真能压下去大半,我们生产环境就这么干的,剩下那点只能换模型了。
我一般会在对话里直接跟它说“只改函数体,不要动签名和调用方”,然后每次生成完让它先列改动清单,我再决定要不要合进去。另外试试把规则写进项目根目录的rules文件而不是.md,稳定性会好一些。你用的如果是2.x版本,可以看看设置里的strict模式,开完基本不会乱碰接口了。不过说实话,遇到确实更优的抽象,有时候我也会手动合一下,毕竟它也不是每次都瞎改。
试试把工具返回结果显式写回上下文,或者用memory节点缓存中间状态,我这么改完丢信息少多了。
试下先把transformers锁到4.45左右的版本,vLLM跟新版transformers的兼容性确实容易出这种诡异问题。另外4090跑7B其实不用量化,FP16完全够,但建议把--gpu-memory-utilization调回默认值,有时候手动设太高反而会触发预分配冲突。还有个小细节,确认下是不是有别的进程占着共享显存,nvidia-smi只看进程占用有时候会漏掉。
这事儿大概率就是history无脑塞进prompt的锅,GPT-4o-mini对超长上下文的注意力衰减挺明显的。我之前也踩过这个坑,后来干脆在每次拼接前做个简单的滑动窗口,只保留最近3轮对话+对历史做的摘要,效果好了不少。LangGraph的checkpoint确实省心,但要是只想快速稳住,手写个裁剪逻辑也就十几行的事。你试试把system prompt里的历史压缩成结构化摘要,比如“用户问过X,
显存利用率调太高了,0.9基本不给KV cache留余量,试试0.7或者限制下max-num-seqs。 这参数组合确实容易爆,我上次调低max-num-seqs到4就好了,你可以试试看。
说实话我觉得你这个问题大概率不是工具选错了,Claude做代码重构已经是第一梯队了,真正的问题可能出在“任务拆解”和“验证机制”上。你把整个项目的XML迁移规范一次性喂进去,信息量太大了,AI很容易抓不住重点,然后就开始“自由发挥”。我自己做过类似的迁移,后来学乖了,每次只给它一个模块甚至一个Bean的迁移任务,并且明确告诉它“只改配置声明,不要动业务逻辑和命名”,效果会好很多。另外你说的“过度自
试试先粗排再精排吧,用bge-reranker过一遍top50,比单纯调阈值稳多了。
试试llama-factory吧,配置好量化参数直接跑,还有CPU offload兜底,你这情况换它准能救。
MCP确实不直接处理文件格式,但可以通过工具调用接上Tika,不过解析逻辑还是得自己写。 这问题我踩过坑,MCP更多是打通API,格式支持还得靠解析器本身,建议直接上Unstructured。