
深夜测试频道
Lv.1主要整理软件测试相关的学习笔记与工程经验,内容覆盖问题排查与调试、架构设计。希望内容既讲清为什么,也说明怎么做,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
我之前踩过这个坑,YOLOv8-seg导出ONNX时如果dynamic_axes只设了batch没设height/width,TensorRT那侧就算加了--dynamicShapes也会按固定分辨率建engine。建议你用polygraphy或trtexec先dump一下onnx的输入shape,确认h/w维度真的是-1。另外TensorRT 8.6对seg模型的mask分支动态reshape比
这个思路不错,收藏了。
感觉是MCP这边的会话状态管理在作怪,很多server默认只传最近N轮给模型,你调max_tokens只是改生成上限,跟历史保留策略不是一回事。我之前也踩过,后来在server配置里把上下文窗口和消息保留条数分开设,明确指定保留最近几轮再加上工具结果摘要,才稳住。微调数据里如果长依赖样本偏少,模型本身也容易在多轮后飘,建议先排除server截断再怀疑模型。可以先在日志里打印实际送进模型的messa
你们这个量级和需求,Qdrant其实挺合适的,几十万到百万chunk单机完全扛得住,payload过滤也够用。我之前也是Milvus单机被etcd和MinIO折腾得够呛,换Qdrant之后一个二进制加个volume就起来了,内存占用小不少。生态确实没Milvus热闹,但Python客户端够用,真到百万级以上再考虑集群也不迟,它也有分布式模式。唯一提醒是提前把过滤字段的索引建好,不然带条件查询会慢,
学到了,感谢分享!
刚入门,这个对我帮助很大。
学到了,感谢分享!
刚入门,这个对我帮助很大。
这个思路不错,收藏了。
我一般是直接在项目根目录丢个 `.cursorrules`,把团队规范写进去,比如“优先用 type 而非 interface,无依赖数组的静态函数不要包 useCallback”,它基本就老实了。不过有个坑,规则太长它会选择性忽略,建议拆成几条短句分点写。另外 `useMemo` 那个真不怪它,模型默认觉得包一层更“安全”,你得明确告诉它只在依赖变化频繁或计算量大时才用。
这个坑我也踩过,RecursiveCharacterTextSplitter对代码确实不太友好,它本质还是按字符递归找分隔符,压根不理解语法结构。你提到的AST思路是对的,我之前试过用tree-sitter先把文件解析成函数和类的节点,再按节点边界切片,效果比纯文本切好很多。不过要注意一点,切完之后每个chunk最好把文件顶部的import和全局变量拼回去,不然模型拿到一个孤零零的函数体,连依赖类
量化确实有影响,但没你想的那么大,我试过Q4和Q8对比,主要差在长上下文和复杂推理上。你那个system prompt太笼统了,本地小模型更吃具体指令,比如直接说“用Python 3.10写,带类型注解和异常处理”效果会好很多。另外官方Demo背后可能挂了RAG或者多轮重排,别光盯着prompt看。建议试试把温度降到0.3左右,7B模型高温度容易胡编,分步引导比few-shot更省token也更稳
loss 0.8其实不算特别离谱,但验证集BLEU只有0.2确实说明模型没真正学到东西。你rank=8加alpha=16,这个配置本身没问题,但LoRA在代码任务上对target modules的选择很敏感,如果只挂了q_proj和v_proj,建议把k_proj、o_proj甚至gate_proj都加上,代码补全这种结构化任务对attention和FFN的依赖比普通文本强不少。学习率2e-4对L
MCP本身是请求-响应模式,工具调用没返回之前Agent确实拿不到结果,所以想在工具执行中间插话,单靠协议层做不到。但可以在Agent侧绕一下:调工具之前先发一条普通消息给用户,然后再发起工具调用,这样体验上就是先回应再等待了。如果框架支持流式输出,还能把“正在查询”拆成几个字慢慢吐出来,显得更自然。我现在的做法是把耗时操作放到后台任务里,Agent先回复确认,轮询到结果再接着往下走。
我一般会在项目根目录丢一个 `.cursorrules`,把团队规范写进去,比如优先用 type、禁止无意义 memo 这些,它基本能听话。但 `useMemo` 那个确实烦,模型好像默认“性能优化=好代码”,得在规则里明确说只有依赖变化频繁或计算量大才用。另外 review 时别只看风格,有时候它包的 memo 反而让依赖数组写错,出过 bug。你们组有没有统一配置?没有的话建议先对齐规则再让
7B写长函数确实容易断片,换14B会好很多。vLLM的stop token配置也查一下,有时候是它提前截的。
这种情况挺常见的,2万条数据听着不少,但客服对话里真正涉及商品信息、订单状态这类需要精确引用的样本可能占比很低,模型大部分时候学到的还是那种“亲,您好呢”的套话。你看到的“时好时坏”很可能是因为模型在生成时对上下文里关键实体(商品名、用户名、订单号)的注意力根本没稳住,LoRA只调了低秩矩阵,对底层token embedding和位置编码的影响有限,遇到训练分布外的名字或商品就容易瞎编。建议先别急
我之前在7B微调上也踩过这个坑,torch.compile在LoRA这种小参数量更新的场景收益确实很有限,反而编译开销和额外显存容易把优势吃掉。reduce-overhead模式主要是给推理或小batch反复执行同一图用的,训练时梯度图一直在变,它那套CUDA graph缓存基本发挥不出来。你可以试试default模式,再配合mode="max-autotune"看看,但别期待太高。我现在训练基本
4090跑70B得靠4bit量化,但速度别指望,7B日常够用,上下文爆显存试试限制长度。
我一般会先固定一个输出结构,比如要求“问题点+原因+修改建议”三行,如果模型跑偏就说明它没完全抓住意图。换模型差异大很正常,Qwen偏指令跟随,Llama有时更爱自由发挥,可以拿同一组测试用例跑几个模型对比。交叉验证我也用过,让另一个模型判断输出是否满足要求,但别全信,它自己也会飘。最实用的还是把“简洁”这种模糊词换成可检查的约束,比如“不超过三句话,每句必须指出具体缺陷”。