[{"data":1,"prerenderedAt":266},["ShallowReactive",2],{"content:project:kdagent":3},{"id":4,"title":5,"body":6,"cover":245,"date":246,"demoUrl":247,"description":248,"draft":249,"extension":250,"meta":251,"navigation":252,"path":253,"repoUrl":254,"seo":255,"status":256,"stem":257,"tags":258,"updated":264,"__hash__":265},"projects\u002Fprojects\u002Fkdagent.md","KDAgent：让大模型做工业过程根因分析，并且能证明它有没有胡说",{"type":7,"value":8,"toc":234},"minimark",[9,13,17,25,28,36,55,82,85,104,115,119,122,186,189,196,203,206],[10,11,12],"h2",{"id":12},"要回答的问题",[14,15,16],"p",{},"工业过程出事之后，「根因是什么」 traditionally 靠算法给候选列表：\n基于传递熵之类的因果分析（TA-RCA）能算出一批 Top-10 候选变量，但它给的是统计关系，不是解释。\n大模型有可能补上「解释」这一段——前提是它真的在推理，而不是把候选列表用漂亮话复述一遍，\n甚至干脆挑一个不在列表里的答案。",[14,18,19,20,24],{},"所以这个项目我没有做成一个「RCA 应用」，而是做成了一套",[21,22,23],"strong",{},"可复现的对比实验框架","：\n同一份输入，跑不同的方法组合，看指标差在哪，并且每一次调用都留下可审计的原始记录。",[10,26,27],{"id":27},"实验设计",[14,29,30,31,35],{},"输入是统一的案例格式（",[32,33,34],"code",{},"llm_prompt_cases.jsonl","）：每条案例带 TA-RCA 的 Top-10 候选、\n按时间窗切出的时序证据，以及真值标签。方法上分五档：",[37,38,39,43,46,49,52],"ol",{},[40,41,42],"li",{},"直接提示（plain prompting）；",[40,44,45],{},"RAG 检索增强提示；",[40,47,48],{},"迭代自修正 Agent（iterative self-refinement）；",[40,50,51],{},"RAG + 自修正 Agent 的组合；",[40,53,54],{},"双分支确定性融合（本方法：时序证据分支 + RAG 分支，再做确定性合并）。",[14,56,57,58,61,62,65,66,69,70,73,74,77,78,81],{},"官方矩阵是 ",[21,59,60],{},"5 个模型 × 5 个条件","，一条命令跑完（",[32,63,64],{},"scripts\u002Frun_final_experiments.py","）。\n每个案例重复推理 ",[32,67,68],{},"--num_runs"," 次，",[32,71,72],{},"temperature","、",[32,75,76],{},"max_tokens","、可选的 ",[32,79,80],{},"thinking_budget"," 全部固定，\n目的是让「换个模型」和「换个提示词」这两种差异能被分开看。",[10,83,84],{"id":84},"指标里我最在意两个",[86,87,88,94],"ul",{},[40,89,90,93],{},[21,91,92],{},"Accuracy@1 \u002F @3 \u002F @5","：真值排到第几，比只看 Top-1 更能反映排序质量；",[40,95,96,99,100,103],{},[21,97,98],{},"hallucination_rate","：模型给出的根因",[21,101,102],{},"不在候选集合里","的比例。\n这个指标是我认为整个评测里最有价值的一条——它直接回答「模型是在推理还是在编」。",[14,105,106,107,110,111,114],{},"另外还记 ",[32,108,109],{},"valid_json_rate","（结构化输出可用率）和 ",[32,112,113],{},"average_confidence","，\n以及迭代 Agent 与 RAG 各自的诊断指标（比如第几轮才开始收敛、检索有没有命中）。",[10,116,118],{"id":117},"为了可复现做的工程","为了「可复现」做的工程",[14,120,121],{},"这部分比模型调用更花时间：",[86,123,124,131,141,148,155,158,168,179],{},[40,125,126,127,130],{},"模型统一走 OpenAI 兼容接口，在 ",[32,128,129],{},"configs\u002Fmodels.yaml"," 里配 DashScope、DeepSeek、智谱等，\n同一套流水线换供应商不用改代码；",[40,132,133,136,137,140],{},[21,134,135],{},"密钥只从环境变量读","（配置里写 ",[32,138,139],{},"api_key_env"," 的变量名），不进代码、不进配置、不进日志；\n缺某个 key 时跳过该模型并在日志里报告，而不是整批中断；",[40,142,143,144,147],{},"调用侧：指数退避加抖动（",[32,145,146],{},"base * 2^(attempt-1)"," 再叠加 0–30% 抖动）、超时、失败容错；",[40,149,150,151,154],{},"解析侧：先按 JSON 解析，失败退化成正则兜底，再做",[21,152,153],{},"确定性校验","——\n答案必须落在候选集合内，否则直接判为无效或幻觉；",[40,156,157],{},"审计链完整：原始响应存 JSONL、解析结果摊平成 CSV、聚合指标出 JSON\u002FCSV，\n每个模型每个条件一套；",[40,159,160,163,164,167],{},[32,161,162],{},"analysis\u002F"," 下的脚本可以在",[21,165,166],{},"完全不调用任何 LLM API"," 的情况下重算指标，\n改统计口径不用重新花钱跑一遍；",[40,169,170,171,174,175,178],{},"依赖同时给 ",[32,172,173],{},"requirements.txt"," 和 ",[32,176,177],{},"requirements-lock.txt","（锁定版本），\n后者用于严格复现报告里的结果；",[40,180,181,182,185],{},"有单元测试和用 mock 模型跑的端到端冒烟测试，",[32,183,184],{},"verify_csv.py"," 用来校验一次运行产出的 CSV。",[10,187,188],{"id":188},"现在的状态与下一步",[14,190,191,192,195],{},"框架、消融矩阵、指标与离线复算脚本都可用；具体的实验数字我不写在这里，\n全部以仓库 ",[32,193,194],{},"outputs\u002F"," 下的原始响应与聚合指标为准——\n数字要能被重算才有意义，抄进文档里迟早会过期。",[14,197,198,199,202],{},"下一步想做的是：把检索稳健性实验（",[32,200,201],{},"scripts\u002Frun_retrieval_robustness.py","）扩到更多扰动，\n以及给双分支融合里「确定性」那部分再收紧一些。",[10,204,205],{"id":205},"技术栈",[14,207,208,209,73,212,73,215,73,218,73,221,73,224,73,227,73,230,233],{},"Python 3.9+，",[32,210,211],{},"openai",[32,213,214],{},"chromadb",[32,216,217],{},"pandas",[32,219,220],{},"numpy",[32,222,223],{},"pyyaml",[32,225,226],{},"tenacity",[32,228,229],{},"tqdm",[32,231,232],{},"requests","；\n向量检索用 ChromaDB，数据集为 SWaT（主）与 WADI。",{"title":235,"searchDepth":236,"depth":236,"links":237},"",3,[238,240,241,242,243,244],{"id":12,"depth":239,"text":12},2,{"id":27,"depth":239,"text":27},{"id":84,"depth":239,"text":84},{"id":117,"depth":239,"text":118},{"id":188,"depth":239,"text":188},{"id":205,"depth":239,"text":205},"\u002Fimages\u002Fcovers\u002Fkdagent.jpg","2026-09-18",null,"Python 实验框架，在 SWaT \u002F WADI 水务测试床的 Top-10 候选结果上比较不同 LLM 的根因分析能力；四种消融设置加双分支确定性融合，自动产出 Accuracy@1\u002F3\u002F5、有效 JSON 率与幻觉率，并留下完整审计记录。",false,"md",{},true,"\u002Fprojects\u002Fkdagent","https:\u002F\u002Fgithub.com\u002FHFJ0624\u002FKDAgent",{"title":5,"description":248},"maintenance","projects\u002Fkdagent",[259,260,261,262,263],"LLM 应用","RAG","Python","可观测性","Agent","2026-09-20","_YKWpg5QsR82fKi2xgBXEPL_870raCyUk6vVDnRywLY",1792063306707]