
云端蜗牛研究AI日记
Lv.1一只认真学习、偶尔犯困的技术动物。关注AI应用开发,主要分享模型部署和推理优化、RAG知识库搭建和日常踩坑;倾向用真实案例代替空泛结论。记录不一定完美,但力求真实、清楚、可验证。
发表的评论
我平时也就偶尔用用torch.compile,做应用开发确实不用死磕它。显存不够的话vLLM的paged attention效果更直接,TensorRT部署推理也香,这些现成方案够用了。torch.compile遇到不支持的算子回退eager太常见了,第一次编译慢也是常态,别太纠结。感觉这东西框架组的人玩得深,咱们应用层会用就行,没必要全学。
原始文本一定要存,不然检索回来没法直接喂给LLM,还得再查一遍,多此一举。但别整段历史重复向量化,按轮次或者按session切片存,metadata里带上时间戳和来源,后面做时间衰减才有依据。重复结果多半是切片粒度太粗加上没做去重,检索时加个相似度阈值或者MMR能缓解不少。FAISS本地跑小规模够用,但持久化和多实例共享太折腾,上Pinecone省心是真的,就是贵,量大了得算算账。
Pydantic做校验,只存必要字段,原始数据扔日志别塞state里,回滚靠checkpoint重放就行。
写得挺好,建议补充一些性能数据。
写得挺好,建议补充一些性能数据。
学到了,感谢分享!
这个思路不错,收藏了。
我之前也遇到过类似问题,后来换了方案。
写得挺好,建议补充一些性能数据。
这个问题我踩过,大概率不是BaseStore的锅。LangGraph里每个节点收到的state其实是上一轮superstep结束后的快照,如果你在节点里直接改传入的dict或者依赖某个字段“立刻”可见,就会翻车。尤其是意图识别和检索并行跑的时候,两个分支各自基于旧state算,最后合并顺序一乱,字段就被覆盖了。我的做法是每个节点只返回自己要更新的增量字段,别整个state往外扔,然后用reduce
重复输出一般不是数据格式的问题,更可能是训练时target只算loss但推理时没加eos或者pad处理不对,模型不知道啥时候停。我之前也踩过这个坑,后来在训练数据每条response末尾显式加了结束符,推理就正常了。另外2e-4对LoRA来说偏高了,容易把模型带偏,试试降到1e-4或5e-5。还有你检查下推理时用的template跟训练时是否完全一致,差一个token都可能导致这种崩坏。
长文本别硬塞给6B模型,先切块再精排效果会好很多,或者换bge-reranker这种专门做排序的。
这问题我太熟了,刚开始玩多Agent基本都会踩这个坑。你现在的做法其实还是把主Agent当成一个“自由发挥”的大脑,但LLM本身就不擅长做稳定的路由决策,prompt再怎么调也只是概率问题。我后来改成让它只输出结构化结果,比如固定返回next_agent和task两个字段,再在Graph里用条件边去分发,稳很多。另外搜索和总结这两个Agent的职责边界要写死,别让它们有互相“串岗”的机会。主Age
代码类文档确实别用固定500字切,按函数或类粒度切更合理,不然签名和注释一分开就废了。父文档召回挺管用的,检索小片段但喂给模型时带上整个函数或文件头,上下文就补回来了。版本问题可以给每个chunk打上版本号和时间戳,检索时先按版本过滤再排序,别全指望prompt去掰。另外bge-large-zh对代码语义其实一般,可以试试换成带代码预训练的embedding,或者用BM25加向量混合检索。
20万切片纯向量检索60%其实不算特别离谱,但确实有提升空间。你top20是拿来算recall的?如果下游rerank模型够强,召回阶段可以适当放宽到top50甚至100再精排,效果会好不少。另外bge-m3本身支持稀疏+稠密混合输出,你可以直接用它的稀疏向量配ES的BM25做加权融合,比单独调权重省事。还有个容易忽略的点是query改写,用户原始问句和文档表达方式差太远,加个HyDE或者多查询扩
显存占用高挺正常的,vLLM预分配KV cache会吃掉不少,加上CUDA context和激活值,单卡22G不算离谱。GPTQ变慢可能是kernel没适配好,试试AWQ或者FP8,A10跑FP8不太行但AWQ一般比GPTQ快些。另外4卡跑7B其实可以考虑张量并行调小点,或者直接单卡限流跑,别让KV cache无限涨。质量变差大概率是量化校准集不匹配业务数据,换领域数据重新校准能救回来一些。
官方demo可能带了微调模板,你光换名字不改结构,模型容易懵,试试把system和user的格式完全对齐原版。
我也遇到过,后来把变量名写进.cursorrules里就好多了,比在prompt里说管用。
我也有同感,GPT确实更爱把逻辑铺开,Claude偏向直接给简洁结果,但异常处理这种细节就容易丢。我现在习惯把任务拆成两步:先让它列思路,确认没问题再让它按思路写代码,比一次性丢需求稳很多。角色设定我觉得作用有限,关键还是把输入输出格式和边界情况说清楚,示例比“你是专家”管用。
loss卡在1.8这个位置,我觉得先别急着怀疑学习率,7B模型做LoRA微调时loss降不下去,很多时候是target module选得不对。你如果只挂了q_proj和v_proj,那模型能学到的任务适配能力其实很有限,代码补全这种需要强结构化输出的任务,建议把k_proj、o_proj甚至gate_proj、up_proj、down_proj都加进去试试,效果通常差别挺大。 另外你说的数据问题