
持续输出自动化学习者
Lv.1记录从不会到会、从能用到做好。当前重点关注自动化工程,通过性能优化、开源工具使用持续提升能力;关注技术选择背后的成本与边界,并把过程整理成可复用的学习记录。
发表的评论
我之前也踩过这个坑,纯按段落或句子切都不太理想。后来改成按语义切块,再给每个chunk加上所属章节标题做上下文补充,效果好了不少。你这种FAQ场景其实可以试试小块检索、大块喂给LLM,就是召回用句子级,但返回时带上前后各一两句。另外没上reranker的话,先把embedding模型换成bge-m3这类多语言的,召回质量提升挺明显的。
两人团队真不如直接裸调API加个简单调度,LangChain那套抽象层调试起来太折腾了。
我一般只写死约束和输出格式,背景说太细它真会自己加戏。方向偏了直接开新会话,改Prompt容易越描越黑。
切分策略确实得先推翻,表格和图片多的文档用固定512字符切,语义断层太正常了。重排序能救一部分,但前提是召回块本身得靠谱,不然rereanker也只是在烂苹果里挑。建议先按结构切,表格单独走结构化提取,再上bge-reranker试试,prompt里加个低分过滤阈值。另外Qwen-14B对无关上下文挺敏感的,塞太多反而容易带偏。
几百页文档光靠向量检索确实容易飘,加个rerank基本能救回来,亲测有效。
这个问题我之前也踩过坑,LoRA微调其实是在基座模型的概率分布上做局部修正,客服语料里那种礼貌性收尾的统计惯性太强了,光删数据很难压住。你可以试试在训练时把每条回复末尾统一加个特殊token,比如[EOS]或者自定义的[END],推理时配合强制停止生成,比调温度和惩罚参数靠谱得多。另外你确认一下是不是数据里隐含着“用户问完一句就结束”的模式,如果上下文里经常出现多轮对话,模型学到的是“答完要等下一
我之前也遇到过类似情况,loss卡在1.8左右不动弹,后来发现是数据里很多样本的标签本身就有噪音,模型学到后面就开始摆烂了。你可以先抽50条看看是不是存在重复或矛盾的回答,清洗一下再跑。另外rank=16对7B来说不算高,但lr可以试试降到1e-4或5e-5,顺便把warmup steps加上,我那次这么调完loss就继续往下掉了。还有个偏方,如果你用的是peft的话,检查下target_modu
5000条数据做意图识别其实偏少了,尤其话术生成这种开放输出任务,LoRA本身只学增量模式,基座模型的底子没变,答非所问大概率是数据覆盖不够或者标签不一致。错别字学进去说明预处理确实有问题,建议先做个拼写纠正和停用词过滤,不然模型会把噪声当特征。冻结embedding倒是可以试试,但我感觉你这情况先跑一版全参数SFT再回来调LoRA会更靠谱,7B没那么娇贵。另外你loss降得还行,但生成质量差,有
我去年也踩过类似的坑,问题大概率出在ResNet50输出的特征向量上,直接用瓶颈层特征做检索,颜色和纹理的权重会压过形状信息。建议先试试对向量做L2归一化,另外看看是不是该用ArcFace或cosface这类带度量学习的模型去微调特征提取器,对商品检索这种细粒度场景提升会很明显。Milvus这边参数其实影响没那么大,可以先拿1000张人工标注的查询图算下Recall@1,如果本身向量检索top1就
单机几十万条直接Chroma就行,where过滤完全够用,别为这规模上Milvus给自己找罪受。 SDK和HTTP延迟差不了多少,但SDK省心,别纠结这个。
这还真不是纯玄学,我觉得“请”字的作用更多是给模型一个风格提示,相当于隐式告诉它“这段对话的基调是礼貌的”,比单说“转成礼貌语气”更具体。另外token变长确实会让注意力更均匀些,尤其是短指令时模型容易漏掉细节。我自己试过在系统提示里加“你是一位有十年经验的客服”,比单纯说“专业”效果好很多,可能因为具体身份能激活更多相关的训练数据。不过别指望加个“请”就万事大吉,它撑死了是个辅助,核心还得靠你任
时间衰减这块可以试试把时间权重乘到向量相似度上,或者干脆按会话窗口分段存,短期用倒序取,长期再单独建索引。 短期记忆建议单独开个collection只存最近几轮,长期的在写入时做下摘要提取,不然top_k永远被碎消息淹没。
这问题我也踩过,Ollama跑7B做多步工具调用确实容易超时,根子不在temperature,是模型推理时工具格式不稳定,经常自己绕进去。我后来换了带function calling的Qwen2.5-7B-Instruct,配合结构化输出,稳定性明显好一截。14B本地跑的话速度会掉很多,除非你有好显卡,不然先试试小改一下prompt把工具调用步骤拆开,比直接上vLLM省事。
确实,WAIC上“物理世界”都快成万能遮羞布了,但真到工厂里跑一圈就知道差距有多大,重力、摩擦这些基础物理规则都搞不定,谈AGI太早。不过我倒觉得也不全是架构的锅,高质量交互数据太少才是死结,仿真数据跟真实物理差距太明显。你提到的“数据闭环”方向我同意,但就怕最后还是变成人工标注的军备竞赛。
chunk大小这事儿真不能只看数字,得先看你的文档结构。我这边处理技术文档时,发现按标题和章节边界切比固定长度靠谱得多,召回率一下就稳了。overlap我一般设在50-100之间,主要为了保住跨段的上下文,10%-20%对长段落确实没啥存在感。代码和纯文本最好分开建索引,代码块用256以下,纯文本可以拉到800,不然混着切特别容易把逻辑割裂。你试试先按文档结构预切,再对超长段落做二次分割,也许比死
换库解决不了语义匹配问题,你这case更像embedding没吃透表格结构,试试先按块类型分路召回。
我之前也踩过这坑,后来发现把历史对话里跟当前问题无关的轮次直接砍掉,只保留最近2-3轮效果会好很多。另外可以试试在每轮用户输入前,用代码动态拼一段“当前任务状态”的提示,比如“你现在在回答关于退货的问题”,比单纯重复系统指令管用。你那个LangChain里是不是没对tool调用结果做约束?有时候模型是被工具返回的杂音带跑的。
这问题太真实了,我也踩过同样的坑。我的做法是干脆把历史对话压缩成一段“当前意图摘要”,只挑跟本次子查询相关的实体和约束拼进去,而不是整段塞进去。另外,固定策略拆解在简单场景下其实够用,但复杂问题还是得靠Agent,关键得给每个子查询加个“检索范围提示”,比如限定时间或来源,能稍微防跑偏。你那个前缀效果不稳,我觉得可能因为表述太抽象,向量模型不一定理解,试试改成“关于[实体]在[时间]的[具体属性]
我之前也踩过这坑,后来直接按文档类型动态调,合同类用800带100重叠,问答类用300带50,效果稳多了。
试试把每个工具的description写成“当用户想要X时用这个”,比列参数管用,亲测有效。