我有20年的公开内容,在我的职业生涯中已经生产和展示过,我希望有一个LLM能够训练来回答问题并生成我对这些内容的意见摘要,并以我的“声音”来表达。目前,我已经找到了几家正在构建人物模型的公司,并尝试了soopra.ai。为了鼓励在这个领域的开发和竞争,我已经在我的仓库中整理了我的公开内容和参考资料。
我的内容存储或链接在authors/virtual_adrianco中,包括:
如果其他作者希望使用此仓库作为起点,请克隆它并在authors目录下添加自己的内容目录。如果您愿意免费贡献内容供他人用作训练数据集,请发送一个拉取请求,我会将其包含在这里。代码目录中的脚本旨在帮助通过提取Twitter或Medium档案来预处理作者的内容,这些档案需要账户所有者下载。
知识共享 - 归属相同方式分享。明确允许任何人使用此作为训练集来开发meGPT概念。任何作者/演讲者/专家都可以自由使用,结果是一个可以像作者一样回答问题的聊天机器人,参考已发布的文章。我自己构建的虚拟adrianco版本包含了对云计算、可持续性、性能工具、微服务、加速创新、Wardley映射、开源、混沌工程、韧性、Sun Microsystems、Netflix、AWS等主题的意见。我很乐意分享任何开发出的模型。我不需要通过这个赚钱,我已经半退休了,并且已经很好地实现了内容的货币化,我现在也不再为大公司工作了。
此仓库中的所有代码最初是由免费版的ChatGPT 4或Cursor Claude Sonnet3.7基于简短提示编写而成,没有后续编辑,在这里那里几分钟的时间内完成。我可以阅读Python并且大部分都能理解,但我不是一个经验丰富的Python程序员。请参见相关问题中的公共链接,该链接指向由ChatGPT生成代码的聊天线程。当我转向Cursor时,每个文件开头都会包含上下文作为块注释。这是一种极其低摩擦且简单的方式来编写简单的代码。开发迁移到Cursor是因为它对整个项目的上下文管理有更好的方法。
YouTube处理器已增强,可以自动处理多种类型的YouTube内容:
https://www.youtube.com/watch?v=VIDEO_IDhttps://www.youtube.com/playlist?list=PLAYLIST_IDhttps://www.youtube.com/@username/videos 或 https://www.youtube.com/c/channelname/videosYouTube有严格的机器人检测措施,这可能会使自动下载变得困难。脚本尝试多种方法来处理YouTube内容:
尽管采取了这些措施,YouTube的机器人检测仍然很复杂,某些内容可能仍无法自动处理。在这种情况下,处理器将创建引用原始URL的占位符条目。
为了获得最佳效果,您可以尝试:
在您的published_content.csv中,现在可以包含以下任何一种YouTube URL类型:
Kind,SubKind,What,Where,Published,URL
youtube,,技术讲座,会议名称,2024,https://www.youtube.com/watch?v=VIDEO_ID
youtube,,我的技术讲座播放列表,各种会议,2024,https://www.youtube.com/playlist?list=PLAYLIST_ID
youtube,,我的完整YouTube频道,个人频道,2024,https://www.youtube.com/@username/videos
处理器将自动扩展播放列表和频道为单独的视频条目,使得所有内容均可通过MCP服务器搜索和访问。
内容处理系统已显著增强,以处理复杂的结构和存档:
系统现在支持CSV中的“文件”类型条目,指向包含多个内容文件的目录:
Kind,SubKind,What,Where,Published,URL
file,,从Medium存档提取的大量博客文章文本,Medium存档,2025,./authors/virtual_adrianco/medium_adrianco/
file,,从Blogger存档提取的大量博客文章文本,Blogger存档,2014,./authors/virtual_adrianco/blogger_perfcap_posts/
[URL] https://...格式并提取单独的文章Title: ...\nURL: https://...格式的文章提取总计:611项内容已处理并通过MCP服务器访问。
此仓库现在包括一个全面的模型上下文协议(MCP)服务器,使内容集合可供AI应用程序访问。MCP服务器将处理过的转换为AI可访问的知识库。
# 启动MCP服务器(默认STDIO模式用于Claude Desktop)
python mcp_server.py --author virtual_adrianco
# 启动HTTP服务器用于Web应用
python mcp_server.py --author virtual_adrianco --transport streamable-http --port 8080
# 为任何作者生成MCP资源
python create_mcp.py virtual_adrianco
详细测试和集成示例,请参阅mcp_testing/目录。
要使用此仓库,请将其克隆到本地磁盘,设置Python环境,运行build.py脚本以处理作者的发布内容表,逐行处理。构建脚本将在downloads/<author>目录中创建一个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.txt:
pip freeze > requirements.txt
运行构建脚本
用法:build.py <author>
python build.py virtual_adrianco
为了测试目的,处理来自任意URL的单一类型数据,输出到downloads而不更新state.json文件
用法:python process.py <author> <Kind> <SubKind> <URL>
请参阅此演示了解如何让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名称已被添加为子类型,故事类型的内容的正确文本内容下载正在工作。 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处理,提取公共帖子的文本,忽略草稿。
已创建问题以跟踪摄入处理代码的开发。