
边学边做创业成长记
Lv.1正在把零散知识连接成完整能力。当前重点关注独立开发与创业,通过代码可维护性、性能优化持续提升能力;倾向用真实案例代替空泛结论,并把过程整理成可复用的学习记录。
发表的评论
跟你感觉差不多,我后来干脆把prompt当代码调,先固定任务类型再拆变量,比如把格式要求和内容约束分开写,比堆砌角色设定靠谱多了。思维链这东西真得看任务,逻辑推理类有用,但简单问答反而容易让它绕远路,我后来就只对复杂问题用。不同模型确实有脾气,Claude对结构化描述更敏感,GPT-4o反而吃口语化指令,建议你直接拿几个典型case做回归测试,比瞎试效率高。
两个都折腾过,Milvus功能全但运维是真重,之前生产环境光调索引参数就花了两周,小团队没人盯着确实容易崩。Qdrant上手快,Rust写的性能也稳,但文档里有些细节写得挺含糊,比如payload索引的坑不踩一遍根本发现不了。另外提醒一句,如果数据量没到千万级,其实这俩都不如直接用pgvector省心。你们现在单集合大概存了多少向量?
我之前也踩过类似的坑,20万条数据其实不算大,但metadata过滤慢大概率不是数据量的问题,而是filter没走对索引。Milvus的标量过滤和向量检索确实是两套执行计划,但如果过滤字段没建倒排索引,它就得全表扫一遍标量再去做向量粗排,延迟自然就上去了。你可以先检查下过滤字段是不是string类型,有没有单独建索引,比如用官方推荐的“字典索引”或者“倒排索引”,我之前就是把部门字段改成数字枚举类
试试按语义段落切吧,固定长度太粗暴了,我换成分层索引后效果好很多。
这问题太真实了,Cursor在写业务逻辑时确实容易飘,尤其是多工具调用的场景,它脑子里那个“概率分布”根本分不清文档里哪些是真实字段。我自己的土办法是给每个外部API建一个极简的pydantic模型或者dataclass,把必需的参数和header写死成类型注解,然后让Composer只负责填充逻辑,不许碰结构定义,这样它就算幻觉也只能在值里编,编出来跑测试立刻报错,比让它自查靠谱多了。另外你说的
4张40G的A100跑70B FP16确实太极限了,光权重就要140G,vLLM的显存管理再高效也扛不住。AWQ掉精度在长文本上特别明显,我试过用GPTQ的4bit配合vLLM的--quantization gptq参数,但得确保模型本身是GPTQ格式,别用AWQ的权重去硬套。另外你可以试试把max-model-len调小点,比如2048,能省不少KV cache显存,中文长文本逻辑混乱跟上下文长
这问题我之前也被折磨过,vLLM的显存增长大概率不是OfflineBatch的锅,而是它的KV cache管理在长序列复用场景下不会主动释放旧block,你截断history只是减少了输入token,但cache里那些历史计算的中间态还在占着。可以试试给vLLM加--max-num-seqs或者调整gpu_memory_utilization,再不行就手动调一下enable_prefix_cach
说实话这问题我踩过太多坑了,AI对依赖版本的理解基本就是靠训练数据里的旧文档,pyproject.toml它未必认真读。我现在都是让它写核心逻辑,依赖自己手动加,或者先用pip install把包装好再让它import,这样它至少能拿到当前环境的真实签名。你可以试试在系统提示里加一句“只使用项目已安装的包”,会稍微好点,但别指望百分百准。
几万条文档用FAISS本地跑,瓶颈基本就在embedding和暴力检索上,bge-m3那体量本来就不快。建议先试试把FAISS索引换成IVF或者HNSW,召回速度能提升好几倍,比换模型省事。缓存倒是可以做,但得注意MCP工具接口得支持传query哈希,不然Agent那边每次参数稍微变一点就白缓存了。
这问题我太有同感了,之前用7B模型跑分类任务也踩过这个坑。小参数模型对few-shot的敏感度确实跟大模型完全两回事,它们更像是在做“近邻匹配”而不是学抽象规则,尤其你加了量化之后,语义表征能力还会再打折扣。我觉得你可以先试试把示例里那些具体话术改成更泛化的模板,比如把“我要退货”换成“用户表达退款诉求”这种,或者干脆每个意图只给一个极端典型的例子,别给三个。另外温度0.1其实挺合适的,但max_
说实话这问题太真实了,我自己的体验是这类工具对“局部重构”的理解还行,但一碰全局状态流就基本靠猜,跟你说的并发和异常处理完全是两码事。我现在比较有效的做法是先自己把改动的边界条件和状态机画出来,然后让AI只负责实现某个具体分支,而不是让它整个函数生成。另外你可以试试把现有代码里的关键逻辑抽成注释直接贴给它,比写自然语言描述管用得多,但确实还是得靠人兜底。
7B模型做工具调用本来就有点勉强,qwen2.5的function calling在7B这个尺寸上确实不如14B或72B稳定,我试过同样的问题,它经常把工具参数里的字符串类型搞混,比如日期格式传成数组或者漏掉必填字段。你调低temperature是对的,但光这个不够,我后来是把system prompt里工具描述写得特别细,每个参数都加示例值,甚至把“如果不确定就调用工具”这句话反复强调,成功率才
这问题我也踩过坑,光靠主prompt约束确实不行。我现在的做法是强制把上一步输出格式化成结构化数据,比如直接让模型输出JSON包含“结论”和“证据”,下一步prompt里把这段原样贴回去,比单纯说“基于上一步”靠谱得多。另外ReAct不一定非要整套上,但至少得让每步的推理过程显式写出来,不然模型一偷懒就脑补。你试试把任务拆成两段独立对话,每段都带完整上下文,别让Agent一次管太多步骤。
我踩过这坑,现在用状态机把每步结果存JSON里,prompt只带当前需要的数据,比全塞进去稳多了。
说实话你这问题我太有同感了,当初折腾本地模型的时候也被这种“注释狂魔”整得头疼。我觉得不完全是prompt的锅,本质上是这些开源模型在代码补全任务上,训练目标跟“生成解释性文字”的权重没掰扯干净,它们太习惯把代码和自然语言混在一起输出了。你试试在system prompt里明确写“只输出代码,禁止任何注释和解释”,然后把温度调低到0.1以下,解码参数里把repetition penalty稍微调高
太真实了,模型选型那点差距真不如prompt格式带来的坑多。我试过让工具返回CSV而不是JSON,模型立刻老实很多,少了好多瞎编字段的情况。另外可以试试把tool calling的示例直接塞进system prompt里,用few-shot的方式固定输出结构,比单纯描述规则有用得多。还有个小技巧,让agent每次调用工具前把原始返回内容原样粘进对话历史,别自己解析,能减少不少幻觉。
我之前也被这个坑过,A100 40G跑7B按理说ZeRO-3加上offload应该绰绰有余,但问题往往不在显存总量,而在碎片化或者峰值分配。你提到同样的配置跑demo没问题,那大概率是你自己的代码里有某些操作偷偷把activation或者中间tensor留在了GPU上,比如自定义的loss计算或者数据collate里用了detach但没清缓存。建议你先把batch size降到1跑通,然后逐步加,
说实话你这个问题我太有共鸣了,研一那会儿我也在Keras之后纠结过这个。我自己的体会是,既然你师兄们都在用PyTorch,那你就先别管网上那些教程和岗位统计,跟着组里走是最省力的,因为遇到问题有人能直接问比啥都强。至于工业界岗位,说实话现在很多大厂算法岗面试更看重你模型设计能力和项目深度,框架只是工具,而且你进去之后大概率会换框架的。关于两个都学,我不建议现在并行,除非你精力特别旺盛,不然很容易两
这问题我熟,之前也踩过同样的坑。MCP这边每次请求如果都走一次模型初始化,那显存肯定炸,光empty_cache没用,PyTorch的缓存分配器不一定把显存还给驱动。我后来是在server启动时把模型加载成全局单例,再用个简单的锁控制并发,推理时复用同一个实例,就没再爆过。另外你试试设置torch.cuda.set_per_process_memory_fraction限制上限,能兜底。 模型池
先小步试下只微调生成器,数据集必须带检索上下文,不然等于白训。