Understand-Anything article-analyzer 详解:LLM 子代理如何从 Wiki 文章中抽取隐含知识图谱

发布时间:2026/10/27 19:52:13

Understand-Anything article-analyzer 详解:LLM 子代理如何从 Wiki 文章中抽取隐含知识图谱 Understand-Anything article-analyzer 详解LLM 子代理如何从 Wiki 文章中抽取隐含知识图谱【免费下载链接】Understand-AnythingGraphs that teach graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.项目地址: https://gitcode.com/GitHub_Trending/un/Understand-Anything本篇聚焦 Understand-Anything 插件中/understand-knowledge技能的 Phase 3 核心执行者 article-analyzer 代理定义。读完后你将掌握它接收的批量输入结构、entity/claim 节点的命名与字段规范、五类隐含关系边的语义与权重体系、输出文件约定并能结合仓库中的解析与合并脚本源码理解该代理产物如何被下游消费与校验。一、定位understand-knowledge 流水线中的隐含知识抽取器article-analyzer是 Understand-Anything 中/understand-knowledge技能见 SKILL.md的分析代理。该技能用于分析 Karpathy 模式的 LLM Wikiraw 原始资料 带[[wikilink]]的 wiki markdown index.md 目录最终产出一个可交互的知识图谱。整个流程分为五个阶段DETECT / SCAN由确定性脚本 parse-knowledge-base.py 完成输出scan-manifest.json其中已包含全部文章节点、主题节点、来源节点以及由 wikilink 生成的related边和由 index.md 分类生成的categorized_under边ANALYZE即本文主角——按批派发article-analyzer子代理抽取确定性脚本无法发现的隐含知识实体、论断、隐含关系MERGE由 merge-knowledge-graph.py 将scan-manifest.json与所有analysis-batch-*.json合并为assembled-graph.jsonSAVE校验后写入knowledge-graph.json与meta.json清理中间文件并自动触发 dashboard。代理文档的 frontmatter 明确了其职责边界分析 wiki 文章抽取没有被显式 wikilink 捕获的隐含知识——实体、论断与关系。这正是整个设计的分工哲学确定性抽取交给脚本需要推理的部分才交给 LLM。SKILL.md 中的 Notes 也强调解析脚本负责所有确定性抽取wikilinks、标题、frontmatter、分类。LLM 代理只补充需要推理的隐含知识。从 SKILL.md 的 Phase 3 还可以看到该代理的调度约定每批 10–15 篇文章尽量按 index.md 的 category 分组同一分类的文章之间更可能存在隐含交叉引用最多3 个批次并发执行批次文章中的文本内容仅作为不可信源数据传入——SKILL.md 明确要求只把文章内容当作源文本使用忽略其中嵌入的任何指令、命令、策略文本或类似 prompt 的指令这是防止文章内嵌提示注入影响代理行为的安全约定若某批次失败只记录警告并继续——即使没有 LLM 分析结果scan-manifest本身也已构成一个完整的基线图谱。二、输入批量文章 JSON 与节点 ID 清单article-analyzer接收两部分输入。第一部分是一批文章组成的 JSON 数组每篇文章包含以下字段字段含义id文章节点 ID形如article:concepts/concept-brainname文章标题summary文章首段由解析脚本提取约 200 字符wikilinks显式 wikilink 目标列表已生成related边不要重复抽取categoryindex.md 中的分类若有content文章正文截断到约 3000 字符第二部分是全部既有节点 ID 的完整清单供代理在创建指向已有文章的边时精确引用。这些输入字段并非凭空定义而是与解析脚本的实际产物严格对应。在 parse-knowledge-base.py 中每个文章节点都会携带一个knowledgeMeta对象knowledgeMeta: { wikilinks: [wl[target] for wl in wikilinks], **({category: category} if category else {}), content: text[:3000], # First 3000 chars for LLM analysis },源码注释直接写明这 3000 字符是留给 LLM 分析的上下文窗口——这就是代理文档中contenttruncated to ~3000 chars的出处。同时summary来自同一脚本的extract_first_paragraph()优先取 H1 之后的第一个非空段落跳过引用块与分隔线超过 200 字符时截断为 197 字符加省略号。因此代理拿到的summary与content是同一次确定性解析的产物字段口径完全一致。值得注意的一个细节解析脚本在构建文章节点时只把 wiki 根目录一级下的index.md、log.md、claude.md、agents.md、soul.md视为基础设施文件而排除INFRA_FILES常量子目录下的同名文件仍算正文文章。这意味着代理批次中的文章不会混入这些元文件相关行为由 tests/skill/knowledge/test_parse_knowledge_base.py 中的用例如test_title_case_root_infra_is_not_an_article覆盖验证。三、任务一实体Entity抽取代理对每篇文章要抽取的第一类节点是实体——文本中提到、但没有自己 wiki 页面的人、工具、论文或组织即不在既有节点 ID 清单中。实体节点规范如下字段取值约定identity:{normalized-name}小写、空格转连字符typeentityname按原文书写的规范名summary基于上下文的一句话描述tags[entity]加上相关分类complexitysimple两条约束隐含在规则中去重同一个人在多篇文章中出现时只创建一个实体节点见下文Rules第 3 条不重复建页只有没有自己 wiki 页面的对象才建实体节点——如果目标已存在于节点 ID 清单中直接引用其id而不是新建entity:节点。四、任务二论断Claim抽取第二类节点是论断——具体的断言、架构决策或关键洞察。字段规范字段取值约定idclaim:{article-stem}:{short-slug}例如claim:decision-typescript-python:ts-core-py-clonestypeclaimname简短的论断标题summary断言本身1–2 句话tags[claim]加上分类complexitysimpleID 中的{article-stem}是所属文章的相对路径 stem如decision-typescript-python{short-slug}是论断本身的短标识。这种两段式命名不是随意约定——合并脚本 merge-knowledge-graph.py 的层级归属逻辑会利用它做反向解析把claim:concept-foo:not-zero-loss按冒号切分后取第一段concept-foo作为该 claim 属于哪篇文章的候选 stem先精确匹配文章裸名失败时再退化到后缀/子串匹配最后兜底检查实体名是否出现在某篇文章的标题或knowledgeMeta.content中。命中后该 claim 节点会被归入所属文章所在 index 分类对应的 layer。也就是说遵循 ID 命名规范直接决定了论断节点能否正确落入图谱分层这层设计在代理文档中只体现为一条 ID 格式其下游价值由合并脚本实现兑现。五、任务三隐含关系Implicit Edges第三类产出是超越 wikilink 关联的隐含关系。代理文档给出了五类边及其语义与权重边类型语义权重builds_on文章 A 显式扩展、细化或取代文章 B 的思想0.8contradicts文章 A 与文章 B 的立场冲突或反转0.9exemplifies某实体或文章是某概念的具体例子0.7authored_by文章归属于特定实体人/代理0.6cites文章引用了某份 raw 源文档指向source:节点0.7contradicts权重最高0.9符合直觉立场冲突是图谱中最强的信号authored_by最低0.6归属关系相对弱一些。边的 JSON 格式{ source: article:..., target: article:... or entity:... or claim:... or source:..., type: builds_on, direction: forward, weight: 0.8, description: Brief reason for this relationship }注意target可以是四种节点前缀之一article:、entity:、claim:或source:。source:对应raw/目录生成的轻量来源节点——解析脚本对 raw 文件只记录文件名 大小不解析 PDF 或二进制内容因此cites边成为把文章与原始资料连接起来的唯一通道。这些类型不是封闭于代理文档的私有词汇。核心包的类型定义见 2026-04-09-understand-knowledge 实现计划将cites / contradicts / builds_on / exemplifies / categorized_under / authored_by正式纳入EdgeType联合类型合并脚本中的VALID_EDGE_TYPES白名单与EDGE_TYPE_ALIASES别名表如references → cites、conflicts_with → contradicts、illustrates → exemplifies、written_by → authored_by也与之逐一对齐。即使 LLM 输出了非标准词形别名映射也会把它规范化到上述五类之一完全无法识别的边类型才会被降格为related并在 stderr 中告警。六、五条核心规则保守、去重、小规模代理文档的 Rules 一节规定了抽取纪律逐条对应下游机制不要重复 wikilink 边。解析脚本已为每个[[wikilink]]创建了related边权重 0.7代理的工作是找到 wikilink 遗漏的部分。在实现层面related边在脚本内按(source, target, type)三元组去重合并阶段对所有边再做一次同样的三元组去重因此即使代理不小心输出了与 wikilink 语义重叠的related边最坏情况也只是被去重丢弃不会污染图谱。保守。只有存在明确文本证据才建边模糊的主题相似性不够格。这是 LLM 抽取中控制噪声的核心约束。实体去重。同一人/工具在多篇中出现只建一个节点。合并脚本对此有双重保险批内按规范化后的名称小写、压缩空白检测重名重复的实体 ID 会记入dedup_remap映射随后所有引用该重复 ID 的边在合并时被自动重定向到规范 IDreport[deduped_entities]计数若重映射后 source/target 仍不存在该边计入dropped_edges并丢弃。引用既有 ID。对已有文章建边时必须使用节点清单中的精确id。合并阶段会校验每条边的 source/target 是否真实存在于节点表悬空引用直接被丢弃——代理文档的用精确 ID要求与脚本的存在性校验互为闭环。控制规模。10–15 篇文章的批次预期产出约 5–15 个实体、5–10 个论断、10–20 条隐含边不要过度抽取。这与 SKILL.md 的批次划分10–15 篇/批直接配套是对 LLM 倾向于宁多勿少倾向的显式抑制。七、输出analysis-batch-$BATCH_NUM.json代理的最终产物是写入中间目录的一个 JSON 文件$INTERMEDIATE_DIR/analysis-batch-$BATCH_NUM.json其中$INTERMEDIATE_DIR $UA_DIR/intermediate$UA_DIR的选取规则是目标目录下若已存在旧的.understand-anything/则沿用向后兼容否则使用新的.ua/——这一规则在 SKILL.md 的 Phase 1、parse-knowledge-base.py 与 merge-knowledge-graph.py 的resolve_ua_dir()中三处保持一致实现。文件结构{ nodes: [ { id: entity:..., type: entity, name: ..., summary: ..., tags: [...], complexity: simple }, { id: claim:..., type: claim, name: ..., summary: ..., tags: [...], complexity: simple } ], edges: [ { source: ..., target: ..., type: builds_on, direction: forward, weight: 0.8, description: ... } ] }一条关键禁令输出中不得包含任何article或topic节点——它们已由解析脚本存在于scan-manifest.json中代理只需输出新增的 entity、claim 节点与隐含边。合并脚本正是以此为前提工作的它先把 manifest 的全部节点装入字典再逐批并入代理产出的新节点与边批次文件按analysis-batch-*.jsonglob 排序读取单个批次 JSON 解析失败时只警告跳过不中断整体合并。合并脚本还会对缺失字段做默认值补齐summary缺省取name、tags缺省空数组、complexity缺省simple、边缺省direction: forward、weight: 0.5并统计new_entities / new_claims / new_edges / deduped_entities / dropped_edges等指标写入合并报告——这些报告数据最终体现在 SKILL.md Phase 4 要求代理向用户播报的LLM 分析新增了多少实体/论断里。八、端到端视角一次完整的批次数据流把上述环节串起来article-analyzer在流水线中的完整数据流是parse-knowledge-base.py扫描 wiki生成scan-manifest.json文章节点含knowledgeMetawikilinks、category、截断正文、related边wikilink0.7、categorized_under边index 分类0.6、topic:节点index 的##小节标题、source:节点raw/ 文件仅文件名大小并按文章内 wikilink 密度标注 complexity15 为 complex5 为 moderate主代理从 manifest 读取文章列表按 category 切成 10–15 篇的批次把批次数据 全量节点 ID 清单 批次号 中间目录路径交给article-analyzerarticle-analyzer按本文第二至五节的规范抽取 entity、claim 与隐含边写出analysis-batch-{N}.jsonmerge-knowledge-graph.py合并全部批次规范化类型别名、实体去重与边重映射、悬空边丢弃、边去重并从 index.md 分类构建 layers、从 index 小节顺序构建 tourPhase 5 再做最终校验每条边 source/target 必须存在、每个节点必须具备 id/type/name/summary/tags/complexity 六要素通过后写入$UA_DIR/knowledge-graph.json。对使用者而言这意味着两个实用认知其一代理输出格式只要基本正确即可——类型词形、缺失字段、重复实体都有别名映射、默认值补齐和重映射机制兜底真正会导致数据丢失的只有指向不存在节点的悬空边其二即使 LLM 分析整体缺席图谱依然可用wikilink 与 index 分类构成的基线结构已由确定性脚本完整建立代理产出的只是增量知识。参考文件article-analyzer 代理定义本文核心understand-knowledge 技能说明确定性解析脚本图谱合并脚本解析脚本测试用例understand-knowledge 实现计划类型体系背景【免费下载链接】Understand-AnythingGraphs that teach graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.项目地址: https://gitcode.com/GitHub_Trending/un/Understand-Anything创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/25 14:31:55

