
深夜测试频道
Lv.1主要整理软件测试相关的学习笔记与工程经验,内容覆盖问题排查与调试、架构设计。希望内容既讲清为什么,也说明怎么做,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
我一般是直接在项目根目录丢个 `.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有时更爱自由发挥,可以拿同一组测试用例跑几个模型对比。交叉验证我也用过,让另一个模型判断输出是否满足要求,但别全信,它自己也会飘。最实用的还是把“简洁”这种模糊词换成可检查的约束,比如“不超过三句话,每句必须指出具体缺陷”。
相似度阈值加时间衰减就够用了,别用哈希,语义相同但表述不同照样重复。
7B模型做function calling确实容易翻车,我试过Qwen2.5-7B也遇到类似情况。后来换成Qwen2.5-14B或者专门微调过的Hermes-2-Pro系列,格式稳定性提升特别明显。如果非要用7B,建议用vLLM部署时开guided decoding,直接在解码阶段约束JSON schema,比事后写parser靠谱多了。prompt里把工具定义写成few-shot示例也有帮助,但
这个坑我去年底踩过,当时也是想把内部知识库模型挂到企微群里,结果卡在认证上折腾了快两周。企业微信的OAuth2.0拿到的只是用户身份,跟模型服务的token完全是两套体系,MCP自带的认证确实偏简单,它默认你后面有个可信网关。中间层做映射是绕不开的,但别用同步阻塞那种,用Redis缓存用户和token的映射关系,再挂个短时效的JWT给模型服务,几十个人并发其实还好,真正怕的是每次调用都去查库。我们
num_workers大了每个worker会缓存数据到共享内存,显存涨可能是pin_memory把数据锁到页内存导致间接占用。先试试pin_memory=False看看还涨不涨。
6G显存跑7B确实勉强,换4B量化版流畅不少,代码补全够用了。
固定长度切chunk对技术手册这种结构化文档其实挺吃亏的,容易把一段完整说明从中间截断,检索时自然抓不到关键段落。重排序变差可能是因为召回阶段就已经漏了目标chunk,rerank只能在候选里挑,候选里没有再排也没用。建议先别急着换embedding,试试按标题或段落结构切,再给chunk加上所属章节的标题做上下文补充。另外bge-large对中文技术文本一般够用,可以先用几个典型query手动看
我最近也踩过类似的坑,写周报摘要时加了“你是资深财经分析师”之后,模型开始自己脑补数字,明明原文没提增长率它也能给你编一个出来。后来我把角色设定删了,改成直接说“请从以下文本中提取三个要点,每条不超过20字”,反而稳得一批。我觉得这跟模型对角色标签的“过度解读”有关,它一旦认定自己是某类专家,就会倾向于表演那个专家的语气和套路,而不是老老实实执行你后面的约束。另外角色前缀有时候会抢占注意力权重,尤
我一般直接在Tool层面加tenacity装饰器,配置stop_after_attempt(3)加指数退避,比在Agent外面套循环干净多了。LangChain的Callback其实不太适合做重试控制,它更偏向监控。重试间隔建议从1秒起步翻倍,最多等个十几秒,同时最好区分下错误类型,像连接超时这种可以重试,参数错误就别浪费次数了。
几万条数据ES确实能扛,但百万级就得小心了。我去年用ES 7.x做过一个百万级向量的场景,KNN查询延迟直接飙到几百毫秒,并发一上来CPU就成瓶颈了,后来加了专门的向量索引字段和调整merge策略才勉强稳住。ES的短板主要在内存占用和段合并上,向量维度一高,堆外内存压力很大,分片数得控制好,一般建议单分片不超过50G,副本也别太多。如果你们QPS要求不高、延迟能接受几百毫秒,ES凑合能用,但要是实