LLM|利用Ollama搭建个人本地知识库

最近一直想基于RAG(检索增强生成,Retrieval-Augmented Generation)和大预言模型(Large Language Model, LLM)技术搭建一套属于自己的个人知识库,以为会涉及到诸多复杂的流程,包括模型调用、界面开发等。今天找到了一点资料,发现特别简单,花了几分钟实现了一下,主要用到了三个软件:

  • Ollama
  • Docker
  • AnythingLLM

1 基本资料介绍

大预言模型已经很常见了,包括ChatGPT、Claude、通义千问等等,此处就不再过多介绍了,这里主要介绍用到的几个软件和基本技术。

1.1 RAG

检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强大的功能基础上,RAG 将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进 LLM 输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。
RAG技术流程

与RAG并生的另一种技术叫监督式微调(SFT),是将LLM模型注入新的知识库并将模型本身进行训练以获得所需要的结果,需要有一定的硬件设备。两种技术并不矛盾,其实互相结合才

### 使用Ollama构建本地知识库 #### 准备工作 为了成功搭建基于Ollama本地知识库,需先完成必要的环境配置和资源准备工作[^1]。这包括但不限于安装Python解释器、pip包管理工具以及虚拟环境的支持。 #### 安装依赖项 通过命令行执行如下操作来设置项目所需的软件包: ```bash pip install ollama langchain rag ``` 上述指令会下载并安装`ollama`, `langchain` 和 `rag`三个主要组件,它们分别用于处理模型加载、链式调用逻辑实现和服务端API交互。 #### 配置Ollama服务 启动前要确保已正确设置了Ollama的服务地址与认证令牌,在代码中可以通过环境变量的形式传入这些参数: ```python import os os.environ["OLLAMA_API_KEY"] = "your_api_key_here" os.environ["OLLAMA_BASE_URL"] = "http://localhost:8000/api/v1" ``` 此部分设定对于后续连接至自托管的大规模预训练语言模型至关重要。 #### 加载大型语言模型 借助于LangChain框架可以简化LLM实例化过程,下面是一段简单的例子展示如何初始化一个特定版本的语言模型: ```python from langchain import LangChain model_name = "big-science/bloom-560m" # 可替换为其他支持型号 lc_model = LangChain.load(model=model_name, device="cuda") # 或者 'cpu' 如果GPU不可用 ``` 这段脚本实现了指定名称下的大规模预训练语言模型加载,并指定了计算设备类型(CPU/GPU),从而提高了灵活性和性能表现。 #### 构建检索增强生成(Retrieval-Augmented Generation,RAG) 最后一步是集成RAG机制到整个系统架构之中,使得查询请求不仅限于单纯依靠LM本身的知识范围,而是能动态地从外部数据源获取最新信息作为补充材料: ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-nq") retriever = RagRetriever.from_pretrained( "facebook/dpr-question_encoder-single-nq-base", index_name="exact", use_dummy_dataset=True ) generator = RagSequenceForGeneration.from_pretrained("facebook/rag-sequence-nq") def generate_answer(question): inputs = tokenizer([question], return_tensors='pt') retrieved_docs_scores = retriever(**inputs) generated_ids = generator.generate(context_input_ids=retrieved_docs_scores.context_input_ids, context_attention_mask=retrieved_docs_scores.context_attention_mask) answer = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] return answer ``` 这里定义了一个名为`generate_answer()`的功能函数,它接受一个问题字符串输入并通过融合内部存储或数据库中的文档片段来形成最终的回答输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值