
一路升级全栈修炼册
Lv.1记录从不会到会、从能用到做好。当前重点关注全栈开发,通过性能优化、代码可维护性持续提升能力;关注技术选择背后的成本与边界,并把过程整理成可复用的学习记录。
发表的评论
Agent这块我也有同感,之前用GLM-4调工具链确实经常翻车,参数对不上是常事。4.5如果真把多轮状态保持做扎实了,那比刷榜有意义多了。不过那个30%一致性提升,我也觉得得看测试集怎么设计的,开放性任务上数据质量的影响可能比架构大。等实测跑几个真实workflow再下结论吧。
我也遇到过这问题,后来发现光在prompt里说没用,得把types文件用@引用到对话上下文里才稳。另外tab补全确实不太吃类型约束,换成agent模式或者手动选中类型定义再让它生成会好很多。还有个偏方是在组件文件顶部先import好类型,AI看到实际引用后乱塞any的概率会下降。cursor有时会自作聪明重定义类型,我一般生成完立刻让它对比types.ts做一次diff修正。
LoRA微调本身可训练参数就少,计算密度低,torch.compile那套算子融合的收益基本被吃掉了,减速不奇怪。reduce-overhead模式主要针对小batch推理场景,训练用它反而容易踩坑,试试default或者max-autotune。显存涨是正常的,编译会缓存一些中间结果和额外kernel,deepspeed stage2下更明显。真想压吞吐的话建议先关掉compile跑个basel
我也踩过这个坑,本地跑Agent最折磨人的确实不是模型选型,而是输出格式的稳定性。你遇到模型把工具返回的JSON当普通文本吐给用户,本质上是它没分清“Observation”和“Final Answer”的角色边界,7B模型尤其容易犯这毛病。我后来换成带function calling微调过的Qwen2.5-7B-Instruct,再配LangChain的structured output par
说实话我对8B模型没啥期待,它记忆和指令跟随本来就有限,模板再花哨也救不了。我自己试下来,把系统提示词压到两三行,明确写“只回答事实,不闲聊”,然后对话历史每轮都截断到最近六条,效果反而比加一堆角色设定稳。 温度这块我也踩过坑,0.6到0.7比较安全,高了必跑偏。建议你直接拿Llama官方推荐的chat模板改,别自创结构。至于万能模板,真没有,每个模型对标点和关键词敏感度都不一样,只能自己拿几十
8卡3090跑70B光权重就要140GB,加上KV cache和激活值,192GB其实很紧。你TP=8每卡22GB说明已经接近极限了,慢大概率是跨卡通信瓶颈,试试TP=4+PP=2,同时把KV cache比例调低点。int8量化能省一半显存,速度反而可能更快,AWQ或GPTQ都可以试。4张卡跑int8其实挺稳,但吞吐量肯定不如8卡,关键看你要并发还是单流延迟。
我跟你情况差不多,也是本地跑Qwen系列配LlamaIndex,当时在Chroma和Qdrant之间纠结了好久。Chroma确实轻,但数据量到几十万条embedding后查询延迟会明显上来,而且它那个持久化偶尔会出些小毛病,不太适合公司内部长期用。后来换了Qdrant,docker起个容器也就几分钟的事,跟LlamaIndex的集成很顺滑,几乎零代码改动迁移过来的。中文文档检索这块,我觉得关键不在
八成是数据格式问题,中文医疗对话得带system prompt约束角色,另外试试3e-5的学习率。
说实话你这个情况我太熟了,7B模型加载权重本身就差不多要14G(FP16),加上KV cache和中间激活,25G起步真不算离谱。LoRA微调时显存占用高是因为反向传播要存梯度,但你推理时还这么吃显存,大概率是max length或者batch size设太大了,你可以试试把max length砍到512,batch size设成1,应该能压到20G以内。另外你说的int8量化没效果,我猜你是用t
同款项目路过,合同抽取这块Qwen2.5-7B确实容易在措辞上翻车,我试过把“提取”改成“识别”结果日期格式都变了。后来发现一个笨办法,就是system prompt里用极简的伪代码描述任务,比如“输入文本,返回字段列表,值必须原文子串”,比纯自然语言稳定很多。JSON约束那个我一开始也踩坑,后来不用response_format,改成在prompt里给一个残缺的JSON模板,比如“甲方:,乙方:
提取类任务加人设确实容易添乱,模型光顾着端着了。不如直接给它看几个标注好的例子,比啥角色都管用。
我之前也踩过类似的坑,CrewAI里Agent之间传参真不是简单塞个字符串就行。你那个SQL带引号和换行符的问题,我后来是直接在生成Agent的prompt里强制要求“只输出纯SQL,不要任何解释或格式化”,同时用正则把非SQL字符全剥掉,算是勉强能跑通。不过你说清洗逻辑被Agent误解成新任务,这我太有同感了,有时候模型会把后处理指令当成任务的一部分,反而越搞越乱。 langchain的out
我之前也踩过这个坑,后来发现单纯调top_k没用,关键是分段粒度。建议试试把长文档按语义切块而不是固定长度,比如用句向量相似度聚类,这样能避免一个段落里混着好几层意思。 另外rerank别一上来就上重模型,先用BM25和向量分数做个简单融合,把明显不相关的滤掉,再对剩下几十条用cross-encoder精排,成本低很多。我试过bge-reranker-base,效果比纯faiss提升挺明显的。
3090跑7B并发10个就OOM,大概率不是vllm配置问题,是显存带宽和KV cache的物理瓶颈。max_num_seqs调太高反而会加剧显存碎片,试试降到32-64,同时把gpu_memory_utilization降到0.7以下留点余量。量化肯定要上,AWQ或GPTQ的4bit能省一半多显存,但注意vllm对量化格式支持有差异,实测AWQ兼容性更稳。如果还顶不住,不如直接上2个副本各占半张
大概率是Go的训练语料占比少,不是姿势问题,加再多规则也治本难。
2e-4对LoRA确实偏高了,尤其你epoch还3,试试1e-4加早停,数据里混点通用语料能救回通用性。
试试按代码/表格/正文拆开分别建索引,再加个rerank,固定500字符确实太糙了。
这个现象我遇到过,问题大概率不在Embedding模型本身,bge-large-zh-v1.5对细粒度语义的区分其实够用了。512的chunk对报销这种主题类检索偏大,容易把不同报销类型的上下文混在一个向量里,建议砍到256左右试试。另外reranker值得加,尤其你的TopK拉大后,用bge-reranker-base过一遍能明显把“差旅费”相关的长尾片段压下去。还有个取巧的办法,检索前先做个关
先查索引类型,你这数据量用HNSW大概率比flat差不少,换一下看看差距大不大。 试试把chunk缩到150字以内,专业术语多的段落别硬切,按标题层级合并再分。
几百个PDF的规模真不用纠结,LlamaIndex的文档直接索引能力能省不少事,LangChain那层抽象后期改起来确实头疼。生产环境的话,LangChain的坑在版本更新太激进,API说变就变,LlamaIndex则是对复杂查询的优化文档少,出了问题得自己啃源码。个人建议先花两天用LlamaIndex把核心流程跑通,等真需要工具链生态了再补LangChain不迟,毕竟数据管道才是你这项目的命门。