
一线知识管理手记
Lv.1主要整理知识管理相关的学习笔记与工程经验,内容覆盖架构设计、问题排查与调试。更关注能够真正落地的方法,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
Prompt工程肯定有用,但没网上吹得那么神。我自己跑了几千张图下来,感觉核心就两点:模型选对、提示词结构清晰,剩下的画质词堆再多边际收益也很低。你说的分析工具可以试试prompthero或者sd-metadata这类,能反查图片的生成参数,比自己瞎试强不少。
pgvector的filter是后置的,先召回再过滤,过滤完可能就没几条了。试试先where再排序,或者用分区表。
单模型单工具确实没必要上,多模型多工具切换时省去重复适配才是真香。
这种场景我一般不会硬塞完整文档,而是让Agent先做一轮摘要再进主流程,虽然多一步但稳定很多。关键指令最好别依赖后面的内容,实在绕不开就拆成两个子任务串行跑。长上下文模型我也试过,贵不说,中间信息还是容易被稀释,不如分块加显式引用靠谱。
我最近也踩过类似的坑,后来发现关键不是把需求描述得多细,而是让模型先输出伪代码或逻辑分支树,确认无误再让它翻译成Python。另外动态SQL拼接这种场景,我会强制它先列出所有边缘case的断言,再生成带单元测试的代码,跑不通就让它根据报错自己修。单纯靠prompt优化确实有上限,配合测试驱动的方式会稳很多。
我也踩过这个坑,之前把 git log 和文件树全塞进去,结果模型光顾着分析上下文,用户问啥都答偏。后来改成按需注入,只在工具调用时动态拼一小段相关上下文,效果立马回来了。感觉MCP的prompt模板更像接口契约,不是知识库,塞太多反而让模型分不清哪是规则哪是背景。你试过把示例和真实指令用明确分隔符隔开吗?
4090跑7B用FP16不至于OOM,先看看是不是没加--dtype float16,默认可能按float32加载了。
这种输出不稳定的情况我也遇到过,说实话大概率不是few-shot数量的问题,两个例子对格式约束来说已经不算少了。GPT-4o本身在长系统提示下就有注意力漂移的毛病,尤其是你同时压了角色、任务、格式三层指令,模型容易顾此失彼。我建议你先做个隔离测试,把系统提示砍到只剩输出格式约束,few-shot也保留,看还会不会漏字段,这样能判断到底是哪部分指令在打架。另外语气跑偏往往是因为你的few-shot例
说实话我也踩过这个坑,一开始还以为是自己prompt写得不够“专业”,后来发现根本不是那么回事。你那个二分查找的例子特别典型,加了一堆“仔细考虑边界”反而让模型开始自我加戏,因为它会把这些词理解成“用户想要更复杂的方案”。我现在基本不信什么万能模板了,业务代码里我更倾向于先把需求拆小,一次只让它干一件事,比如“只写函数体,不要类型注解,不要异常处理”。如果结果不对,我宁愿重新表述需求或者换个角度问
示例还是放context里更稳,光靠query模型真容易瞎编。
百万级用ES的knn其实够用,向量库主要赢在过滤+召回的组合查询和高并发,运维确实多一层,看团队有没有精力养。
我也遇到过,Few-shot里的格式太像反而让模型照着套,试试把示例换成纯文本描述别带完整Thought。
我之前也踩过这个坑,折腾了一晚上才发现问题不在Claude那边,而是filesystem服务器的启动参数没配对。默认配置确实只给了只读权限,你得在启动命令里显式加上允许写入的路径,比如--allow-write那种参数,具体看用的哪个实现。另外Claude这边对MCP工具调用也有个确认机制,有时候不是没权限,是请求被拦下来等你点同意。建议先去看服务器启动日志,报错信息一般会直接告诉你哪个操作被拒了
检查下启动参数里有没有加--allow-write,默认确实是只读沙盒。
7B量化版确实容易这样,换14B以上或者试试few-shot给几个示例,代码质量会稳不少。
15-20 tokens/s 在 A10 上跑 AWQ 4bit 的 7B,确实偏低了点,但也没到离谱的程度。A10 的算力大概就 3090 的七八成,显存带宽也一般,7B 模型想稳上 40+ 通常得是 4090 或者 A100 这个级别。你多轮对话首 token 延迟 3 秒,八成是 prefill 阶段被长上下文拖住了,并发 8 的话如果历史对话很长,KV cache 一涨 prefill 就
3000字输入在A10上OOM其实挺常见的,int8量化主要压的是权重,激活值和KV cache那块基本没怎么动。你算一下,7B模型int8权重差不多7G左右,但3000 token的KV cache在FP16下按层数和头数一乘,加上中间激活,峰值冲到20G不奇怪。`use_cache=False`对单次前向有点用,但推理框架里通常还是会给你开回来,得确认下实际生效没有。AutoGPTQ和bits
试试加个关键词提取再拼到query里检索,或者用bge-m3换掉small,长文本确实吃亏。
我现在的做法是分两层:system里只定角色和底线,比如“只基于检索内容、没有就说不知道”,具体格式和结构放到user prompt里动态拼。这样调起来灵活很多,改模板不用动系统提示。另外建议加个few-shot示例,比干巴巴描述格式管用。你们检索片段一般给多少条?给太多也容易让模型照抄。
我一般把MCP的流式响应按SSE事件切分,每个chunk单独解析再汇聚,别直接拼字符串,丢包就能靠序号补。