LlamaIndex开发注意事项

介绍

为了代码稳定、兼容、少踩坑:
LlamaIndex 只用来做它最强的事,其他全部绕开,直接用原生库!

为什么 LlamaIndex API 不能大面积用?

  • LlamaIndex 版本迭代极快,v0 → v1 大量API直接废弃
  • 你今天写的代码,下个月可能就报错
  • 封装太多,调试极难
  • 你想换模型、换向量库,会被它的API绑死

桌面应用最怕:打包好的exe,过两个月不能用!


最稳架构:LlamaIndex 只做最小必要功能

  1. 文档读取 + 智能分块
  2. 高级检索(混合检索/重排/路由)

其他所有东西 全部不用 LlamaIndex API

  • 向量模型 → 直接用 sentence-transformers / OpenAI 原生
  • 向量库 → 直接用 Chroma / FAISS 原生
  • LLM调用 → 直接用 OpenAI / 通义千问 原生
  • 智能体 → 只用 LangChain
  • 记忆 → 只用 LangChain

真正应该用的结构

1. 向量化(绝对不要走 LlamaIndex API)

# 稳到爆的写法(原生)
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
embedding = model.encode(text)

不要写成:

# 不稳定,LlamaIndex随时改API
from llama_index.embeddings import HuggingFaceEmbedding

2. 向量库(绝对不要走 LlamaIndex API)

# 稳
import chromadb
client = chromadb.Client()

不要用 LlamaIndex 包装的向量库


3. LLM 调用(不要走 LlamaIndex API)

# 稳
from openai import OpenAI
client = OpenAI()

4. 只在这一处用 LlamaIndex(最稳定)

# 只用它做:文档加载 + 高级检索
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex

# 读取文件(它最强)
documents = SimpleDirectoryReader("./docs").load_data()

# 把你自己的 原生embedding 传进去!!
index = VectorStoreIndex.from_documents(
    documents,
    embed_model=你的原生向量模型,  # 关键!不使用它的API
    vector_store=你的原生向量库    # 关键!完全自己控制
)

# 检索(它最强)
retriever = index.as_retriever()

关键点:

LlamaIndex 只做“文档读取 + 检索”
向量模型、向量库、LLM 全是你自己控制的原生对象!

这样:

  • LlamaIndex 升级不影响你
  • 你想换模型随时换
  • 代码兼容 100% 稳定
  • 桌面应用打包永远不会崩

最终最稳方案

只使用 LlamaIndex 3 个东西

  1. SimpleDirectoryReader(读文件)
  2. VectorStoreIndex(建索引)
  3. Retriever(做检索)

其他全部绕开 LlamaIndex

  • 向量 → 原生
  • 向量库 → 原生
  • LLM → 原生
  • 智能体 → LangChain
  • 记忆 → LangChain

原文出处:/show_1GW3LlASqgvw.html