我们在上一篇中讲了 Agent + Markdown 作为私有知识库的可能性,今天我想分享一些我对 Markdown 的认识。
我与 Markdown 的不解之缘
我已经记不清第一次看到 Markdown 这个词是什么时候了,或许是第一次接触开源项目,看到项目下的 README.md,又或许是当年玩博客的时候,寻找好用的编辑器的时候发现的。
总之它在我的工作和生活中,出现的频率越来越高。因为我是一个程序员,所以接触得算是比较早的。早期只用它来写项目的文档。后来用 hugo 搭建了基于 Markdown 的个人网站,这样我可以把更多精力放在内容输出上,不用管排版这些琐事。再后来,市面上涌现了诸如 Obsidian、Logseq 这样优秀的双链笔记软件,它们无一例外地将 Markdown 作为底层格式,让它一跃成为了个人知识库管理(PKM)的绝对主力。现在呢,作为AI应用的开发者,几乎每天都用到它,因为几乎所有主流大模型的 API 在默认情况下都采用 Markdown 格式进行输出。
大模型的通用语言
你有没有好奇过,你在与AI对话的时候,AI应用是怎么展现那么丰富且有层次的内容的?比如下图是我与 Grok 的对话,它的回答包含了表格、无序列表。

这只是比较简单的回答,它的表现力远不止于此。那它是怎么实现的?答案是 Markdown。模型层面给出的内容如下图:

我们可以把一个AI应用分成2个抽象层:模型层和应用层。当我们发起提问时,应用层将问题转发给模型;模型经过计算,生成纯文本的 Markdown 内容作为回答;而像 Grok 网页端或手机 APP 这样的应用层,在接收到 Markdown 后,会利用内置的渲染器将其转换成丰富的视觉效果呈现给我们。这形成了一个完整的交互闭环:
flowchart TD
User((用户))
subgraph App [应用层]
Input[对话输入框]
Renderer[Markdown 渲染器]
Output[富文本视图展现]
Renderer --> Output
end
subgraph Model [模型层]
LLM(大语言模型)
end
User -- "1. 提问/输入提示词" --> Input
Input -- "2. 转发请求" --> LLM
LLM -- "3. 返回 Markdown 纯文本" --> Renderer
Output -- "4. 呈现最终结果" --> User
所以,我们可以简单粗暴地理解为:Markdown 是大语言模型向人类表达世界的通用语言。
连接物理世界的桥梁
再问一个问题,你有没有好奇过,当你在AI对话框里上传一个文件,让AI帮你处理内容的时候,AI是怎么理解你的文件的?
答案还是 Markdown,AI应用会先通过一些技术来把你的文件(如:PDF、Word、Excel 和 PPT 等)转成 Markdown 文本格式,然后和你的提示词一起发送给大模型。反之,如果你让它帮你导出到新的文件里,应用层又做一次 Markdown -> 文件的转换。
基于这个需求,催生了转换工具项目,比较知名的有:
- markitdown, 微软开源的 Python 工具,用于把 PDF、Word、Excel 和 PPT 等文件转换成 Markdown
- pandoc,用于将 Markdown 转换成各种文件,诞生于 AI 时代之前,但这几年很火爆
这其实就是一个跨越“物理世界”与“AI 世界”的双向转换过程:
flowchart LR
subgraph 物理世界
File1[PDF/Word/Excel 等源文件]
File2[新的文档文件]
end
subgraph 转换工具层
App1(比如 markitdown)
App2(比如 pandoc)
end
subgraph AI模型层
MD[Markdown 纯文本]
LLM((大语言模型))
end
File1 -- "1. 用户上传" --> App1
App1 -- "2. 解析转换" --> MD
MD -- "3. 提供上下文" --> LLM
LLM -- "4. 处理并输出" --> MD
MD -- "5. 导出" --> App2
App2 -- "6. 生成" --> File2
超丰富的表现力
我们再来看下 Markdown 的表现力
Markdown 的出现,最早是用来解决排版和可读性问题,发展到今天如此繁荣,为了适应各种场景,又引入了各种插件。
比如数学领域:
借助 MathJax 或 KaTeX 这样的渲染引擎插件,我们可以直接在 Markdown 中书写复杂的数学公式,而大模型在解答数理化问题时,也会自然地输出这类格式。通常只需用 $ 或 $$ 把公式代码包裹起来。例如,质能方程可以写成 $$E = mc^2$$ ;稍微复杂的积分公式,AI 也能轻松写出并在页面上完美渲染:
$$ \int_{a}^{b} x^2 dx = \frac{b^3 - a^3}{3} $$
以上代码会被渲染为:

比如图表:Mermaid
Mermaid 是一个基于 JavaScript 的图表绘制工具。它允许你直接使用文本和代码来创建时序图、流程图、甘特图等。过去程序员要画一张架构图得在软件里拖拽半天,现在只要在 Markdown 代码块里标注 mermaid,用几行文本就能生成出直观的图表。因为它的本质是纯文本,这恰恰是大模型最擅长输出的格式!
例如,上面用来展示模型层和应用层的交互框架图,也是通过 mermaid 渲染而成的,它的原始代码长这样:
flowchart TD
User((用户))
subgraph App [应用层]
Input[对话输入框]
Renderer[Markdown 渲染器]
Output[富文本视图展现]
Renderer --> Output
end
subgraph Model [模型层]
LLM(大语言模型)
end
User -- "1. 提问/输入提示词" --> Input
Input -- "2. 转发请求" --> LLM
LLM -- "3. 返回 Markdown 纯文本" --> Renderer
Output -- "4. 呈现最终结果" --> User
结语
今天,在各种工具和 AI 的加持下,我们只需几行纯文本,就能瞬间撬动复杂的图表与精美的排版,获得了前所未有的效率提升。它帮我们把耗在“形式”上的时间夺回来,让我们能更专注于思考和“内容”本身。
本文也是用 Markdown 搓出来的 🤗