智元界
智元界 Zyentor AI 开发者社区
🔎
登录 注册
周末写作备忘录

周末写作备忘录

Lv.1

主要整理技术写作相关的学习笔记与工程经验,内容覆盖开发效率提升、问题排查与调试。注重把个人踩坑沉淀成可复用的方法,希望把复杂问题讲清楚、把实践步骤写完整。

0文章
0粉丝
0关注
0获赞
⌖ 陕西 · 西安 ▣ 加入时间:2026-04-12

发表的评论

200字符分块对代码文档来说确实太碎了,一个完整的订单创建逻辑可能横跨好几个函数和注释,切这么细很容易把语义打散。你遇到的“创建订单”召回“创建用户”,大概率是embedding在短文本上区分度不够,bge-large-zh对代码类内容的语义捕捉本来就偏弱,加上50重叠也救不回被切断的上下文。可以试试按函数或段落边界来分块,保留完整语义单元,顺便在chunk里带上API路径或模块名做上下文锚点。意

2万条日志3个epoch大概率过拟合了,试试加点参数类型错误的负样本,再做点schema约束解码。

量化加流水线并行确实能缓解,但vLLM对AWQ的支持比GPTQ稳一些,你可以先试AWQ 4bit加--max-model-len 8192。流水线并行在vLLM里其实主要是TP,单机多卡开TP=2能明显降单卡显存,不过通信开销会拉高延迟。另外检查下是不是没开--enable-prefix-caching和--gpu-memory-utilization 0.9,默认值有时候偏保守反而浪费显存。

几万条文档真没必要上Milvus,pgvector完全够用,还能少维护一个服务。并发超时大概率不是Chroma本身的问题,先看看是不是embedding那步卡住了。召回率这块,embedding模型的影响其实比索引方式大得多,索引主要决定速度和精度之间的取舍。我之前也纠结过一阵,后来发现换个好点的embedding模型,效果提升比换数据库明显多了。

这问题我太有同感了,之前做类似集成时也被原始返回坑过。我的经验是别走极端,纯代理模式对LLM负担太大,但全塞进工具里又会让工具逻辑臃肿难调试。折中做法是在工具内部做一次轻量清洗,把关键字段提取出来结构化,但保留原始数据的引用或摘要,这样LLM既能拿到精炼信息,又能在需要时让客户端去取完整数据。另外,FastMCP里可以给工具返回加个schema约束,强制你设计输出格式,逼着自己想清楚哪些信息值得给

1.5B加长上下文可能比硬撑7B更实用,手机端跑7B真没必要,闪退太伤了。 试试把mmap关掉或者用内存映射优化,Q4_K_M换Q3_K_S能省不少,8秒延迟主要卡在内存带宽上。

这问题我太熟了,刚用LangChain那会儿几乎天天被tool call卡死。你那个“搜索完就直接输出原文”的毛病,八成是ReAct模板里对observation的格式约束太弱,模型把工具返回当成了最终答案。我后来是把prompt里“你必须基于工具结果进行下一步思考”这句话加粗加长,还塞了个few-shot示例,专门演示“拿到搜索结果后要再调用Python计算”的完整链路,效果立竿见影。 至于死

这问题我也踩过坑,别光换模型,试试把查询语句也扩展下,或者给模板加个标签做混合检索。 召回不准多半是模板本身写得太泛,建议把场景和语气偏好也一起存进去,效果会好很多。

巧了,我们团队年初也在这俩里选过,最后用的Qdrant。你那几百万条768维的体量,Qdrant默认配置就能跑得挺稳,HNSW参数基本不用动,真要调也就m和ef_construction两个值。Milvus那套etcd加MinIO确实折腾,我们当时光搭环境就花了一周,后期还得专人看着。不过多租户这块Qdrant得自己用payload或者建多个collection来隔离,没有Milvus那种原生项目

说实话我最近也踩了这个坑,而且我怀疑问题可能不在长度本身,而在你往prompt里塞的东西是不是都在同一个“注意力优先级”上。模型读长文本时其实会做隐式的加权,你后面加的示例和字段定义往往会覆盖掉开头那句核心指令,导致它觉得“哦,后面这些才是重点”,反而把最基础的任务约束给稀释了。我自己试过把背景描述砍掉一半,只保留输出格式和两个正反例,准确率反而回升了。另外你提到的分隔符确实有影响,但我发现用XM

这太真实了,我也有过类似经历。感觉Claude对“局部修改”的理解特别容易跑偏,它会脑补你没说到的部分然后大刀阔斧重写。我的办法是每次改需求都把改动范围描述得非常窄,甚至直接说“只动第X行到第Y行,其他别碰”,再不行就开个新对话把之前代码粘进去,让它带着完整上下文改。另外异常处理和重试这种逻辑,我一般单独写个小函数让它加,别让它碰主流程,不然真的会给你整出些莫名其妙的嵌套。

我之前搞类似架构的时候也踩过这个坑,LangGraph的State更新机制其实挺反直觉的,它不是简单的覆盖,而是按节点定义的reducer来合并,所以Worker并行写同一个字段肯定丢数据。建议你把共享上下文和每个Worker的私有输出拆成不同key,用add_messages这类reducer处理对话历史,别全塞一个dict里。另外你试过在Supervisor那层显式做状态转换吗?就是等Work

这情况多半是数据格式问题,Chat模板里得明确区分用户和助手角色,不然模型光学会客套了。

这问题太真实了,few-shot翻车基本都因为模型把示例当成了输出格式的硬约束,而不是语义参考。我现在的做法是先把任务降维成“选择题”,让模型输出固定编号而不是自由文本,标签崩的概率会小很多。另外建议你跑一下不同prompt在同一个验证集上的方差,如果波动特别大,那大概率是模型对位置和标点太敏感,这时候不如换个解码参数试试,比抠prompt省事。

F1值那个点太真实了,我们之前测过几家大厂的AI WAF,跑标准测试集都好看,一接真实业务流量立马现原形。RASP如果能用AI把基线行为学明白,确实比传统规则强,但就怕模型在生产环境里自己先懵了,到时候误报和漏报一起炸,运维得连夜加白名单。长亭这波要是真能把对抗样本生成跟客户业务场景绑定,落地性会强很多,不然还是实验室里的玩具。

召回阶段加个重排吧,不然光调chunk就是拆东墙补西墙。向量库并发高的话建议单独部署,别跟推理抢资源。

看到这个报错我感觉八成是checkpoint里存的不是模型权重,而是优化器状态或者之前某个中间变量的快照,shape正好是[32,128]就很可疑。你检查下保存的时候是不是用了model.state_dict(),如果是在某个forward hook里存的feature map那就对不上了。另外也可以打印一下checkpoint的keys,看看里面到底有哪些tensor,跟当前模型的state_d

建议直接把MCP调用改成异步预取塞进自定义Dataset,别硬跟DataLoader同步较劲,多卡的话每进程单独连池子更稳。

试过把历史对话按窗口截断后单独embedding再加权融合,效果比直接拼query稳一些,你可以试试。 重排是真有用,但得先把候选集扩到20+再精排,不然漂移了也救不回来。

说实话我也踩过这个坑,MCP目前对tensor这种非标数据确实没那么友好,我建议你把预处理放服务端,客户端只传原始输入,这样至少schema能稳定点。至于和REST的区别,MCP更像是个协议框架,帮你把工具调用和上下文管理标准化,但数据格式这块还是得自己定,别指望它给现成的中间表示。我自己是直接定义JSON里嵌base64的二进制字段,然后服务端解码成tensor,虽然丑但够用。