cheapaimodel

LlamaIndex

OpenAI互換APIで、LlamaIndexからcheapaimodelのモデルを使います。

コピー

LlamaIndexは、llama-index-llms-openai-likeパッケージのOpenAILikeでOpenAI互換サービスに接続します。未知のモデルIDからはモデルの仕様を判別できないため、チャットモデルであることとコンテキストウィンドウの2点を明示的に設定します。

LlamaIndexの設定項目値
Base URLapi_basehttps://api.cheapaimodel.ai/v1
APIキーapi_keyコンソールのAPIキーページで発行したキー
モデルIDmodeldeepseek-v4-1-flash、またはモデルカタログにある任意のID
チャットモデルis_chat_modelTrue
コンテキストウィンドウcontext_windowモデルのコンテキスト長(トークン数)。モデルカタログの各モデルのページに記載

設定

現行のLlamaIndexパッケージにはPython 3.10以降が必要です。

ターミナル
pip install llama-index-llms-openai-like

モデルのページ(たとえばdeepseek-v4-1-flash)でコンテキスト長を確認し、CONTEXT_WINDOWに入れます。

main.py
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に設定すると、インデックス、クエリエンジン、チャットエンジンのデフォルトになります。

main.py
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を参照してください。

コピー
開く

このページの内容