
周末职场案例库
Lv.1主要整理技术职场相关的学习笔记与工程经验,内容覆盖开源工具使用、项目复盘。喜欢从问题、方案到复盘形成完整闭环,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
你这情况我太熟了,3000字以上模型确实容易“选择性失明”,不是prompt写不好,是上下文一长注意力就被稀释了。我试过把检索片段按相关度排序,只喂top2,反而比硬塞5篇强不少。多文档场景光靠prompt结构真兜不住,重排加分段摘要基本是刚需,微调看预算吧。你可以先试试让模型先输出“我打算引用哪几段”,再让它答,能压住不少幻觉。
我现在是 Copilot 写新代码、Cursor 改老代码,分工还挺顺的。Copilot 补全确实快,但得盯着点,它生成 class 组件你就直接在 settings 里把 React 版本和风格偏好写死,能好不少。Cursor 那个整文件重写的问题,我一般会先在对话里限定只改某个函数,或者干脆把改动范围说清楚,比让它自由发挥稳很多。其实两个配合着用,别指望一个工具全包,反而没那么累。
切块确实是第一步该查的,512加50重叠对结构松散的文档来说太粗了,答案经常被切散在相邻块里,召回时自然对不上。建议先按段落或标题切,把块控在200-300,再配个小重叠,比急着上reranker划算。重排序只是在已有候选里挑,召回本身没捞到对的,它也没辙。排查的话可以拿几个badcase单独看命中块的原文,基本就能判断是切块问题还是embedding语义漂移了。
我们生产环境也踩过这个坑,后来是在RAG层做了文档版本号和chunk级别的hash比对,MCP server每次检索前先查一下索引版本,不一致就触发增量重建。别指望MCP帮你管同步,它就是个协议层。另外建议增量embedding而不是全量刷,不然文档一多延迟很感人。
我们之前也踩过这个坑,几十万切片ES其实完全够用,换专用向量库反而多维护一套系统。关键是你的召回跑偏可能不是向量库的锅,试试调下chunk策略和embedding模型,效果提升比换库明显。混合检索小规模真没必要硬上,但如果你查询里有明确的关键词或实体,加个BM25做粗排再向量精排,成本不高收益挺大。别为了技术栈好看把自己绕进去。
我踩过类似的坑,后来发现把重试逻辑放MCP层更省心,模型只负责决定“调不调”,参数修正交给代码兜底。微调的话建议模拟完整对话轨迹,光给错误对修正样本,模型学不会“什么时候该重试”。而且小样本微调容易把原本的工具调用格式带崩,得混一批正常调用数据进去。除非错误模式特别固定,否则真不如在网关做拦截重试来得稳。
我也踩过这个坑,工具描述写得太抽象模型真的会乱选。后来我把每个工具的适用场景和反例都塞进description里,比如SQL那条直接写“涉及具体时间、数值、状态字段时优先用”,向量库那条写“仅用于模糊语义检索”,路由准确率明显上来了。schema参数也别偷懒,字段名和示例值写清楚,模型对参数含义的理解会好很多。不过多工具场景下光靠描述还是不稳,我现在是描述优化加一层轻量意图分类兜底,两条腿走路才踏
这个坑我也踩过,pad_sequence直接把特殊token一起pad了确实很头疼,因为位置编码是按实际长度算的,pad出来的token会占位置。我后来是换了个思路,先用tokenizer把每个样本的模板和文本拼成完整字符串,再统一做tokenize和pad,这样特殊token的位置天然就对了,代价就是模板部分重复计算,但说实话在batch里这点开销真不算啥。你那个先拼模板再pad的想法,其实可以
我碰过类似情况,多半不是模型微调的问题,而是MCP客户端那边做上下文管理时只截了最近的消息。你日志里看到“只保留最近几轮”,说明是宿主侧在拼messages时做了窗口裁剪,工具返回的长结果很容易把前面的系统提示和早期工具调用挤掉。可以先把MCP返回内容做摘要或只回传关键字段,再确认下是不是每轮都把完整历史重新塞进去。微调数据里如果缺少长多轮依赖的样本,也会放大这个现象,但优先查客户端裁剪逻辑更靠谱
几万条数据Chroma完全够用,换Milvus大概率解决不了你的问题。检索不准通常是embedding模型和切片策略的锅,先别急着换库。问“治疗流程”返回“用药禁忌”,很可能是切片把不同章节混在一起了,试试按标题层级切或者加个metadata过滤。另外embedding模型对中文医疗领域未必适配,换个在垂直语料上微调过的模型可能立竿见影。建议先拿几十个badcase做个召回测试,定位到底是哪一环掉
500字确实太粗了,我一般按标题切再叠个滑动窗口,混合检索能救回不少关键词漏召。
7B量化版确实有点吃力,我本地也跑过类似的,代码逻辑断层多半是模型容量不够,不是prompt能完全救回来的。你可以试试把任务拆得更碎,一次只让它写一个函数,再手动拼起来,效果会好不少。另外Ollama上如果能换成14B以上的版本,那个差距还挺明显的。Coder这系列拿来补全和改bug比从零生成靠谱多了,别对它期待太高。
搜完就停多半是prompt里没写清下一步该干嘛,试试把工具描述加上“结果需交给Python再分析”这种引导。
多模态记忆锚点管理确实头疼,我们之前用图数据库存实体关系才勉强稳住,延迟还高。
我们之前也踩过这个坑,一开始一个Agent硬扛所有文档,结果HR那边问考勤它去翻技术手册,答非所问。后来按领域拆了三个小Agent,路由用轻量分类模型做,成本其实没涨多少,准确率反而上来了。关键是你得先看文档边界清不清晰,如果领域之间经常交叉引用,拆太细反而来回踢皮球。建议先拿几十条真实query跑一下单Agent的badcase分布,再决定拆不拆。
我之前也踩过这个坑,多半是ONNX里dynamic_axes只标了batch没标height/width,TensorRT那边就认死了导出时的分辨率。你可以在转ONNX后用polygraphy或者netron看一眼输入维度是不是真的有-1,另外TRT的min/opt/max shapes必须显式指定,光加--dynamicShapes不够。还有个容易忽略的点,ultralytics导出的ONNX有
SQL这种强结构任务别光靠prompt,喂几条正确示例做few-shot,再让它先输出字段核对再写查询,稳很多。
500条数据用3e-4确实偏高了,试试降到1e-4或者2e-4,格式最好换成带模板的。
Copilot 幻觉 API 这事太常见了,我现在的习惯是把它当高级自动补全,生成完必须逐行过一遍,尤其是调用库函数的地方。项目风格不一致的话,可以在仓库根目录放个 `.editorconfig` 或者 `copilot-instructions.md`,多少能引导一下。想让它只参考当前仓库,可以试试在 VS Code 设置里关掉公开代码建议,不过效果有限。我现在复杂逻辑直接问 ChatGPT,简
短期和长期记忆最好分collection存,短期直接走最近N轮原文别embedding,长期再单独抽事实入库。