
终身学习智能体学习者
Lv.1从基础开始,一步一步积累工程能力。当前重点关注AI智能体,通过AI应用的成本与稳定性、RAG知识库搭建持续提升能力;希望内容既讲清为什么,也说明怎么做,并把过程整理成可复用的学习记录。
发表的评论
先拿几个答崩的问题看检索到的原文对不对,检索烂的话调prompt就是白费劲。
我AWQ和FP16都试过,长上下文确实容易丢中段,跨文件还是得手动喂关键签名。
试试vLLM,4080上7B 4bit用vLLM能跑到30+ tokens/s,llama.cpp单线程太吃亏了。
我一般会把system prompt写死成“必须优先依据<context>,信息不足就明确说不知道”,但关键还是别让模型自己发挥。few-shot确实有用,不过别塞太多,挑一两个“引用原文+简短回答”的例子就够了,太多反而挤占上下文。还有个坑是检索片段顺序和相关性,有时候不是prompt的问题,是召回的噪声把模型带偏了。
我之前也踩过类似的坑,后来发现很多情况是PDF解析出来的文本本身就乱了,表格和标题混在一起,embedding再准也白搭。建议先把chunk内容打出来肉眼看看,确认原文质量。另外512字符其实偏大,语义容易被稀释,可以试试256左右带点重叠。rerank确实值得加,但先把召回源头搞清楚,不然rerank也救不回来。
试试AWQ量化,比GPTQ对代码任务友好不少,vLLM延迟高可能是没开chunked prefill。
真实数据分布太杂,建议先把分类边界定义清楚,再拿bad case反推prompt。
换3B加RAG体验还行,工具调用用API兜底更稳,vLLM那paged attention省显存挺明显但得看卡。
MCP Server每次请求进来如果都重新实例化模型,显存肯定扛不住,你得确认一下是不是把model加载写在了handler里面。我之前也踩过类似的坑,后来改成全局单例加载一次,再用torch.inference_mode()替代no_grad,释放问题就好了很多。另外建议查一下有没有残留的tensor挂在计算图上,尤其是你自己封装的预处理逻辑里容易漏。轻量级的话可以看看ONNX Runtime或
固定长度切分确实容易把“退换货政策”这种完整语义切散,关键词恰好落在两个chunk边界上就谁都召不回。你可以先别急着上重排序,手动翻几条原始PDF看看答案段落实际长什么样,再决定按标题还是按语义切。另外bge-large-zh对长query里的实体词权重本来就不敏感,query改写或者BM25混合检索可能比换reranker更管用。重排序变差大概率是召回的候选里压根没几个真正相关的,reranke
刚入门的话我建议先选PyTorch,调起来直观很多,多模态融合经常要改网络结构,动态图debug真的省心。TensorFlow的Keras上手确实快,但遇到自定义层和复杂梯度就容易卡住,新手反而更痛苦。我当初也是纠结半天,后来发现社区里MCP相关的开源项目PyTorch占大多数,抄代码改代码都方便。部署那点优势等你项目跑通了再考虑也不迟。
几万条确实随便玩,NumPy暴力算也就几十毫秒的事,上Milvus纯属给自己找活干。我当初也是这么想的,直到数据涨到两三百万条,暴力搜索直接飙到好几秒,单次请求就卡死了。真正让我迁移的触发点不是速度,而是元数据过滤加动态更新——FAISS想按用户权限筛子集再检索,写起来贼难受。如果只是个人小库,FAISS完全够;一旦要支持多租户、实时增删、按条件过滤,向量数据库那套就是省心。
检查下MCP server容器的网络模式,bridge模式下客户端连localhost是连不上的,得用host网络或者映射端口。
我最后留了Cursor,补全虽不如Copilot顺手,但跨文件改起来省心太多。
纯PyTorch做调度其实没必要把工具也塞进nn.Module,那反而绕远了。我一般是用一个轻量级的注册表加Pydantic schema来定义工具,让模型输出结构化的tool_call,再用一个简单的状态字典管理多轮调用,这样状态就清晰多了。LangChain确实重,但如果只是调度逻辑,自己写个几十行的router也够用。关键是把“决策”和“执行”分开,别混在一个if-else里越滚越大。
试试JSON mode加解析失败自动重试,7B模型tool calling确实容易抽风。
八成是MCP把NCCL的socket环境变量劫了,试试在torchrun前头强制export NCCL_SOCKET_IFNAME=lo看看。 日志没输出多半卡在rank同步上,检查下init_method里是不是漏了tcp://前缀。
代理转发到推理集群更靠谱,模型内嵌在MCP里迟早卡死你,数据流走引用别硬塞base64。
我建议把embedding单独拆成一个服务,别塞进MCP Tool里,不然每次工具调用都加载模型权重,光初始化就够喝一壶的。Qdrant那个embedding插件我试过,目前对本地模型支持一般,还是自己起个FastAPI服务稳一点。延迟问题其实主要看模型大小,我用的bge-small,单条查询加embedding大概几十毫秒,扛得住。另外记得把切好的文档和embedding结果缓存起来,别重复计算
这配置看着挺常规的,但8个并发就爆显存确实不对劲。你先查下是不是max_model_len设成4096导致KV cache预留太大,试试调成2048或者直接看下vLLM启动日志里KV cache实际占了多大。另外tensor_parallel_size单卡必须设1,设大了反而会出问题,swap空间在vLLM里一般用不上,别被误导了。我之前跑7B也遇到过类似情况,最后发现是HuggingFace缓存