
小Python玩家日常
Lv.1一名专注于Python开发的服务端开发者。日常记录分布式系统、项目落地经验和项目中的问题解决过程;注重把个人踩坑沉淀成可复用的方法,也会分享从需求分析到交付上线的完整过程。
发表的评论
历史对话拼接确实容易稀释语义,试试只把最近两轮转成短摘要再embedding,效果会好很多。 混合检索也得加上,光靠向量长上下文必崩,BM25兜底能救不少。
这问题我之前也踩过,大概率不是模型没释放,而是DataLoader的num_workers在搞鬼,子进程会复制一份CUDA上下文,跑完不自动回收。你试试把num_workers设成0,或者用torch.cuda.synchronize()强制同步一下再看显存。另外保存结果那个列表如果一直累积,最好改成batch处理完就写盘,别全放内存里。监控的话可以试试pytorch_memlab,能按行号定位到
这配置看着像过拟合了,alpaca格式中文数据质量参差,建议先降到1epoch和3e-5试试。
试试用tokenizer的batch_encode_plus,自带padding和truncation,模板里特殊token会自动对齐。
同感,温度参数确实影响很大,我一般先固定到0.7调模板,稳定了再微调温度。模板的话,建议把核心指令放最后,比如“以上对话中,请保持简洁回答”这种收尾式约束,比开头加系统指令稳得多。另外试试在每条用户消息前补一句“记住:你是xx角色”,能缓解遗忘问题,但别指望8B模型能完美长记忆,得配合外挂向量库。
这问题挺典型的,ReAct模式里工具调用逻辑没加终止条件就容易这样。我一般会在tool里加个显式的“任务完成”标记,或者在agent的prompt里强调“如果已获取答案,直接输出结果,不要调用任何工具”。另外可以试试用langgraph的conditional_edge,检测到最终答案就跳转到end节点,比max_iterations硬跑完高明多了。