
每天进步一点产品成长记
Lv.1保持初学者心态,也保持交付意识。当前重点关注产品设计与管理,通过用户体验优化、业务流程拆解持续提升能力;重视可维护性、稳定性与协作效率,并把过程整理成可复用的学习记录。
发表的评论
你这个问题大概率不是embedding的锅,bge-m3本身中文检索够用了。召回“预防宕机”而不是“排查宕机”,更像是chunk切得太机械,把语义单元切散了,模型抓不到“排查”这个意图。建议先按语义或标题层级切,再在检索后面加个rerank,bge-reranker或者cohere都行,通常比换embedding见效快。
日志分析这种场景光靠模板确实不太够,我做过类似的,后来是把“只输出JSON、不要解释、找不到就返回null”这几个约束写死才稳一点。另外你那个编造日志的问题,大概率是上下文里没把原始日志整段贴进去,或者模型自己脑补了,可以试试让它先引用原文再分析。few-shot别塞太多,两三个就够,多了反而容易串味。
4090跑70B基本别想了,量化到2bit都够呛能塞进去,7B或14B才是你的舒适区。llama.cpp配Q4_K_M确实能省显存,质量损失日常用感知不明显,但代码补全这种任务建议至少Q5以上。vLLM和TGI吃显存更凶,不过吞吐高,适合并发场景,你单人用没必要。上下文爆显存的话试试限制max_model_len,或者换支持滑动窗口的模型。
我也踩过这个坑,全塞向量库确实容易翻车,检索出来的旧对话经常跟当前问题八竿子打不着,反而把模型带偏了。后来我改成短期窗口留最近几轮原文,长期记忆只存提炼过的关键事实或者用户偏好,比如“用户养了只猫叫豆豆”这种,效果稳多了。你可以试试加一层摘要压缩,别让原始对话直接进向量库,不然噪音太大。
我一般会在.cursorrules里直接贴一段现有组件的代码当范例,然后写“新组件必须和这个风格一致,禁止新增抽象层”,比干巴巴说“保持简单”管用多了。PropTypes那个可以在rules里明确写“项目使用TypeScript,禁止生成PropTypes或defaultProps”,它基本就不加了。还有个歪招是prompt里加一句“这是个人小项目,不是开源库,别按最佳实践来”,它真的会收敛很多。
这个问题其实挺典型的,COT不是万能加速器。你让它“推理”怎么优化排序,它就容易往花哨的方向跑,递归加lambda看着高级,实际常数开销大得离谱,Python里函数调用本来就贵。冒泡本身在Python里就没啥优化空间,算法复杂度摆在那,GPT再怎么推理也变不出花来。我自己试过类似的事,直接让它写快排,它反而老老实实给个能跑的版本,因为快排是标准答案,不需要它“创造”。你要是想让它输出高效代码,最好
我之前也踩过这个坑,光在system里写“严格基于原文”基本没用,模型该编还是编。后来改成在user prompt里用“【参考文档】+【问题】”分块,并且明确加一句“如果文档里没有提到,就直接回答不知道”,效果稳了不少。temperature=0确实有用,但别指望它解决所有问题,few-shot给一两个“不知道”的示例也挺关键。另外建议你检查下检索片段是不是太长太杂,噪声多了模型更容易自己脑补。
T4上跑7B确实得量化,不然16G根本不够看。你这场景建议直接上AWQ 4bit,代码和函数调用对精度没那么敏感,我实测过类似任务掉点基本可忽略。vLLM加AWQ是最省心的组合,并发吞吐比transformers 8bit强太多,文档里找`quantization="awq"`那个参数就行。GGUF用llama.cpp也行但并发能力弱,生产环境不太推荐。校准数据集不用太纠结,拿几百条你业务相关的代
这个坑我去年也蹲了挺久,后来发现关键不是继续堆技巧,而是先退一步把任务本身拆清楚。你说的合同抽取,其实模型要同时干三件事:定位条款位置、判断条款类型、再输出结构化字段,混在一个prompt里当然换个模板就崩。我现在的习惯是先写一个最笨的baseline,然后按维度单独测,比如只换措辞不换例子看波动多大,只换例子不换schema看哪块掉分,这样至少知道是泛化问题还是格式问题。few-shot失效往往
这个坑我太熟了,单测能过真不代表线上稳,因为你自己写的测试问题其实已经隐含了你想要的那种答法。真实用户的问题往往更模糊、更碎,模型一遇到没覆盖的意图就开始自由发挥。你说的“编内容”大概率是知识库召回没兜住,而不是Prompt本身的问题,建议先看检索回来的片段里到底有没有答案,没有的话Prompt写再好也白搭。方法论我倒觉得有,但不是什么万能模板,更像是把任务拆成“检索质量、指令清晰度、输出约束”三
你这情况大概率是历史对话没截断,每轮拼接后token数线性增长,KV cache自然跟着涨。我一般用滑动窗口保留最近几轮,再配合past_key_values复用,显存能稳不少。工具调用返回的结果别直接全塞回去,先摘要或截断再喂给模型,不然一次搜索返回几千token直接爆。另外检查下有没有在循环里意外保留了logits或loss的引用,那玩意儿才是隐形杀手。
我一开始也在这俩之间反复横跳,后来发现新手其实不用太纠结“哪个更强”,而是看哪个能让你先把东西跑通。PyTorch写多模态融合确实舒服,比如图像走CNN、文本走Transformer,中间想怎么拼特征、怎么改forward都很直观,调试的时候print或者打断点也顺手。TensorFlow这边Keras高层API搭模型快,但遇到自定义融合层或者动态shape的时候,坑会稍微多一点,尤其是你还没完全
我也这样,后来逼自己先手写伪代码再让AI补全,不然真成只会提需求的废人了。
我们之前也踩过这个坑,后来发现光调prompt没用,关键得让检索结果带上“意图标签”。比如天气类query不光返回温度数据,还塞一条“如果温差大就提醒穿衣”的规则,生成时自然就有建议了。另外chunk别切太碎,保持语义完整比调小尺寸管用,你可以试试按段落切再叠个滑动窗口。至于RAG本身做开放对话倒没问题,但得加一层意图分类路由,别所有query都走同一条检索生成链路。
我们线上也是RAG加Agent,一开始全塞历史,结果检索召回直接被稀释得没法看。后来改成短期窗口加LLM重写query,把“昨天那个订单”先改写成带时间戳的具体查询再走检索,效果稳很多。对话记忆单独放向量库也试过,但多步工具调用时容易和当前任务串味,现在只把压缩摘要写回状态机里,工具中间结果不进长期记忆。你们摘要乱套是不是因为把工具返回原文也压进去了,那部分建议单独走结构化存储别混着压。
我也这样,后来发现prompt越啰嗦它越容易钻牛角尖,简单说清目标反而更靠谱。
我一般先用固定模板跑通,再针对模型弱项加约束,比瞎改词靠谱。
感觉MJ视频就是拿图片美感硬撑时间轴,动作随机得像抽卡,先等V2看看能不能把物理逻辑补上吧。
我们去年也纠结过这个,后来想明白了:如果你只是内部服务间调用,MCP确实多此一举,REST加个schema校验就够了。真正有用的场景是让LLM自主选模型、串多步推理,比如先分类再检测最后生成报告这种链路,这时候工具定义反而是省事的。但维护成本不低,工具一多版本管理很头疼,我们最后只保留了高频的几个。建议先别急着上,等真有动态编排需求再迁移也不迟。
3个epoch太多了,Lora容易过拟合到复读,试试1个epoch加早停。