RAGFlow 实战(三):检索调参实录——从「检索不到」到「检索得准」
RAGFlow 实战(三):检索调参实录——从「检索不到」到「检索得准」 系列导航:(一)部署、鉴权与排障;(二)文档解析实战;(三)本篇;(四)API 自动化。 一、检索是 RAG 的主战场文档切好了,接下来全是检索的问题。RAGFlow 的检索测试接口(POST /api/v1/retrieval)就是调参的主战场——绕过聊天历史,纯检索质量验证。这篇把所有检索侧的实战结论一次讲完。 二、结论 1:精确查询,就要短问句拿产品参数表做精确查询,我一开始很自然地写长问句: 1Product ID M20978 的 Torque 是多少? Top-1 返回的是邻居行——不对。换成只发 ID: 1M20978 命中 1 条,正是要的那行。 原因:语义化问句里的通用词(Product / ID / Torque)会让 ES 的 minimum_should_match 放行大量邻居行,ID 的信号被稀释了。精确查询(按编号/ID 找行)就发短词,或者走结构化字段过滤。这条经验对表格类知识库是决定性的。 三、结论 2:中文长文本,把向量权重调到 0.7实测中文长文本的关键词得分普遍只有 ...
RAGFlow 实战(二):文档解析实战——按文档类型选切块策略
RAGFlow 实战(二):文档解析实战——按文档类型选切块策略 系列导航:(一)部署、鉴权与排障;(二)本篇;(三)检索调参实录;(四)API 自动化。 一、一个反直觉的结论:解析质量的上限在「切块」,不在「识别」刚开始用 RAGFlow,我默认「扫描件才需要担心解析,文本文件还不是随便切」。直到拿一份 CSV 产品参数表做问答,检索结果一塌糊涂,才反应过来: CSV 是纯文本,根本不需要 OCR——OCR 是给像素的。CSV 的病在切块方式,不在识别。 同一份 CSV,两种切块方法的实测对比: 切块方法 结果 General(naive) 切出 ~2000 个「合并块」,一行数据被切得七零八落 Table 切出 ~10000 个「行级块」,每行一个块,字段齐全 行级块长这样,检索和阅读都友好: 1234- Product ID: M20978- Torque: 45 N·m- Voltage: 24V- 负责人: 唐博涛 RAGFlow 的 Table 切块会按列类型生成可过滤字段,等于给每行数据建了结构化索引。表格类文档(CSV/Excel/数据库导出)无 ...
主流文生视频模型横评:H3 / Seedance / Kling
经验驱动 + 诚实声明。下面三类模型我都实际摸过,但只有 H3 是本机真正跑通的(本地 ComfyUI + MiniMax H3,零积分);Seedance / Kling 我以官方文档 + 公开评测为准,标注”未本地实测”。结论和选型建议基于真实使用体验。 三个选手的定位 维度 H3(MiniMax) Seedance(字节) Kling(快手) 部署 本机 ComfyUI 8799,零成本 云端,需申请/积分 云端,免费额度有限 成本 电费,零积分 按积分/时长 会员或积分 画质 影视级,支持 dual 二采超清 高,运动稳定 高,大幅度运动强 时长 受显存限制,短镜为主 较长 较长(可达分钟级) 可控性 图生/文生、参考图、运镜提示词 提示词 + 参考图 提示词 + 首尾帧 适合 本地零成本量产、竖屏短剧 快速出片、商业稿 大运动、长镜头 H3:我真实跑通的本地方案本机用 ComfyUI(端口 8799)接 MiniMax H3,E:\kuake\comfui\... 那套主力环境,显存 12G 就能跑文生视频 / 图生视频。我的固定流水线: ...
把工作流沉淀成技能:我的 Skill 设计方法论
把工作流沉淀成技能:我的 Skill 设计方法论一、为什么需要「技能」同一个任务第三次做的时候,就该停下来想一件事:前两次的经验去哪了? 如果答案是「在聊天记录里」,那这些经验约等于不存在——下次还要重新踩一遍坑。 技能就是把「工作流 + 坑位 + 路由」打包成可复用的资产。我现在有二十多个技能:短剧创作体系、ComfyUI 流水线、RAGFlow API、长视频笔记、录屏拆解、模型部署……这篇讲设计它们时沉淀下来的方法论。 二、SKILL.md 的结构:每一行都有职责一个技能就是一个带 front matter 的 Markdown,结构高度模板化: 123456789101112---name: skill-namedescription: 什么时候用我——包含触发语,写用户的原话---# 标题## 0. 铁律(开工前必读,放最前)## 一、主流程(SOP)## 二、参数正解表 / 决策表## 三、脚本速查## 四、本机硬事实(照抄,别重新踩)## 五、参考资料(按需读,SKILL.md 保持瘦身) 几个字段的真实职责: description 是路由的唯一入口。用户说一句话, ...
🔍 让机器先看一遍:OpenCV 客观审片,和那个爆显存的 x4 超分
本地跑竖屏短剧,片子出来之后有个尴尬问题:怎么知道哪一镜不对? 肉眼一帧帧看,一集几十个镜头看不完,而且人眼对”人脸朝向反了”这类问题很不敏感——你会觉得”有点怪”,但说不上哪怪。 所以我把审核也做成了脚本:让 OpenCV 先把可疑的地方圈出来,人只看被圈出来的那几处。 同一套流程里还踩到一个真实的坑:后期 x4 超分在 12.79G 显存上必爆,一个终稿都出不了。两件事一起说。 一、先说那个坑:x4 超分必爆显存现象原来的后期脚本里,stage_b 用 RealESRGAN_x4plus 把 672×1216 的帧 x4 到 2688×4864,再缩回 1080×1920。 听起来是”先放大再缩小,质量更好”。实际结果是:中间帧直接爆掉 12.79G 显存,ComfyUI 执行 ImageUpscaleWithModel 时报错或服务崩掉,一个终稿都出不了。 修复把 stage_b 里的 UpscaleModelLoader + ImageUpscaleWithModel 整个去掉,只留一步 ImageScale(upscale_method="lanczos" ...
RAGFlow 实战(一):部署、鉴权与那些「不报错但不对」的问题
RAGFlow 实战(一):部署、鉴权与那些「不报错但不对」的问题 系列导航(全部为实战排障向,不讲源码 anatomy):(一)本篇:部署、鉴权、API 调通的排障实录;(二)文档解析实战:按文档类型选切块策略;(三)检索调参实录:从「检索不到」到「检索得准」;(四)API 自动化:CLI 工具与批量流水线。 一、先说结论:RAGFlow 的坑分两种用 RAGFlow 小半年,踩的坑归两类: 会报错的坑——好办,看日志就行; 不报错但不对的坑——上传成功但解析没动静、HTTP 200 但「知识库中未找到」、日志一片绿但检索质量差。这类才是真正吃时间的。 这篇先把「调通」阶段的问题一次扫清:部署、鉴权、API 权限、建库传文档。解析和检索的深水区留给后面三篇。 二、部署:一把梭之后先改三样12cd dockerdocker compose up -d 默认 CPU profile,ES、MinIO、MySQL、Redis 全容器化,开发机够用。拉起后先改三样: 端口:80 是必争之地,宿主机有 Nginx 就改映射;API 示例里我用 http://localhost:938 ...
🎬 从剧本到能生成的画面:分镜、冻结关键帧与审查
剧本写完了,下一句是”出画面”。中间隔着一道最容易被低估的工序:分镜。 常见的做法是把剧本按场景切开,每场写几句镜头描述,然后直接拿去生成。跑出来的东西技术上没问题——画面清晰、构图稳定——但看不出人物为什么在这个位置,也看不出这一镜存在的理由。观众会觉得”画面挺好看,故事没讲出来”。 问题不在生成质量,在分镜这一步没回答对问题。 一、分镜回答的四个问题分镜不是”把剧本翻译成镜头描述”,是在动笔前先确定四件事: 观众何时知道什么 —— 知情时机的管理,这是悬念的全部 对齐谁 —— 这一镜观众站在谁那边 空间如何揭示 —— 先看到全景还是先看到局部 转折落在哪个可见动作 —— 转折必须有画面,不能只在台词里 这四条定了,镜头顺序自然出来。没定,就只能靠”这里切个特写”来凑。 相对时间词必须换算成秒剧本里常写”后半段首次出现””前三分之一不要露脸”。这类描述在分镜时必须先换算成明确的时间边界——60 秒作品的”后半段首次出现”不得早于 30 秒。 不换算的后果是:分镜时间轴写”稍后””交接后”,而这两个词不是数值时间,生成时每个镜头 5 秒,最终成片里那东西在第 12 秒就露脸了。 二 ...
whisper + 剪映:自动字幕工作流
经验驱动。自动字幕工作流 = whisper 做语音识别出字幕文件 + 剪映做对齐/排版/校错。为什么选 whisper.cpp 而不是 openai-whisper、每一步怎么跑、哪些坑必须躲,全在这里。诚实声明:本机用 whisper.cpp 跑过中文转写;完整流水线(含剪映部分)是分步验证的,剪映本身是 GUI,无法脚本化。 为什么要做自动字幕手动打字幕又慢又累,尤其口播长视频。whisper 是 OpenAI 的开源语音识别,中文效果已经能用了。整套思路:机器出初稿 → 人工校一遍 → 排版,把最累的”听写”交给模型。 为什么用 whisper.cpp 而不是 openai-whisper whisper.cpp:C++ 实现,量化 GGUF 模型,CPU/GPU 都能跑,显存占用极低,本机 12G 显存跑大模型也不抢资源。 openai-whisper:Python + PyTorch,方便但要装 torch,显存和依赖都重。 我选 whisper.cpp 纯粹是为了不和本地 27B 推理抢显存。 工作流步骤1234567# 1) 用 ffmpeg 从视频抽音频(16k ...
用 Ingress + TLS 把集群服务安全暴露
经验驱动。把集群里的服务暴露给外部,且走 HTTPS,是 K8s 上线的最后一公里。同样先说明:本机 kubectl 客户端是 v1.36.1,但无集群,下方清单需在你的集群 apply 才能生效。我把一条可落地、含 TLS 终止的链路整理清楚,并标出几个本机外才会暴露的真实坑。 Ingress 解决什么问题 Service(LoadBalancer) 是四层(或者说靠云厂商给每个服务一个外部 IP),服务多了 IP 爆炸、还便宜不了。 Ingress 是七层路由:按 host / path 把外部请求转发到不同 Service,并统一做 TLS 终止。一个公网 IP 就能承载多个域名/路径的服务。 前提(真实坑):Ingress 资源只是声明,真正干活的叫 Ingress Controller(如 ingress-nginx)。没装控制器,你写了 Ingress 也不会有任何流量进来。这是新手最常被卡住的地方。 一条完整可用的链路四件套:Deployment(业务) → Service(暴露业务) → Secret(TLS 证书) → Ingress(按域名路由 + TLS ...
LLM 应用评测方法论:怎么证明应用真的变好了
做大模型应用最怕一句话:「效果好像变好了?」——「好像」不是证据。这篇讲我怎么把 LLM 应用的评测做成可复现、可对比的方法论,而不是靠感觉。 一、先拆层:别混着测LLM 应用通常分两层,必须分开测,否则你永远不知道问题在哪: 检索层(RAG 类):检索准不准?召回全不全?切块对不对? 生成层:答案对不对?有没有幻觉?有没有引用? 我曾修过 RAGFlow 的检索调参(见 检索调参实录),核心动作就是先把检索层单独测准(召回@k、空结果率),再动生成。 二、检索层指标 召回率 @k:正确答案是否在前 k 条里——衡量「漏没漏」; 空结果率 / 软失败率:返回 200 但啥都没有,这是头号人为坑,必须单独埋点; 切块正确率:答案是否被切坏、是否跨段。 经验:检索层的指标大多能自动化批量跑,用黄金问答集(问题→应有段落)一键出分。 三、生成层指标 忠实度(Faithfulness):答案是否都来自检索内容,有没有编; 答案相关性:是否真的回答了问题; 无害性 / 合规:要不要看业务而定。 这些主观指标,用 LLM-as-judge 做初筛:让一个强模型按 rubric 打分。但必须 ...
avatar
HYRX-TG
运维工程师 | AI算法学习者 | 热爱写作与技术分享
关注 河岳日星的 GitHub
公告
欢迎来到河岳日星的博客,记录技术与成长
最新文章
网站资讯
文章数目 :
122
已运行时间 :
本站总字数 :
171.6k
本站访客数 :
本站总访问量 :
最后更新时间 :
一言
:D 获取中...
:D 获取中...