LlamaIndex 替代方案
LlamaIndex 负责检索。ModelRiver 负责模型调用。
保留您的索引、检索器和查询引擎。让模型调用经过 ModelRiver,即可获得备用模型、请求日志、结构化输出和限额,无需重写管道。
RAG 管道在生产环境中容易出问题的地方
出问题的很少是检索,通常是管道末端的模型调用。
供应商宕机
查询引擎背后的模型返回错误或被限流时,除非您写了回退代码,否则查询会失败。
难以看清发生了什么
追踪依赖您接入单独工具的埋点。
答案格式不对
输出解析由您的代码负责,而模型并不总是遵循格式。
悄悄增长的成本
每次查询都会把检索到的上下文发给模型。没有上限的话,繁忙的索引可能让账单飙升。
保留检索,加上生产层
ModelRiver 兼容 OpenAI API。让 LlamaIndex 的 LLM 指向它,管道的其余部分保持不变。
from llama_index.llms.openai_like import OpenAILike
from llama_index.core import Settings
# model is your ModelRiver workflow’s name.
Settings.llm = OpenAILike(
api_base="https://api.modelriver.com/v1",
api_key="mr_live_...",
model="docs-answer",
is_chat_model=True,
)
# Your index and query engine stay the same.
index.as_query_engine().query("How do I rotate an API key?")内置备用模型
每个工作流有一个主模型和最多 2 个备用模型。出现错误、超时或限流时,请求会转到下一个模型。
每个请求都有日志
供应商、模型、Token、费用、耗时和每次尝试都记录在请求日志中。
答案按 Schema 校验
为工作流设置 JSON Schema 后,每个响应都会按它校验,不符合时会转到下一个备用模型。
重复问题直接走缓存
为工作流开启缓存后,相同的请求无需调用供应商即可得到回答。
LlamaIndex 与 ModelRiver 对比
LlamaIndex 处理您的数据,ModelRiver 运行模型调用。下面是它们各自提供的能力。
| 项目 | LlamaIndex | ModelRiver |
|---|---|---|
| 是什么 | 用于加载、索引和查询数据的开源框架 | 通过 API 调用的托管 AI 后端 |
| 检索与索引 | 核心优势 | 不包含,这部分继续用 LlamaIndex |
| 供应商备用 | 在代码中自行编写 | 每个工作流最多 2 个备用模型 |
| 请求日志 | 埋点加第三方工具 | 内置,包含每次尝试 |
| 结构化输出 | 在代码中使用输出解析器 | 每个响应都按 JSON Schema 校验 |
| 流式传输到浏览器 | 需要您自己搭建连接 | 服务器推送事件,或使用客户端 SDK 的 WebSocket |
| 对话记忆 | 在代码中管理对话记忆 | 由 ModelRiver 保存的会话 |
| 支出限额 | 不包含 | 按项目和按模型设置 |
哪个更适合您
以下情况选择 LlamaIndex
- 您需要自定义分块、索引或检索策略。
- 您在基于自己的文档构建问答。
- 您希望精细控制数据的加载和索引方式。
以下情况选择 ModelRiver
- 您希望无需编写代码就能跨供应商备用。
- 您希望每个请求都有内置日志。
- 无论哪个模型回答,您都希望答案按 Schema 校验。
大多数团队两者一起用:LlamaIndex 负责检索,ModelRiver 负责模型调用。
常见问题
ModelRiver 是 LlamaIndex 的完全替代品吗?
不是。LlamaIndex 负责加载、索引和检索您的数据。ModelRiver 不做检索,它负责运行模型调用,提供备用模型、请求日志、结构化输出和限额。很多团队两者一起使用。
如何把 LlamaIndex 连接到 ModelRiver?
使用 OpenAILike LLM,填入 ModelRiver API 地址和您的 API 密钥,并把 模型 设为工作流名称。您的索引和查询引擎保持不变。
Embedding 也能经过 ModelRiver 吗?
可以。设置一个 Embedding 工作流,然后用它的名称调用 OpenAI 兼容的 embeddings 接口。
ModelRiver 会存储我的文档吗?
不会。它只能看到您的管道发送的提示词,包括检索到的上下文。只有开启请求体日志后,请求体才会保存在日志中。