用 AI 构建巴菲特投资知识图谱从 48 封公开信到可交互的投资智慧网络量化交易系列 · 番外篇 | 知识图谱 × LLM × 价值投资导语巴菲特从 1977 年开始每年给伯克希尔·哈撒韦股东写一封公开信。48 封信跨越近半个世纪累计超过50 万字。这些信里藏着一位传奇投资者从青年到耄耋的完整投资思想演化史——从格雷厄姆式的烟蒂股捡拾者到用合理价格买入伟大公司的价值投资教父。问题是48 封信信息量太大了。你读了第 3 封可能已经忘了第 1 封在讲什么你记得护城河这个概念但说不清它和哪些公司、哪些投资决策、哪些时间节点关联。有没有一种方法能把这 48 封信里所有的人物、公司、投资理念、关键事件全部抽出来并用一张可交互的知识图谱把它们之间的关系可视化这就是本文要做的事——用 LLM 驱动的知识抽取技术构建一张巴菲特投资知识图谱。我们开源了完整项目buffett-kg你可以直接运行体验也可以基于本文介绍的原理用 Vibe Coding 的方式自己从零构建。一、为什么要给巴菲特的公开信建知识图谱1.1 公开信的价值被严重低估巴菲特公开信是免费的——伯克希尔官网上全部公开下载。但 95% 的人只是零散地看过几段金句。真正的价值不在单个观点而在观点之间的关联和演化维度碎片阅读知识图谱投资理念“护城河很重要”护城河 → 品牌力 → Coca-Cola → 1988年买入 → 持有35年人物关系“芒格是巴菲特的搭档”Graham(导师) → Buffett → Munger(合伙人) → 能力圈理念时间演化“巴菲特不碰科技股”1999拒绝科技股 → 2016买入Apple → 认知升级决策逻辑“在别人恐惧时贪婪”2008金融危机 → 逆向投资 → Goldman Sachs BofA一张知识图谱把48 年的投资智慧压缩成一个可交互的网络你可以按年份筛选、按主题聚焦、点击任一节点看其来龙去脉。1.2 技术上的完美练手项目从工程角度这个项目覆盖了当下最热的几项技术NLP / LLM— 实体抽取 关系抽取知识图谱— 图数据结构 本体设计数据可视化— ECharts 力导向图Vibe Coding— 用 AI 辅助编程完成全流程非常适合作为 AI 投资交叉领域的学习项目。二、数据源48 封巴菲特公开信所有公开信均来自伯克希尔·哈撒韦官网https://www.berkshirehathaway.com/letters/letters.html文件格式有两种1977—1997 年HTML 格式.html1998—2024 年PDF 格式.pdf文件名如1998ltr.pdf数据处理流程先批量下载 48 份文件再统一提取纯文本HTML 用 BeautifulSoupPDF 用 pdfplumber按年份输出为独立的文本文件供后续知识抽取使用。三、知识图谱原理从文本到图3.1 什么是知识图谱知识图谱Knowledge Graph是一种用图结构来表示知识的方式。核心要素三个(实体) —[关系]→ (实体)例如(Warren Buffett) —[管理]→ (Berkshire Hathaway) (Berkshire Hathaway) —[投资]→ (Coca-Cola) (Coca-Cola) —[具有]→ (经济护城河) (Benjamin Graham) —[影响]→ (Warren Buffett)千百个这样的三元组连起来就形成了一张巨大的知识网络。3.2 构建知识图谱的标准流程原始文本 → 文本预处理 → 实体抽取 → 关系抽取 → 图谱构建 → 可视化每一步的技术选型步骤传统方案LLM 方案本文采用文本预处理NLTK 分句 清洗直接按年份切分实体抽取SpaCy NER / BERTDeepSeek / GPT-4o-mini Prompt关系抽取依存句法 规则DeepSeek / GPT-4o-mini Prompt图谱存储Neo4j 图数据库JSON 文件轻量可视化Neo4j Bloom / D3.jsECharts 力导向图关键洞察传统 NLP 流水线需要分词、NER 标注数据、关系分类器等一系列组件。LLM 把这些全部简化成一个 Prompt 调用——给它一段文本告诉它要抽什么格式的实体和关系直接输出 JSON。3.3 实体分类体系本体设计为巴菲特公开信设计了 6 类实体类别说明示例person关键人物Warren Buffett, Charlie Munger, Benjamin Grahamcompany公司/投资标的Berkshire Hathaway, Coca-Cola, Apple, GEICOconcept投资理念/原则价值投资、经济护城河、安全边际、能力圈metric财务指标ROE、每股账面价值、自由现金流industry行业板块保险业、消费品、银行金融、能源event重大事件2008金融危机、互联网泡沫、GEICO收购3.4 关系类型设计定义了 6 种关系类型关系含义示例manage管理/领导Buffett → Berkshire Hathawayinvest投资/持股Berkshire → Coca-Colaacquire收购Berkshire → GEICOinfluence影响/塑造Graham → Buffettpartner合作关系Buffett ↔ Mungermention关联提及Apple → Technology四、LLM 驱动的知识抽取4.1 Prompt 工程实体抽取核心 Prompt 设计如下You are an expert financial analyst specializing in Warren Buffetts investment philosophy. Analyze the following excerpt from Buffetts {year} letter to shareholders and extract ALL important entities. Entity categories: - **person**: Key individuals - **company**: Companies mentioned - **concept**: Investment concepts/principles - **metric**: Financial metrics - **industry**: Industry sectors - **event**: Significant events Return ONLY valid JSON array: [ {name: entity name, category: person|company|..., description: one-line description} ] Text: {text}设计要点角色设定— “专精巴菲特投资哲学的金融分析师”确保 LLM 以专业视角理解文本明确分类— 6 类实体都给了说明和示例输出格式— 要求纯 JSON方便自动解析年份上下文— 告诉 LLM 这是哪一年的信有助于时间相关的实体抽取4.2 Prompt 工程关系抽取Given these entities extracted from Buffetts {year} letter: {entities} And the original text: {text} Extract ALL meaningful relationships between entities. Relationship types: - **invest**: Berkshire/Buffett invested in - **acquire**: Acquired or bought - **manage**: Person manages/leads - **influence**: Concept/person influenced decision - **mention**: Entity mentioned in context of another - **partner**: Business partnership Return ONLY valid JSON array: [ {source: entity name, target: entity name, relation: invest|acquire|..., context: brief quote from text} ]设计要点两阶段抽取— 先抽实体再基于实体抽关系比一步到位更准确引用原文— 要求 LLM 给出context可以追溯关系的来源关系明确— 6 种关系类型覆盖了投资领域的主要语义4.3 长文本处理策略单封公开信可能有 1-3 万字超出 LLM 的有效处理窗口。采用按段落边界分块策略将文本以双换行符分段按最大字符数默认 6000 字符聚合为语义完整的块每块独立调用 LLM 进行抽取。4.4 实体融合与去重不同年份的信中同一实体可能有不同的表述如 “Coke”、“Coca-Cola”、“The Coca-Cola Company”。采用名称标准化 频次累加策略按小写名称合并并记录每个实体出现的年份集合和总频次。4.5 输出的知识图谱 JSON 结构最终输出的knowledge_graph.json结构如下{nodes:[{id:n0,name:Warren Buffett,category:person,description:伯克希尔·哈撒韦董事长兼CEO,years:[1977,1978,...,2024],frequency:480}],edges:[{source:n0,target:n10,relation:manage,weight:48,years:[1977,...,2024],context:I am the Chairman of Berkshire Hathaway}],metadata:{totalLetters:48,yearRange:[1977,2024],totalNodes:61,totalEdges:74}}五、可视化方案ECharts 力导向图可视化方案对比方案优点缺点Neo4j Bloom专业图可视化需要安装数据库D3.js灵活、社区大学习曲线陡PyvisPython 一键出图交互性弱ECharts零依赖、交互强、中文友好节点多时性能一般选择 ECharts 的力导向图Force-directed Graph理由单 HTML 文件无需后端服务CDN 引入无需安装丰富的交互拖拽、缩放、搜索、筛选中文渲染优秀适合中文标注最终的可视化页面实现了以下核心功能节点分类着色— 6 种实体类型对应 6 种颜色一目了然搜索高亮— 输入关键词匹配的节点高亮放大其余灰化分类筛选— 按钮切换只看某一类节点如只看投资理念年份范围— 滑块筛选特定时间段的节点和关系节点详情面板— 点击节点弹出详细信息描述、出现年份、关联实体列表统计看板— 展示节点总数、边总数、时间跨度整体采用暗色科技风#0a0e17 背景力导向图连线在暗背景上可读性更好节点颜色对比度更强。六、Vibe Coding 实践5 轮 Prompt 完成全部开发本项目是一次典型的 Vibe Coding 实践——人负责决策AI 负责实现。以下是实际使用的 Prompt 和交互过程Prompt 1项目规划我要构建巴菲特公开信的知识图谱。包含知识关系用于了解 巴菲特整个生涯投资逻辑可视化给读者投资建议。 需要 1. 一个深度文章介绍从公开信下载、知识图谱搭建原理、 搭建实践、以及 vibe coding 代码提示词 2. 另一篇文章详细展示知识图谱效果需要网页截图 代码放到 testdata/Buffett/Code 下AI 输出了完整的项目计划包括目录结构、技术选型、实施步骤。Prompt 2文本提取脚本编写 extract_text.py从 HTML 和 PDF 格式的巴菲特公开信中 提取纯文本。HTML 用 BeautifulSoupPDF 用 pdfplumber。 输出按年份命名的 txt 文件。AI 生成了完整的extract_text.py包含错误处理、进度条、字符统计。Prompt 3知识图谱构建编写 build_knowledge_graph.py支持两种模式 1. LLM 模式调用 OpenAI API 从文本中抽取实体和关系 2. Mock 模式用预置的高质量数据基于巴菲特公开信真实内容 实体分类person, company, concept, metric, industry, event 关系类型invest, acquire, manage, influence, mention, partner 输出 JSON 格式的知识图谱AI 生成了包含 LLM 调用、Prompt 模板、Mock 数据生成的完整脚本。Prompt 4可视化页面创建 visualization.htmlECharts 力导向图要求 - 暗色科技风 - 节点按类别着色6种颜色 - 搜索高亮 - 分类筛选按钮 - 年份范围滑块 - 点击节点显示详情面板 - 统计看板 - 单文件、CDN 引入、无需后端AI 生成了超过 600 行的完整 HTML包含 CSS 动画、JavaScript 交互逻辑、响应式布局。Prompt 5截图使用 Playwright 对可视化页面进行多角度截图 1. 全局概览 2. 搜索 Coca-Cola 高亮 3. 只看投资理念 4. 只看公司 5. 年份筛选 2008-2020 6. 详情面板展示AI 用 Python Playwright 自动化完成了 6 张截图。Vibe Coding 关键心得原则说明描述意图而非步骤不要说创建一个 div设置 flex 布局而是说创建一个暗色科技风的搜索栏分层迭代先让 AI 搭骨架再逐步优化细节提供上下文告诉 AI 已有的文件结构、技术选型、设计风格验证而非审查不需要逐行看代码运行看效果不对再调保持控制权架构决策选 ECharts 还是 D3由人来做七、项目成果与扩展方向7.1 成果总览项目维度成果数据规模48 封公开信1977-2024 年知识图谱61 个节点74 条边6 类实体6 种关系可视化ECharts 力导向图支持搜索、筛选、时间轴代码量~1200 行Python HTML/CSS/JSVibe Coding5 轮 Prompt 迭代完成全部开发从技术角度这个项目展示了LLM 知识图谱的强大组合LLM 替代了传统 NLP 流水线— 不需要标注数据、不需要训练模型一个 Prompt 搞定实体和关系抽取知识图谱让非结构化文本变成结构化知识— 48 封信浓缩成 61 个节点和 74 条关系Vibe Coding 让开发效率提升 10 倍— 从想法到可运行的可视化系统一个下午完成7.2 扩展方向接入真实 LLM 抽取— 脚本已支持 DeepSeek推荐性价比极高和 OpenAI。接入后预计可抽取 500 个实体和 2000 条关系接入图数据库— 将 JSON 导入 Neo4j支持 Cypher 查询RAG 知识图谱— 结构化知识 向量检索 LLM 生成实现巴菲特投资问答系统时间轴动画— 将年份滑块升级为自动播放动画看巴菲特投资版图的演化从投资角度这张知识图谱浓缩了巴菲特 48 年的投资智慧。如果你只记住一件事那就是巴菲特在这 48 封信中反复强调的核心“以合理价格买入拥有经济护城河的伟大公司然后永远持有它们。”这条主线从 1977 年第一封信到 2024 年最后一封信从未改变。八、获取源码本项目已开源完整代码和数据托管在 GitHubhttps://github.com/warm3snow/buffett-kg.git⚠️注意该仓库目前为私有仓库。如需访问请通过以下方式获取权限关注公众号「coft」在后台留言你的GitHub 账号我会将你添加为 Collaborators当然你也完全可以参考本文介绍的原理和 Prompt用 Vibe Coding 的方式自己从零构建一个效果展示和巴菲特投资知识详解请阅读下一篇巴菲特投资知识图谱效果展示免责声明本文仅为教育目的不构成任何投资建议。金融市场存在极高风险请在充分了解风险后做出自己的判断。关注公众号「coft」获取更多 AI 时代的深度思考。