关于 meGPT - upload an author's content into an LLM
meGPT 是一个用于整理作者公开内容并将其处理为 MCP 服务的代码仓库,目标是构建能以作者口吻回答问题、引用原始来源的 LLM 应用。项目以 virtual_adrianco 为示例,并提供 OKF 知识包处理流程。
主要功能
- 01处理文章、播客、视频和书籍等多类内容
- 02生成带原始来源 URL 的 OKF 文档
- 03MCP 服务提供搜索、文档读取与主题列表
- 04支持 YouTube 视频、播放列表和频道批量处理
- 05提供按类型浏览与主题综合的提示词
适用场景
- 01为某位作者的公开内容构建可引用的问答助手
- 02将播客与视频转录整理为可搜索的知识包
- 03按主题综合某位作者的多年观点
MCP 相关
该项目的 mcp_server_v2.py 将 OKF 文档以 MCP 服务的形式提供,暴露搜索、文档获取、类型浏览、主题列表以及问答和摘要提示词。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
meGPT - 将作者的内容上传到大模型
我在职业生涯中创作并发表了 20 年的公开内容,希望拥有一个经过训练、能够回答问题并总结我的观点,且使用我的“语气”的大模型。目前,我发现有几家公司正在构建人格化 AI,也试用了 soopra.ai。为了推动这一领域的发展与竞争,我已在此仓库中整理了自己的公开内容和来源参考。
我的内容存储在 authors/virtual_adrianco 中,或通过该目录中的链接提供,包括:
- 4 本已出版的书籍(提供了其中两本的 PDF)、约 10 篇书籍序言、约 100 篇博客文章(文本)
- Twitter 2008-2022 年存档(对话文本)
- Mastodon.social - 2021 年至今 https://mastodon.social/@adrianco(RSS 地址为 https://mastodon.social/@adrianco.rss)
- Github 项目(代码)
- 从 https://adrianco.medium.com 提取为文本的博客文章,存放于 authors/virtual_adrianco/medium_posts(附带提取脚本)
- 从 https://perfcap.blogspot.com 提取为文本的博客文章,存放于 authors/virtual_adrianco/blogger_percap_posts(附带提取脚本)
- 约 100 份演示文稿(图片);精选集:https://github.com/adrianco/slides/tree/master/Greatest%20Hits
- 约 20 期播客(音频对话,应当是很好的问答训练材料)
- 135 多个演讲和访谈视频(音频/视频/YouTube 单个视频、播放列表和完整频道)
如果其他作者想以此仓库为起点,请克隆它,并在 authors 下添加自己的内容目录。如果你愿意免费贡献内容,供他人用作训练数据集,请提交 pull request,我会将内容收录于此。code 目录中的脚本用于帮助作者预处理内容,例如从必须由账号所有者下载的 Twitter 或 Medium 存档中提取内容。
知识共享许可协议——署名-相同方式共享。明确允许任何人将其用作训练集,以开发 meGPT 概念。任何作者/演讲者/专家均可免费使用,打造能够像作者本人一样回答问题并引用已发布内容的聊天机器人。我将自己的版本称为 virtual_adrianco,涵盖对云计算、可持续发展、性能工具、微服务、加速创新、Wardley mapping、开源、混沌工程、韧性、Sun Microsystems、Netflix、AWS 等方面的观点。我很乐意分享开发出的任何模型。我不需要将其变现;我已半退休,也已经通过这些内容获得了足够的收益,而且我不再为大型企业工作了。
我不是 Python 程序员
此仓库中的所有代码最初都是由 ChatGPT 4 免费版或 Cursor Claude Sonnet3.7 根据简短提示编写的,期间没有后续编辑,都是我抽空花几分钟完成的。我能读懂 Python,大致理解代码的意思,但并非经验丰富的 Python 程序员。请在相关 issue 中查找 ChatGPT 生成代码时所用聊天对话的公开链接。我转用 Cursor 后,每个文件开头都加入了作为块注释的上下文。这是一种编写简单代码时摩擦极低、轻松简便的方式。开发工作已迁移到 Cursor,因为它管理整个项目上下文的方法好得多。
OKF Bundle Pipeline(新增)
此分支新增了一套完整的 Open Knowledge Format(OKF) 流水线,可将作者的原始内容转换为结构化、可引用的知识包——即原始来源与大模型之间的“wiki 层”。
什么是 OKF?
OKF 文档是带有 YAML 前置元数据的 Markdown 文件。每份文档都包含:
type:内容类型(播客访谈、YouTube 演讲、文章、书籍、主题)title、description:便于阅读的元数据resource:原始来源 URL(确保每个回答都注明来源)tags:可搜索的主题timestamp:发布日期
每份文档的概念 ID 是其文件路径(例如,podcasts/schedulers-with-adrian-cockcroft)。
快速入门
git clone https://github.com/adrianco/megpt.git
cd megpt
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Set your API key for LLM enrichment (Q&A extraction, topic synthesis)
export ANTHROPIC_API_KEY=sk-ant-...
# Build the full OKF bundle for an author
python build_okf.py virtual_adrianco --author-display "Adrian Cockcroft"
# Build specific content types
python build_okf.py virtual_adrianco podcast --whisper-model tiny
python build_okf.py virtual_adrianco youtube
python build_okf.py virtual_adrianco story
# Process local file archives (Medium/Blogger posts)
python batch_local_files.py authors/virtual_adrianco/medium_adrianco okf/virtual_adrianco/posts
python batch_local_files.py authors/virtual_adrianco/blogger_perfcap_posts okf/virtual_adrianco/posts
# Generate synthesized topic pages (requires ANTHROPIC_API_KEY)
python okf_synthesizer.py virtual_adrianco
# Start the MCP server (for Claude Desktop / Cursor integration)
python mcp_server_v2.py virtual_adrianco
OKF 捆绑包内容(virtual_adrianco)
okf/virtual_adrianco/ 中的预构建捆绑包包含 466 份 OKF 文档:
| 类型 | 数量 | 来源 |
|---|---|---|
| YouTube 演讲 | 104 | 通过 yt-dlp 提取字幕(不下载视频) |
| 文章/帖子 | 342 | Medium(64)、Blogger(264)、网页文章(14) |
| 播客访谈 | 20 | Whisper 转录 + Simplecast/Libsyn/SoundCloud 解析 |
| 书籍 | 2 | PDF 提取(选定页面范围) |
流水线架构
published_content_v2.csv → build_okf.py → processors/
├── podcast_processor_v2.py (audio → transcript → OKF)
├── youtube_processor_v2.py (captions → OKF)
├── story_processor_v2.py (HTML/text → OKF)
└── book_processor_v2.py (PDF → OKF)
↓
okf/<author>/
├── podcasts/
├── talks/
├── posts/
├── books/
└── topics/ ← okf_synthesizer.py
↓
mcp_server_v2.py → Claude Desktop / Cursor
内容清单(v2 CSV 格式)
增强版清单格式(published_content_v2.csv)新增了 SlidesURL 和 Tags 列:
Kind,SubKind,What,Where,Published,URL,SlidesURL,Tags
podcast,episode,Scheduling,Software Engineering Daily,2016,https://...,, scheduling,distributed-systems
youtube,,GOTO 2018 Talk,GOTO Conf,2018,https://...,https://slides.pdf,chaos-engineering
book,"1-50,100-150",My Book,Publisher,2024,https://...,, architecture
引用要求
每份 OKF 文档都包含带有原始来源 URL 的 resource 字段,每个播客/演讲都包含 ## Sources 部分。MCP 服务会在所有搜索结果中包含这些引用,确保 LLM 给出的每个回答都能追溯到原始内容。
MCP 服务 v2(原生 OKF)
新的 mcp_server_v2.py 可直接读取 OKF 文档,并提供:
search(query):跨全部 466 份文档进行关键词搜索,并附上来源引用get_document(id):获取任意 OKF 文档的完整内容list_by_type(type):按内容类型浏览get_topics():列出综合整理的交叉链接主题页面answer_question(question):提供带有来源上下文的预构建提示词summarize_topic(topic):基于作者的全部作品生成综合整理提示词
// Claude Desktop config (~/.claude/claude_desktop_config.json)
{
"mcpServers": {
"megpt-adrianco": {
"command": "python",
"args": ["/path/to/megpt/mcp_server_v2.py", "virtual_adrianco"]
}
}
}
YouTube 处理
YouTube 处理器已增强,可自动处理多种类型的 YouTube 内容:
支持的 YouTube URL 类型
- 单个视频:
https://www.youtube.com/watch?v=VIDEO_ID - 播放列表:
https://www.youtube.com/playlist?list=PLAYLIST_ID - 整个频道:
https://www.youtube.com/@username/videos或https://www.youtube.com/c/channelname/videos
处理功能
- 自动检测:处理器会自动检测 URL 指向单个视频、播放列表还是频道
- 批量处理:频道和播放列表会自动展开为单个视频条目
- 同意页面处理:自动处理 YouTube 的“继续之前”同意页面
- 稳健提取:提供多种备用方法来提取视频元数据和 ID
- MCP 兼容性:所有视频都会保存为单独的 MCP 兼容 JSON 文件
YouTube 下载
YouTube 采用了严格的机器人检测措施,因此自动下载可能颇具挑战。该脚本会尝试多种方法处理 YouTube 内容:
- 首先,尝试直接从网页 HTML 中提取视频元数据
- 对于同意页面,会自动提交同意表单
- 使用多种正则表达式模式在网页源代码中查找视频 ID
- 如果标准方法失败,则回退到其他提取方法
- 如果无法提取单个视频,则为频道创建占位条目
尽管采取了这些措施,YouTube 的机器人检测仍然十分先进,部分内容可能依然无法自动处理。在这种情况下,处理器会创建引用原始 URL 的占位条目。
为获得最佳效果,可以尝试:
- 使用其他网络(某些 IP 地址更容易触发机器人检测)
- 使用 VPN
- 通过移动网络处理(通常限制较少)
- 在非高峰时段处理,此时 YouTube 系统的限制较少
示例用法
现在,您可以在 published_content.csv 中加入以下任意类型的 YouTube URL:
Kind,SubKind,What,Where,Published,URL
youtube,,Individual Tech Talk,Conference Name,2024,https://www.youtube.com/watch?v=VIDEO_ID
youtube,,My Tech Talks Playlist,Various Conferences,2024,https://www.youtube.com/playlist?list=PLAYLIST_ID
youtube,,My Complete YouTube Channel,Personal Channel,2024,https://www.youtube.com/@username/videos
处理器会自动展开播放列表和频道,将其拆分为单个视频条目,使所有内容都可通过 MCP 服务搜索和访问。
增强内容处理
内容处理系统已大幅增强,可处理复杂的内容结构和归档:
文件类型处理
系统现在支持 CSV 中指向含有多个内容文件的目录的「file」类型条目:
Kind,SubKind,What,Where,Published,URL
file,,Lots of blog post text extracted from medium archive,Medium Archive,2025,./authors/virtual_adrianco/medium_adrianco/
file,,Lots of blog post text extracted from blogger archive,Blogger Archive,2014,./authors/virtual_adrianco/blogger_perfcap_posts/
支持的归档格式
- Medium 归档:自动检测
[URL] https://...格式并提取单篇文章 - Blogger 归档:处理
Title: ...\nURL: https://...格式以提取文章 - 通用文本文件:处理任何文本文件,并支持提取 URL
处理功能
- 自动提取 URL:查找文本文件中各种格式的 URL
- 内容分类:分配适当的子类型(medium_post、blogger_post 等)
- 生成摘要:自动为内容较丰富的条目创建摘要
- 去重:防止重复处理相同内容
- 错误处理:通过全面的日志记录实现稳健处理
支持的内容类型
- YouTube:单个视频、播放列表、整个频道(135 项)
- 播客:带有文字稿和摘要的单集(52 项)
- 书籍:提取了文本并生成摘要的 PDF(10 项)
- 故事:带可选附件的叙事内容(18 项)
- 文件:博客归档、演示文稿、文档(394 项)
- InfoQ 视频:技术演讲(2 项)
总计:已处理 611 项内容,可通过 MCP 服务访问。
MCP 服务集成
此代码库现已包含一套全面的模型上下文协议(MCP)服务,可让 AI 应用访问内容集合。MCP 服务会将处理后的内容转化为 AI 可访问的知识库。
当前内容统计(virtual_adrianco)
- 总条目数:611 项内容
- YouTube 视频:135 个(单个视频、播放列表、频道)
- 文件归档:394 项(Medium 文章、Blogger 文章、演示文稿)
- 播客单集:52 集(带有文字稿和摘要)
- 故事:18 篇(叙事内容)
- 书籍:10 本(提取了文本并生成摘要的 PDF)
- InfoQ 视频:2 个(技术演讲)
MCP 服务功能
- 内容搜索:跨标题、标签和来源进行语义搜索
- 内容筛选:按类型、标签和元数据筛选
- 分析:集合统计和内容分析
- AI 集成:兼容 Claude Desktop、Cursor、自定义 AI Agent
- 多种传输方式:支持 STDIO、HTTP 和 SSE
用法
# Start MCP server (default STDIO mode for Claude Desktop)
python mcp_server.py --author virtual_adrianco
# Start HTTP server for web applications
python mcp_server.py --author virtual_adrianco --transport streamable-http --port 8080
# Generate MCP resources for any author
python create_mcp.py virtual_adrianco
有关详细的测试和集成示例,请参阅 mcp_testing/ 目录。
构建作者内容
要使用此代码库,请将其克隆到本地磁盘,配置 Python 环境,然后运行某位作者的 build.py 脚本。脚本会遍历该作者的已发布内容表,并依次处理每一行。构建脚本会创建 downloads/ 目录,并在其中创建 state.json 文件,用于记录已成功完成的处理步骤,因此增量运行 build.py 时不会重复下载相同内容。每种数据类型都需要在 processors 目录中有对应的脚本。
git clone https://github.com/adrianco/megpt.git
cd megpt
python3 -m venv venv
Windows:
venv\Scripts\activate
macOS/Linux:
source venv/bin/activate
pip install -r requirements.txt
如果在开发过程中安装了其他软件包,请通过以下命令重新生成 requirements:
pip freeze > requirements.txt
运行构建脚本
Usage: build.py <author>
python build.py virtual_adrianco
用于测试时,可从任意 URL 处理单一数据类型,并将结果输出到 downloads,而不更新 state.json 文件
Usage: python process.py <author> <Kind> <SubKind> <URL>
创建基于 RAG 的 LLM 人设
查看此演示文稿,了解如何让 RAG 更好地运行:https://github.com/datastaxdevs/conference-2024-devoxx/ 查看此问题:https://github.com/adrianco/meGPT/issues/11,了解我使用 soopra.ai 进行的实验——目前使用此内容的一个子集进行了训练,可在 https://app.soopra.ai/Cockcroft/chat 试用。
当前功能状态
Build.py 和 process.py 似乎运行正常。 book_processor.py 可以正确下载书籍的 PDF 文件,并提取页码范围,以便选出相关章节或区分不同作者的内容。 每篇故事都需要定制提取流程;已添加 The New Stack(thenewstack.io)对应的正确 div 名称作为 Subkind,并且针对 story 类型内容的文本下载正常。 Medium 博客下载内容会从作者可申请获取的存档中处理,并保存为作者 medium_posts 目录中的文本文件。 Blogger.com 存档会处理为文本文件,其中包含原始故事的 URL。 Twitter 存档会经过处理,提取其中的对话,并忽略不属于包含多条推文的对话的任何内容。我使用的存档是在 Twitter 更名为 X 之前保存的。
备注
我一直在整理自己的内容,会不时更新引用表和 Medium 下载内容:https://github.com/adrianco/meGPT/blob/main/authors/virtual_adrianco/published_content.csv
YouTube 视频带有转录文本,其中包含指向视频本身的索引偏移量,但转录质量不佳,而且只有视频所有者才能通过 API 读取这些内容。更简单的做法是使用 pytube 下载视频,再用 whisper 处理,以生成整理得更好的转录文本;如果有多位发言者,还可以标明作者何时发言。
Twitter 存档——原始存档文件超过 100MB,太大,无法上传到 GitHub。我们使用 extract_conversations 脚本只提取属于对话的推文,以便进一步分析并找出问题和答案。这段代码由 ChatGPT 编写,一次就运行成功;但如果输出有任何问题,我很乐意分享原始推文。请提交一个问题。
Mastodon 存档——可通过 RSS 源获取。
Medium 博客平台——可通过 RSS 源获取最近十篇帖子。存档下载内容由 code/medium_posts.py 处理,用于提取公开帖子的文本,并忽略草稿。
已创建问题,用于跟踪摄取处理代码的开发。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。