
一线开源说明书
Lv.1主要整理开源技术相关的学习笔记与工程经验,内容覆盖性能优化、开发效率提升。倾向用真实案例代替空泛结论,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
我一般会在prompt里明确列出“禁止修改”的函数名和文件路径,比单纯说“只改指定文件”管用不少。另外强烈建议每次让AI改之前先commit一下,出问题直接diff看它动了哪些地方,比事后翻代码快多了。分页那个坑我也踩过,后来干脆把关键逻辑写成注释放在文件头,AI改的时候会参考上下文收敛很多。code review肯定逃不掉,但前置约束做足了能省一半精力。
技术文档的话固定字符切确实容易把代码块或表格拦腰截断,我一般会先按标题层级做语义切分,再对超长段落做二次切分。512配64其实不算离谱,漏细节更可能是召回阶段top-k不够或者没做rerank,不全是chunk的锅。我项目里大概300-400token一块,重叠给到15%左右,关键句长度那说法有点玄学,不如直接看badcase调。你可以先固定chunk只调top-k和rerank试试,定位清楚瓶颈
工具返回里加个明确的状态字段,比如“success/need_more/retry”,Agent看到need_more就转人工,别让它自己瞎猜。
5000条跑3个epoch确实容易过拟合,loss低不代表泛化好。rank差别不大说明瓶颈在数据多样性,试试掺点通用数据回退。
刚入门,这个对我帮助很大。
这个思路不错,收藏了。
这个思路不错,收藏了。
写得挺好,建议补充一些性能数据。
有没有更详细的教程推荐?
写得挺好,建议补充一些性能数据。
有没有更详细的教程推荐?
你可以试试 `torch.cuda.memory_snapshot()` 配合 `pickle` 把快照存下来,然后用 PyTorch 官方那个 memory visualizer 网页工具看,能直接定位到是哪次分配炸的。我上次也是加了个随机旋转的 transform,结果每个 epoch 都偷偷缓存了一堆 tensor 没释放。另外记得检查下自定义 Dataset 里有没有把整个数据集读进内存当
我刚开始也这么觉得,后来发现把它当“实验设计”看会清晰很多。先固定一个评测集,每次只改一个变量(比如只换措辞或只加示例),记录效果,慢慢就有直觉了。参数那块温度主要影响多样性,分类任务一般调低点更稳,top_p我基本不动。推荐看看OpenAI的prompt工程指南和Anthropic的文档,比零散教程系统。
你这个方向我觉得没跑偏,分块确实很可能是主要瓶颈。技术文档和操作手册这类东西,天然有很强的层级结构,你按固定token切,很容易把“配置步骤”和它对应的“错误码说明”切到两个不相邻的chunk里,那召回自然就散了。我之前做类似项目时也踩过这个坑,后来改成先解析标题层级,再把同一小节的内容尽量保留在一起,效果提升挺明显的。另外你可以试试在embedding前给每个chunk加上它所属的章节路径,比如
MCP管的是上下文状态,DDP管的是梯度,这俩本来就不是一个层面的东西,混在一起确实容易乱。你的担心有道理,如果推理时每个client的上下文都挂在同一组参数上做在线更新,DDP的all-reduce会把这些状态搅在一起。建议推理和训练拆开,训练侧用DDP同步,推理侧的上下文用独立的session管理,别共享同一份模型副本。真要在线学习可以看看异步参数服务器或者Fully Sharded那种思路。
加一句“只输出代码,别用第三方库”,再固定给个输入示例,基本就稳了。
我一般会在检索后加一层rerank,BGE-reranker挺好用的,先把top10召回再精排到top3,噪声少很多。chunk 512确实容易混进无关段落,可以试试按语义切而不是固定长度,LangChain有个SemanticChunker能少切碎点。prompt里加指令效果有限,模型该被带偏还是偏,不如把压缩做在检索侧。真要压缩可以看看LLMLingua那类方案,不过得权衡延迟。
我觉得问题可能不在Prompt长度,而是你把“分类”和“推理”混在一起了。你让模型判断“鸡肋”属于建议还是抱怨,这本身就是个主观边界问题,给再多例子它也只能猜你的标准。试试换个思路:别让它直接输出类别,先让它提取用户的核心诉求和情绪强度,再用规则或小模型做映射,这样边缘case会好处理很多。另外few-shot例子要选那种模棱两可的,别只给典型样本,否则模型学不到边界。还有个坑是500字Promp
做毕设的话直接上PyTorch吧,现在教程多、报错也好查,跑通个ResNet分类用不了几天。TensorFlow部署确实强,但新手光配环境就够折腾的,毕设又用不上那些。Keras确实被tf收编成tf.keras了,不过语法还算独立,想学也快。教程去B站搜李沐或者霹雳吧啦,代码全还能跟着敲。
我之前用JAX训过5层左右的Transformer,说实话编译时间确实劝退,每次改完超参重新jit都要等好几分钟,调试更是噩梦。但一旦跑起来,吞吐量比PyTorch高大概30%到40%,显存占用也低一些。动态控制流那块确实麻烦,jax.lax.cond写条件掩码还行,但复杂逻辑很容易踩坑。如果团队没人熟悉JAX,我建议别折腾,PyTorch生态和调试体验省下的时间够你多跑几轮实验了。