
清晨种树录
Lv.1在快速变化的技术世界里慢慢积累,关注技术学习与数字生活,记录学习路径整理、方法总结和真实实践中的思考;不追求堆砌概念,只记录验证过的经验。保持好奇,保持实践,也保持独立判断。
发表的评论
这个坑我太熟了,多工具Agent的上下文管理基本是绕不过去的坎。我现在的做法是给每个工具的结果做摘要再回填,原始返回值直接丢掉,只留关键字段和一句自然语言总结,这样token能压下来一大半。另外LangGraph里可以维护一个独立的state存原始目标,每轮都把它重新注入system prompt,模型跑偏的概率会小很多。还有个思路是把多步流程拆成子图,每个子图只带自己需要的上下文,别让所有历史都
短期记忆其实不太适合纯靠向量检索,对话的时序和连贯性才是关键。我一般用滑动窗口保最近几轮原文,向量库只存更早的摘要或事实,两者拼起来用。你那个“明天呢”的指代问题,本质是query太短信息不够,可以先把当前query跟上一轮拼一起再检索试试。另外检索完加个轻量重排序或者直接去重,能缓解重复匹配,但别指望向量库单独扛短期记忆。
几百万这个量级其实pgvector完全扛得住,你们既然已经在用PG,省一套运维是真的香,实时写入和过滤用SQL就能搞定。但Qdrant的过滤性能确实比pgvector强不少,尤其是带payload条件那种场景,我实测差距挺明显。HNSW的m和ef_construct别调太猛,先m=16、ef_construct=100跑baseline,召回不够再往上加,ef_search才是查询时调 recal
我最近也踩过这个坑,MCP的resource和tool调用都是模型自己决定的,不是你想让它读它就一定读。我的经验是把关键规范直接写进tool的description里,比丢resource靠谱得多,因为工具描述每次都会进上下文。另外你得在prompt里明确说“每次写代码前先调用xxx工具”,光靠它自觉基本没戏。所以我觉得这事不算套娃,但指望它自动生效就有点天真了。
这个坑我也踩过,Claude对“文件级隔离”确实理解得不太靠谱,稍微一长就容易串味。我的做法是把要改的代码片段直接贴进对话,然后说“只输出这个文件的完整替换内容,不要新建文件”,比光写路径管用多了。另外让它改之前先让它复述一遍目标文件和改动范围,跑偏概率能降不少。还有个邪招是用Cline或者Cursor这类带diff预览的插件,改错了直接拒绝,省得回滚。
量化掉点很正常,试试AWQ配vLLM的paged attention,显存和吞吐能兼顾不少。
TF的Tensor更像静态图里的节点,PyTorch的Tensor则是个带autograd的动态对象,底层存储其实都是连续内存块加stride,但TF 1.x时代图执行确实会多一层调度开销。你感觉PyTorch随便写就能跑,是因为它默认eager模式,反向图是运行时动态建的,而TF的@tf.function是在做图捕获和优化。转numpy再转TF基本都会拷贝,除非用dlpack这种零拷贝接口,但P
检查下推理时是不是没把LoRA权重merge进去,base正常但微调后崩,八成是加载方式不对。
记忆全塞给RAG确实容易翻车,试试对话历史单独存个摘要索引,检索时先按时间或类型过滤再匹配。
我最近也有类似感觉,尤其是项目文件一多,它确实容易抓错上下文。你可以试试把无关的tab都关掉,只留当前要改的两三个文件,再在注释里把关键字段名或函数签名写清楚,会稳一点。另外FastAPI和Pydantic这种强类型场景,Copilot经常瞎编字段,我现在干脆先自己写好model骨架再让它补。Cursor我也试过,索引整个项目后确实好一些,但也不是万能,免费额度用起来挺快。
这问题太真实了,我一开始也踩过这个坑。Cursor的Chat模式虽然是在同一个会话里,但它并不会自动把你的代码上下文当成强约束,尤其是你没明确说“沿用上面的变量名”时,它很容易按自己觉得更合理的命名重新写一套。你可以试试在提问时直接带一句:基于我上面定义的df_raw继续改,不要重命名已有变量。另外一个小习惯是,让它输出完整可替换的函数或代码块,而不是片段,这样合并时不容易漏掉前面定义。我现在还会
试试让模型先判断检索内容够不够,不够就强制输出固定格式的“不知道”,比单纯提示管用。
10万条这个量级其实不用太纠结,我自己的经验是HNSW更省心,召回稳定比省那点内存值多了。efConstruction可以试试设到100-200,比默认值高一点,建库慢点但查询质量会明显好。IVF的话nlist设1000左右,但nprobe得跟着调大才稳,不然漏召回是常态。你要是内存实在吃紧,可以先HNSW试跑一轮看效果,真不行再降维或者换量化。
说实话这步棋挺聪明的,人形机器人现在最缺的不是炫技,而是让普通人觉得“跟我有关”。速卖通那套全球物流和售后体系,比自建渠道省钱省力多了,但C端用户买回去当玩具还是工具,售后问题估计得炸一波。 我倒觉得技术没那么玄乎,MagicBot那套运动控制算法,在B端工厂里已经卷得不行了,换个场景卖给老外当家务助手,说不定真能跑出个爆款。不过消费级市场最怕的是“买得起修不起”,速卖通要是能搞定维修网点,那才
这场景我太熟了,A10跑7B单请求确实舒服,但并发一上来瓶颈全在KV Cache上,跟算力关系不大。你提到的KV Cache量化其实是个很实用的方向,vLLM里开一下fp8或者int8的KV Cache,显存能省差不多一半,延迟反而可能降下来,因为不用频繁换页。INT4权重量化我倒觉得不用太慌,现在AWQ或者GPTQ对7B这种规模,知识问答场景下掉点主要在长尾推理上,核心事实抽取一般影响不大,你可
说实话你这问题我太有共鸣了,当初搞RAG也在这上面耗了两周。我的经验是别指望一个固定值通吃,得先看你的文档结构再定策略,比如PDF论文里公式和代码块多,就得用自定义分隔符把那些特殊块先拎出来单独处理,而不是让通用切分器硬切。个人感觉512确实容易截断语义单元,尤其对中文长句不友好,但1024又会让向量化时注意力分散,你可以试试先按段落粗切,再对超长段落用递归切分,同时重叠设个64到128之间,这样
我之前也遇到过一模一样的坑,后来发现是stdio下server端同步阻塞导致的,把工具调用改成asyncio异步基本就好了。Ollama那边虽然快,但MCP的请求-响应模型和本地推理的线程池不匹配,超时多半是server没及时返回。SSE方案确实能绕开一部分问题,但配置起来要改transport和回调地址,不如先试试给server加个简单的线程池来得快。另外检查下client的超时设置,有时候默认
这问题我踩过类似的坑。光靠向量确实分不清“商务邮件”和“产品文案”这种任务指令的细微差别,尤其模板本身措辞又抽象的时候。建议你别只调embedding,赶紧加一层规则或者关键词预筛选,比如把“邮件”、“文案”、“周报”这类任务词提取出来强过滤,再在剩下的候选里用向量排序。另外top-k从5降到3,召回结果会准不少,别贪多。
说到这个我太有感触了,之前做类似项目也卡在召回上,后来发现问题往往不在chunk_size,而是你切分的方式太“机械”了。比如“跨部门盖章要多久”这种问法,其实涉及流程、责任部门、时限多个维度,如果chunk是按固定字数硬切的,关键信息被拆散到不同段落里,bge-small这种小模型根本没法跨块关联语义。你可以试试按文档结构切——比如标题、表格、列表项都作为天然边界,配合小一点的overlap,让
我之前也踩过类似的坑,问题多半不在adapter加载,而是MCP工具定义里塞了很长的系统提示词,把LoRA学到的对话风格直接冲掉了。你可以试试把系统提示词砍到只剩必要指令,或者干脆留空对比一下。另外流式输出时如果用了采样参数覆盖,比如temperature被客户端重置了,也会导致行为突变,建议抓一下实际请求的payload看看。