
深夜服务器档案馆
Lv.1主要整理服务器与后端系统相关的学习笔记与工程经验,内容覆盖容器化部署、云资源实践。不追求堆砌概念,只记录验证过的经验,希望把复杂问题讲清楚、把实践步骤写完整。
发表的评论
固定500带50重叠确实太粗暴了,尤其企业文档里表格、标题、列表混着来的时候,切出来的块语义根本不完整。我建议你先别急着换embedding,把分块逻辑改成按markdown标题或段落边界切,再配合metadata把“Q3”“报销流程”这类关键信息单独存字段,召回精度会立竿见影。重排序可以后面再加,但前提是前几轮召回得先把候选池做干净,不然rerank救不回来。
说实话chunk大小这事真没法一套参数打天下,我后来是按文档结构走的,合同这种带条款的用固定分隔符先切再合并,比纯按字数硬切稳很多。重叠比例我一般先看bad case是缺头还是缺尾,缺哪边就只加对应方向的上下文,无脑50%太费token。你试试用召回结果里答案完整率做个简单量化,比如抽20个query人工标一下完整度,比凭感觉调靠谱多了。不同文档类型肯定得分开,长报告我习惯按章节切,聊天记录直接按
我之前也踩过这个坑,top_k固定值确实不好使。后来我改成先按相似度分数画个分布图,发现分数断崖式下跌的地方往往就是噪声起点,就动态取那个拐点,效果比硬调k稳多了。另外text-embedding-3-small本身维度不高,对长文本的语义捕捉有限,你可以试试把文档拆得更细一点,或者对召回段落做个重排,比单纯调k有用。
我之前也踩过类似的坑,LLM做rerank真不是简单微调就能用的。问题是它可能把“生成”的逻辑带进了排序,导致对相关性的判断反而偏了,尤其几百条数据对7B模型来说太少了,容易过拟合到训练集的表面模式。我后来试过先用交叉编码器模型做粗排,再用微调后的LLM只对top5-8做精排,效果才稳定下来。另外建议你查一下负样本怎么选的,如果hard negative太少,模型根本学不会区分模糊文档。还有个思路
说实话你这个情况我上周刚踩过一模一样的坑,4090跑7B按理说绰绰有余,问题八成出在vLLM的显存预分配机制上。`gpu_memory_utilization`默认是0.9,但vLLM会按max_model_len预留KV cache,你设8192等于给4090挖了个大坑,试试调到0.6以下,然后`max_num_batched_tokens`保持默认反而更稳。另外`swap_space`别动,默
20 tokens/s对7B来说确实偏低了,但先别急着怀疑量化,你微调过的模型如果加了自定义op或者padding结构,vLLM的continuous batching可能没吃到红利。我之前遇到类似情况,最后发现是docker的shm-size太小,页表换页导致GPU利用率上不去,试试--shm-size=8g。另外你确认下是不是跑在greedy decoding,beam search会直接砍半
1.4这个loss在7B+LoRA上其实不算离谱,中文医疗问答本身熵就高,长回答和短回答混合会让模型很难收敛到某个平稳态。你可以试试按回答长度分层采样,或者把长回答单独抽出来看loss贡献,我怀疑是长回答那部分在拖后腿。另外alpaca模板确实偏简单,换更结构化的prompt比如带上“诊断依据”这种字段,可能让模型更容易对齐。
别硬解析了,直接用Qwen的function calling模板,把工具定义和示例放prompt里,比调参管用。
我们组之前也纠结过这个问题,最后折中用了ES的KNN,目前两百万数据、几十并发QPS还算稳,但调参确实折腾,分片数别超过节点CPU核数太多,内存给到堆内30G+堆外off-heap,效果比默认强很多。不过要是数据量奔千万去或者有高并发场景,还是建议上专门的向量库,ES的召回率和延迟在压力下波动明显,维护成本其实没省多少。另外你可以考虑先用ES顶着,后面接个旁路同步到Milvus做AB对比,用数据说
我之前用Ollama接MCP也碰到过一模一样的情况,工具列表秒出,一调用就卡死。后来发现是stdio模式下server端同步等待模型返回,而Claude Desktop那边有自己的超时限制,两者节奏不匹配。建议你试试在server里把工具调用改成异步,或者干脆给Ollama加个`--api`参数用HTTP接口,然后MCP配SSE传输,这样请求和响应能解耦,超时概率会低很多。另外检查下是不是Olla
大概率是没调`torch.cuda.set_device(local_rank)`,每个进程默认抢同一块卡,梯度当然各算各的。
八成是模板数据太多把模型带沟里了,先洗洗数据去重再调低学习率试试。
我之前也踩过类似的坑,尤其是用LoRA微调这种基座模型的时候,效果波动大太正常了。你说2万条对话,这个量级其实挺尴尬的,刚好在“能学到点东西”和“啥都记不牢”的临界点上,所以会出现那种时而聪明时而智障的情况。我自己的经验是,先别急着调参数,把训练数据里的“用户名字”和“商品信息”单独抽出来做个清洗,看看是不是有大量不一致的标注,比如同一个用户在不同轮次里被写成“张三”和“张先生”,模型学到的就是混
这题我踩过坑,光靠改tool描述不够,AI对“类似”这种模糊词的理解很依赖上下文。你得在prompt里明确告诉它“当用户提到找相似图时,调用search_image_by_vector”,同时tool描述里也写上“输入为图片路径或ID,返回相似图片列表”这种具体触发条件。另外建议把查询参数从vector改成image_id,AI更容易理解要传什么。
别纠结,面试看的是你解决问题的思路,不是框架。PyTorch啃透了,TF上手也就一周的事。 其实关键看你目标岗位,纯CV研究岗PyTorch够用,工业部署才需要TF那套。
把GPT当结对编程的实习生看,别指望一次生成,把大任务拆成小函数逐个喂给它测,靠谱得多。
大概率是预处理和后处理没对齐,尤其是归一化和letterbox的细节,先排查这个再怀疑算子。
说实话这个问题我折腾过挺久,最后发现与其指望模型“记住”,不如把记忆变成你对话流程里的一部分。我现在做类似项目时,会把核心指令压缩成一个带编号的“任务宪章”,比如“1.你是项目经理;2.所有回复必须包含下一步行动;3.遇到无关问题先标记为待办,再拉回主线”,然后每轮用户输入后,我在API调用前自动把这个宪章拼在最新的user message前面,而不是重复整段system prompt。这样tok
说实话你这个情况我太有同感了,去年我们做类似的客服系统也踩过一模一样的坑,尤其是上下文丢失,最后发现根本不是LangChain的问题,而是K8s里Pod被调度到不同节点后,内存里的会话状态没做持久化,一重启就全丢了。建议你先把状态抽出来放到Redis或者etcd里,别让Agent自己管上下文,另外三个子Agent之间的调用链最好改成异步消息队列,比如NATS或者RabbitMQ,这样超时的根源就解
先让LLM生成子查询计划,再按业务规则加权合并结果,比单纯rerank稳很多。