Skip to content
字数
1752 字
阅读时间
8 分钟

一、核心技术模块与对应选型方案

1. 数据加载模块:第三方库选型

功能场景推荐库 / 工具核心优势适用场景
本地文件解析(多格式)llama-index-readers-file原生支持 PDF/Markdown/Excel 等 20 + 格式,无需额外转换企业文档库(混合格式)
网页数据抓取llama-index-readers-web自动处理 JavaScript 渲染页面,支持批量 URL 爬取行业资讯、竞品官网信息采集
数据库数据接入llama-index-readers-database支持 MySQL/PostgreSQL/MongoDB,适配 ORM 框架业务系统数据(订单、用户信息)
云存储数据读取llama-index-readers-aws/azure对接 S3/Blob Storage,支持增量加载大规模云端文档库(TB 级)

技术细节:所有读取器均继承自BaseReader抽象类,通过统一的load_data()接口返回Document对象,确保后续处理链路标准化。例如解析 PDF 时,默认使用PyPDF2底层库提取文本,复杂格式(含表格)可切换至pdfplumber增强解析精度。

2. 文档分割模块:核心类与依赖库

  • 基础分割依赖:nltk(句子边界检测)、spacy(句法分析)

  • 示例:RecursiveCharacterTextSplitter使用nltk.tokenize.sent_tokenize实现句子级分割,确保语义完整性

  • 专业分割工具

  • 代码分割:依赖tree-sitter库,支持 Python/Java 等 10 + 语言的语法树解析,按函数 / 类边界分割

  • 表格分割:集成pandas处理 Excel/CSV 表格,将表格转换为结构化文本描述(如 “表格 1:2024 年营收数据,包含季度 / 地区 / 金额三列”)

3. 向量嵌入模块:模型选型与适配

模型类型推荐模型列表维度优势场景依赖库
通用英文模型OpenAI text-embedding-3-large3072英文文档、多语言混合场景openai SDK
中文优化模型BAAI bge-large-zh-v1.51024纯中文文档(如法律、医疗文书)transformers、torch
轻量级模型Sentence-BERT all-MiniLM-L6-v2384本地化部署、低算力场景sentence-transformers
多模态嵌入OpenAI text-embedding-3-large+CLIP3072+512图文混合知识库(如产品手册)openai、torchvision

关键选型依据

  1. text-embedding-3-large****成为默认推荐的原因
  • 维度灵活(可选 256/512/1024/2048/3072 维),可根据检索精度需求动态调整

  • 多语言支持能力强,中文语义理解准确率比text-embedding-ada-002提升 15%+

  • 长文本处理优化,支持单段 12k token 输入,减少分块数量(降低检索冗余)

  • OpenAI API 调用延迟低(P99<300ms),适合高并发场景

  1. 本地化模型选型逻辑
  • 优先选择开源可商用模型(如 BGE 系列、Sentence-BERT),规避版权风险

  • 平衡维度与性能:中文场景下bge-large-zh-v1.5(1024 维)比bge-base-zh-v1.5(768 维)检索 Recall@5 提升 8%,且 GPU 显存占用仅增加 2GB(RTX 3090 可承载)

4. 索引存储模块:第三方向量库适配

存储方案推荐库部署方式适用场景核心依赖
轻量级本地存储llama-index-vector-stores-chroma单机文件 / 内存开发测试、小数据集(<10 万条)chromadb
企业级分布式存储llama-index-vector-stores-pinecone云服务生产环境、TB 级数据pinecone-client
本地化高性能存储llama-index-vector-stores-faiss单机 / 集群低延迟需求(<100ms)、GPU 加速faiss-cpu/faiss-gpu
云原生存储(国内)llama-index-vector-stores-dashvector阿里云服务国内部署、高并发(1000+QPS)dashvector

技术适配细节

  • 所有向量库均通过VectorStore抽象类封装,切换存储方案时无需修改核心逻辑(如从 Chroma 迁移到 Pinecone 仅需替换VectorStore实例)

  • 支持索引分片与分区:例如使用 FAISS 时,通过IndexShards实现数据按时间 / 类别分片,检索时仅查询相关分片(时延降低 40%)

