Đi tới nội dung
Tất cả tài liệu

Code

LlamaIndex

Dùng lớp OpenAILike của LlamaIndex với địa chỉ base URL, khóa của bạn và một id mô hình. Đặt bốn cờ mà nó không tự đoán được, rồi phần còn lại của LlamaIndex chạy trên nền đó.

Đã kiểm tra 29 tháng 10, 2026

Cài đặt và kết nối

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 gửi chat completions. Nếu không có nó, LlamaIndex gọi /v1/completions, mà nokeep không có.
  • is_function_calling_model=True cho phép agent và chat_with_tools gửi công cụ.
  • context_window mặc định là 3.900 token, nên LlamaIndex sẽ cắt bớt các cuộc trò chuyện dài và đoạn văn bản truy xuất để vừa khít. Hãy đặt theo ngữ cảnh thật của mô hình: 1.000.000 cho DeepSeek, 128.000 cho GLM.
  • temperature mặc định là 0,1, khiến truyện hư cấu phẳng và lặp lại. Hãy đặt giá trị của riêng bạn.

Chat và 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)

Công cụ và agent

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

Với một lệnh gọi có công cụ và không cần vòng lặp, dùng llm.chat_with_tools([tool], user_msg=...) và đọc các lệnh gọi bằng llm.get_tool_calls_from_response(...). Xem Gọi công cụ.

Thinking và các trường khác

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 được đưa nguyên vẹn vào mọi yêu cầu. Phần thinking được tính vào max_tokens, nên hãy để đủ chỗ cho nó. Xem Thinking.

Những điều cần lưu ý

  • `reasoning_effort` chỉ nhận giá trị riêng của mô hình. deepseek-v4.1-flash-uncensored nhận none, low, high, max; glm-5.3-flash-uncensored nhận low, high. Các giá trị minimal, medium và xhigh của ứng dụng khác sẽ chạy ở mức gần nhất mà mô hình hỗ trợ (medium thành high, xhigh thành max nơi mô hình có mức đó); mọi giá trị khác nhận 400 invalid_reasoning_effort. Xem Thinking.
  • GLM tự chọn công cụ. glm-5.3-flash-uncensored chỉ nhận tool_choice là auto hoặc none. Ép buộc một công cụ (required, hoặc nêu tên một hàm) sẽ nhận 400 unsupported_tool_choice. Dùng DeepSeek khi bạn cần ép chọn một công cụ.
  • Trường mà mô hình không nhận được sẽ bị bỏ, không bị từ chối. Lệnh gọi vẫn được trả lời, và header phản hồi x-nokeep-ignored nêu tên những gì đã bị bỏ. GLM chỉ giữ tools, tool_choice và reasoning_effort, nên temperature và response_format của nó bị bỏ. Xem mỗi mô hình nhận những trường nào.
  • `n` phải bằng 1. Muốn nhiều câu trả lời, hãy gọi nhiều lần.
  • Chỉ có chat completions. Không có /v1/responses và không có /v1/embeddings; framework nào mặc định dùng một trong hai cần được trỏ sang chat completions, và embeddings cần một provider khác.

Với ứng dụng RAG, đặt Settings.llm = llm và giữ mô hình embedding ở nơi nó đang nằm: nokeep chạy mô hình chat, không chạy embeddings. Với glm-5.3-flash-uncensored, temperature mà LlamaIndex gửi trong mọi lệnh gọi sẽ bị bỏ và được nêu tên trong x-nokeep-ignored.

Câu hỏi

Vì sao dùng OpenAILike chứ không phải OpenAI?

Lớp OpenAI của LlamaIndex đối chiếu tên mô hình với danh sách riêng của nó và từ chối những tên không biết. OpenAILike nhận mọi tên và mọi base URL.

LlamaIndex có lập chỉ mục tài liệu của tôi trên nokeep không?

Không. Việc lập chỉ mục và embeddings chạy ở nơi bạn đã thiết lập. Chỉ các lệnh gọi chat mới tới nokeep, và nokeep chỉ giữ số token của từng lệnh.