Lompat ke konten
Semua dokumentasi

Kode

LlamaIndex

Pakai kelas OpenAILike dari LlamaIndex dengan base URL, kunci kamu, dan id model. Atur empat flag yang tidak bisa ditebak sendiri, lalu sisa LlamaIndex bekerja di atasnya.

Diperiksa 29 Oktober 2026

Pasang dan hubungkan

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 mengirim chat completions. Tanpa itu, LlamaIndex memanggil /v1/completions, yang tidak dimiliki nokeep.
  • is_function_calling_model=True membuat agen dan chat_with_tools bisa mengirim tools.
  • context_window default-nya 3,900 token, jadi LlamaIndex memotong chat panjang dan teks hasil pencarian agar muat. Atur ke konteks asli model: 1,000,000 untuk DeepSeek, 128,000 untuk GLM.
  • temperature default-nya 0.1, yang membuat fiksi datar dan berulang. Atur sendiri.

Chat dan streaming

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)

Tools dan agen

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())

Untuk satu panggilan dengan tools tanpa loop, pakai llm.chat_with_tools([tool], user_msg=...) dan baca panggilannya dengan llm.get_tool_calls_from_response(...). Lihat Pemanggilan tool.

Thinking dan field lain

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 dikirim apa adanya di setiap permintaan. Thinking dihitung ke max_tokens, jadi beri ruang. Lihat Thinking.

Jebakan

  • `reasoning_effort` hanya menerima nilai milik model. deepseek-v4.1-flash-uncensored menerima none, low, high, max; glm-5.3-flash-uncensored menerima low, high. Nilai minimal, medium dan xhigh dari aplikasi lain dijalankan pada level terdekat model (medium sebagai high, xhigh sebagai max jika model punya), nilai lain apa pun mendapat 400 invalid_reasoning_effort. Lihat Thinking.
  • GLM memilih tool-nya sendiri. glm-5.3-flash-uncensored hanya menerima tool_choice auto atau none. Memaksa sebuah tool (required, atau menyebut nama fungsi) mendapat 400 unsupported_tool_choice. Pakai DeepSeek jika perlu memaksa satu tool.
  • Field yang tidak bisa diterima sebuah model dibuang, bukan ditolak. Panggilan tetap dijawab, dan header respons x-nokeep-ignored menyebut apa yang dibuang. GLM hanya menerima tools, tool_choice dan reasoning_effort, jadi temperature dan response_format-nya dibuang. Lihat field apa yang diterima tiap model.
  • `n` harus 1. Minta beberapa balasan dengan beberapa panggilan.
  • Hanya chat completions. Tidak ada /v1/responses dan tidak ada /v1/embeddings; framework yang default-nya memakai salah satunya harus diarahkan ke chat completions, dan embedding perlu penyedia lain.

Untuk aplikasi RAG, atur Settings.llm = llm dan biarkan model embedding-mu di tempatnya: nokeep menjalankan model chat, bukan embedding. Dengan glm-5.3-flash-uncensored, temperature yang dikirim LlamaIndex di setiap panggilan dibuang dan disebut di x-nokeep-ignored.

Pertanyaan

Kenapa OpenAILike dan bukan OpenAI?

Kelas OpenAI milik LlamaIndex mencocokkan nama model dengan daftarnya sendiri dan menolak nama yang tidak dikenalnya. OpenAILike menerima nama model dan base URL apa pun.

Apakah LlamaIndex mengindeks dokumen saya di nokeep?

Tidak. Pengindeksan dan embedding berjalan di tempat kamu mengaturnya. Hanya panggilan chat yang sampai ke nokeep, dan nokeep hanya menyimpan jumlah token untuk tiap panggilan.