{card-describe title="前言"}
失踪人口回归啦!最近chatpgt火出了圈,逛了逛Github,发现一个有趣的项目,可以搭建一个私人的ChatGPT的模型,搜索了下国内社区,没有相应的教程,就把自己摸索的结果编成文章,供各位参考。
{/card-describe}

{mtitle title="正文开始"/}
{lamp/}

设备配置


{message type="warning" content="私人ChatGPT需要在本地训练模型,请保证个人设备性能足够,跑崩了本人不负责啊"/}

  • 型号:Apple Macbook Pro
  • 芯片:M1 Pro
  • 内存:16G
  • Python版本:3.11

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

项目地址


{anote icon="fa-github" href="https://github.com/jyan1011/privateGPT" type="success" content="jyan1011/privateGPT"/}

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

Python环境安装


{tabs}
{tabs-pane label="通过homebrew安装"}

$ brew update
$ brew install python@3.11

{/tabs-pane}
{tabs-pane label="通过安装包安装"}
{abtn icon="iconfont icon-python" color="#1e415e" href="https://www.python.org/downloads/" radius="10px" content="Python3下载"/}
{/tabs-pane}
{/tabs}

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

下载项目


  1. 使用git clone命令:

    $ git clone https://github.com/jyan1011/privateGPT.git
  2. 下载Zip包并解压:{anote icon="fa-github" href="https://github.com/jyan1011/privateGPT/archive/refs/heads/main.zip" type="secondary" content="点击下载"/}

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

安装项目依赖


  1. 进入项目目录,并找到requirements.txt文件
  2. 使用pip命令安装依赖

    $ pip3 install -r requirements.txt
  3. 输出以下内容,依赖安装成功

    Successfully installed MarkupSafe-2.1.2 PyYAML-6.0 SQLAlchemy-2.0.13 aiohttp-3.8.4 aiosignal-1.3.1 ...(以下内容省略)

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

下载语言模型


LLM:默认为ggml-gpt4all-j-v1.3-groovy.bin 。如果您喜欢不同的GPT4All-J兼容模型,只需下载后在您的文件中引用即可。

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

编辑配置文件


  1. 重命名项目目录下的example.env文件名为.env
  2. 编辑.env文件

{card-describe title="参数说明"}
MODEL_TYPE: supports LlamaCpp or GPT4All
PERSIST_DIRECTORY: is the folder you want your vectorstore in
MODEL_PATH: Path to your GPT4All or LlamaCpp supported LLM
MODEL_N_CTX: Maximum token limit for the LLM model
EMBEDDINGS_MODEL_NAME: SentenceTransformers embeddings model name (see https://www.sbert.net/docs/pretrained_models.html)
{/card-describe}

{alert type="warning"}
注意:由于加载嵌入的方式,第一次运行脚本时,需要互联网连接才能下载嵌入模型本身。
{/alert}

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

引入测试集


{callout color="#4d6def"}
项目自带一个默认的测试集:state_of_the_union.txt
{/callout}

  1. 将所有测试集文件放入目录source_documents
  2. 支持的文件类型包括:

    • .csv:CSV表格文件
    • .docx:Microsoft Word
    • .doc:Microsoft Word
    • .enex:印象笔记
    • .eml:电子邮件
    • .epub:电子书epub格式
    • .html:HTML网页文件
    • .md:markdown文档
    • .msg:Outlook文件
    • .odt:开放文本文档
    • .pdf:便携式文档(PDF)
    • pptx:PPT幻灯片文档
    • .ppt:幻灯片文档
    • .txt:文本文件 (UTF-8编码)
  3. 运行以下命令以引入所有数据:

    $ python ingest.py

    输出应如下所示:

    Creating new vectorstore
    Loading documents from source_documents
    Loading new documents: 100%|██████████████████████| 1/1 [00:01<00:00,  1.73s/it]
    Loaded 1 new documents from source_documents
    Split into 90 chunks of text (max. 500 tokens each)
    Creating embeddings. May take some minutes...
    Using embedded DuckDB with persistence: data will be stored in: db
    Ingestion complete! You can now run privateGPT.py to query your documents

{callout color="#4d6def"}
执行导入后程序将创建一个包含本地向量存储的文件夹。每个测试集导入可能需要20-30秒的时间(具体取决于文档的大小)您可以根据需要引入任意数量的文档,所有文档都将累积在本地嵌入数据库中,如果需要清空数据库请删除db文件夹
{/callout}
{alert type="warning"}
注意:在导入过程中,数据仅会保存在您的本地环境中。您可以在没有互联网连接的情况下进行导入,但首次运行采集脚本时需要下载嵌入模型,此时仍需要互联网连接。
{/alert}

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

开始提问


要开始问题,请运行如下命令:

$ python privateGPT.py

并等待脚本需要您的输入。

> Enter a query:

输入您的问题并按回车键后,需要等待 20-30 秒(具体取决于您的计算机性能),而LLM模型会根据您的提问开始准备答案。完成后,系统将会将打印回答并同时打印它回答所引用的文档中的4个来源。然后,您可以提出另一个问题而无需重新运行脚本,只需再次等待输入提示即可。

{alert type="warning"}
注意:您可以关闭互联网连接,脚本仍然有效。没有数据会离开您的本地环境。
{/alert}

如果需要关闭脚本,则在输入问题时输入exit并回车即可。

{dotted startColor="#ff6c6c" endColor="#1989fa"/}

拓展


该脚本还支持可选的命令行参数来修改其行为。您可以通过在终端中运行命令来查看这些参数的完整列表。

$ python privateGPT.py --help

{lamp/}
{mtitle title="正文结束"/}

最后修改:2023 年 06 月 13 日
如果觉得我的文章对你有用,请随意赞赏