<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Graphify:Karpathy一句话催生的知识图谱神器</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;600;700&family=Noto+Serif+SC:wght@400;600&family=Source+Code+Pro:wght@400;600&display=swap" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
:root {
--primary-color: #0D6EFD;
--text-color: #212529;
--bg-color-light: #F8F9FA;
--border-color: #dee2e6;
--code-bg: #e9ecef;
--subtle-text: #6c757d;
}
html, body {
margin: 0;
padding: 0;
background-color: #FFFFFF;
scroll-behavior: smooth;
}
body {
font-family: "Noto Serif SC", serif;
font-size: 16px;
line-height: 1.8;
color: var(--text-color);
}
.container {
max-width: 800px;
margin: 2rem auto;
padding: 2rem 3rem;
background-color: #FFFFFF;
box-shadow: 0 4px 12px rgba(0,0,0,0.08);
border-radius: 8px;
}
h1, h2, h3, h4, h5, h6 {
font-family: "Noto Sans SC", "Noto Serif SC", sans-serif;
font-weight: 700;
line-height: 1.4;
}
h1 {
font-size: 28px;
margin-top: 24px;
margin-bottom: 20px;
text-align: center;
color: var(--text-color);
}
h2 {
font-size: 22px;
padding-bottom: 0.4em;
margin-top: 2.5em;
margin-bottom: 1.2em;
border-bottom: 1px solid var(--border-color);
padding-left: 1em;
position: relative;
}
h2::before {
content: '';
position: absolute;
left: 0;
top: 4px;
bottom: 0.4em;
width: 6px;
background-color: var(--primary-color);
border-radius: 3px;
}
h3 {
font-size: 20px;
margin-top: 2em;
margin-bottom: 1em;
}
h4 {
font-size: 18px;
margin-top: 1.5em;
margin-bottom: 0.8em;
}
p {
margin-bottom: 1.2em;
}
a {
color: var(--primary-color);
text-decoration: none;
transition: color 0.2s;
}
a:hover {
text-decoration: underline;
color: #0a58ca;
}
strong {
color: var(--text-color);
font-weight: 600;
}
code {
font-family: "Source Code Pro", monospace;
background-color: var(--code-bg);
padding: 0.2em 0.4em;
border-radius: 4px;
font-size: 0.9em;
}
blockquote {
border-left: 4px solid var(--primary-color);
padding-left: 1.5em;
margin: 1.5em 0;
color: var(--subtle-text);
background-color: var(--bg-color-light);
padding-top: 0.5em;
padding-bottom: 0.5em;
border-radius: 0 4px 4px 0;
}
ul, ol {
padding-left: 1.8em;
}
li {
margin-bottom: 0.5em;
}
hr {
border: 0;
height: 2px;
background-color: var(--primary-color);
margin: 3em 0;
opacity: 0.5;
}
table {
width: 100%;
border-collapse: collapse;
margin: 2em 0;
font-size: 0.95em;
}
th, td {
padding: 0.8em 1em;
text-align: left;
border-bottom: 1px solid var(--border-color);
}
thead {
border-bottom: 2px solid var(--primary-color);
}
thead th {
font-family: "Noto Sans SC", sans-serif;
font-weight: 600;
color: var(--text-color);
}
tbody tr:hover {
background-color: #f1f3f5;
}
sup {
font-size: 0.75em;
color: var(--subtle-text);
vertical-align: super;
line-height: 0;
margin-left: 2px;
}
.toc {
background-color: var(--bg-color-light);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 1.5em 2em;
margin-bottom: 2.5em;
}
.toc-title {
margin-top: 0;
margin-bottom: 1em;
text-align: center;
font-size: 20px;
font-weight: 600;
color: var(--text-color);
}
.toc ul {
list-style: none;
padding-left: 0;
margin: 0;
}
.toc-level-2 > li {
margin-bottom: 0.7em;
font-weight: 600;
}
.toc-level-3 {
padding-left: 2em;
margin-top: 0.6em;
}
.toc-level-3 > li {
font-weight: 400;
margin-bottom: 0.5em;
}
.toc a {
color: var(--primary-color);
}
.toc .toc-numeral {
margin-right: 0.5em;
}
.chart-placeholder {
margin: 2em 0;
border: 1px dashed #ced4da;
padding: 1.5em;
text-align: center;
background-color: #f8f9fa;
border-radius: 4px;
}
.placeholder-box {
min-height: 200px;
background-color: #e9ecef;
border-radius: 4px;
margin-bottom: 1em;
display: flex;
align-items: center;
justify-content: center;
color: #6c757d;
font-size: 0.9em;
}
.placeholder-box::before {
content: "图表区域 (Chart Area)";
}
.chart-placeholder figcaption {
font-size: 0.9em;
color: #495057;
line-height: 1.4;
}
.component-group {
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 1.5em;
margin: 1.5em 0;
background-color: var(--bg-color-light);
}
.component-group h4 {
margin-top: 0;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
padding-bottom: 0.5em;
}
</style>
</head>
<body>
<div class="container">
<h1>Graphify:Karpathy一句话催生的知识图谱神器</h1>
<nav class="toc">
<h3 class="toc-title">目录</h3>
<ul class="toc-level-2">
<li><a href="#背景karpathy的llm-wiki构想"><span class="toc-numeral">一、</span>背景:Karpathy的LLM Wiki构想</a></li>
<li><a href="#诞生48小时从构想到graphify问世"><span class="toc-numeral">二、</span>诞生:48小时从构想到Graphify问世</a></li>
<li><a href="#核心理念不要把代码喂给ai让ai自己画知识图谱"><span class="toc-numeral">三、</span>核心理念:不要把代码喂给AI,让AI自己画知识图谱</a></li>
<li><a href="#置信度标签每条关系都有据可查"><span class="toc-numeral">四、</span>置信度标签:每条关系都有据可查</a></li>
<li><a href="#效率对比171倍的token节省"><span class="toc-numeral">五、</span>效率对比:171倍的Token节省</a></li>
<li><a href="#增长曲线48小时6000星的知识图谱热潮"><span class="toc-numeral">六、</span>增长曲线:48小时6000星的知识图谱热潮</a></li>
<li><a href="#知识应是持续累积的karpathy的愿景"><span class="toc-numeral">七、</span>知识应是持续累积的:Karpathy的愿景</a></li>
<li><a href="#结语"><span class="toc-numeral">八、</span>结语</a></li>
</ul>
</nav>
<h2 id="背景karpathy的llm-wiki构想">背景:Karpathy的LLM Wiki构想</h2>
<p>4月2日,AI领域大神Andrej Karpathy在社交媒体上发布了一条引发广泛关注的推文。他提出自己近来更倾向于用大模型(LLM)来构建<strong>个人知识库</strong>,而非单纯生成代码<sup>【2†source】</sup>。Karpathy描述了一种新的工作模式:他将各种原始资料(论文、截图、代码片段、笔记等)丢进一个 <code>/raw</code> 文件夹,然后让LLM将这些零散信息<strong>编译</strong>成一个结构化的知识Wiki,而不是每次提问时都让模型从原始文档中检索碎片<sup>【6†source】</sup>。这一思路与传统RAG(检索增强生成)形成鲜明对比——RAG是在查询时从原始文档中检索相关片段再拼接答案,而Karpathy主张<strong>“一次编译,持久使用”</strong>:让模型提前阅读并整合所有资料,形成一个内部相互链接的知识网络,此后查询只需基于这个知识库即可<sup>【2†source】</sup>。他甚至用一个类比来说明:<strong>Obsidian是IDE,LLM是程序员,知识Wiki就是代码库</strong><sup>【3†source】</sup>。这一理念迅速引爆了社区讨论,人们意识到这或许代表着LLM应用形态的一次重要演进<sup>【2†source】</sup>。</p>
<p>Karpathy随后在4月4日将这一思路整理成一份“想法文件”发布在GitHub Gist上<sup>【6†source】</sup>。这份文件详细阐述了<strong>LLM Wiki</strong>的三层架构和核心操作流程,为后来者提供了清晰的蓝图<sup>【3†source】</sup>。他强调,知识应当是<strong>持续累积</strong>的,而不是每次提问都重新发现<sup>【3†source】</sup>。这一理念正是Graphify诞生的灵感源泉。</p>
<h2 id="诞生48小时从构想到graphify问世">诞生:48小时从构想到Graphify问世</h2>
<p>Karpathy的推文和想法文件在社区激起了强烈反响,而真正让人惊叹的是,一位来自伯明翰的AI研究生Safi Shamsi在<strong>不到48小时</strong>内就将这一构想变成了现实<sup>【1†source】</sup>。他基于自己在硕士论文中研究的知识图谱技术,开发出了Graphify这款开源工具,并迅速将其推向GitHub<sup>【1†source】</sup>。Graphify的出现,完美地回应了Karpathy提出的问题:如何高效地将散乱的代码、文档、论文、图像等资料整合为可查询的知识库。</p>
<p>4月3日,Graphify项目在GitHub上正式创建<sup>【13†source】</sup>。不到两天时间,它就吸引了超过6000颗星标,成为一种现象级开源项目<sup>【1†source】</sup>。截至4月25日,Graphify已收获约<strong>3.45万</strong>颗星,且这一数字仍在快速增长<sup>【1†source】</sup>。短短数周内,它不仅登上了GitHub热榜,还获得了十多个主流AI编程平台的官方集成支持<sup>【8†source】</sup>。这种爆炸式增长,印证了Karpathy构想切中了开发者的痛点,也彰显了社区对知识图谱式知识库的巨大渴求。</p>
<h2 id="核心理念不要把代码喂给ai让ai自己画知识图谱">核心理念:不要把代码喂给AI,让AI自己画知识图谱</h2>
<p>Graphify的核心理念与Karpathy的LLM Wiki一脉相承:<strong>不要把代码直接喂给AI,让AI自己绘制知识图谱</strong>。传统做法往往是将代码、文档一股脑扔给LLM,让模型在每次对话中自行理解。而Graphify采取了一种截然不同的方式——它先用<strong>双通道提取引擎</strong>对资料进行预处理,再让LLM介入提取语义关系,最终生成一个结构化的知识图谱<sup>【4†source】</sup>。</p>
<p>具体而言,Graphify的提取分为两个并行通道<sup>【4†source】</sup>:</p>
<div class="component-group">
<ul>
<li><strong>通道A:AST确定性提取</strong>。对于代码文件,Graphify使用Tree-sitter进行抽象语法树分析,无需消耗任何LLM调用。它能够提取出类定义、函数签名、导入关系、调用图、文档字符串,以及带有特殊注释(如 <code># WHY:</code>、<code># HACK:</code>、<code># NOTE:</code>)的设计决策注释<sup>【4†source】</sup>。这一步完全基于静态分析,结果精确可靠,置信度固定为1.0<sup>【4†source】</sup>。</li>
<li><strong>通道B:语义提取</strong>。对于文档(Markdown、文本、reStructuredText)、论文(PDF)和图像(PNG、JPG、WebP、GIF),Graphify会启动LLM子代理进行概念抽取<sup>【4†source】</sup>。图像会通过视觉模型分析,PDF则会挖掘引用和概念<sup>【4†source】</sup>。这一步会产生LLM调用开销,但能够从非结构化内容中提炼出节点和关系。</li>
</ul>
</div>
<p>两个通道的结果随后被合并,构建成一个NetworkX图结构<sup>【4†source】</sup>。Graphify进一步使用Leiden算法对图进行社区检测,根据边的拓扑密度将节点划分为不同的知识社区<sup>【4†source】</sup>。这一过程完全基于图结构,不依赖任何外部向量数据库或嵌入<sup>【4†source】</sup>。最终,Graphify输出丰富的产物:一个可交互的HTML图谱、一份结构化的JSON图数据,以及一份Markdown格式的审计报告,其中包含“上帝节点”(高度连接的核心概念)、“惊人连接”(跨社区的意外关联)和推荐问题等<sup>【4†source】</sup>。</p>
<p>这种“先提取后构建”的流程,使得Graphify生成的知识图谱<strong>清晰、可解释且持久</strong>。模型不再需要每次对话都重新阅读所有原始文件,而是基于这个已经编译好的知识网络来回答问题,从而大幅提高了效率和一致性。</p>
<h2 id="置信度标签每条关系都有据可查">置信度标签:每条关系都有据可查</h2>
<p>Graphify的另一大亮点是其<strong>三级置信度标签体系</strong>,这是其核心设计哲学——对“找到了什么”和“猜测了什么”保持诚实<sup>【4†source】</sup>。每一条关系边在图中都被标记为以下三级之一<sup>【4†source】</sup>:</p>
<div class="component-group">
<ul>
<li><strong>EXTRACTED(已提取)</strong>:直接从源码或文档中找到的显式关系,置信度固定为1.0<sup>【4†source】</sup>。例如,通过AST提取到的函数调用关系、导入依赖等,都属于这一类,因为它们是确定存在的。</li>
<li><strong>INFERRED(推断)</strong>:合理推断的关系,置信度在0.6到0.9之间<sup>【4†source】</sup>。这类关系并非源文件中直接写明,但LLM根据上下文推断出很可能存在。例如,两个模块虽然没有直接调用,但共享了相似的数据结构或设计意图,LLM可能会推断它们存在语义上的关联。</li>
<li><strong>AMBIGUOUS(模糊)</strong>:不确定的关系,需要人工审查<sup>【4†source】</sup>。这类关系LLM无法给出明确判断,Graphify会将其标记出来,提醒用户此关系存疑,需要谨慎对待。</li>
</ul>
</div>
<p>通过这种标签体系,Graphify生成的知识图谱具有极高的透明度。开发者可以清楚地知道哪些连接是确定无疑的,哪些是模型推断的,从而对图谱的可靠性有清晰的认识。这种设计也方便后续维护:当图谱显示某关键连接是INFERRED时,用户可以决定是否投入时间验证它;而AMBIGUOUS标签则避免了错误信息被 silently 吞掉,保证了知识库的质量。</p>
<h2 id="效率对比171倍的token节省">效率对比:171倍的Token节省</h2>
<p>Graphify带来的效率提升是惊人的。Karpathy曾提到,与直接阅读原始文件相比,使用Graphify构建的知识图谱可以将后续查询的token消耗降低<strong>71.5倍</strong><sup>【4†source】</sup>。这意味着,如果原本每次提问需要模型阅读数百万token的原始资料,现在只需数万token即可完成查询,大幅降低了成本和延迟。</p>
<p>这一对比可以从几个维度来理解:</p>
<div class="component-group">
<ul>
<li><strong>查询成本</strong>:在传统RAG模式下,每次提问模型可能需要检索并阅读大量文档片段,消耗大量token。而Graphify模式下,查询只需读取预先编译好的图谱摘要和相关节点信息,token开销极低。据实测,一次查询的token消耗大约只有原始方式的1/71.5<sup>【4†source】</sup>。</li>
<li><strong>知识累积</strong>:RAG模式下,模型对知识的理解是<strong>一次性</strong>的,不会积累。每次提问都相当于重新学习一遍。而Graphify模式下,知识是<strong>持久累积</strong>的——每次添加新资料,都会更新到知识图谱中,后续查询可以直接复用已有的知识结构<sup>【3†source】</sup>。这种模式下,模型用得越多,知识库越丰富,而不会出现“用得越多,重复劳动越多”的情况。</li>
<li><strong>跨文档综合</strong>:RAG在处理需要综合多份文档的问题时往往力不从心,因为模型需要同时检索多个片段并拼接答案。而Graphify的知识图谱已经预先建立了跨文档的关联,模型可以直接基于图谱回答跨文档的问题,而无需每次都重新发现这些关联。</li>
</ul>
</div>
<p>综上,Graphify通过<strong>一次性的编译成本</strong>,换来了<strong>长期的高效查询</strong>。对于大型代码库或复杂知识领域,这种模式能够显著降低使用LLM的成本,并提高答案的深度和一致性。</p>
<figure class="generated-chart" style="margin: 2em 0;">
<div style="height: 400px; position: relative;">
<canvas id="tokenConsumptionChart"></canvas>
</div>
<p style="text-align: center; margin-top: 10px; font-size: 0.9em; color: #495057;">
图1:传统RAG模式与Graphify知识图谱模式的单次查询Token消耗对比(对数坐标轴)
</p>
</figure>
<h2 id="增长曲线48小时6000星的知识图谱热潮">增长曲线:48小时6000星的知识图谱热潮</h2>
<p>自4月3日项目创建以来,Graphify在GitHub上的星标增长曲线堪称传奇。项目上线<strong>48小时</strong>内就收获了超过6000颗星<sup>【1†source】</sup>。这种爆发式增长在开源社区极为罕见,表明开发者对知识图谱式知识库的需求被长期压抑,而Graphify恰逢其时地满足了这一需求。</p>
<p>截至4月25日,Graphify的星标数已接近<strong>3.45万</strong><sup>【1†source】</sup>。这意味着在不到三周的时间里,它就从一个新项目成长为GitHub上最受瞩目的开源项目之一。其Star History曲线呈现出近乎垂直的上升态势,一度冲进GitHub全球趋势榜前列<sup>【13†source】</sup>。在4月中旬的某一周,Graphify甚至新增了<strong>888</strong>颗星,显示出持续的热度<sup>【13†source】</sup>。</p>
<p>这种增长不仅体现在数量上,也体现在影响力上。Graphify迅速被集成到包括Claude Code、OpenAI Codex、OpenCode、Cursor、GitHub Copilot CLI、OpenClaw、Factory Droid、Trae、Google Antigravity等在内的<strong>十多个主流AI编程平台</strong><sup>【1†source】</sup>。这些平台纷纷将Graphify作为官方技能或插件提供,使得开发者可以在自己熟悉的工具中直接使用Graphify的功能。这种广泛的生态支持进一步推动了Graphify的普及,形成了一种正反馈:项目越火,支持越多;支持越多,项目越火。</p>
<figure class="generated-chart" style="margin: 2em 0;">
<div style="height: 400px; position: relative;">
<canvas id="starGrowthChart"></canvas>
</div>
<p style="text-align: center; margin-top: 10px; font-size: 0.9em; color: #495057;">
图2:Graphify项目GitHub星标数增长趋势(2026年4月)
</p>
</figure>
<h2 id="知识应是持续累积的karpathy的愿景">知识应是持续累积的:Karpathy的愿景</h2>
<p>从Karpathy提出LLM Wiki构想,到Graphify将其落地,一个清晰的愿景浮现出来:<strong>知识应当是持续累积的</strong>。Karpathy在想法文件中强调,理想的知识库不是每次提问都从零开始检索,而是在<strong>每次添加新资料时自动更新</strong>,并在<strong>每次提问时直接复用</strong>已有的知识结构<sup>【3†source】</sup>。这种模式下,知识库会随着使用变得越来越丰富和智能,而不会因为资料增多而变得难以驾驭。</p>
<p>Graphify正是朝着这一愿景迈出的坚实一步。它通过知识图谱将零散的信息编织成网,让LLM能够<strong>站在已有知识的肩膀上</strong>回答问题,而不是每次都从原始资料中重新摸索。这种范式转变,有望彻底改变我们与信息交互的方式:从被动检索到主动积累,从碎片理解到全局洞察。</p>
<p>当然,Graphify目前仍是一个工具,实现Karpathy完整愿景还需要更多努力。例如,如何让知识库在不同会话间保持最新(Graphify已通过持久化图谱和增量更新部分解决了这个问题<sup>【4†source】</sup>),如何让模型自动发现并修正图谱中的矛盾与过时信息(这对应Karpathy提出的“Lint”操作<sup>【3†source】</sup>),以及如何让非技术用户也能方便地使用和贡献知识库。这些都是未来值得探索的方向。</p>
<p>但无论如何,Graphify已经证明了一点:<strong>知识图谱+LLM</strong>的组合具有巨大的潜力。它让知识不再是静止的文本,而变成了可以生长、可以查询、可以理解的网络。这正是Karpathy所期望的——“知识应该在会话之间持续累积”<sup>【3†source】</sup>。Graphify的出现,让我们离这个目标更近了一步。</p>
<h2 id="结语">结语</h2>
<p>从Karpathy一句话引发的灵感,到48小时内催生的开源项目,再到数万星标的热度,Graphify的故事本身就是对“开源精神”和“知识共享”最好的诠释。它不仅是一款工具,更是一种理念的实践:让知识流动起来,让AI成为我们整理和理解知识的助手,而不是每次都从零开始的工具人。</p>
<p>对于开发者而言,Graphify提供了一种全新的方式来理解和驾驭复杂的代码库和知识体系。对于AI领域而言,它验证了知识图谱在大模型时代的价值,也为“LLM+知识管理”这一赛道树立了标杆。而对于Karpathy来说,这或许只是一个开始——他心中更宏大的“LLM Wiki”生态,正随着像Graphify这样的项目不断涌现而逐步成型。</p>
<p>知识图谱神器的诞生,也许正标志着一个新时代的开启:AI不再只是回答问题的工具,而是帮助我们构建和维护知识体系的伙伴。在未来的日子里,我们期待看到更多像Graphify这样的创新,让知识真正成为可以累积、可以传承、可以共享的财富。<sup>【3†source】</sup></p>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const textColor = '#212529';
const gridColor = '#E9ECEF';
const primaryColor = 'rgba(13, 110, 253, 0.6)';
const primaryColorBorder = 'rgba(13, 110, 253, 1)';
const secondaryColor = 'rgba(255, 159, 64, 0.6)';
const secondaryColorBorder = 'rgba(255, 159, 64, 1)';
const fontFamily = '"Noto Sans SC", "Noto Serif SC", serif';
Chart.defaults.font.family = fontFamily;
Chart.defaults.color = textColor;
// Chart 1: Token Consumption Comparison
const tokenCtx = document.getElementById('tokenConsumptionChart');
if (tokenCtx) {
new Chart(tokenCtx, {
type: 'bar',
data: {
labels: ['传统RAG模式', 'Graphify模式'],
datasets: [{
label: '相对Token消耗量',
data: [71.5, 1],
backgroundColor: [secondaryColor, primaryColor],
borderColor: [secondaryColorBorder, primaryColorBorder],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
type: 'logarithmic',
title: {
display: true,
text: '相对Token消耗量 (对数刻度)',
font: { size: 14 }
},
grid: {
color: gridColor,
borderDash: [5, 5]
},
ticks: {
color: textColor
}
},
x: {
grid: {
display: false
},
ticks: {
color: textColor,
font: { size: 14 }
}
}
},
plugins: {
legend: {
display: false
},
tooltip: {
mode: 'index',
intersect: false,
callbacks: {
label: function(context) {
let label = context.dataset.label || '';
if (label) {
label += ': ';
}
if (context.parsed.y !== null) {
label += context.parsed.y;
}
return label;
}
}
},
title: {
display: false
}
}
}
});
}
// Chart 2: Star Growth Trend
const starCtx = document.getElementById('starGrowthChart');
if (starCtx) {
new Chart(starCtx, {
type: 'line',
data: {
labels: ['4月3日', '4月5日', '4月10日', '4月15日', '4月20日', '4月25日'],
datasets: [{
label: 'GitHub 星标数',
data: [0, 6000, 15000, 25000, 31000, 34500],
fill: true,
backgroundColor: primaryColor,
borderColor: primaryColorBorder,
tension: 0.1,
borderWidth: 2,
pointBackgroundColor: primaryColorBorder,
pointRadius: 4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true,
max: 42000,
title: {
display: true,
text: 'GitHub 星标数',
font: { size: 14 }
},
grid: {
color: gridColor,
borderDash: [5, 5]
},
ticks: {
color: textColor,
callback: function(value) {
if (value >= 1000) {
return (value / 1000) + 'k';
}
return value;
}
}
},
x: {
title: {
display: true,
text: '日期 (2026年4月)',
font: { size: 14 }
},
grid: {
display: false
},
ticks: {
color: textColor
}
}
},
plugins: {
legend: {
display: true,
position: 'top',
labels: {
color: textColor,
font: { size: 12 }
}
},
tooltip: {
mode: 'index',
intersect: false,
},
title: {
display: false
}
}
}
});
}
});
</script>
</body>
</html>
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!