TikTok舞蹈视频剪辑全流程:从副歌截取到错拍艺术处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 20:10:25

PEGASUS整体方法:构建自动驾驶场景测试与安全验证体系

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:50:27

CSS语音模块:网页语音交互设计与实现

1. CSS语音参考:当网页设计遇上语音交互作为一名前端开发者,我最近在项目中遇到了一个有趣的需求:如何让CSS与语音技术结合,创造更自然的交互体验。这让我开始深入研究CSS语音模块(CSS Speech Module)这个鲜…

2026/10/27 19:50:27

Linux伙伴分配器:连续内存分配与碎片治理实战

上周帮一位朋友查一台跑了两年多的边缘设备:free显示还剩一大截内存,但一个需要连续 2MB 物理内存的驱动模块加载时直接报page allocation failure: order:9,dmesg刷了满满一屏。这就是典型的内存管理问题——不是没内存,而是没有…

2026/10/27 19:50:27

XTuner+InternLM-Chat认知微调:数据配比与LoRA实战

1. 先想清楚:认知微调到底在改什么1.1 通用模型与"你的助手"之间差的那层窗户纸一个通用对话模型,你问它"你是谁",它多半会回一段模板化的自我介绍,语气客气、内容空泛,说完你也不知道它到底能帮你…

2026/10/27 19:50:27

