编程笔记

lifelong learning & practice makes perfect

大语言模型构建本地知识库(RAG)

概念

大语言模型(LLM)

大语言模型(英文:Large Language Model,缩写LLM)是一种人工智能模型,旨在理解和生成人类语言。它们在大量的文本数据上进行训练,可以执行广泛的任务,包括文本总结、翻译、情感分析等等。LLM的特点是规模庞大,包含数十亿的参数。

LangChain

LangChain是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互,将多个组件链接在一起,并集成额外的资源,例如 API 和数据库。

组件和链(Components and Chains)

  • 组件(Component) 是模块化的构建块,可以组合起来创建强大的应用程序。
  • 链(Chain) 是组合在一起以完成特定任务的一系列组件(或其他链)。

例如,一个链可能包括一个提示模板、一个语言模型和一个输出解析器,它们一起工作以处理用户输入、生成响应并处理输出。

提示模板和值(Prompt Templates and Values)

  • 提示模板(Prompt Template) 负责创建提示值,这是最终传递给语言模型的内容。
  • 提示值(Prompt Values) 是具有方法的类,这些方法可以转换为每个模型类型期望的确切输入类型(如文本或聊天消息)。

输出解析器(Output Parsers)

负责将语言模型响应构建为更有用的格式。

LlamaIndex

LlamaIndex 使用 LangChain 的 LLM 模块并允许自定义底层 LLM。LlamaIndex 是一个强大的工具,它提供了一个中央接口来将 LLM 与外部数据连接起来,并允许你根据你提供的数据创建一个聊天机器人。使用 LlamaIndex,您无需成为 NLP 或机器学习专家。您只需要提供您希望聊天机器人使用的数据,LlamaIndex 会处理剩下的事情。

Hugging Face

Hugging Face 是一个提供预训练模型和工具的平台,帮助开发者更轻松地使用和部署大语言模型。

嵌入(Embedding)

嵌入是将文本数据转换为数值向量的过程,这些向量可以被机器学习模型理解和处理。嵌入技术在大语言模型中起着关键作用,因为它允许模型在向量空间中表示和比较文本。

方案

Google NotebookLM

Google NotebookLM,上传文档与LM交互,可直接在线体验

阿里云 DashVector x LLM

DashVector 是阿里云推出的一个高性能向量数据库,专门用于存储和检索大规模的向量数据。它能够高效地支持嵌入向量的存储和相似度搜索,非常适合与大语言模型结合使用,实现基于本地知识库的问答系统。

集成步骤

安装依赖:首先需要安装 DashVector SDK 和 LangChain 相关的库。

1
pip install dashvector langchain

使用 DashVector SDK,你可以轻松地使用 DashVector 存储和检索向量数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 初始化 DashVector 客户端:创建一个 DashVector 客户端实例,用于与 DashVector 数据库进行交互。
from dashvector import Client

client = Client(api_key="your_api_key", host="your_host")

# 创建向量索引:根据你的知识库内容,创建相应的向量索引。
index = client.create_index(name="knowledge_base", dimension=768)

# 插入数据:将知识库中的文档转换为嵌入向量,并插入到 DashVector 中。
from transformers import AutoTokenizer, AutoModel
import torch

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")

def encode(text):
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
with torch.no_grad():
outputs = model(**inputs)
return outputs.last_hidden_state.mean(dim=1).squeeze().tolist()

documents = ["文档内容1", "文档内容2", ...]
vectors = [encode(doc) for doc in documents]

index.insert(vectors)

# 构建检索链:使用 LangChain 构建一个检索链,结合 DashVector 进行向量检索,并将检索结果作为上下文传递给大语言模型。
from langchain.chains import RetrievalQA
from langchain.vectorstores import DashVectorStore
from langchain.llms import OpenAI

llm = OpenAI(api_key="your_openai_api_key")
vector_store = DashVectorStore(client=client, index_name="knowledge_base")
qa_chain = RetrievalQA(llm=llm, retriever=vector_store.as_retriever())

# 查询示例
question = "你的查询问题"
answer = qa_chain.run(question)
print(answer)

GPT4All + LangChain

FASTGpt + One-api + 阿里云 DashScope

开源项目 FastGpt 构建本地知识库,通过 one-api 调用非 ChatGPT 的大语言模型(为非 OpenAI 的 LLM 提供类似 ChatGPT 接口),阿里的 DashScope 有通义千问、Llmma2、通义万相、姜子牙通用大模型等 LLM 接口可供使用。

工具

参考

欢迎关注我的其它发布渠道