
容器正在加载工程日常
Lv.1一边拒绝无效加班,一边提升工程效率。主要研究软件工程与问题排查,记录代码可维护性、开源工具使用以及那些看似简单却很容易踩坑的问题。欢迎围绕具体问题进行有信息量的讨论。
发表的评论
工具调用不稳太正常了,我一开始也差点被搞疯。后来发现核心问题往往不在temperature,而是工具描述写得太“人类化”了,系统不知道啥时候该用,建议把触发条件写死,比如“当用户提到天气二字才调用”。另外循环调用那个,可以加个max_iteration限制,然后每次调用后强制把上次结果拼进prompt,断掉它的复读路径。调试的话我习惯先不开工具,直接打印agent的thought和action,看
这问题我也踩过坑,模型微调后对格式的敏感度确实超出预期,本质上是它把模板当成了语义的一部分。想兼容多种输入,最省事的办法就是训练时按比例混搭不同格式,我一般会拿七成主模板,三成变体,效果比单一模板稳得多。另外你测试时如果发现换格式掉点,可以试试在推理时加一句系统提示,把当前输入风格往训练格式上引一引,有时候能救回来。
我还真遇到过一模一样的坑,加prompt后模型反而开始“自由发挥”了。后来发现问题不在模板本身,而是你给的指令太像“创作提示词”了,模型会倾向于补充细节而不是严格遵循检索结果。试试把模板改成“只允许使用上下文中的事实,逐条列出对应数据”,同时把temperature调低到0.1左右,效果会稳很多。另外LlamaIndex里有个similarity_top_k参数,调低一点(比如2-3),减少无关片
试试在user message里直接贴一段few-shot示例,比光强调“只输出JSON”管用得多。 我这边是把schema放最后一句,配合temperature调低,基本能稳住格式。
温度直接0吧,分类任务不需要随机性,例子放user里确实效果更稳。 另外20个样本太多了,模型反而被干扰,压缩到5-8个高质量的就够了。
召回率卡在60%确实挺恼人的,但我觉得问题大概率不在索引参数上,IVF_FLAT配1024的nlist对20万数据量来说够用了。ResNet50提的特征如果是最后一层池化输出,维度虽高但区分性未必好,建议试一下去掉最后一层全连接,或者换用像CLIP那类对比学习预训练模型,特征空间会更适合检索。数据增强对离线特征提取影响不大,除非你打算微调模型,不然先别折腾这块。可以拿几百张图人工标一下,看看检索失
说实话我觉得你这情况大概率不是embedding的锅,bge-large在中文场景下已经够用了。512+50的分块对长文档来说太死板,企业文档经常一段话里就藏着完整答案,切碎了反而把关键上下文拆没了。你可以试试按语义段落先切,再对超长的段落做二次分割,保证每个chunk内部主题完整。另外top5只中1条太可惜了,建议直接上个reranker,比如bge-reranker-base,用交叉编码器精排
试试把中间结果显式写进下一步的prompt里,别指望模型自己记,GPT-3.5这毛病太常见了。
几百条就卡大概率不是MCP的锅,是每次全量向量化太蠢了,增量写入加索引才是正解。遗忘逻辑直接在tool里按时间戳删旧向量就行,不用搞分片那么复杂。
这问题太真实了,我试过把prompt改成“如果检索内容没提价格,直接说不知道”,结果它还是会用训练数据里的常识去补全。后来我发现光靠嘴硬没用,得在输出层做约束,比如用function call或者让模型先判断检索内容里有没有答案再生成。另外chunk粒度也很关键,如果召回片段本身就模棱两可,模型自然倾向去脑补。你试试把prompt改成“严格逐字引用检索内容,禁止扩展”,同时把不相关段落也塞进去当干