README
🚀 Lenny RAG MCP 服务器
Lenny RAG MCP 服务器是一个基于 299 篇 Lenny Rachitsky 播客文字稿提供分层检索增强生成(RAG)功能的 MCP 服务器。它能够通过检索相关见解、真实案例和完整文字稿上下文,助力产品开发头脑风暴。
🚀 快速开始
克隆仓库
# 克隆仓库(包含通过 Git LFS 预构建的索引)
git clone git@github.com:mpnikhil/lenny-rag-mcp.git
cd lenny-rag-mcp
创建并激活虚拟环境
# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate
安装包
# 安装包
pip install -e .
Claude 代码配置
claude mcp add lenny --scope user -- /path/to/lenny-rag-mcp/venv/bin/python -m src.server
或者添加到 ~/.claude.json:
{
"mcpServers": {
"lenny": {
"type": "stdio",
"command": "/path/to/lenny-rag-mcp/venv/bin/python",
"args": ["-m", "src.server"],
"cwd": "/path/to/lenny-rag-mcp"
}
}
}
Claude 桌面端配置
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"lenny": {
"command": "/path/to/lenny-rag-mcp/venv/bin/python",
"args": ["-m", "src.server"],
"cwd": "/path/to/lenny-rag-mcp"
}
}
}
Cursor 配置
添加到项目中的 .cursor/mcp.json 或全局的 ~/.cursor/mcp.json:
{
"mcpServers": {
"lenny": {
"command": "/path/to/lenny-rag-mcp/venv/bin/python",
"args": ["-m", "src.server"],
"cwd": "/path/to/lenny-rag-mcp"
}
}
}
⚠️ 重要提示
请在所有配置中,将
/path/to/lenny-rag-mcp替换为你实际克隆仓库的路径。
✨ 主要特性
search_lenny
对整个语料库进行语义搜索,返回用于渐进式展示的指针。
| 参数 | 类型 | 描述 |
|------|------|------|
| query | 字符串 | 搜索查询(例如:"B2B 产品定价"、"创始人模式") |
| top_k | 整数 | 结果数量(默认:5,最大:20) |
| type_filter | 字符串 | 按类型过滤:insight(见解)、example(示例)、topic(主题)、episode(剧集) |
返回结果:包含相关性得分、剧集引用和主题 ID 的排名结果,便于深入查询。
get_chapter
加载具有完整上下文的特定主题。在使用 search_lenny 后使用此工具获取详细信息。
| 参数 | 类型 | 描述 |
|------|------|------|
| episode | 字符串 | 剧集文件名(例如:"Brian Chesky.txt") |
| topic_id | 字符串 | 主题 ID(例如:"topic_3") |
返回结果:主题摘要、所有见解、所有示例和原始文字稿片段。
get_full_transcript
加载带有元数据的完整剧集文字稿。
| 参数 | 类型 | 描述 |
|------|------|------|
| episode | 字符串 | 剧集文件名(例如:"Brian Chesky.txt") |
返回结果:完整文字稿(10 - 40K 个标记)、剧集元数据和主题列表。
list_episodes
浏览可用剧集,可选择按专业领域进行过滤。
| 参数 | 类型 | 描述 |
|------|------|------|
| expertise_filter | 字符串 | 按标签过滤(例如:"增长"、"定价"、"人工智能") |
返回结果:包含 299 个剧集的列表,其中包含嘉宾姓名和专业领域标签。
📦 安装指南
克隆仓库
git clone git@github.com:mpnikhil/lenny-rag-mcp.git
cd lenny-rag-mcp
创建并激活虚拟环境
python -m venv venv
source venv/bin/activate
安装包
pip install -e .
💻 使用示例
基础用法
# 克隆仓库
git clone git@github.com:mpnikhil/lenny-rag-mcp.git
cd lenny-rag-mcp
# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate
# 安装包
pip install -e .
高级用法
# 使用 Claude 代码配置
claude mcp add lenny --scope user -- /path/to/lenny-rag-mcp/venv/bin/python -m src.server
📚 详细文档
数据整理方法
分层提取
每个文字稿被处理成一个 4 级层次结构,支持渐进式展示:
Episode
├── Topics (10 - 20 per episode)
│ ├── Insights (2 - 4 per topic)
│ └── Examples (1 - 3 per topic)
这使得 Claude 可以从轻量级搜索结果开始,仅在需要时深入查询,从而有效利用上下文窗口。
提取模式
{
"episode": {
"guest": "Guest Name",
"expertise_tags": ["growth", "pricing", "leadership"],
"summary": "150 - 200 word episode summary",
"key_frameworks": ["Framework 1", "Framework 2"]
},
"topics": [{
"id": "topic_1",
"title": "Searchable topic title",
"summary": "Topic summary",
"line_start": 1,
"line_end": 150
}],
"insights": [{
"id": "insight_1",
"text": "Actionable insight or contrarian take",
"context": "Additional context",
"topic_id": "topic_1",
"line_start": 45,
"line_end": 52
}],
"examples": [{
"id": "example_1",
"explicit_text": "The story as told in the transcript",
"inferred_identity": "Airbnb",
"confidence": "high",
"tags": ["marketplace", "growth", "launch strategy"],
"lesson": "Specific lesson from this example",
"topic_id": "topic_1",
"line_start": 60,
"line_end": 85
}]
}
隐式锚点检测
许多嘉宾在提及公司时并未明确说出公司名称(例如:“在我之前的公司……”)。提取提示会指导模型根据嘉宾的背景推断公司身份:
- 当 Brian Chesky 说“当我们开始时” → Airbnb(高置信度)
- 一位市场专家说“一家拼车公司” → 可能是优步/来福车(中等置信度) 这使得能够发现仅通过关键词搜索无法找到的示例。
质量阈值
每个文字稿提取都会根据最低阈值进行验证: | 元素 | 最低数量 | 典型数量 | |------|---------|---------| | 主题 | 10 | 15 - 20 | | 见解 | 15 | 25 - 35 | | 示例 | 10 | 18 - 25 | 低于阈值的提取会触发警告,需要人工审核。
模型与技术栈
| 组件 | 模型/工具 | 用途 | |------|----------|------| | 预处理 | Claude Haiku(通过 Claude CLI) | 从文字稿中提取结构化层次结构 | | 嵌入 | bge-small-en-v1.5 | 用于搜索的语义相似度计算 | | 向量数据库 | ChromaDB | 持久化向量存储 | | MCP 框架 | mcp(Python SDK) | 为 Claude 提供工具接口 |
为什么选择 Claude Haiku 进行预处理?
- 质量:Haiku 能够可靠地遵循复杂的提取提示。
- 成本:每个文字稿约 $0.02 - 0.03(299 个剧集总计约 $6 - 9)。
- 速度:每个文字稿约 30 秒。
为什么选择 bge-small-en-v1.5 进行嵌入?
- 性能:在其规模下具有顶级的检索质量。
- 效率:384 维,推理速度快。
- 本地化:完全在 CPU 上运行,无需调用 API。
语料库统计
| 指标 | 数量 | |------|------| | 剧集 | 299 | | 主题 | 6,183 | | 见解 | 8,840 | | 示例 | 6,502 | | 平均每个剧集的主题数 | 20.7 | | 平均每个剧集的见解数 | 29.6 | | 平均每个剧集的示例数 | 21.7 |
重建索引
仓库中包含一个预构建的 ChromaDB 索引。若要从头开始重建:
重新处理文字稿(需要 Claude CLI)
# 处理所有未处理的文字稿
python scripts/preprocess_haiku.py
# 处理特定文件
python scripts/preprocess_haiku.py --file "Brian Chesky.txt"
# 并行处理(4 批,每批 50 个)
python scripts/preprocess_haiku.py --limit 50 --offset 0 &
python scripts/preprocess_haiku.py --limit 50 --offset 50 &
python scripts/preprocess_haiku.py --limit 50 --offset 100 &
python scripts/preprocess_haiku.py --limit 50 --offset 150 &
重建嵌入
# 增量式(仅处理新文件)
python scripts/embed.py
# 完全重建
python scripts/embed.py --rebuild
项目结构
lenny-rag-mcp/
├── transcripts/ # 299 个原始 .txt 播客文字稿
├── preprocessed/ # 提取的 JSON 层次结构(每个剧集一个)
├── chroma_db/ # 向量嵌入(Git LFS)
├── prompts/
│ └── extraction.md # Haiku 提取提示
├── src/
│ ├── server.py # MCP 服务器和工具定义
│ ├── retrieval.py # LennyRetriever 类(ChromaDB 包装器)
│ └── utils.py # 文件加载实用工具
├── scripts/
│ ├── preprocess_haiku.py # Claude CLI 预处理
│ └── embed.py # ChromaDB 嵌入管道
└── pyproject.toml
📄 许可证
本项目采用 MIT 许可证。
微信扫一扫