LlamaIndex
OpenAI互換APIで、LlamaIndexからcheapaimodelのモデルを使います。
LlamaIndexは、llama-index-llms-openai-likeパッケージのOpenAILikeでOpenAI互換サービスに接続します。未知のモデルIDからはモデルの仕様を判別できないため、チャットモデルであることとコンテキストウィンドウの2点を明示的に設定します。
| LlamaIndexの設定項目 | 値 | |
|---|---|---|
| Base URL | api_base | https://api.cheapaimodel.ai/v1 |
| APIキー | api_key | コンソールのAPIキーページで発行したキー |
| モデルID | model | deepseek-v4-1-flash、またはモデルカタログにある任意のID |
| チャットモデル | is_chat_model | True |
| コンテキストウィンドウ | context_window | モデルのコンテキスト長(トークン数)。モデルカタログの各モデルのページに記載 |
設定
現行のLlamaIndexパッケージにはPython 3.10以降が必要です。
pip install llama-index-llms-openai-likeモデルのページ(たとえばdeepseek-v4-1-flash)でコンテキスト長を確認し、CONTEXT_WINDOWに入れます。
import os
from llama_index.core.llms import ChatMessage
from llama_index.llms.openai_like import OpenAILike
CONTEXT_WINDOW = ... # モデルのページに記載のコンテキスト長(トークン数)
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)
# ストリーミング
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全体で使う
Settingsに設定すると、インデックス、クエリエンジン、チャットエンジンのデフォルトになります。
from llama_index.core import Settings
Settings.llm = llmベクトルインデックスには埋め込みモデルも必要で、Settings.embed_modelのデフォルトはOpenAIのモデルです。cheapaimodelにはまだ埋め込みモデルがないため、Settings.embed_modelには別のプロバイダーの埋め込みモデルかローカルモデルを設定し、cheapaimodelのBase URLは設定しないでください。
よくある間違い
- リクエストが
/v1/completionsに送られる。is_chat_modelのデフォルトはFalseで、この場合はcompleteだけでなくchatも単一のプロンプトとして旧来のcompletionsエンドポイントに送られます。cheapaimodelのモデルが対応しているのは/v1/chat/completionsと/v1/responsesだけです。is_chat_model=Trueを設定してください。 ValueError: Unknown model 'deepseek-v4-1-flash'. Please provide a valid OpenAI model name。 LLMにllama_index.llms.openaiのOpenAIを使っています。これはOpenAI自身のモデル名しか受け付けません。OpenAILikeを使ってください。- インデックスの作成時に
Could not load OpenAI embedding modelが出る。Settings.embed_modelがOpenAIのデフォルトのままです。別のプロバイダーの埋め込みモデルかローカルモデルを設定してください。 /v1/embeddingsでmodel_not_found付きの503が返る。 原因は上と同じで、加えてOPENAI_API_KEYとOPENAI_API_BASEにcheapaimodelのAPIキーとBase URLが設定されています。デフォルトの埋め込みモデルがこれらを読み込み、cheapaimodelに埋め込みをリクエストします。環境変数ではなくOpenAILikeにapi_keyとapi_baseを渡し、Settings.embed_modelを設定してください。kimi-k3で400が返る。OpenAILikeはtemperatureを必ず送り、デフォルトは0.1ですが、kimi-k3が受け付けるのは1または0.6だけです。temperature=1.0を渡してください。サンプリングパラメーターの制限を参照してください。- 1回のクエリで複数のリクエストが送られる。
context_windowのデフォルトは3900トークンで、LlamaIndexは取得したテキストをそこに収まるよう分割するため、クエリエンジンが必要以上のリクエストを送ります。モデルのコンテキスト長を設定してください。
/v1の付け忘れなど、Base URLの誤りについてはBase URLを参照してください。