综合介绍
OneFileLLM 是一个开源命令行工具,旨在将多种数据源整合成单一文本文件,方便输入大语言模型(LLM)。它支持处理 GitHub 仓库、ArXiv 论文、YouTube 视频转录、网页内容、Sci-Hub 论文和本地文件,自动生成结构化文本并复制到剪贴板。开发者 Jim McMillan 设计此工具以简化 LLM 提示创建,减少手动整理数据的繁琐工作。工具使用 Python 开发,支持多种文件格式、文本预处理和 XML 封装,适合开发者、研究人员和内容创作者使用。安装简单,配置灵活,可通过命令行或网页界面操作。
功能列表
- 自动检测输入类型(如 GitHub 仓库、YouTube 链接、ArXiv 论文、本地文件等)。
- 支持处理 GitHub 仓库、拉取请求(Pull Request)、问题(Issue),整合为单一文本。
- 提取 ArXiv 和 Sci-Hub 论文 PDF 内容并转为文本。
- 获取 YouTube 视频转录文本。
- 抓取网页内容,支持指定深度爬取链接。
- 处理多种文件格式,包括
.py
、.ipynb
、.txt
、.md
、.pdf
、.csv
等。 - 提供文本预处理,如去除停用词、标点、转换为小写。
- 支持文件和目录排除,过滤自动生成文件(如
*.pb.go
)或测试目录。 - 报告压缩和未压缩文本的令牌数,优化 LLM 上下文管理。
- 输出文本封装为 XML 格式,提升 LLM 处理效率。
- 自动复制未压缩文本到剪贴板,方便粘贴到 LLM 平台。
- 提供 Flask 网页界面,简化 URL 或路径输入。
使用帮助
安装流程
OneFileLLM 需要 Python 环境和相关依赖。以下是详细安装步骤:
- 克隆仓库
在终端运行以下命令克隆 OneFileLLM 仓库:git clone https://github.com/jimmc414/onefilellm.git cd onefilellm
- 创建虚拟环境(推荐)
为避免依赖冲突,建议创建虚拟环境:python -m venv .venv source .venv/bin/activate # Windows 使用 .venv\Scripts\activate
- 安装依赖
安装requirements.txt
中列出的依赖:pip install -U -r requirements.txt
依赖包括
PyPDF2
(PDF 处理)、BeautifulSoup
(网页抓取)、tiktoken
(令牌计数)、pyperclip
(剪贴板操作)、youtube-transcript-api
(YouTube 转录)等。 - 配置 GitHub 访问令牌(可选)
若需访问私有 GitHub 仓库,需设置个人访问令牌:- 登录 GitHub,进入“设置 > 开发者设置 > 个人访问令牌”。
- 生成新令牌,选择
repo
(私有仓库)或public_repo
(公开仓库)权限。 - 将令牌设为环境变量:
export GITHUB_TOKEN=<your-token> # Windows 使用 set GITHUB_TOKEN=<your-token>
- 验证安装
运行以下命令检查是否安装成功:python onefilellm.py --help
若显示帮助信息,说明安装正确。
运行方式
OneFileLLM 支持命令行和网页界面两种操作方式:
- 命令行模式
运行主脚本并手动输入 URL 或路径:python onefilellm.py
或直接在命令行指定 URL/路径:
python onefilellm.py https://github.com/jimmc414/onefilellm
- 网页界面模式
运行 Flask 网页界面:python onefilellm.py --web
打开浏览器,访问
http://localhost:5000
,输入 URL 或路径,点击“处理”获取输出。
主要功能操作
OneFileLLM 的核心是将多种数据源整合为单一文本,输出为 uncompressed_output.txt
(未压缩)、compressed_output.txt
(压缩)和 processed_urls.txt
(爬取 URL 列表)。以下是主要功能的使用方法:
- 处理 GitHub 仓库
输入仓库 URL(如https://github.com/jimmc414/onefilellm
),工具递归获取支持的文件类型(如.py
、.md
),整合为单一文本。
示例:python onefilellm.py Enter URL or path: https://github.com/jimmc414/onefilellm
输出文件包含仓库文件内容,XML 封装格式如下:
<source type="github_repository"> <content> [文件内容] </content> </source>
文本自动复制到剪贴板。
- 处理 GitHub 拉取请求或问题
输入拉取请求(如https://github.com/dear-github/dear-github/pull/102
)或问题 URL(如https://github.com/isaacs/github/issues/1191
),工具提取差异详情、评论和整个仓库内容。
示例输出包括代码变更、评论和相关文件,封装为:<source type="github_pull_request"> <content> [差异详情和评论] </content> </source>
- 提取 ArXiv 或 Sci-Hub 论文
输入 ArXiv URL(如https://arxiv.org/abs/2401.14295
)或 Sci-Hub DOI/PMID(如10.1053/j.ajkd.2017.08.002
或29203127
),工具将 PDF 转为文本。
示例:Enter URL or path: https://arxiv.org/abs/2401.14295
输出为 XML 封装的论文文本:
<source type="arxiv_paper"> <content> [论文内容] </content> </source>
- 获取 YouTube 转录
输入 YouTube 视频 URL(如https://www.youtube.com/watch?v=KZ_NlnmPQYk
),工具提取转录文本。
示例:Enter URL or path: https://www.youtube.com/watch?v=KZ_NlnmPQYk
输出为:
<source type="youtube_transcript"> <content> [转录内容] </content> </source>
- 网页抓取
输入网页 URL(如https://llm.datasette.io/en/stable/
),工具抓取页面及指定深度链接(默认max_depth=2
)。
示例:Enter URL or path: https://llm.datasette.io/en/stable/
输出为分段网页文本,封装为:
<source type="web_documentation"> <content> [网页内容] </content> </source>
- 处理本地文件或目录
输入本地文件路径(如C:\documents\report.pdf
)或目录(如C:\projects\research
),工具提取内容或整合目录中支持的文件类型。
示例:Enter URL or path: C:\projects\research
输出为 XML 封装的目录内容。
特色功能操作
- XML 输出封装
所有输出采用 XML 格式,结构清晰,提升 LLM 处理效率。格式如:<source type="[source_type]"> <content> [内容] </content> </source>
其中
source_type
包括github_repository
、arxiv_paper
等。 - 文件和目录排除
支持排除特定文件(如*.pb.go
)和目录(如tests
)。修改onefilellm.py
中的excluded_patterns
和EXCLUDED_DIRS
列表:excluded_patterns = ['*.pb.go', '*_test.go'] EXCLUDED_DIRS = ['tests', 'mocks']
这减少无关内容,优化令牌使用。
- 令牌计数
使用tiktoken
计算压缩和未压缩文本的令牌数,显示在控制台:Uncompressed token count: 1234 Compressed token count: 567
帮助用户确保文本适合 LLM 上下文窗口。
- 文本预处理
工具自动去除停用词、标点,转换为小写,生成压缩输出。用户可修改preprocess_text
函数自定义处理逻辑。 - 剪贴板集成
未压缩输出自动复制到剪贴板,直接粘贴到 LLM 平台(如 ChatGPT、Claude)。 - 网页界面
Flask 界面简化操作,用户输入 URL 或路径,下载输出文件或复制文本。适合非技术用户。
自定义配置
- 文件类型
修改allowed_extensions
列表,添加或删除支持的文件类型:allowed_extensions = ['.py', '.txt', '.md', '.ipynb', '.csv']
- 网页爬取深度
修改max_depth
参数,默认值为 2:max_depth = 2
- Sci-Hub 域名
若 Sci-Hub 域名不可用,修改onefilellm.py
中的 Sci-Hub URL。
注意事项
- 确保网络连接稳定,YouTube 转录和 Sci-Hub 访问依赖外部 API。
- 大型仓库或网页可能生成较大输出,建议检查令牌数并调整排除规则。
- Sci-Hub 访问可能因地区限制需更换域名。
- 部分文件格式(如加密 PDF)可能无法正确处理。
应用场景
- 代码审查
开发者输入 GitHub 仓库或拉取请求 URL,生成包含代码和评论的文本,输入 LLM 分析代码质量或优化建议。 - 论文总结
研究人员输入 ArXiv 或 Sci-Hub 论文 URL,提取文本后输入 LLM 生成摘要或回答研究问题。 - 视频内容整理
内容创作者输入 YouTube 视频 URL,获取转录文本,输入 LLM 提取要点或生成脚本。 - 文档整合
技术写作者输入网页或本地目录路径,整合文档内容,输入 LLM 改写或生成报告。
QA
- OneFileLLM 支持哪些文件格式?
支持.py
、.ipynb
、.txt
、.md
、.pdf
、.csv
等,可通过修改allowed_extensions
自定义。 - 如何访问私有 GitHub 仓库?
设置 GitHub 个人访问令牌为环境变量GITHUB_TOKEN
,需repo
权限。 - 如何减少输出文本大小?
修改excluded_patterns
和EXCLUDED_DIRS
排除无关文件,调整max_depth
限制网页爬取深度。 - XML 输出有什么优势?
XML 结构清晰,标记内容来源和类型,提升 LLM 对复杂输入的理解和处理能力。 - Sci-Hub 论文无法下载怎么办?
检查网络连接,确认 DOI/PMID 正确,或更新onefilellm.py
中的 Sci-Hub 域名。