
微光听风记
Lv.1把键盘敲过的夜晚整理成文字,关注技术学习与数字生活,记录项目实践记录、踩坑过程复盘和真实实践中的思考;更关注能够真正落地的方法。偶尔更新生活观察,主要还是认真做事。
发表的评论
我之前也踩过这个坑,后来直接在tool的run方法里套了个tenacity库,对特定异常重试两三次就够用了,别整太复杂。重试间隔用指数退避,比如1秒、2秒、4秒这样,别固定间隔,不然服务一抖动全都挤在一起重试了。至于死循环,给每次调用加个最大次数限制就行,或者用LangChain的AgentExecutor的max_iterations参数兜底。另外建议把重试逻辑封装在tool内部,而不是在age
这事儿太真实了,我刚开始用Cursor写业务代码也被同事吐槽过。后来发现其实它挺吃上下文的,你把项目里已有的组件文件丢给它当参考,或者直接在prompt里写死“别用useMemo,除非有性能瓶颈”,它基本能听话。还有就是.eslintrc里那些规则,它其实会读,但优先级不高,你得在规则文件里把风格相关的severity调成error,它才不敢乱来。另外interface和type这个,我个人觉得它
说实话reduce-overhead和max-autotune我都试过,对大模型来说峰值显存反而更高,因为编译过程会生成额外的中间张量,真正省显存得靠activation checkpointing配合,compile只是省了kernel launch的开销。dynamic=True那个主要是给动态shape用的,你固定sequence length的话开着确实纯浪费时间。我现在的做法是小batc
确实,Ollama跑本地模型和OpenAI的API在prompt敏感度上差挺多的,尤其Qwen2.5对格式的容错率没GPT那么高。我之前也踩过这坑,后来发现本地模型更吃“明确指令”,比如在system里直接写“必须输出JSON且字段不能遗漏”,比单纯给例子管用。你试试把few-shot示例改成带严格schema的模板,效果会好不少。另外,温度参数也得调低点,默认值有时候会让它发挥过头。
说到这个我太有感触了,之前也干过一模一样的事,为了省事从FAISS换到pgvector,结果召回质量掉得我怀疑人生。你这个问题大概率不是参数没调对,而是IVFFlat在高维空间里本身就容易翻车,768维真不是它擅长的领域,聚类中心一多,每个簇里的向量分布就特别稀疏,长尾查询很容易被分到错误的簇里。我当时试着把lists降到50,probes提到20,效果有改善但还是很勉强,后来直接换成HNSW,m
说实话你这问题太典型了,我一开始也跟你一样迷信Prompt能搞定一切,后来发现Agent跑偏根本不是它笨,而是它把“步骤”当成了“建议”而不是“约束”。我试过把每个步骤变成独立的子任务,让Agent每完成一步就输出一个中间结果,比如先强制它输出“数据格式分析报告”,不通过格式校验就不给下一步的指令,这样比在Prompt里写“按顺序执行”靠谱得多。另外,你提到用代码拆解,这方向我觉得对,尤其数据清洗
动态shape确实是torch.compile的老大难,我之前在跑生成式模型时也踩过这个坑,后来发现把padding统一到固定长度(比如按batch内最大长度截断)能规避大部分跨设备报错。另外你可以试试给compile传dynamic=True参数,虽然会牺牲一点性能,但比手动折腾稳定多了。inductor后端偶尔抽风我也遇到过,建议回退到cudagraphs或者直接关掉compile先验证逻辑,
Chroma在你这数据量下完全够用,MCP场景真不用太纠结生产级那套,我跑了几个月没崩过。迁移问题倒不大,反正底层都是collection操作,真换Qdrant也就改改连接参数。唯一坑是Chroma的持久化路径要提前配好,不然docker重启数据没了。
这问题太真实了,我最近也在跟这个死磕。感觉few-shot崩多半是例子选得有偏向性,模型在偷懒走捷径,你可以试试把few-shot的标签打乱顺序,或者故意加一两个反例进去。另外我自己的土办法是先拿几百条数据盲测,看模型在哪些类别上容易混淆,再针对性地改prompt里的定义,比瞎调角色设定管用。还有个小技巧,把分类选项用编号列出来让模型选数字,能减少一点复制标签的概率。
固定分块在合同这种强语义依赖的场景确实容易翻车,尤其条款之间互相引用时,512字符经常把逻辑切断。我之前试过用sentence-transformer按语义切,或者干脆按条款标题切,召回率能提七八个点。embedding的话bge其实不差,但你们专有名词多的话可以试试微调,或者混合检索加个BM25兜底,比纠结换模型快。Milvus索引那块影响不大,HNSW和IVF_FLAT差个百分之零点几,不用太
确实,参数再大也扛不住现实场景的脏数据,评估体系真得跟上才行。
说实话你这个配置跑50万向量真不算多,瓶颈大概率不在Milvus本身,而是查询并发和召回参数没调好。IVF_FLAT在20并发下延迟高很正常,nlist调大点比如2048能减少扫描量,另外可以试试HNSW,召回和延迟平衡更好。先别急着上K8s,那玩意儿运维成本真的高,你单机都没榨干就上分布式纯属给自己挖坑。建议先加内存到32G或者换NVMe盘,再把索引换成HNSW,16G内存跑768维50万向量应
这问题太典型了,我刚开始搞MCP agent的时候也卡在这。后来发现不能只靠系统提示词硬撑,得在工具调用层做个显式的“状态快照”,把上次查询的关键字段拼接进下一次的prompt里,不然模型真的会“失忆”。你那个温度数据如果放在内存里,建议每次tool call后强制回写一段摘要到对话流,比让模型自己记靠谱多了。另外重复调用工具,大概率是工具结果没被正确标记为“已满足”,试着给每个工具返回加个状态码
这配置跑7B Q4按说不该这么拉胯,十几秒一步大概率是上下文塞太多+Ollama默认的并发和缓存没调好,试试把num_ctx砍到4096,再加个--no-keepalive看下裸跑速度。4060Ti 16G上70B想都别想,量化到Q2都费劲,Agent这种多步交互对延迟敏感,不如用7B精调个工具调用模型,或者试试Llama.cpp的server模式开parallel,比Ollama灵活不少。轻量框
工具返回格式大概率有问题,试试让工具直接返回JSON,描述里写清楚参数类型和示例。
试试把历史对话单独存个summary,检索时只带压缩后的意图,别全塞进去。
逐行审查是必须的,尤其pandas这种生态,API更新快但也不至于凭空长出新方法,Copilot本质是在猜你的意图,上下文不够它就瞎编。我习惯把项目里常用操作抽象成几个函数,然后让Copilot基于这些函数补全,命中率高不少。另外可以试试在设置里关掉“从公共代码库匹配”,只留当前工作区索引,能减少不少幻觉。至于ChatGPT手动粘,我个人觉得更可控,但效率低,适合那种一次性复杂逻辑,日常还是Cop
检查下vLLM的默认repetition_penalty,很多框架默认1.0但本地可能改了,这个对风格影响很大。
这个问题我太有同感了,之前做法律文档RAG也翻过车。你提到embedding表征被破坏,我觉得方向是对的,LoRA微调主要动的是生成层的参数,但检索用的向量通常来自底座模型或者单独的embedding模型,这俩本质上不是一套东西。我当时试过把微调后的模型直接拿来算query和doc的相似度,效果稀碎,后来干脆把检索向量固定用微调前的底座,生成才用微调后的,立刻稳了。另外你那个“合同有效期”召回变差
试试按markdown标题和段落切,再配个父子chunk,小chunk召回大chunk给上下文,能平衡不少。