5. 检索增强模块:模型与工具选型

  • 重排序模型

  • 轻量级:cross-encoder/ms-marco-MiniLM-L-6-v2(显存占用 < 1GB,适合实时重排序)

  • 高精度:cross-encoder/ms-marco-RoBERTa-L-12-v2(Recall@5 提升至 95%,适合离线数据预处理)

  • 依赖库:transformers、torch

  • 知识图谱构建

  • 实体关系抽取:默认使用llama-index-llms-openai(GPT-4)生成三元组,准确率比开源模型(如 ChatGLM3)提升 20%+

  • 图数据库适配:llama-index-graph-stores-neo4j(企业级)、llama-index-graph-stores-networkx(轻量级)

  • 依赖库:neo4j、networkx

6. LLM 生成模块:模型选型与适配

模型类型推荐模型部署方式适用场景依赖库
通用云模型OpenAI GPT-4o/GPT-3.5 TurboAPI 调用通用问答、快速迭代openai
中文优化云模型阿里云通义千问、百度文心一言API 调用中文场景(如政务、医疗)各厂商 SDK(dashscope等)
本地化开源模型Llama 3-70B、Qwen-72B本地 GPU/CPU数据敏感场景(如金融隐私数据)transformers、accelerate
轻量级本地模型Llama 3-8B、Phi-3-Mini本地 CPU(8GB 内存)低算力部署、简单问答transformers、bitsandbytes

选型关键因素

  • 上下文窗口:生成长回答(如报告总结)需选择 128k + 窗口模型(如 GPT-4o、Qwen-72B-128k)

  • 推理速度:实时交互场景优先选择 GPU 部署的 7B/13B 模型(如 Llama 3-13B,生成速度约 50 token/s)

  • 成本控制:批量处理任务可切换至 GPT-3.5 Turbo 或本地化模型,成本降低 90%+

二、选型决策框架与最佳实践

1. 分场景选型指南

场景类型推荐技术栈组合
个人开发 / 测试本地文件加载 + RecursiveCharacterTextSplitter + bge-base-zh-v1.5 + Chroma + Llama 3-8B
企业中文知识库(云部署)阿里云 OSS 加载 + ParentDocumentSplitter + text-embedding-3-large + DashVector + 通义千问
数据敏感场景(本地化)数据库加载 + CodeSplitter(代码场景) + bge-large-zh-v1.5 + FAISS + Qwen-72B
多模态知识库图文混合加载 + SentenceSplitter + CLIP+text-embedding-3-large + Pinecone + GPT-4o

2. 模型替换与扩展最佳实践

  • 自定义 Embedding 模型:继承BaseEmbedding类实现_get_query_embedding和_get_text_embedding方法,示例:
from llama_index.core.embeddings import BaseEmbeddingclass CustomEmbedding(BaseEmbedding):    def _get_query_embedding(self, query: str) -> list[float]:        # 调用自定义模型API获取查询向量        return custom_model.encode(query).tolist()    def _get_text_embedding(self, text: str) -> list[float]:        # 调用自定义模型API获取文本向量        return custom_model.encode(text).tolist()# 配置使用Settings.embed_model = CustomEmbedding()
  • 向量库扩展:实现VectorStore抽象类的add/delete/query方法,支持私有向量存储系统接入

3. 性能与成本平衡策略

  • 小数据集(<1 万条):优先使用轻量级组合(all-MiniLM-L6-v2 + Chroma),无需 GPU,部署成本几乎为 0

  • 中大规模数据集(10 万 - 100 万条):选择bge-large-zh-v1.5(本地化)或text-embedding-3-large(云)+ FAISS/DashVector,平衡精度与成本

  • 超大规模数据集(>100 万条):采用云向量库(Pinecone/DashVector)+ 索引分片,降低运维复杂度

贡献者

The avatar of contributor named as jiechen jiechen

页面历史

撰写