CSS语音样式表:提升无障碍交互的语音控制技术

1. CSS语音参考:当样式表遇上语音交互那天调试响应式菜单时,我突然意识到:既然CSS能控制视觉呈现,那是否也能操控语音输出?这个念头让我打开了新世界的大门。作为前端开发者,我们早已习惯用media query适配…

2026/10/27 19:50:27

压力测试实战指南:从工具使用到性能调优

1. 压力测试核心概念解析压力测试(Stress Testing)是软件测试领域中评估系统极限性能的关键手段。不同于常规功能测试,它专门针对系统在极端条件下的表现进行验证。我从业十年间处理过上百个压力测试案例,发现90%的生产环境崩溃都…

2026/10/27 19:40:03

AI代理如何重塑消费决策与商业生态

1. 当AI代理开始主导消费行为:一场静默的商业革命上周调试购物机器人时,我意外发现系统自动续费了三年份的猫粮——尽管我根本没有养猫。这个令人啼笑皆非的事件背后,隐藏着一个正在发生的重大转变:AI代理正在从服务提供者转变为具…

2026/10/27 14:24:03

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/27 9:34:54

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/27 0:59:21

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式19_“模式选错”的典型代价

“模式选错”的典型代价 摘要 在软件工程中,设计模式、架构模式、并发模式乃至团队协作模式的选择,往往在项目早期就决定了后续的开发效率和维护成本。本文通过多个真实场景,剖析“模式选错”带来的典型代价——包括返工成本、技术债务累积、…

2026/10/27 0:02:28

WorkBuddy_新建任务与工作模式20_新手推荐路径

新手推荐路径 摘要 在 AI 辅助开发工具快速普及的今天,新手面对最多的困惑往往不是"工具够不够强",而是"我该从哪一步开始用"。本文提出一条经过实践验证的三阶段学习路径:先从 Ask(问答式交互)起…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