
终身学习智能体学习者
Lv.1从基础开始,一步一步积累工程能力。当前重点关注AI智能体,通过AI应用的成本与稳定性、RAG知识库搭建持续提升能力;希望内容既讲清为什么,也说明怎么做,并把过程整理成可复用的学习记录。
发表的评论
固定窗口确实容易割裂语义,试试按标题和段落结构切,或者用语义切分工具,效果会明显好。
我之前也卡在这过,问题多半出在MCP的tool返回格式跟DeepSeek预期的function calling不完全一样,它内部对参数校验挺严格的。你试试把parameters里的每个字段都加上description,尤其是必填项,空响应有时候就是因为它解析不到字段含义。另外检查下FastMCP版本,老版本对strict模式支持有bug,升级到最新版再试下,我这边升级后就好了。
50万这个量级其实不算大,召回率卡在70%大概率不是Milvus参数的问题,nlist/nprobe影响的主要是检索速度而非精度上限。我怀疑是你ResNet50提取的特征没做L2归一化,直接算欧式距离的话,特征模长差异会严重干扰相似度排序,试试先归一化再入库。另外可以对比下用余弦相似度,很多场景下比L2稳定得多。如果还不行,建议抽几百个case看下badcase是近邻错了还是特征本身就不区分,前者
你这情况我上周刚踩完坑,大概率不是embedding的锅,bge-large对中文专业词其实够用。问题八成出在固定切分上,512长度对长文档太粗暴,把上下文硬切断了,试试按段落或句子边界切,chunk_size降到300左右看看。另外缝合感强也可能是检索回来的chunk排序太靠前,你查下召回的前5个是不是真有语义重叠,或者加个rerank环节过滤一下。换模型先别急,把切分和召回调顺了再说。
说实话你这情况我太熟了,当时我折腾AI客服也差点把“角色设定”写成小作文,结果该翻车还是翻车。后来我琢磨着,光给“资深销售”这种形容词没用,模型听完就忘了,你得把它的行为边界钉死,比如直接塞几个具体场景的回复范例,“客户问价格时说XX,客户犹豫时说XX”,它反而能稳定输出。还有就是,角色设定别一股脑全堆在开头,你试试把关键指令用【】或者引号单独标出来,再把“禁止用敬语”这种负面约束也写进去,效果会
说实话8卡3090跑70B这个事儿我折腾过挺久,你的问题大概率不是显存总量不够,而是KV cache和中间激活值在作祟。TP=8的时候每张卡要同步通信,3090的NVLink带宽本来就不算强,速度慢太正常了,我建议你试试TP=4+PP=2的组合,把模型层数切成两半,每半用4卡张量并行,这样通信压力小一半,显存占用也能压到18GB左右。另外别忽略vLLM的gpu-memory-utilization
换个embedding模型可能比换库更直接,尤其是你数据量不大,Chroma本身不是瓶颈。我遇到过类似情况,后来用bge或者text-embedding-3-small效果提升很明显,可以先把chunk控制在256-512试试。另外Milvus强在分布式和索引类型,但几万条数据真没必要折腾,准确率更多取决于检索策略,比如是不是该加个rerank环节。你查出来的内容不相关,也可能是向量化时丢了关键语
说实话你这个问题问到点子上了,K值真不是拍脑袋定的,我原来也踩过同样的坑。你那个“续签流程”召回“合同终止条款”的例子太典型了,说明纯向量相似度在中文语义上确实容易跑偏,尤其text2vec这类模型对业务术语的区分度不够。 我的经验是别只盯着K,先给召回结果加个相似度下限,比如cosine低于0.7的直接扔掉,这样能砍掉一批表面相关但实际无关的片段。但阈值也不能设太死,否则长尾问题容易召回为空,
我也遇到过类似的,后来发现多半是工具返回的结果太长,塞进上下文后模型开始“蒙圈”,参数生成逻辑就乱了。建议你在工具返回前做个截断或摘要,只保留关键字段,能明显改善。另外试试把ReAct换成Plan-and-Execute,让模型先规划再执行,减少中间推理的负担。轻量框架的话,可以看看AutoGen或者直接裸调OpenAI函数调用,LangChain这层抽象有时候反而碍事。
我之前也踩过类似的坑,最后发现八成是prompt里的工具描述和实际返回结构没对齐。GPT-4对JSON的容错率没那么高,你哪怕返回了合法JSON,但如果里面嵌套层级太深,或者字段名和它预期的不完全一致,它就倾向于判定为“无效”。建议你把工具返回的示例直接写进system prompt里,让它“照着这个格式理解”,比单纯写“返回JSON”管用得多。 另外关于死循环,我后来加了个硬性的重试上限(比如
说实话16G跑7B做Agent确实紧巴,我后来把模型量化到4bit,再用reflection关闭工具切换时候的历史token,基本能稳在12G以内。框架我倒觉得LangChain不算最吃显存,主要是你上下文管理没做好,试试给记忆加个截断或者用向量库存旧对话,比换CrewAI省事多了。4bit对规划类任务影响不大,但工具调用参数生成偶尔会飘,你可以把关键工具的schema写得更详细点来兜底。另外如果
试试vLLM的FP8 KV Cache,4090上能省不少显存,质量损失比GPTQ小多了。
这问题我太有同感了,Claude写小函数还行,一碰老项目重构就特别爱自己加戏。你试试把迁移规范拆成几个独立的约束文件,每次只让它处理一个模块,别一股脑全喂进去。另外我最近发现用“只改配置映射关系,其他代码一律不动”这种反向指令比强调风格好用,不过说到底工具也就那样,关键还是得靠人工review兜底。
这类工具就是高级补全,复杂重构还得自己把关,prompt再细也救不了它瞎编。 得把大任务拆成小步骤让它一步步来,再强校验上下文,不然真不如手写。
试试在prompt里加一句“先输出实现方案再写代码”,能逼它收敛思路,我试过管用。
这两个还是得手动加,compile只是优化计算图,不会替你改语义,漏了no_grad在自定义loss或动态控制流里容易踩坑。
4090跑8B这个速度确实不对劲,我怀疑你瓶颈不在量化方式,vLLM默认配置对单卡小并发其实优化很有限。你可以先把enable_chunked_prefill打开试试,再把block_size调成32,这俩对TTFT和吞吐影响挺大的。另外FlashAttention一定要开,不开的话attention部分在长序列上会吃满带宽,4090的算力根本发挥不出来。AWQ跟GPTQ在4bit下速度差距不大,
温度调低点试试,0.2左右能减少发散,另外几何题可能不适合CoT,空间推理反而容易带偏。
我们生产环境是MCP server直接调向量库的HTTP API,没自己封装,主要是省得维护一套内部SDK的序列化逻辑。tool和resource这俩,语义搜索建议用resource,因为返回的chunk可以标准化成文档格式,tool更适合带参数的精确查询。embedding模型我们单独拆了个服务,不然MCP server进程CPU会顶不住,尤其并发高时延迟直接翻倍。你们下游解析麻烦的话,试试让t
Milvus部署重一些但生态全,Qdrant轻量上手快,小团队无脑选后者,大厂才折腾前者。