vault-ai

pashpashpashMIT长期未更新

给 ChatGPT 接上 Pinecone 向量库做长期记忆,上传 PDF、txt、epub 等文件就能基于自己的知识库问答,前端用 React 实现。

OP Vault ChatGPT: Give ChatGPT long-term memory using the OP Stack (OpenAI + Pinecone Vector Database). Upload your own custom knowledge base files (PDF, txt, epub, etc) using a simple React frontend.

暂无版本3,385star291fork同步于 2026-11-10 23:41 UTC

怎么上手

由 README 提炼,执行前请确认
npm install
npm start
硬件要求按 README 说明

README 未说明显存或 GPU 要求;依赖 OpenAI API 和 Pinecone 云端服务,本地只需能跑 Go 服务和 Node 构建环境。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

用 OpenAI 加 Pinecone 给 ChatGPT 加长期记忆,上传自己的书和文档后就能针对内容提问

给 ChatGPT 接上 Pinecone 向量库做长期记忆,上传 PDF、txt、epub 等文件就能基于自己的知识库问答,前端用 React 实现。

核心能力

  • 上传 PDF、txt、docx、epub 等文件构建自定义知识库
  • 把文件切块后用 OpenAI 生成 embedding 并存入 Pinecone
  • 回答时附带来源文件名和原文片段,方便核对
  • 用 tiktoken 估算 token 数,按 OpenAI 上限拼装上下文提示词
  • 提供 React 前端和 Golang 后端,开箱即可本地部署

容易踩的坑

