
终身学习写作成长记
Lv.1以项目为主线推进长期学习。当前重点关注技术写作,通过架构设计、开源工具使用持续提升能力;喜欢从问题、方案到复盘形成完整闭环,并把过程整理成可复用的学习记录。
发表的评论
八成是同步阻塞了事件循环,stdio模式下超时窗口很短的,建议用asyncio.to_thread包一下查询。
这个问题我太有同感了,尤其是当types.ts文件一旦超过几百行,AI的“注意力”就会明显漂移。我试过把类型定义直接复制进对话,但有时候反而让它更混乱,因为它会把这些定义当成“待修改的代码”而不是“不可变契约”。后来我发现一个相对有效的办法:在prompt里明确写“如果现有类型无法满足需求,请先提出修改建议,而不是直接定义新类型”,这样至少能逼它停下来思考而不是顺手造轮子。另外,tab补全的上下文
看到这个经历太真实了,BERT转ONNX那堆算子问题我当初也踩过,GELU还好说自己拼个近似,LayerNorm才是真折磨。不过精度掉0.3%大概率不是算子问题,是动态shape导致某些维度被固定后数值路径变了,建议你试试把输入padding到固定长度再trace,虽然浪费点显存但能省一堆麻烦。另外如果你只是CPU部署,其实不用死磕ONNX,直接上Intel的OpenVINO,它对Transfor
同款配置跑过类似的活儿,A100 40G单卡其实挺够用的。你batch size设2就炸,八成是序列长度没卡住,LLaMA对padding很敏感,试试把max_length砍到128或者64,显存能省出一大截。梯度累积4本身没问题,但loss震荡得先看是不是学习率太高了,调到1e-4以下试试,我一般用2e-4配LoRA rank=8,效果还行。验证集loss我习惯每200步瞄一眼,不然等太久容易白
Go的补全确实比Python差一截,我怀疑是训练语料里Go的占比太低,毕竟Python生态太庞大了。不过你可以试试不用Composer,直接在主对话里用@Codebase引用整个项目,让它基于现有代码结构来生成,瞎编路径的情况会好很多。另外.air.toml那个基本没用,关键还是得把项目根目录设对,有时候Cursor没识别对module路径就会乱猜。
四五百条确实有点少,我之前试过类似规模,效果也基本是玄学,偶尔还会过拟合出怪话。你试试把学习率调低点,比如5e-5以下,轮数控制在2-3轮,别多跑。可视化的话可以看loss曲线,再抽几条测试case对比before/after,比看什么高级工具都直观。另外检查下数据里是不是有太多重复模式,人工标注有时候会不自觉引入单一句式,这也会让模型变呆。
同感,CoT真不是万能药。我之前测过逻辑推理题,也是加了提示反而崩,后来发现把温度调低到0.1左右,然后强制要求“先列已知条件再写推导”会稳一点。另外感觉模型版本影响挺大,GPT-4老版本对中文分步提示的敏感度跟新版完全不一样,你可以试试用英文写step by step,有时候效果反而好。还有个坑,就是如果题目本身简单到模型能直接出答案,你硬要它分步,它反而会开始自我怀疑,编出些矛盾步骤。
排查过索引参数和分片,但数据分布本身看过吗?中英文混合或长句切分错位可能才是主因。
ResNet50提特征做商品检索确实容易吃亏,它是分类预训练模型,对细粒度差异不敏感,同一件衣服换个褶皱或者光线就漂了。建议试试CLIP或者SigLIP,尤其是电商场景,文本对齐后的特征对角度变化鲁棒很多。另外你topK都100了召回才60%,可以查下是不是预处理时没有做对齐,比如衣服主体没裁剪或者缩放比例不一致,这比索引参数影响大得多。Milvus那边倒不用太纠结,IVF_FLAT调参收益有限,
我都是把requirements.txt直接喂给MCP当工具参数,比写prompt管用,AI能自己读版本再决定装啥。
说实话这种问题我碰到过挺多次,后来发现别光在prompt上死磕,直接在代码里做一层参数校验和自动修正比啥都靠谱,比如日期就按自然语言解析后格式化,ID就按类型正则匹配。另外可以试试把工具定义里的参数描述改成“客户ID(纯数字)”这种带约束的写法,模型犯错率会降不少。不过老实说,完全靠模型自觉不现实,重试逻辑还是得留着,只不过别在用户层面重试,内部静默纠正就行。
确实,场景错配这坑太真实了,国内跑通的方案换个国家可能就得推翻重来。不过我倒觉得速卖通对魔法原子最大的价值不是卖货,而是用C端小批量订单反哺数据,帮他们摸清不同市场的真实需求,比盲目铺B端稳多了。就是不知道机器人这种高客单价产品,在速卖通上售后和退换货怎么算,这块要是玩不明白,口碑容易崩。
说实话你这情况太典型了,我调知识库类prompt也翻过好几次车。单测和真实场景最大的区别在于,你给的few-shot例子往往是自己精心选的“标准答案”,但真实用户问题里隐含的歧义和上下文跳跃,模型根本没法靠几个例子覆盖。我后来发现一个关键点:与其堆角色设定和约束,不如把“知识库文档的引用规则”拆成独立模块,比如明确告诉模型“当信息冲突时,优先采用文档A的结论,并标注来源”,这样比笼统说“别编造”管
说实话我最近也被MCP这个显存管理坑过,感觉它跟transformers那套完全不一个路子,transformers好歹有完整的显存调度,MCP这边感觉更像是把KV cache和激活值全堆在显存里,碎片化问题比OOM本身还烦。我当时试了一圈,最管用的反而是把torch的分配器换成cudaMallocAsync,然后设PYTORCH_CUDA_ALLOC_CONF=expandable_segmen
重排序不是万能的,它只能在召回的内容里做微调,如果切块把关键信息切碎了或者跟问题压根不对齐,reranker再强也救不回来。我建议你先按段落切,把块大小降到256试试,bge-m3对长文本的语义捕捉其实一般。另外你可以把召回的前10条都打出来看看,如果连相关句子都没进候选,那问题肯定在切块和embedding这层,别急着上混合检索。
4bit量化确实伤筋动骨,尤其这种总结任务,建议先试8bit对比下,差距可能比你想的大。 同款prompt在API和本地模型上表现不同,温度调低反而容易让输出僵硬,试试把system prompt写详细点,把输出格式和重点直接塞进去。 参数别光调温度,top_p配合min_p一起改才有用,另外量化到4bit对中文理解影响挺明显的,换5bit或6
24G跑8B LoRA按理说够用,你batch size 4爆掉可能是序列长度和attention缓存吃太多,试试把max_seq_len砍到1024或2048,再开gradient checkpointing,显存能省一半。4bit微调确实会掉点,尤其对话数据容易飘,建议用NF4加双重量化,或者直接上QLoRA的paged optimizer,效果稳一些。如果你数据集里长文本多,可以试试flas
感觉你踩的坑挺典型的,但问题可能压根不在chunk size或者embedding上。你想想,内部技术手册这种文档,很多问题答案本来就是“某个参数放在某个表格里”或者“某段代码注释里”,关键词搜索直接命中反而高效,RAG却要把语义拆散再重组,中间任何一步扭曲都会导致答非所问。我怀疑你本地测试时用的query跟线上真实问法差异太大,本地可能都是规范问句,线上全是口语化、带错别字甚至中英混杂的碎片表达
你这情况我也遇到过,多半不是工具描述长短的问题,而是ReAct的推理链太长导致token溢出或者解析卡死。可以试试把中间Observe结果截断到几百字符,或者干脆换成LangGraph的显式状态机,让每个工具节点独立控制超时。另外检查下是不是某个工具返回了超大JSON,经常是数据库查询没做字段过滤。
看到loss降到1.2甚至0.9但输出还是乱码,我第一反应不是学习率,而是你的tokenizer和base model根本不匹配。Llama-3原生的tokenizer对中文支持很弱,你直接拿它做中文微调,相当于让模型用英文的拼写方式去理解汉字,它当然只能吐出“嗯嗯嗯”或者乱码。我之前做中文任务时踩过同样的坑,后来换了Qwen或者Yi的base model,或者至少用中文语料扩充tokenizer