کد
LlamaIndex
کلاس OpenAILike در LlamaIndex را با آدرس پایه، کلیدت و شناسهٔ مدل به کار ببر. چهار پرچم را تنظیم کن که خودش نمیتواند حدس بزند؛ بقیهٔ LlamaIndex روی آن کار میکند.
بررسیشده در ۷ آبان ۱۴۰۵
نصب و اتصال
pip install llama-index-core llama-index-llms-openai-like
export NOKEEP_API_KEY="sk-nokeep-test" # your own key once it connectsimport 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درخواستهای چت میفرستد. بدون آن، LlamaIndex به/v1/completionsمیزند که nokeep ندارد.is_function_calling_model=Trueبه عاملها وchat_with_toolsاجازه میدهد ابزار بفرستند.context_windowبهطور پیشفرض ۳٬۹۰۰ توکن است، پس LlamaIndex چتهای بلند و متن بازیابیشده را کوتاه میکند تا جا شوند. آن را به زمینهٔ واقعی مدل تنظیم کن: ۱٬۰۰۰٬۰۰۰ برای DeepSeek و ۱۲۸٬۰۰۰ برای GLM.temperatureبهطور پیشفرض ۰٫۱ است که داستان را بیروح و تکراری میکند. مقدار خودت را بگذار.
چت و استریم
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)ابزارها و عاملها
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())برای یک درخواست با ابزار و بدون حلقه، از llm.chat_with_tools([tool], user_msg=...) استفاده کن و فراخوانیها را با llm.get_tool_calls_from_response(...) بخوان. ببین فراخوانی ابزار.
تفکر و فیلدهای دیگر
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` باید ۱ باشد. برای چند پاسخ، چند درخواست جدا بفرست.
- فقط چت کامپلیشنها.
/v1/responsesو/v1/embeddingsوجود ندارد؛ چارچوبی که به یکی از آنها پیشفرض دارد باید روی چت کامپلیشنها تنظیم شود، و embedding از ارائهدهندهٔ دیگری گرفته شود.
برای اپ RAG، Settings.llm = llm را بگذار و مدل embedding خود را همانجا نگه دار: nokeep مدل چت را اجرا میکند، نه embedding ها. با glm-5.3-flash-uncensored، temperature که LlamaIndex در هر درخواست میفرستد حذف میشود و در x-nokeep-ignored نام برده میشود.
پرسشها
چرا OpenAILike و نه OpenAI؟
کلاس OpenAI در LlamaIndex نام مدل را با فهرست خودش مقایسه میکند و نامهایی را که نمیشناسد نمیپذیرد. OpenAILike هر نام و هر آدرس پایهای را میپذیرد.
آیا LlamaIndex اسناد مرا روی nokeep ایندکس میکند؟
نه. ایندکسسازی و embedding ها همانجایی اجرا میشوند که خودت تنظیم کردهای. فقط درخواستهای چت به nokeep میرسند و nokeep فقط تعداد توکن هر کدام را نگه میدارد.