AI个人学习
和实操指南
讯飞绘镜

OneFileLLM:整合多种数据源为单一文本文件

综合介绍

OneFileLLM 是一个开源命令行工具,旨在将多种数据源整合成单一文本文件,方便输入大语言模型(LLM)。它支持处理 GitHub 仓库、ArXiv 论文、YouTube 视频转录、网页内容、Sci-Hub 论文和本地文件,自动生成结构化文本并复制到剪贴板。开发者 Jim McMillan 设计此工具以简化 LLM 提示创建,减少手动整理数据的繁琐工作。工具使用 Python 开发,支持多种文件格式、文本预处理和 XML 封装,适合开发者、研究人员和内容创作者使用。安装简单,配置灵活,可通过命令行或网页界面操作。

OneFileLLM:整合多种数据源为单一文本文件-1


 

功能列表

  • 自动检测输入类型(如 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 环境和相关依赖。以下是详细安装步骤:

  1. 克隆仓库
    在终端运行以下命令克隆 OneFileLLM 仓库:

    git clone https://github.com/jimmc414/onefilellm.git
    cd onefilellm
    
  2. 创建虚拟环境(推荐)
    为避免依赖冲突,建议创建虚拟环境:

    python -m venv .venv
    source .venv/bin/activate  # Windows 使用 .venv\Scripts\activate
    
  3. 安装依赖
    安装 requirements.txt 中列出的依赖:

    pip install -U -r requirements.txt
    

    依赖包括 PyPDF2(PDF 处理)、BeautifulSoup(网页抓取)、tiktoken(令牌计数)、pyperclip(剪贴板操作)、youtube-transcript-api(YouTube 转录)等。

  4. 配置 GitHub 访问令牌(可选)
    若需访问私有 GitHub 仓库,需设置个人访问令牌:

    • 登录 GitHub,进入“设置 > 开发者设置 > 个人访问令牌”。
    • 生成新令牌,选择 repo(私有仓库)或 public_repo(公开仓库)权限。
    • 将令牌设为环境变量:
      export GITHUB_TOKEN=<your-token>  # Windows 使用 set GITHUB_TOKEN=<your-token>
      
  5. 验证安装
    运行以下命令检查是否安装成功:

    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_repositoryarxiv_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)可能无法正确处理。

 

应用场景

  1. 代码审查
    开发者输入 GitHub 仓库或拉取请求 URL,生成包含代码和评论的文本,输入 LLM 分析代码质量或优化建议。
  2. 论文总结
    研究人员输入 ArXiv 或 Sci-Hub 论文 URL,提取文本后输入 LLM 生成摘要或回答研究问题。
  3. 视频内容整理
    内容创作者输入 YouTube 视频 URL,获取转录文本,输入 LLM 提取要点或生成脚本。
  4. 文档整合
    技术写作者输入网页或本地目录路径,整合文档内容,输入 LLM 改写或生成报告。

 

QA

  1. OneFileLLM 支持哪些文件格式?
    支持 .py.ipynb.txt.md.pdf.csv 等,可通过修改 allowed_extensions 自定义。
  2. 如何访问私有 GitHub 仓库?
    设置 GitHub 个人访问令牌为环境变量 GITHUB_TOKEN,需 repo 权限。
  3. 如何减少输出文本大小?
    修改 excluded_patterns 和 EXCLUDED_DIRS 排除无关文件,调整 max_depth 限制网页爬取深度。
  4. XML 输出有什么优势?
    XML 结构清晰,标记内容来源和类型,提升 LLM 对复杂输入的理解和处理能力。
  5. Sci-Hub 论文无法下载怎么办?
    检查网络连接,确认 DOI/PMID 正确,或更新 onefilellm.py 中的 Sci-Hub 域名。
未经允许不得转载:首席AI分享圈 » OneFileLLM:整合多种数据源为单一文本文件
zh_CN简体中文