# LlamaIndex OpenAILike：更换 LLM，保留 RAG 索引

> 使用 OpenAILike 更换 LlamaIndex 的生成模型，保留向量模型与索引，通过可复现的文档样本分别验证检索、回答和引用。

_发布 2026-09-29 · 更新 2026-09-29 · [KeepRouter Editorial](https://keeprouter.com/editorial-policy#editorial-team) · 4 分钟阅读_

![三种带类型输入（文本、图片、视频）汇聚成一个向量块](https://keeprouter.com/editorial/blog/multimodal-embeddings-guide.png)

_分别观察检索证据与答案生成两个阶段。概念示意图。_

在 LlamaIndex 中使用 `OpenAILike` 接入兼容聊天端点，同时明确保留向量模型配置。只更换生成答案的 LLM，通常不需要重建现有兼容索引；更换 embedding 模型则是另一项迁移。

先回答“同一批检索片段交给新模型，答案是否更合适”，不要同时重建整个 RAG 流程。

## 固定检索，单独更换生成模型

查询需要先生成问题向量，再检索片段，最后由 LLM 生成答案。文档向量与问题向量必须使用兼容空间，而生成模型读取的是文本。

| 部分 | 本次保持不变 | 留存证据 |
| --- | --- | --- |
| 文档处理 | 解析与切块规则 | 文档版本和片段 ID |
| 向量 | 模型与维度 | 索引配置 |
| 检索 | 查询、排序参数 | 返回的片段 |
| 生成 | 只更换这一项 | 完整提示词、回答、用量 |

检查全局的 `Settings.llm` 和 `Settings.embed_model`，避免未声明的默认值悄悄调用其他服务。[Settings 文档](https://developers.llamaindex.ai/python/framework/module_guides/supporting_modules/settings/)说明了这些配置入口。

## 用 OpenAILike 发出单次文本请求

[官方 API 参考](https://developers.llamaindex.ai/python/framework-api-reference/llms/openai_like/)定义了基础地址、聊天模式及独立的工具能力标记。安装 `llama-index-llms-openai-like`，在环境中设置 Key，然后运行：

```python
import os
from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    model="free",
    api_base="https://keeprouter.com/v1",
    api_key=os.environ["KEEPROUTER_API_KEY"],
    is_chat_model=True,
    is_function_calling_model=False,
    context_window=4096,
    max_tokens=256,
    max_retries=0,
)
result = llm.complete(
    "资料 A：Cedar 仓库在 18:00 关闭。"
    "问题：Cedar 几点关闭？回答并标出资料编号。"
)
print(result.text)
```

这个示例不创建索引，也不调用向量模型。4,096 和 256 是小样本的应用侧限制，不是免费线路规格。换成付费型号后，按准确型号设置上下文和输出上限。

## 保留索引，检查实际检索片段

在现有应用中显式向 query engine 传入新 LLM，例如 `index.as_query_engine(llm=llm)`，而存储加载和向量配置保持不变。

准备 Cedar 18:00、Birch 20:00 两条文档，再加入一个资料中不存在的仓库问题。预期分别是两个正确时间和一次明确的“资料不足”。这是一组作者设计的测试，不是模型性能榜单。

查看 `source_nodes` 或引擎提供的等价证据。问 Cedar 却检索到 Birch，应先修检索；片段正确但回答错误，再分析提示词与生成模型。这样才知道哪一层真正影响结果。

## 引用必须支持答案

答案带上 `[A]` 不等于正确。确认编号存在、原文支持答案，而且没有把另一座仓库的时间套过来。将预期事实和允许引用的片段 ID 放在模型提示词之外保存，分歧交给人工检查。

不要用同一个模型生成的自信分数证明它自己正确。如果需要更换 embedding，另行参考[索引迁移指南](/zh/blog/embedding-model-migration-reindex-checklist)。

## 按整条 RAG 查询核算

假设一次请求包含 600 个指令 token、100 个问题 token、2,400 个检索片段 token、900 个历史 token，输入合计 4,000。删掉重复片段可能比优化问题向量单价更有效。

索引构建是阶段性费用，重复发送文档是持续费用。问题改写、重排和重试也要计入，可使用 [RAG 成本算例](/zh/blog/rag-api-cost-per-query)拆开核算。

## 先迁移一个工作负载

用相同问题和检索结果比较旧、新生成模型，检查事实支持、拒答、时间与费用。到[目录](/models)选择付费线路，按[快速开始](/docs/quickstart)验证访问；保留旧 LLM 配置，回滚时就不必重建索引。

## 常见问题

### 换 LLM 一定要重新生成文档向量吗？

只更换文本生成模型，且向量模型、维度和检索协议不变时通常不需要。向量模型迁移应单独规划。

### 为什么明确设置 is_chat_model？

它告诉封装使用聊天行为，不会自动检测或授予端点能力。工具调用有单独配置，也要另外验证。

### 引用编号看起来正确就够了吗？

不够。要核对片段确实存在，且支持具体回答。只检查编号会漏掉检索或推理错误。

## 参考的一手资料

_本文最近复核 2026-09-29_

1. [LlamaIndex OpenAILike reference](https://developers.llamaindex.ai/python/framework-api-reference/llms/openai_like/)
2. [LlamaIndex Settings](https://developers.llamaindex.ai/python/framework/module_guides/supporting_modules/settings/)

## 继续阅读

- [LangChain 自定义 Base URL：兼容 API 接入指南](https://keeprouter.com/zh/blog/langchain-openai-compatible-api.md)
- [RAG 每次查询多少钱：别只计算生成 token](https://keeprouter.com/zh/blog/rag-api-cost-per-query.md)
- [向量模型迁移：重建索引时如何保住检索质量](https://keeprouter.com/zh/blog/embedding-model-migration-reindex-checklist.md)

## 用一条小请求试用接入配置

按步骤设置，把密钥保留在服务端，并检查返回的答案与用量。

[打开接入指南](https://keeprouter.com/docs/quickstart)

[创建 Key，测试免费模型](https://keeprouter.com/login?returnTo=%2Fconsole%2Fkeys%3Fmodel%3Dfree)

免费测试使用 free 模型；其他付费型号需要足够预付额度。

[全部文章](https://keeprouter.com/zh/blog.md) · [模型与价格](https://keeprouter.com/models.md)