需手动安装 node v19、go v1.18.9 和 poppler,缺 poppler 会导致 PDF 解析失败;要自行在 secret/ 目录写入 OpenAI 和 Pinecone 的 key 与 endpoint,Pinecone 索引向量维度须设为 1536;默认端口 :8100,且需另开终端跑 npm run dev 编译前端;单文件上传上限 3MB,需改 fileupload.go 里的常量才能放大。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    OP Vault

    OP Vault uses the OP Stack (OpenAI + Pinecone Vector Database) to enable users to upload their own custom knowledgebase files and ask questions about their contents.

    vault.pash.city

    With quick setup, you can launch your own version of this Golang server along with a user-friendly React frontend that allows users to ask OpenAI questions about the specific knowledge base provided. The primary focus is on human-readable content like books, letters, and other documents, making it a practical and valuable tool for knowledge extraction and question-answering. You can upload an entire library's worth of books and documents and recieve pointed answers along with the name of the file and specific section within the file that the answer is based on!

    What can you do with OP Vault?

    With The Vault, you can:

    • Upload a variety of popular document types via a simple react frontend to create a custom knowledge base
    • Retrieve accurate and relevant answers based on the content of your uploaded documents
    • See the filenames and specific context snippets that inform the answer
    • Explore the power of the OP Stack (OpenAI + Pinecone Vector Database) in a user-friendly interface
    • Load entire libraries' worth of books into The Vault

    Manual Dependencies

    • node: v19
    • go: v1.18.9 darwin/arm64
    • poppler

    Setup

    Install manual dependencies

    1. Install go:

    Follow the go docs here

    1. Install node v19

    I recommend installing nvm and using it to install node v19

    1. Install poppler

    sudo apt-get install -y poppler-utils on Ubuntu, or brew install poppler on Mac

    Set up your API keys and endpoints in the secret folder

    1. Create a new file secret/openai_api_key and paste your OpenAI API key into it:

    echo "your_openai_api_key_here" > secret/openai_api_key

    1. Create a new file secret/pinecone_api_key and paste your Pinecone API key into it:

    echo "your_pinecone_api_key_here" > secret/pinecone_api_key

    When setting up your pinecone index, use a vector size of 1536 and keep all the default settings the same.

    1. Create a new file secret/pinecone_api_endpoint and paste your Pinecone API endpoint into it:

    echo "https://example-50709b5.svc.asia-southeast1-gcp.pinecone.io" > secret/pinecone_api_endpoint

    Running the development environment

    1. Install javascript package dependencies:

      npm install

    2. Run the golang webserver (default port :8100):

      npm start

    3. In another terminal window, run webpack to compile the js code and create a bundle.js file:

      npm run dev

    4. Visit the local version of the site at http://localhost:8100

    Screenshots:

    In the example screenshots, I uploaded a couple of books by Plato and some letters by Alexander Hamilton, showcasing the ability of OP Vault to answer questions based on the uploaded content.

    Uploading files

    Asking questions

    Under the hood

    The golang server uses POST APIs to process incoming uploads and respond to questions:

    1. /upload for uploading files

    2. /api/question for answering questions

    All api endpoints are declared in the vault-web-server/main.go file.

    Uploading files and processing them into embeddings

    The vault-web-server/postapi/fileupload.go file contains the UploadHandler logic for handling incoming uploads on the backend. The UploadHandler function in the postapi package is responsible for handling file uploads (with a maximum total upload size of 300 MB) and processing them into embeddings to store in Pinecone. It accepts PDF, epub, .docx, and plain text files, extracts text from them, and divides the content into chunks. Using OpenAI API, it obtains embeddings for each chunk and upserts (inserts or updates) the embeddings into Pinecone. The function returns a JSON response containing information about the uploaded files and their processing status.

    1. Limit the size of the request body to MAX_TOTAL_UPLOAD_SIZE (300 MB).
    2. Parse the incoming multipart form data with a maximum allowed size of 300 MB.
    3. Initialize response data with fields for successful and failed file uploads.
    4. Iterate over the uploaded files, and for each file: a. Check if the file size is within the allowed limit (MAX_FILE_SIZE, 300 MB). b. Read the file into memory. c. If the file is a PDF, extract the text from it; otherwise, read the contents as plain text. d. Divide the file contents into chunks. e. Use OpenAI API to obtain embeddings for each chunk. f. Upsert (insert or update) the embeddings into Pinecone. g. Update the response data with information about successful and failed uploads.
    5. Return a JSON response containing information about the uploaded files and their processing status.

    Storing embeddings into Pinecone db

    After getting OpenAI embeddings for each chunk of an uploaded file, the server stores all of the embeddings, along with metadata associated for each embedding in Pinecone DB. The metadata for each embedding is created in the upsertEmbeddingsToPinecone function, with the following keys and values:

    • file_name: The name of the file from which the text chunk was extracted.
    • start: The starting character position of the text chunk in the original file.
    • end: The ending character position of the text chunk in the original file.
    • title: The title of the chunk, which is also the file name in this case.
    • text: The text of the chunk.

    This metadata is useful for providing context to the embeddings and is used to display additional information about the matched embeddings when retrieving results from the Pinecone database.

    Answering questions

    The QuestionHandler function in vault-web-server/postapi/questions.go is responsible for handling all incoming questions. When a question is entered on the frontend and the user presses "search" (or enter), the server uses the OpenAI embeddings API once again to get an embedding for the question (a.k.a. query vector). This query vector is used to query Pinecone db to get the most relevant context for the question. Finally, a prompt is built by packing the most relevant context + the question in a prompt string that adheres to OpenAI token limits (the go tiktoken library is used to estimate token count).

    Frontend info

    The frontend is built using React.js and less for styling.

    Generative question-answering with long-term memory

    If you'd like to read more about this topic, I recommend this post from the pinecone blog:

    I hope you enjoy it (:

    Uploading larger files

    I currently have the max individual file size set to 3MB. If you want to increase this limit, edit the MAX_FILE_SIZE and MAX_TOTAL_UPLOAD_SIZE constants in fileupload.go.

    Supported Filetypes

    PDFs, .txt, .rtf, .docx, .epub, and plaintext.

    New Pinecone Free Tier Restrictions

    Recently, Pinecone limited the use of namespaces for free tier users. If you're on a newly created free tier, these restrictions will apply to you.