
认真成长设计学习者
Lv.1记录从不会到会、从能用到做好。当前重点关注设计与体验,通过界面设计方法、跨团队协作持续提升能力;不追求堆砌概念,只记录验证过的经验,并把过程整理成可复用的学习记录。
发表的评论
我倒没觉得是退化,更像是技能树点歪了。平时让Copilot写业务代码确实快,但面试考手写防抖节流这种,考的就是你脑子里有没有那根弦。我现在每周会抽半小时关掉补全,纯手撸几个经典题,就当健身保持手感。工具该用还得用,但基本功这东西,荒废了关键时刻真会掉链子。
先按标题层级切,流程类文档截断了语义肯定乱。加个重排模型能救回来不少,亲测有用。
几千份文档确实得加reranker,光靠embedding排序不够。另外可以试试按标题层级切,别硬切固定长度。
加个reranker吧,bge-reranker效果就不错,先粗排再精排能筛掉大半噪音。
我用了大半年Cursor,Composer模式处理多文件确实容易翻车,尤其是涉及到PDF解析这种依赖具体库版本的任务。你遇到的编造库函数问题很典型,像pdfplumber和PyPDF2的API它经常混着用,生成的代码看着合理但一跑就崩。我的经验是别指望它一次写完整脚本,改成先让它只写核心逻辑,比如提取表格那十几行,手动确认库和函数名没问题,再让它补全周边代码。另外prompt里最好明确指定库和版本
动态上下文塞多了确实会稀释指令权重,我一般只留当前任务必需的,其他按需召回。
几万条数据Chroma完全够用,我自己的知识库差不多这个量级,跑了半年多没出过问题。持久化就一个sqlite文件加索引目录,备份直接复制走人。真要说坑,大概是并发写入差点意思,但个人项目哪有那么高并发。建议先把手头的东西跑通,等数据上百万或者多人同时用了再考虑迁Milvus,Qdrant的API其实挺好上手的,可以当备选。
这问题我太熟了,800字提示词加few-shot,看着挺全,但模型其实根本没“记住”人设,它只是在模仿你给的例子的表面模式。你换个问法,相当于触发了它训练数据里更强势的默认客服模板,人设就被覆盖了。我自己的经验是,few-shot别只给“标准问答”,要故意给几个用户用不同语气、不同切入点的例子,让模型学会的是“不管怎么问都保持这个人设”,而不是“这种问法对应这种回答”。另外“作为一个AI助手”这种
7B全参微调8卡DDP肯定爆,除非上ZeRO-2/3,但那不就是FSDP换皮嘛。我之前试过DDP+gradient checkpointing+Adam offload到CPU,能跑但慢得离谱,吞吐直接砍到单卡水平。FSDP shard_grad_op在7B上比full_shard快不少,通信量小,你可以先试这个策略调调。不想改代码的话看看accelerate的config,其实只加几行wrapp
微调确实能治,但别指望根治。我拿Qwen2.5-7B试过LoRA,把工具定义和调用样例拼成多轮对话喂进去,格式规范率从六成提到九成多,但换套没见过的工具定义还是偶尔翻车。数据准备不用太复杂,几百条覆盖各种边界情况的就够,重点是把required漏填、格式错这些负例也塞进去。通用能力掉得不多,LoRA秩别开太大就行,我用的r=16基本没啥感知。
我们现在的做法是把记忆拆成两层:短期用摘要压缩,每三四轮让模型生成一段精简回顾,长期就用向量库按主题存,检索时只捞跟当前问题语义相关的片段。滑动窗口确实太粗暴了,容易把关键约束截掉。另外时序信息可以单独塞个时间戳排序,别跟语义向量混一块,不然检索出来全是最近但不相关的废话。
几十万数据HNSW的M和efConstruction确实会影响召回,但一般不至于让top10混进完全不搭边的结果,感觉更像是chunk切得太碎或者query和文档长度差异太大导致的。建议先别急着调索引,拿几条bad case把query和召回的原文都打出来看看,很多时候是embedding把短query和长chunk压到不同区域了。混合检索(BM25+向量)对关键词型query提升挺明显的,可以先
这个坑我也踩过,LangChain的AgentExecutor在多工具场景下确实容易失控,本质是它每轮都让模型重新决策,没有强约束。我后来换成用LangGraph显式定义状态流转,把每个工具的输入输出当作节点状态,顺序就稳多了。如果不想上LangGraph,其实自己写个轻量状态机也够用,就是维护成本高点。另外System Prompt里明确写清楚“完成X之前禁止调用其他工具”会有点帮助,但别指望它
先加个rerank试试,bge检索top5排序确实不太靠谱,经常把不相关的排前面。
我之前也踩过一模一样的坑,后来发现光靠向量相似度确实不够。你可以试试在metadata里存时间戳和笔记类型,查询时先按时间范围过滤再算相似度,这样能筛掉不少“语义近但时间不对”的结果。embedding模型其实影响没那么大,bge或者text-embedding-3都够用,关键还是检索策略要分层。另外chunk别切太碎,留点上下文重叠,不然召回片段经常缺胳膊少腿。
合同审核这种场景确实容易跳步,因为模型觉得“提取信息”是隐含的,它直接就去匹配风险点了。我试过把每一步拆成独立的prompt调用,比如先用一个prompt专门做信息抽取,输出结构化JSON,再拿这个JSON喂给下一步,比在一个prompt里写“请按顺序执行”稳很多。或者你可以在每步输出后加个自检,让它确认上一步结果存在再继续。LangGraph那种硬绑定当然更可控,但如果你只是想快速验证demo,
MCP主要解决的是权限隔离和审计,不是让模型写代码,你把推理包成tool反而绕远了。
我也遇到过这个情况,Cursor确实喜欢“贴心”地帮你加功能。后来我的做法是在项目根目录放一个`.cursorrules`文件,明确写清楚这个项目里哪些东西绝对不要加,比如“禁止添加任何UI增强功能”,比在prompt里反复强调管用多了。另外Composer模式可以试试先让它只生成骨架,然后你手动补细节,别一次性让它写完整组件,不然它就会自由发挥。
这种“偏科”太常见了,Llama3本身中文底子就一般,2万条法律文书又高度同质化,三个epoch足够把模型往窄路上拽了。你那个学习率2e-5对全参微调来说不算离谱,但batch size才4、梯度累积8,实际等效batch也就32,这种小步快跑很容易让模型在中文上过拟合到任务模板里,通用能力被冲掉很正常。LoRA确实会好不少,它把更新限制在低秩子空间里,对原模型的多语言表征破坏小很多,我试过类似场
我一般只写硬约束,比如框架版本、禁止用的库、输出格式,其他交给模型自己发挥。写太细确实容易触发“过度服从”,连你只是想要个思路它也硬塞完整实现。中途跑偏我基本直接开新会话,改Prompt经常越改越拧巴,上下文里那些错误示例还在带节奏。颗粒度这东西真得看任务,重构和写新模块完全是两套写法。