惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
U
Unit 42
V
Visual Studio Blog
D
DataBreaches.Net
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
Y
Y Combinator Blog
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
D
Docker
G
Google Developers Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
S
SegmentFault 最新的问题

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
从文档管理到可对话知识库:个人知识库最佳实践方案
oser · 2025-12-23 · via V2EX

1. RAG 个人知识库和文档管理

  • 很多人都会遇到以下的问题:

    • 个人的技术资料和工作上累积的文档越来越多

    • PDF 、图片、文档散落在各个目录

    • 想找一份资料时只能靠文件名或全文搜索

    • 知道“某份文档里有答案”,但找不到在哪

一般来说,有大量资料和技术文档的资产的管理,要么放本地要么丢同步盘,可持久化好一些的解决方案就是部署文档管理系统管理(如 paperless-ngx 等).

1.png

那么当文档越来越多的情况下,自己已经几乎完全忘记文档内容时,如何查询和检索便成为了一个新的挑战.

随着现在大语言模型的发展,一个新的解决方向变得可行:

让电脑“读懂”你的文档,并且可以直接用自然语言提问

这就是 RAG 知识库,目前这类方案中,anythingllm 算是在强大和简单易用性中平衡的最好的产品了,而且最重要的是,部署简单和免费.

但 anythingllm 目前专注于 RAG 方向,对于原始文档的管理查找的功能有缺失,当我想在 anythingllm 中查看和管理原文档时,发现几乎难以实现,那么今天我这里探索总结的一个方案就是:

查看管理原始文档资产,并且同时同步成 AI 时代可对话、可推理的知识库

这篇文章,就是我最终探索出来的一套结合文档管理和 RAG 知识库优点个人知识库部署实践.可以方便的在 Linux 的个人服务器或者 NAS 上运行和部署.

2. 我选择了哪些组件

Paperless-ngx:文档资产管理

选择 Paperless-ngx 的原因非常明确:

  • 成熟稳定

  • 多文档格式支持, 有 OCR 能力( Tesseract )

  • 有完整的 API 接口

  • 支持规则化归档( document type / correspondent / tags )

  • 完全私有化

AnythingLLM: RAG 与 Workspace 的结合体

AnythingLLM 的优势在于:

  • Workspace 抽象非常适合“知识域”

  • 文档在 Workspace 中 embedding 后即可依赖 LLM 实现检索

  • 可对接本地 Ollama

  • 简单易上手

  • 完全私有化

Ollama:本地 LLM 模型以及 Embedder

大名鼎鼎的 Ollama 就不用多介绍了,这里我们跑两个模型,qwen3-embedding:0.6b 和 qwen3:4b,供 AnythingLLM 做 Embedder 和 LLM 使用(更加强大的 LLM 提供商很多,可以自行选择)

paper2anything:我开发的一款开源的同步工具

这个工具是我为解决以上问题开发的依据 paperless-ngx 的 tag 同步到 anythingllm 的 workspace 的工具,支持多 tag 增改删的同步,项目内有详细说明,没花几天时间写代码,只是共享一下方法并不是想要推广自己的项目,但还是欢迎使用并提 issue,求 star

项目地址:

👉 https://github.com/oserz/paper2anything

它做的事情包括:

  • 调用 Paperless API 获取文档元数据

  • 根据 tag 映射到 Workspace

  • 通过 AnythingLLM API 上传文档和 embedding 到 Workspace

  • 做增量同步(新增 / 修改 / 删除)

  • 本地保存同步状态

3. 部署方法和 Docker Compose 示例

  • Paperless-ngx 的部署,这是一份相对较齐全的可用配置(省略映射路径等选项):

version: "3.9"

services:
  broker:
    image: redis:7
    container_name: paperless-redis
    restart: unless-stopped
    volumes:
      - /your-path/redis:/data

  db:
    image: postgres:15
    container_name: paperless-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: paperless
    volumes:
      - /your-path/pgdata:/var/lib/postgresql/data

  paperless:
    image: ghcr.io/paperless-ngx/paperless-ngx:latest
    container_name: paperless-ngx
    restart: unless-stopped
    depends_on:
      - db
      - broker

    ports:
      - "8888:8000"

    environment:
      # === 基础 ===
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: paperless

      # === 管理员(首次启动)===
      PAPERLESS_ADMIN_USER: admin
      PAPERLESS_ADMIN_PASSWORD: admin123
      PAPERLESS_ADMIN_EMAIL: [email protected]

      # === 时区 & 语言 ===
      PAPERLESS_TIME_ZONE: Asia/Shanghai
      PAPERLESS_DEFAULT_LANGUAGE: zh-hans

      # === OCR (屏蔽可能中文的 OCR 下载失败)===
      PAPERLESS_OCR_LANGUAGE: eng #chi_sim+eng
      PAPERLESS_OCR_CLEAN: clean
      PAPERLESS_OCR_MODE: skip
      # PAPERLESS_OCR_LANGUAGES: chi_sim

      # === 文件命名(新语法)===
      PAPERLESS_FILENAME_FORMAT: "{{ created_year }}/{{ correspondent }}/{{ title }}"

      # === 性能 ===
      PAPERLESS_TASK_WORKERS: 2
      PAPERLESS_THREADS_PER_WORKER: 2

      PAPERLESS_URL: (your domain address)

    volumes:
      - /your-path/data:/usr/src/paperless/data
      - /your-path/media:/usr/src/paperless/media
      - /your-path/consume:/usr/src/paperless/consume


  • 在 Paperless 中做的事情

    完成部署后,你需要做三件事:

    1. 创建管理员账号

    2. 上传文档

    3. 给文档设置或者分配标签

    这些信息将直接决定后续知识库的结构

  • anythingLLM 的 docker compose 示例


version: "3.9"

services:
  anythingllm:
    image: mintplexlabs/anythingllm:latest
    container_name: anythingllm
    restart: unless-stopped

    ports:
      - "3001:3001"

    environment:
      # === 基础配置 ===
      - STORAGE_DIR=/app/server/storage
      - JWT_SECRET=your_password
      - LLM_PROVIDER=ollama
      - EMBEDDING_ENGINE=ollama

      # === Ollama 配置(本机或同一 Docker 网络)===
      - OLLAMA_BASE_URL=http://your-domain-addr:11434

      # === 日志 ===
      - LOG_LEVEL=info

    volumes:
      # === 核心数据(必须迁移)===
      - /your-path/data/storage:/app/server/storage

    networks:
      - anythingllm-net
  
networks:
  anythingllm-net:
    driver: bridge

  • ollama 的部署和设置说明

    这部分比较简单,就略过不说了,推荐 ollama 拉取 qwen3-embedding:0.6b 的模型设置到 anythingLLM 的 embedder 中,这算是 embedding 的最强模型了.

    LLM 模型设置可以根据自己的条件来,本人测试 qwen3:4b 在 markdown 文档下可用,但 pdf 文档基本上就是乱答了,国内用收费模型如 deepseek 都体验不错.

    2.png

  • 同步设置和说明

    同步工具下载地址: https://github.com/oserz/paper2anything/releases/

    在同步之前,一定要先设置好 anythingllm 中的 embedder 等选项再开始同步

    根据 config.json.example 中填入 url 地址,和 token 和 api_key,改名成 config.json 运行 p2a 即可

    anythingllm 的 api_key 在设置 --> 开发者 API

    paperless-ngx 的 token 在账户信息 --> API 认证字符串

    或者运行./sync_loop.sh 即可按半小时一次更新同步内容

  • 最终运行效果图:

3.jpg

4.jpg