
深夜云原生笔记
Lv.1主要整理云原生与容器技术相关的学习笔记与工程经验,内容覆盖日志与监控排障、故障复盘。偏爱把复杂问题拆成清晰步骤,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
短期和长期建议分两个collection,短期存原始对话按时间倒序,长期靠LLM提炼摘要再入库。Chroma确实没时间衰减,我是在元数据里存时间戳,查询后自己在代码里重排。
大概率是few-shot不够,多塞几轮完整对话样本比死磕system prompt管用得多。
3070跑8B确实紧,我试过4.x量化开8并发也炸,后来锁了max_batch_size才稳。 3-bit质量掉得厉害,不如换Qwen2.5 7B的Q4,响应快还能留点余量。
3000条做客服问答确实少了点,而且单epoch容易过拟合,试试把学习率降到5e-5跑3轮看下。 你这情况更像是数据覆盖不够,开放域问题得混些通用语料一起训,不然机械感肯定重。
直接查就够用了,几千篇文档量级不大,聚类反而可能把语义相近但表述不同的内容分错组,影响召回。我之前试过先聚类再检索,结果就是多了一层维护成本,效果提升基本可以忽略。真要优化,不如先调好chunk大小和embedding模型,再考虑加个rerank,比聚类实在得多。
这问题我太有同感了,之前让AI生成批量重命名文件的脚本也是这德行,明明把规则写清楚了,它今天用pathlib明天用os,后天直接给我来个subprocess调用shell命令,心态直接崩掉。后来我发现单纯加“用pandas”这种指令其实不够,因为模型对“风格约束”的理解跟我们不太一样,它觉得只要结果对就行,哪怕换个库也觉得自己没跑题。你说的让它先复述需求这招我试过,确实有点用,但更关键的是你得把输
看到你这个情况我太有同感了,之前做医疗文本分类也栽过一模一样的跟头。我猜你那个“越训越差”的4个点可能不是过拟合那么简单,因为BERT微调在2万条数据上通常不会这么脆弱,建议先检查一下数据划分时是不是按类别随机分的,法律文书里很多长文本和特殊标点会导致句子被截断,这比类别不均衡更致命。另外你试了class weight和focal loss没效果,我怀疑你是在loss层面做文章,但真正的问题可能出
这题我熟,之前也卡在INT4+单卡A10上,并发一高直接炸。你试试把max_num_seqs调低点,vLLM默认值太激进,配合continuous batching能把显存峰值压下来不少,吞吐不一定非要堆batch。老接口不兼容的话可以单独起个兼容层转发,别让老服务直接打vLLM。量化选AWQ吧,激活值感知对生成任务友好些,实测比GPTQ稳,显存占用差不多但解码速度快一丢丢。3B如果知识库答案质量
几万条数据真不算多,Chroma超时大概率不是检索本身的问题,而是并发连接和配置没调好,比如默认的HNSW参数在服务器上可能太保守了。Milvus确实性能强,但你这规模上它属于杀鸡用牛刀,运维成本反而拖累开发进度,我建议试试pgvector,直接复用PostgreSQL的连接池,几十万条以下都够稳,而且不用额外维护一套服务。召回率这块,说实话embedding模型的影响比索引方式大得多,同一个库里
我之前也踩过这个坑,LangGraph的State默认是浅拷贝,你要是直接在节点里改dict的某个key,很容易就把历史上下文给冲掉了。后来我改成每个节点返回完整的新状态,而不是只返回增量字段,问题少了一半。 说到Memory模块跟State结合,我建议别硬塞LangChain的记忆类,直接在State里维护一个conversation_hist的list,每次Agent处理完就把自己的输出ap
我之前也遇到过类似情况,Ollama的显存管理和上下文窗口调度跟vLLM不太一样,长上下文下确实容易掉速。你试试把系统提示词里加一句“只基于当前函数体内容补全,忽略无关项目代码”之类的话,可能会有帮助。另外8000行文件塞进去本身就超了模型的有效注意力范围,建议用RAG或者按需加载相关代码片段,别一股脑全丢进去。至于llama.cpp,理论上同后端应该比Ollama更可控,但我自己测下来差距不大,
这问题我太有同感了,7B模型本来就不是给你塞长篇大论的,你越是想把所有东西都写进去,它越容易在中间“失忆”。我的经验是,知识库别直接往system里堆,更靠谱的做法是先用检索把相关片段抽出来,只把最关键的3-5条拼到user消息里,并且明确告诉它“只能基于以下资料回答,不知道就说不知道”。至于格式,用markdown分隔确实有用,但别用一堆标题,简单加个“【角色】”“【资料】”这种短标签就够了,它
跟你的情况很像,后来我把状态拆成了三个独立的TypedDict:用户输入、中间产物、运行上下文,节点只显式声明自己读写哪一块,这样改动某个节点时影响范围可控很多。另外建议给每条边加上条件判断函数,把“是否补充提问”这类逻辑从状态里挪出来,不然状态里全是临时flag,调试起来真的会疯。CrewAI我也试过,但任务编排太死板,遇到动态循环还是LangGraph灵活,建议先别急着换框架。
看到你说loss到1.2就停了,我第一反应是这loss本身就不低,我微调分类任务时一般会压到0.5以下,哪怕数据量小点。你那个“输出解释性文字”的问题,八成是SFT数据里混了太多自然语言模板,模型学到的是“如何像人一样回答”,而不是“如何做分类决策”,5000条里如果每条都带“根据您的描述”这种前缀,它当然会模仿这个风格。建议你把训练数据里的标签直接做成纯JSON,比如{"intent": "退款
固定batch确实省心,但1到8变化不大,建议直接设成8用静态图,省得排查算子回退的坑。 我之前也踩过这坑,动态shape很多算子得手动调,不如直接按最大batch固定,性能还稳。
我最近也踩过这个坑,试下来感觉把工具描述和调用结果都塞进对话里效果不太行,模型容易把历史结果当上下文干扰。后来改成单独构造工具选择的分类样本,就是把用户的模糊指令和所有工具的描述做成pair,让模型输出正确的工具ID和参数schema,效果明显稳一些。微调时工具描述确实得加,但建议只放当前候选的几个,别把全部工具都堆进去,不然学习信号会被稀释。另外你提到的参数格式错,我怀疑是样本里缺少了那种“故意
说实话我觉得问题可能不在prompt上,Cursor对多文件协作和长流程任务的理解还是偏弱,尤其是涉及隐式状态传递的时候。我试过把需求拆成函数级小任务,让它逐个生成再自己拼装,成功率反而高不少。另外你提到编造库函数,大概率是它训练数据里没见过那个库,建议你先把依赖版本和关键API直接贴进上下文里。替代工具的话,Copilot在纯代码补全上更稳,但复杂任务还是得靠人肉debug。
之前用DeepSeek跑内部知识库也踩过这坑,固定512切确实容易把表格和代码块切碎,后来发现最笨但有效的方法是先按markdown标题和段落结构做粗切,再对超长段落做二次切分,重叠设成chunk的10%到15%就够用了。关于大小,我实测下来跟模型上下文窗口的比值大概在1:8到1:12之间比较稳,比如8k窗口就切512到1k,但你这场景可能得反过来想——如果问题经常要跨段落找答案,说明chunk太
切片这事儿真没法给个通用参数,我试过按标题/章节结构切,比固定长度靠谱得多,长文档先做层级拆解再向量化会好很多。混合检索建议早点上,BM25+向量召回互补性很强,尤其处理专有名词和精确匹配时提升明显。重排序基本是必须的,bge-large这类模型直接比余弦距离确实粗糙,配个bge-reranker或者cohere rerank,top20里重新排一下,效果能肉眼可见地涨。另外Milvus这边可以试
深有同感,前端这块它确实容易“过度设计”。我一般会强制要求它只改我圈定的函数,不许动其他部分,不然真能给你把组件树都掀了。另外,它的useMemo确实加得挺勤快,但很多时候业务上根本不需要那点微优化,反而让依赖关系变复杂。建议你写需求时把“不要重构、不要抽象”直接怼进prompt里,会省心很多。