
河狸每天复盘日记
Lv.1专注于大语言模型的工程化与业务落地。持续实践数据治理与评测、AI应用的成本与稳定性,重点关注效果、成本、稳定性和可维护性,分享经过验证的方案与真实复盘。
发表的评论
量化确实会掉点指令遵循,试试把system拆成短句分步写,别堆一块儿。
800万单机8分片,每片才100万,暴力能到85说明向量没问题,重点查下分片后nprobe是不是没跟着调。
改写可能丢掉了原query里的关键实体,试试保留关键词只做扩写别做替换。
首token 5秒多,八成是没开chunked prefill,短请求被长预填堵住了,去vLLM配置里把这个打开试试。
这个loss卡在1.2左右其实挺常见的,尤其你用的是LoRA,本身可训练参数就少,优化空间有限,不像全量微调那样能一路往下压。而且代码补全这个任务本身loss就不会太低,因为token级别的交叉熵受很多合理但不同的写法影响,同一个位置可能有好几种正确续写,loss天然降不到特别低。你测试样例能跑通、语法没大问题,说明模型确实学到了东西,别太慌。至于要不要换大模型,7B做代码补全其实够用了,除非你要
工具调用记录单独结构化存,别塞历史里,每轮只注入当前需要的状态就清爽多了。
bge-large换成bge-small或gte-small确实能快不少,精度损失在多数场景下没那么明显,我实测检索延迟能砍掉一半左右。另外FAISS每次查询都重新加载索引的话肯定慢,做成常驻服务或者用Chroma、Qdrant这种带持久化的向量库会好很多。还有个容易忽略的点是检索和模型推理可以并行做,比如先拿问题去检索的同时让模型处理系统提示词,能省一点时间。你们知识库文档量大吗?如果超过几万条
我之前也踩过这个坑,固定分块对结构化文档确实不太友好,标题和正文混在一起很容易串味。你可以试试按标题层级做父子分块,子块检索、父块喂给模型,langchain里有ParentDocumentRetriever能直接用。另外PDF表格建议单独抽出来转成markdown再入库存,不然表格内容被切碎后基本没法用。还有个容易忽略的点是加metadata过滤,比如产品名做字段,检索时先卡范围再算相似度,能挡
模板变量替换这块一般是在客户端拼好再发出去的,MCP服务器本身不负责渲染Prompt,所以变量多少对首token延迟影响不大。真正拖速度的是拼完之后上下文变长,token数上去了,模型prefill自然慢。我之前也担心协议开销,实测下来JSON-RPC那点序列化基本可以忽略,别把模板搞得太绕就行。
试试把KV cache量化成8bit,qwen系列对长上下文的显存大头其实在这。
之前用stdio也踩过这个坑,多半不是schema的问题,而是stdin的JSON-RPC消息没按行分隔,或者server端没及时flush输出。建议先拿官方的debug工具单独测一下server,确认能正常返回tool列表再接到客户端里。另外版本兼容性确实容易出幺蛾子,试试把mcp库和客户端都升到最新,有时候老版本协议字段对不上就静默超时了。
我们组之前在K8s上跑过Milvus,etcd和对象存储确实费运维精力,但胜在分片和索引策略可控,几百万向量小case。Qdrant单机部署很爽,内存控制比Milvus好,但分布式要自己搭,官方文档案例不多。延迟500ms内两个都行,关键看你们后续要不要做复杂过滤或混合检索,Milvus的filter能力更强。建议先拿真实数据各压测一轮,看索引构建速度和内存峰值,别光看官网benchmark。
说实话你这个场景我太熟了,rerank本质上是在给定的候选集里找相对最优,源头top20全是错的,它再强也变不出花儿来。我自己试过,如果检索阶段召回的相关性已经低于某个阈值,重排只是把“烂”的排序变成“没那么烂”的排序,距离可用还差得远。你说的简称歧义问题,靠同义词扩充和query改写确实是最直接的,但我觉得更值得先查一下你chunk切分是不是把术语上下文给切碎了。另外混合检索我建议一定要加,bm
80G跑4的batch还爆?先把gradient checkpointing开开,这玩意儿能省一半多显存。
固定500带overlap这个切法本身问题就挺大的,PDF转出来段落结构差异很大,建议先按标题和章节做语义切分,再对超长段落二次处理。另外bge-m3其实支持长文档,可以试试把相关段落拼到一个doc里再召回,能减少跨chunk的信息丢失。元数据过滤很值得搞,比如给每个chunk打上文档名、页码、章节标签,召回后先按业务规则筛一轮再rerank,提升会比想象中明显。微调embedding除非你的专业
我之前也踩过这个坑,问题多半出在自定义Dataset的__getitem__里没对齐返回格式,图像和文本的tensor必须打包成一个元组或字典返回,不能各回各的。而且resize和tokenize最好在collate_fn里做批处理,别在单样本上搞,不然维度肯定炸。内存爆的话,试试把图像预处理换成torchvision的transforms直接接在Dataset里,配合DataLoader的num
80条太少了,我上次搞工具调用至少500条起才稳,建议先扩数据再调参。
表格先转成markdown再切,检索会稳很多,建议试试minerU或者table-transformer。切块时按表格整体作为一个chunk,别硬拆。
我最近也在折腾这个,用的Qdrant,配合LlamaIndex的QdrantStore还挺顺的,部署就是docker起个容器,没感觉比Chroma重多少。数据量的话,只要不是上千万级别的向量,性能完全够用,而且它的过滤和混合检索对中文文档也挺友好。Milvus确实功能全,但本地开发用着有点杀鸡用牛刀,维护成本也高。你要是主要跑PDF和Markdown,我建议直接Qdrant,别纠结,先把管道跑通再
说实话我觉得问题可能不在Prompt写多详细,而在你怎么定义“关键决策”和“待办事项”。大模型对这类抽象概念的理解跟你肯定不一样,它更擅长识别“明天下午三点前给客户发合同”这种明确表述,但“大家觉得这个方案可以,尽快推进”它就容易当闲聊过滤掉。我之前试过在Prompt里直接给结构化模板,比如“输出格式:决策内容+负责人+截止时间”,效果比单纯描述要好得多。 另外你提到的few-shot问题,我怀