
发布不加班求生记
Lv.1不保证一次写对,但保证认真查明原因。主要研究软件工程与问题排查,记录项目复盘、问题排查与调试以及那些看似简单却很容易踩坑的问题。欢迎围绕具体问题进行有信息量的讨论。
发表的评论
这问题我踩过一模一样的坑,后来发现关键不是把步骤写死,而是给每个工具调用加一个“前序结果摘要”的显式输入,比如让Claude把上一步的输出先压缩成两行事实再传给下一步。另外MCP确实不支持嵌套子Prompt,但你可以把整个流程写成一段线性文本,用XML标签分隔每个阶段,并明确标注“第2步只能使用第1步返回的字段”。还有个土办法,就是把CSV列名和统计口径直接在每一步里重复一遍,虽然浪费token但
12G跑7B长文本确实紧巴,我试过GPTQ和AWQ,体感AWQ对显存占用更友好些,但4-bit下长文本还是会爆。Flash Attention别嫌麻烦,配好之后延迟和显存都能降一截,值得折腾。另外可以试试把KV Cache的量化打开,vLLM里有开关,能省不少。StreamingLLM我用了也飘,不如老老实实切分文档做滑动窗口,10K上下文拆成两段处理,效果稳定得多。
显存门槛确实有点劝退,但推理连贯性提升30%这点很心动,不知道量化部署后效果掉多少。
这个问题我也遇到过,几千份文档其实已经不算小了,单纯靠embedding做top-k检索,在复杂查询下确实容易翻车。我觉得你现在的瓶颈不在chunk size和embedding模型上,而是缺少一个reranker层把语义相关性再拉回来。我试过用Cohere的rerank或者bge-reranker-v2-m3,效果比纯向量检索好不少,尤其是那种“排查步骤”类的查询,能把真正有用的chunk提到前
试试按文档的段落结构来切,别死磕固定大小,语义边界比字符数重要。
建议先写好接口文档和类型提示再让它生成,这样能大幅减少幻觉,我试过挺管用的。
同感,这个注释问题确实挺烦的,写个小脚本搞得跟教学代码似的。我试过在Custom Instructions里写“仅在生产级代码添加关键注释,日常脚本不要注释”,效果比单纯prompt好一些。另外你可以试试把模型切到Claude Sonnet,它对指令的遵从度比默认的GPT高不少,错误处理那块也能收敛点。
这个问题我也踩过不少坑,后来发现与其死磕prompt,不如在输出层加个轻量级后处理——比如用正则把```json和多余的```直接strip掉,再套一层try json.loads,失败就重试一次。另外你提到的function calling其实也能动态传参,把params定义成object类型,字段用additionalProperties: true就能绕过schema限制了,可以试试。
建议先按文档结构拆成章节再细切,尤其操作手册这种层级分明的,分块前不解析纯属浪费embedding。
同感,我也遇到过类似问题,模型有时候就是会“聪明反被聪明误”。我觉得你那个拆成子任务的思路挺对的,别一次给太复杂,让它先写核心逻辑再补异常处理,每步都确认一下。另外试试在Prompt里明确说“不许假设输入有效”,或者加个负面例子,比如“别像这样忽略文件不存在的情况”,效果会比加一堆描述词稳定点。
看到这个帖子,感触很深。我大概从去年年中开始,陆续在两个项目里尝试过MCP,一个是在内部推荐模型上,另一个是在多机多卡的LLM微调场景下。先说结论:现阶段,MCP在PyTorch生态里直接替代NCCL,几乎不可行,而且短期内也不推荐这么干。原因不光是兼容性,更多是工程落地时的一系列隐性成本。 先回应你最直接的报错问题。你遇到的“找不到符号”,大概率是MCP的so文件依赖了TensorFlow的运