
持续输出移动开发学习者
Lv.1把长期学习拆成每天都能完成的小任务。当前重点关注移动端开发,通过架构设计、项目复盘持续提升能力;坚持先理解原理,再讨论工具,并把过程整理成可复用的学习记录。
发表的评论
Function Description里把两个工具的参数差异写清楚点,比如日历必须传具体时间字段,模型有时候是分不清该填啥才瞎编的。
这种情况挺常见的,检索没问题但生成乱扩展,大概率是模型没被“框住”。我一般会在prompt里明确要求:先输出“根据以下内容能否回答该问题”的判断,能回答才继续,不能就直接回复“制度中未提及”。另外把temperature调到0,top_p也可以压到0.1左右,会稳很多。还有一个坑是上下文里如果混了多个制度块,模型很容易串着答,最好在检索后按问题做一次重排或截断。
试试把工具调用当成一个独立的数据流管线,用队列和状态机管理比if-else清爽多了,别跟nn.Module较劲。 工具组合乱就先画个调用图,用asyncio编排异步任务,prompt拼接放函数装饰器里复用,代码会干净不少。
我之前做类似场景也卡了好久,后来发现问题不一定在重排,而是你top_k里“相似废话”的分布太集中了,重排模型只会帮你把最相关的顶上来,但如果源头就没召回真正需要的那段,reranker再强也白搭。我猜你本地知识库里那些“类似概念”的段落,可能在向量空间里离query确实很近,因为bge-m3对领域术语的语义区分有时就是会偏向广义相似,而不是精确匹配。你可以先做个实验,把召回的20段全部打印出来,人
我之前也踩过类似的坑,loss降得漂亮但效果拉胯,后来发现是标签分布太偏了,比如“投诉”类样本特别多,模型学成惯性归类了,你可以先统计下各类别的数量。另外LoRA rank和alpha调大不一定好,反而容易让微调扰动太大,把基座能力带歪,建议试试rank=8、alpha=16,学习率降到1e-4左右。还有个排查方向:检查下测试集里那些“退换货”样本是不是本身就和“退款”语义重叠,自己标注时可能没注
你这情况我熟,top-5塞太满反而干扰大,试试先按相关性阈值砍到3个,模板里加个“只依据给定材料回答”的硬约束。 我这边是动态拼个“文档-问题相关度排序”的前缀,让模型自己抓重点,比纯堆规则稳不少,但得牺牲点延迟做缓存。
说实话你这场景我太懂了,几百用户真别折腾Milvus,光运维就够喝一壶的。我当初也是纠结半天,最后直接Chroma起步,数据量上去了再换也不迟,反正API都兼容。关于索引参数,Milvus默认的HNSW其实挺稳的,你调半天可能是距离度量没配对,试试余弦相似度配归一化embedding,召回率会明显改善。另外不同库对embedding维度基本都支持到4096,主流模型都没问题,但Pinecone的s
这问题我踩过类似的坑,大概率不是MCP本身慢,而是你每10步同步调一次LR的时候,把CUDA stream给卡住了。试试把MCP调用丢到独立线程里,然后用torch.cuda.Stream做异步拷贝,别直接在训练循环里等返回值。 另外检查下DataLoader的num_workers,MCP如果用了锁或者跨进程通信,可能会和worker抢GIL,尤其Windows上特别明显。我之前是把MCP丢到
试试在工具定义里强制统一schema,或者用个轻量转换层把输出全转成JSON,别在拆包上硬扛。
试试在指令里加一句“只允许新增代码,禁止修改已有行”,配合git diff逐行审查,比锁文件靠谱多了。
这问题太真实了,我当初也踩过一模一样的坑。其实除了指定库名,你还可以在Prompt里加上“用统一的函数命名风格”和“注释必须写在每行代码上方”这种硬性格式要求,能稍微收敛一点。另外让它先输出设计思路再写代码确实有效,相当于给它加了个“思考锚点”,跑偏概率会低很多。不过说实话,想要绝对稳定不太现实,我后来是直接把生成的代码丢进测试用例里跑一遍,不通过就让它自己改,比反复调Prompt省心多了。
我最近也踩过这个坑,System Prompt写太细确实会让模型变得“太守规矩”,连试探性的问题都直接给完整方案。我的办法是把约束条件分两层,核心规则比如禁止用的库写死,但像“先给思路别写代码”这种灵活要求放在对话第一轮里单独强调,效果比全塞进Prompt里好。中途跑偏的话,我一般就顺着对话直接纠正,除非偏差大到上下文已经污染了,才会新开会话,毕竟重来一遍成本也挺高的。
同款踩坑路过,我后来发现切块和embedding其实是联动关系,不是单独调的。固定512字对财报这种密集数字文本太粗暴了,经常把关键数值和上下文拆散,你试试按语义段落切,但重叠比例拉到10%-15%,这样能保住上下文连贯性,又不至于检索出一堆冗余片段。 另外bge-large和ada-002对领域术语的敏感度差挺多,公司内部文档如果有很多自定义缩写,建议先用一个小的分类模型粗筛一遍,把文档按类型
本质区别不在检索,而是MCP把工具协议和上下文管理收口了,不然每个agent都得自己写一套调用逻辑。并发这块建议直接看官方源码,很多封装其实没做分布式锁,生产上还得自己加层代理。 MCP最大价值是把embedding和rerank这类预处理藏进server,客户端不用管,但性能瓶颈也在这,重度查询时并发一高就容易卡在向量化环节。
我觉得你这个问题其实踩中了很多人的坑,微调LLM去过滤噪声,方向听着对,但很容易把模型搞糊涂。我自己的经验是,训练数据里负样本一定要加,但比例得控制住,不然模型会变得过度怀疑一切,连正确文档都不敢信,你提到的“忽略正确文档”很可能就是负样本太多或者噪声样本构造得太刻意导致的。 关于构造方式,我建议别只给“相关/不相关”的二元标签,而是把检索结果按相关程度分档,比如高相关、部分相关、不相关,让模型
试试给每个transform前后加个torch.cuda.synchronize再打印allocated_memory,二分定位很快的,之前我这么干过。 加个memory_profiler配合pytorch的钩子,能按行标内存,不过小batch跑几轮就够看了。
说实话27%这个提升幅度确实挺打动人的,尤其是self-debug那块,比我之前折腾GPT时手动补异常处理省心多了。不过我也遇到过类似的情况,一旦跳出它熟悉的框架,比如让我接个老项目里的WebSocket或者自定义协议,它就开始频繁卡壳,有时候甚至自己编造接口返回。所以这个优势可能还是集中在主流技术栈里,冷门场景下能不能保持住这个成功率,我持保留态度。另外你提到混合技术栈,我猜是帖子被截断了,不知
4060 8G跑7B量化确实挺极限的,我之前用6G显存的卡试过类似情况,加载完基础模型就剩不下啥空间了,上下文一长直接卡死。你不如试试Qwen2.5-Coder的1.5B或者3B版本,虽然补全质量会降一档,但胜在能流畅跑完整个会话,实际体验比卡成PPT强太多。另外Ollama有个参数可以限制上下文长度,比如把num_ctx调到2048或者更小,能明显缓解爆显存的问题,代价是代码跨行关联能力变弱。如
灰度测试太重要了,我们也是延迟暴涨差点超时,边缘case退化这个深有同感。
这玩意儿真不是玄学,但也不是拍脑袋。我后来直接放弃固定值,改成按语义断点切,比如标题、段落空行,配合一个最大token上限兜底,存储涨得没你想的严重。重叠比例其实取决于你的检索粒度,如果按段落切,50%重叠只在关键条款上手动加,别全局套。不同文档肯定要分策略,聊天记录我甚至按轮次整段存,长报告就得按层级拆。建议你先跑一批bad case,统计一下截断都发生在什么结构上,再反过来定规则,比盲目调参靠