背景
基于前面实现 RAG demo 进行可用性调整,满足更多定制化需求。
需求描述
- 索引数据的持久化:默认情况下,向量索引数据全部保存在内存当中,可以把这些数据存储到硬盘上避免丢失;
- 打印查询和事件日志:用于研发阶段的观察和分析,以及 debug;
- 嵌入模型支持的参数:设置并发度等,机器资源充足的话加快嵌入的速度;
- 大模型支持哪些参数:怎么修改 Ollama 地址或端口、模型温度等等;
- 分块或者检索:有什么直接可用的优化方式吗?
本文将逐个说明上述需求的实现方式,最后提供完整的可执行代码。
需求实现
1. 索引数据持久化
# 存储,默认storage目录,可以修改
PERSIST_DIR = "./storage"
index.storage_context.persist()
# 加载
storage_context = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
index = load_index_from_storage(storage_context)
2. 打印日志
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
以下是 logging 模块中可用的日志级别简要列表:
- NOTSET (0)
- DEBUG (10)
- INFO (20)
- WARNING (30)
- ERROR (40)
- CRITICAL (50)
3.嵌入模型支持的参数
基类:BaseEmbedding
HuggingFace 文本嵌入类, 支持使用本地的模型文件。
参数:
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
model_name | str | 如果是磁盘上的文件路径,则从该路径加载模型。如果不是路径,则首先尝试下载预训练的SentenceTransformer模型。如果失败,则尝试使用Hugging Face Hub上的该名称构建模型。 | DEFAULT_HUGGINGFACE_EMBEDDING_MODEL |
max_length | Optional[int] | 在模型配置中设置的最大序列长度。如果为None,将使用模型的默认max_seq_length。默认为None。 | None |
query_instruction | Optional[str] | 添加到查询文本的指令。默认为None。 | None |
text_instruction | Optional[str] | 添加到文本的指令。默认为None。 | None |
normalize | bool | 是否归一化返回的向量。默认为True。 | True |
embed_batch_size | int | 用于计算的批处理大小。默认为DEFAULT_EMBED_BATCH_SIZE。 | DEFAULT_EMBED_BATCH_SIZE |
cache_folder | Optional[str] | 存储模型的路径。默认为None。 | None |
trust_remote_code | bool | 是否允许在Hub上定义并使用自己的模型文件。仅应将此选项设置为True,用于您信任的存储库,并且您已经阅读了代码,因为它将在您的本地机器上执行Hub上的代码。默认为False。 | False |
device | Optional[str] | 应该用于计算的设备(如"cuda"、“cpu”、“mps”、"npu"等)。如果为None,则检查是否可以使用GPU。默认为None。 | None |
callback_manager | Optional[CallbackManager] | 回调管理器。默认为None。 | None |
parallel_process | bool | 如果为True,将启动多进程池,使用多个独立进程处理编码。适用于大量文本。默认为False。 | False |
target_devices | Optional[List[str]] | PyTorch目标设备,例如[“cuda: 0”、“cuda: 1”、…]、[“npu: 0”、“npu: 1”、…]或[“cpu”、“cpu”、“cpu”、“cpu”]。如果target_devices为None且CUDA/NPU可用,则将使用所有可用的CUDA/NPU设备。如果target_devices为None且CUDA/NPU不可用,则将使用4个CPU设备。此参数仅在p |