# LlamaIndex (/zh-Hant/docs/guides/llamaindex)

透過 OpenAI 相容 API 在 LlamaIndex 中使用 cheapaimodel 的模型。



LlamaIndex 透過 `llama-index-llms-openai-like` 套件的 `OpenAILike` 連接 OpenAI 相容服務。它無法從不認識的模型 ID 查出模型資訊，所以有兩項要你自己設定：這是對話模型，以及它的上下文長度。

|          | LlamaIndex 設定    | 值                                                               |
| -------- | ---------------- | --------------------------------------------------------------- |
| Base URL | `api_base`       | `https://api.cheapaimodel.ai/v1`                                |
| API Key  | `api_key`        | 你在控制台 [API Key](https://console.cheapaimodel.ai/keys) 頁面建立的 Key |
| 模型 ID    | `model`          | `deepseek-v4-1-flash`，或[目錄](/zh-Hant/models)中的任一模型 ID           |
| 對話模型     | `is_chat_model`  | `True`                                                          |
| 上下文長度    | `context_window` | 模型的上下文長度（token 數），見[目錄](/zh-Hant/models)中該模型的頁面                 |

## 設定 [#設定]

目前版本的 LlamaIndex 套件需要 Python 3.10 以上。

```bash title="終端機"
pip install llama-index-llms-openai-like
```

在模型頁面查出上下文長度，例如 [deepseek-v4-1-flash](/zh-Hant/models/deepseek-v4-1-flash)，填入 `CONTEXT_WINDOW`：

```python title="main.py"
import os
from llama_index.core.llms import ChatMessage
from llama_index.llms.openai_like import OpenAILike

CONTEXT_WINDOW = ...  # the context length from the model's page, in tokens

llm = OpenAILike(
    model="deepseek-v4-1-flash",
    api_base="https://api.cheapaimodel.ai/v1",
    api_key=os.environ["CHEAPAIMODEL_API_KEY"],
    is_chat_model=True,
    context_window=CONTEXT_WINDOW,
)

response = llm.complete("Explain recursion in one sentence.")
print(response.text)

# Streaming
messages = [ChatMessage(role="user", content="Write a haiku about the sea.")]
for chunk in llm.stream_chat(messages):
    print(chunk.delta, end="", flush=True)
```

設定 `is_chat_model=True` 後，每次呼叫（包括 `complete`）都會送往 `/v1/chat/completions`。

## 在整個 LlamaIndex 中使用 [#在整個-llamaindex-中使用]

把它設在 `Settings` 上，就成為索引、查詢引擎與對話引擎的預設模型：

```python title="main.py"
from llama_index.core import Settings

Settings.llm = llm
```

向量索引還需要 embedding 模型，而 `Settings.embed_model` 預設是 OpenAI 的。cheapaimodel 目前沒有 embeddings 模型，請把 `Settings.embed_model` 設為其他供應商的 embedding 模型或本機模型，不要指向我們的 Base URL。

## 常見錯誤 [#常見錯誤]

* **請求送往 `/v1/completions`。** `is_chat_model` 預設為 `False`，會把 `complete`，甚至 `chat`，都合成單一提示詞送往舊的 completions 端點。我們的模型只列出 `/v1/chat/completions` 與 `/v1/responses`。請設定 `is_chat_model=True`。
* **`ValueError: Unknown model 'deepseek-v4-1-flash'. Please provide a valid OpenAI model name`。** 你用的是 `llama_index.llms.openai` 的 `OpenAI`，它只接受 OpenAI 自家的模型名稱。請改用 `OpenAILike`。
* **建立索引時出現 `Could not load OpenAI embedding model`。** `Settings.embed_model` 仍是 OpenAI 預設值。請改設其他供應商的 embedding 模型或本機模型。
* **`/v1/embeddings` 回傳 `503` 與 `model_not_found`。** 原因同上，只是 `OPENAI_API_KEY` 與 `OPENAI_API_BASE` 設成了你的 cheapaimodel Key 與我們的 Base URL：預設的 embedding 模型會讀取它們，於是向我們要求 embeddings 模型。請改把 `api_key` 與 `api_base` 傳給 `OpenAILike`，並設定 `Settings.embed_model`。
* **`kimi-k3` 回傳 `400`。** `OpenAILike` 一定會送出 `temperature`，預設為 `0.1`，而 kimi-k3 只接受 `1` 或 `0.6`。請傳入 `temperature=1.0`。請參閱[取樣參數限制](/zh-Hant/docs/concepts/models#sampling-limits)。
* **一次查詢送出好幾個請求。** `context_window` 預設為 3900 個 token，LlamaIndex 會把檢索到的文字切成符合這個長度的片段，查詢引擎因此送出比需要更多的請求。請設為模型的上下文長度。

Base URL 漏了 `/v1` 這類錯誤，請參閱 [Base URL](/zh-Hant/docs/api/base-url#common-mistakes)。
