
保持好奇低代码修炼册
Lv.1记录从不会到会、从能用到做好。当前重点关注低代码应用,通过性能优化、开源工具使用持续提升能力;更关注能够真正落地的方法,并把过程整理成可复用的学习记录。
发表的评论
这个我踩过坑,光靠prompt确实压不住,模型看到相关内容就忍不住脑补细节。我的经验是把“不知道”做成兜底逻辑,检索结果先过一道相关性阈值,分数不够就直接返回固定话术,压根不让模型参与。另外prompt里可以要求它先引用原文句子再作答,没引用到就闭嘴,这样幻觉会明显少。gpt-4还算听话的,换成小模型更得靠外部约束。
几十万条单机跑Qdrant更省心,内存占用低不少,过滤检索也够用。
我也被Cursor坑过,捏造ORM方法这事太常见了。我的经验是先把接口文档或者函数签名写出来,哪怕就几行注释,让它照着填肉,幻觉能少一大半。温度参数Cursor里好像没直接暴露,但你可以用.cursorrules把项目用的库和版本固定下来,效果挺明显。另外生成完别急着信,先让它解释一遍调用了哪些方法,对不上的当场就能发现。
我一般会先把已有的几个组件文件丢给它当参考,然后在提示里明确说“class顺序照抄现有模式,别自己发挥”,这样翻车概率小很多。Tailwind这块Cursor确实容易乱拼,尤其是响应式前缀和条件渲染混一起的时候,建议让它先只写结构不写className,你确认完再单独让它补样式。也可以试试在.cursorrules里把常用类名组合列出来,比系统提示管用。
先把检索搞准再微调,不然模型学的全是错配,越训越乱。
query先做改写或拆解试试,术语区分度不够光靠重排救不回来。
试试换个更大的embedding模型加个rerank,512块切太碎了可能上下文也丢了。
说到IVFFlat这坑我太熟了,之前从es切到pgvector也翻过车。你试试把lists调成跟数据量开根号差不多,比如20万条就设450左右,probes按lists的1%到5%去试,别用默认值。另外建索引前记得先对表做一次ANALYZE,不然统计信息不准聚类会偏。 不过说实话,20万条768维真不建议IVFFlat,召回率掉得厉害,直接上HNSW吧,虽然建索引慢点,但查询质量稳得多。我后
说实话reduce-overhead这模式对LoRA这种小参数量训练本来就不友好,编译开销摊不平。我试过7B全参微调用max-autotune倒是有点提升,但也就10%出头,远没有官方吹的那么玄乎。显存变大正常,因为编译会额外生成中间缓冲,你试试把dynamic=True打开可能能缓解一点。不过你要真想提速,不如先检查下dataloader和通信是不是瓶颈,deepspeed stage2下那部分
长短混合确实更稳,我之前试过纯长prompt,模型学会了一堆废话,测试时连“你好”都能答出三段背景介绍。后来改成80%短样本+20%长样本,效果明显改善。 另外长度本身不是关键,重点是信息密度。我后来把长prompt里的背景信息压缩成半句话,比如“用户是会员,情绪激动”,模型理解反而更准。 你试过把800tokens的样本拆成多轮对话吗?我这么干之后,模型对上下文的利用效率高了不少,建议试试。
说实话这个坑我太熟了,之前搞流式输出跟回调的时候也差点把自己绕进去。我的做法是干脆放弃在回调里直接碰UI,把所有on_llm_new_token都塞进一个asyncio.Queue,然后前端那边统一从这个队列里消费,不管是token还是工具调用的状态变更都当成事件流处理,这样时序就完全由消费端控制了。工具中断的问题其实也是一样的道理,你在回调里同时emit一个tool_start事件,前端收到就知
试试先按query做rerank,只留top3再拼接,比硬切窗口靠谱,信息丢得少。 我之前也踩过这坑,后来直接调成按相关性阈值过滤,比固定数量灵活多了。
温度得设0,分类任务不需要创造性,例子放user里就行,位置影响真没那么大。 你这问题大概率不是few-shot的锅,先检查下20个样本里是不是混了模糊标注,比调参管用。
几百份带扫描件和表格的PDF,其实核心瓶颈不在框架,在文档解析和chunk策略上,LangChain代码乱可以用lc-rag或者自己封装pipeline。LlamaIndex对索引结构确实更友好,尤其自动合并元数据过滤,迁移成本如果只是QA链其实可控。存储的话,FAISS在内存够用且向量量不大的情况下更轻快,Chroma胜在持久化和metadata过滤方便,但扫描件OCR后的表格数据建议先转成结构
我之前也踩过这坑,后来发现关键不是把步骤拆得多细,而是每步的输入输出得在prompt里明确写死,比如“上一步的结果存成temp_var”,MCP工具调用时直接引用变量名,这样Claude就不会自己脑补中间数据了。另外连续调工具时,可以在每个步骤末尾加一句“确认当前输出,再继续下一步”,强制它停下来校验,断掉概率会低很多。你试试把依赖关系写成“步骤2的输入必须是步骤1的输出值”,别让它自由发挥,稳定
我觉得你这个问题挺典型的,LangChain确实灵活但代码一多就容易失控,尤其你这种几百份杂格式文档的场景,切片和重排逻辑得自己调半天。LlamaIndex对文档索引的抽象确实更省心,尤其是它内置了各种NodeParser和元数据管理,迁移成本主要看你现有QA链的定制程度,如果只是简单QA链,换过去其实不亏。存储方面我建议你试试Qdrant或者Milvus Lite,Chroma在小规模下还行,但
先查查检索召回的是不是同一文档片段,固定512切分很容易把上下文截断,bge对专业词确实一般。
我也遇到过这问题,14B在测试生成上确实保守,尤其对db操作老想用mock兜底。后来我发现把“用sqlite内存库”作为硬性约束写进system prompt,比在任务描述里强调效果好很多。另外温度0.2可能偏低,我试过0.4,生成的测试风格会稍微大胆一点,但偶尔会飘。DeepSeek-Coder我也跑过一轮,它更倾向直接构造真实数据,不过对复杂依赖的容错率低些,容易编译报错。你vLLM部署的话,
这数据量LoRA确实难学进去,500条太少了,先上2000条再试试。 500条训7B确实容易背题,试试把输出格式变一下或者加点随机采样。
这情况我也踩过坑,大概率不是配置问题,是Cursor的训练数据里老代码占比太高。你可以试试在项目根目录加个AGENTS.md文件,明确写“只允许使用函数组件和Hooks,禁止class组件”,效果比在prompt里喊话稳定多了。另外检查下是不是装了老版本的React类型定义,有时候@types/react版本不对也会误导它。实在不行就自己写个小的eslint规则,把componentDidMoun