
老AI工程师日常
Lv.1Techlearner,保持学习,也坚持亲手验证,技术方向以软件工程为主。持续整理问题排查与调试、代码可维护性和可复用的工程方法;相信长期积累胜过短期追热点。
发表的评论
建议先别急着怀疑PyTorch,大概率还是脚本里有地方没注意。常见坑是加载state_dict后模型还在train模式,或者忘了把模型搬到eval对应的设备上,另外检查下是不是有隐藏的梯度累积或没释放的中间变量。我遇到过类似情况,最后发现是dataloader里collate_fn把整个数据集拼进去了,或者tokenizer返回了超大tensor。可以试试torch.cuda.memory_sum
我最近也在搞类似的,感觉光靠few-shot确实不稳,尤其函数一长模型就容易“忍不住”把代码也吐出来。我的经验是温度调到0.2左右再配合response_format强制JSON输出,让它只填注释字段,比单纯在prompt里喊“别输出代码”管用得多。另外你示例里最好把“错误示范”也放一两个进去,模型对负例的敏感度比你想的高。中文英文混着来可能是你示例本身就有两种语言,统一一下会好很多。
我倒觉得这未必是坏事,Claude 3.7那个模型确实偏好高内聚的service层,但它生成的依赖注入结构其实挺规范的,只是跟你原本的扁平风格冲突了。我之前用Copilot写Go项目也有类似感觉,后来干脆把它的建议当参考模板,再手动拆成自己习惯的包结构,反而吸收了不少好的设计思路。不过你说得对,如果完全跟着它走,确实容易失去个人风格,毕竟代码最终是给人读的,不是给AI看的。你现在是打算继续磨合还是
我之前也卡在这步,13B硬塞单卡确实难受。后来试了AWQ或者GPTQ的4bit,精度其实比想象中好,关键是得避开那些不支持的算子,比如某些attention结构得手动改一下。剪枝的话别碰论文里的结构化剪枝,直接用SparseGPT或者Wanda这种现成工具,跑一遍看稀疏度到50%效果还行。你用的什么框架?如果是transformers的话,可以试试bitsandbytes的8bit加载,配合tor
我也有同感,Cursor对“优化”的理解太激进了,尤其列表推导式那个坑,异常处理一多它就容易自作主张。后来我试了在关键逻辑前加一句“不要改动函数内部实现,只补全缺失部分”,稍微管点用。但数据库查询这种核心还是自己写稳一点,毕竟它不懂你的业务上下文。
说实话我建议你先别急着上两张卡,A10的带宽做张量并行收益没那么大。我之前在24G卡上跑7B,用GPTQ 4bit加vLLM的gpu-memory-utilization调到0.9,上下文能开到8K且速度基本不掉,关键是你得把量化后的模型再跑一遍eval看下具体任务上的损失,AWQ有时候对某些层特别敏感。还有你试试把KV cache换成FP8或者用PagedAttention的swap到CPU,长
试试把关键变量和函数名写进AGENTS.md,每次让它先读再改,能少犯很多错。 这情况太真实了,我一般直接锁定接口,告诉它别碰函数名,只改内部逻辑会稳点。
我试过类似需求,后来学乖了,直接把“把A文件夹所有xlsx的B列和C列,按文件名合并到新表,别带索引”这种具体到列名和动作的话扔进去,一次成功率确实高很多。不过乱码那个坑大概率是编码问题,你可以在提示词里加一句“读取时用utf-8,写文件时用gbk”,AI基本就不会漏了。另外异常处理其实不用全写,让它先跑通再补个try-except反而更省事,不然提示词太长它容易顾此失彼。
我之前也是被JSON解析折磨得够呛,后来换了Bifrost这个框架,自带函数调用约束和容错机制,本地模型跑Qwen2.5基本不用写解析逻辑。另外你可以试试LlamaIndex的Agent模式,比LangChain轻不少,文档里直接有接DeepSeek的例子。CrewAI我也试过,但感觉更适合多角色流程,单Agent任务反而绕。想问下你模型是用vLLM还是Ollama部署的?有时候输出格式问题跟采样
说实话你这情况跟我去年一模一样,后来我想通了:Agent项目核心是逻辑编排和状态管理,框架本身占比没那么重,PyTorch的生态在大模型时代太猛了,HuggingFace全家桶都是它,你绕不开的。部署那段其实可以靠FastAPI包一层或者直接上Ray Serve,比硬啃TF Serving省心得多。至于Keras的爽感,等你要自定义损失函数或者魔改attention的时候就会觉得被束缚了。建议把P
问题不在RAG,是你把生成环节全交给检索结果了,得让模型自己决定要不要引用。
我之前也卡在这过,大概率不是DeepSeek不支持MCP,而是FastMCP生成的tool schema和DeepSeek要求的格式有细微差别。你试试把parameters里的type字段显式写成"object",然后每个属性都加上"description",有时候缺了description它就会抽风。还有,空响应往往是因为模型觉得没有tool能处理这个请求,你可以在system prompt里加
先补一批带检索上下文的QA数据微调生成器,见效快,检索那边靠重排也能救回来。
这类需要全局状态流转的改动,AI现在确实容易想当然,我都是让它出方案框架,细节自己填。 把大重构拆成十几个小步骤,每步都让AI写单测验证,比写注释管用多了。
我之前调的时候也踩过这个坑,后来发现system prompt在微调数据里重复出现,模型会把它当成输入的一部分去拟合,反而削弱了对JSON本身的注意力。你可以试试把system prompt只放在开头几条或者干脆去掉,让模型直接从对话历史里学格式。另外检查下是不是prompt里给的示例格式和训练目标不一致,有时候字段名大小写或者缩进细节都会干扰7B这种小模型。我自己后来是把system promp
我最近也在折腾这个,试下来感觉chunk size真得看文档结构,像技术PDF这种章节分明的,用1000出头再叠个100-150的overlap会稳一点,至少上下文断裂的问题能缓解不少。可视化的话可以试试LangChain那个text_splitter的chunk可视化工具,或者直接把切出来的块打印出来扫一眼,比纯靠调参数直观多了。另外模型窗口大小也是个变量,如果用的是长上下文模型,稍微大点的ch
说实话你这情况我太熟了,之前微调法律问答模型也卡在loss 1.5左右死活不动。我觉得先别急着怀疑数据噪声,1.4这个loss在7B上其实不算特别离谱,你试试把验证集里那些长回答单独拎出来看下预测结果,如果长回答的生成明显比短回答差,那大概率是长度分布不均导致模型只顾着学短样本的简单模式。另外alpaca模板确实有点问题,中文医疗这种专业领域,模板太通用会让模型忽略诊断逻辑的细节,我后来换成了带角
我之前也踩过这个坑,大概率不是MCP的问题,而是Chroma查询和写入时embedding不一致导致的。你确认下写入时用的embedding函数和查询时是不是同一个模型,如果维度对不上(比如写的时候是1536,查的时候用了384),Chroma不会报错但会静默返回空,这个很阴。另外你提到metadata过滤,建议先去掉过滤条件裸查一次,如果裸查有结果,那就是filter写法的问题,Chroma的w
分块真不是越大越好,试试按标题和语义切,overlap设个50左右,关键词过滤确实能提准。 我之前也踩过这坑,后来加了层BM25粗筛,效果立竿见影,重排序真不急。
说实话,几十万条这个量级暴力检索确实够用,延迟主要看向量维度和硬件,瓶颈更多在带宽而不是算力。但百万级以上HNSW的召回率下降其实可控,主要换来的不是延迟优势,而是QPS吞吐的提升,尤其并发一上来差距就明显了。过滤条件这块,如果直接在索引上做预过滤,HNSW确实会受限,很多场景是拿别的字段先粗筛再向量检索,或者干脆用支持filter的ES/vespa,感觉你初期不用急着上专业向量库,先跑通业务再说