本文へ移動
すべてのドキュメント

コード

LlamaIndex

LlamaIndexの OpenAILike クラスに、ベースURL、キー、モデルIDを渡します。推測できない4つのフラグを設定すれば、残りのLlamaIndexの機能がそのまま使えます。

2026年10月29日 確認

インストールと接続

Shell
pip install llama-index-core llama-index-llms-openai-like
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
llm.py
import os
from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    model="deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    is_chat_model=True,
    is_function_calling_model=True,
    context_window=1000000,
    temperature=0.8,
)

print(llm.complete("Name three good names for a tavern.").text)
  • is_chat_model=True はチャットcompletionsを送信します。これがないと、LlamaIndexはnokeepにない /v1/completions を呼び出します。
  • is_function_calling_model=True を指定すると、エージェントと chat_with_tools がツールを送信できます。
  • context_window のデフォルトは3,900トークンなので、LlamaIndexは長いチャットや取得したテキストを切り詰めて収めます。モデルの実際のコンテキスト長を設定してください。DeepSeekは1,000,000、GLMは128,000です。
  • temperature のデフォルトは0.1で、フィクションが平板で単調になります。自分で設定してください。

チャットとストリーミング

Python
from llama_index.core.llms import ChatMessage

messages = [
    ChatMessage(role="system", content="You are a blunt editor."),
    ChatMessage(role="user", content="Cut this opening line to ten words: ..."),
]
print(llm.chat(messages).message.content)

for part in llm.stream_chat(messages):
    print(part.delta, end="", flush=True)

ツールとエージェント

Python
import asyncio
from llama_index.core.agent.workflow import FunctionAgent

def get_weather(city: str) -> str:
    """Get the weather in a city."""
    return f"18°C and clear in {city}"

agent = FunctionAgent(
    tools=[get_weather],
    llm=llm,
    system_prompt="You answer questions about the weather.",
)

async def main():
    print(await agent.run("What's the weather in Lisbon?"))

asyncio.run(main())

ループを使わず、ツール付きの呼び出しを1回だけ行うには、llm.chat_with_tools([tool], user_msg=...) を使い、llm.get_tool_calls_from_response(...) で呼び出しを読み取ります。ツール呼び出しを参照してください。

思考とその他のフィールド

Python
import os
from llama_index.llms.openai_like import OpenAILike

thinker = OpenAILike(
    model="deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    is_chat_model=True,
    context_window=1000000,
    max_tokens=4000,
    additional_kwargs={"reasoning_effort": "high", "min_p": 0.05},
)

additional_kwargs の内容は、そのまますべてのリクエストに送られます。思考も max_tokens に含まれるので、余裕を持たせてください。思考を参照してください。

注意点

  • `reasoning_effort` はモデル自身の値しか受け付けません。 deepseek-v4.1-flash-uncensored は none、low、high、max を受け付け、glm-5.3-flash-uncensored は low、high を受け付けます。他のアプリの minimal、medium、xhigh は、モデルで最も近いレベルで動きます(medium は high、xhigh はそのモデルにあれば max として扱われます)。それ以外の値は 400 invalid_reasoning_effort になります。思考を参照してください。
  • GLMはツールを自分で選びます。 glm-5.3-flash-uncensored は tool_choice の auto と none だけを受け付けます。ツールを強制する(required や関数名の指定)と 400 unsupported_tool_choice になります。ツールを必ず呼ばせたい場合はDeepSeekを使ってください。
  • モデルが受け付けないフィールドは、拒否されず無視されます。 呼び出しは成功し、x-nokeep-ignored レスポンスヘッダーに無視されたものが記載されます。GLMが受け付けるのは tools、tool_choice、reasoning_effort だけなので、temperature と response_format は無視されます。各モデルが受け付けるフィールドを参照してください。
  • `n` は1でなければなりません。 複数の返信が必要な場合は、複数回呼び出してください。
  • チャットcompletionsのみ対応です。 /v1/responses も /v1/embeddings もありません。どちらかをデフォルトにするフレームワークは、チャットcompletionsを使うように指定する必要があります。埋め込みには別のプロバイダーが必要です。

RAGアプリでは Settings.llm = llm を設定し、埋め込みモデルはそのままにしてください。nokeepが動かすのはチャットモデルで、埋め込みは動かしません。glm-5.3-flash-uncensored の場合、LlamaIndexが毎回送る temperature は無視され、x-nokeep-ignored に記載されます。

よくある質問

なぜOpenAILikeを使い、OpenAIは使わないのですか?

LlamaIndexの OpenAI クラスは、モデル名を自分の一覧と照らし合わせ、知らない名前を拒否します。OpenAILike はどんなモデル名もどんなベースURLも受け付けます。

LlamaIndexはnokeep上でドキュメントをインデックス化しますか?

いいえ。インデックス化と埋め込みは、あなたが設定した場所で実行されます。nokeepに届くのはチャットの呼び出しだけで、nokeepが保存するのは各呼び出しのトークン数だけです。