Python va Ollama Bilan Shaxsiy AI Chatbot Yaratish
Muallif: Javohir Abdullayev · · Suniy intellekt

Kirish: Nega Aynan Shaxsiy va Lokal AI?
Hozirgi kunda sun'iy intellekt dasturiy ta'minot bozorining ajralmas qismiga aylandi. Ko'pchilik dasturchilar OpenAI, Anthropic yoki Google kabi bulutli servislarning API xizmatlaridan foydalanishadi. Biroq, tashqi API'larga tayanish har doim ham optimal yechim emas. Narxlarning qimmatligi, so'rovlar soniga qo'yilgan limitlar, tarmoqqa to'liq bog'liqlik va eng asosiysi — maxfiy ma'lumotlarning uchinchi tomon serverlariga yuborilishi jiddiy xavotir uyg'otadi.
Aynan shu sababli lokal sun'iy intellekt modellari (Local LLM) katta qiziqish uyg'otmoqda. Ushbu amaliy qo'llanmada biz Ollama platformasi va Python yordamida o'z kompyuteringizda to'liq avtonom ishlaydigan, suhbat tarixini eslab qoluvchi va javoblarni jonli oqimda (streaming) chiqaruvchi aqlli chatbot yaratamiz.
Kerakli Vositalar va Tayyorgarlik
Loyiha davomida bizga quyidagi vositalar kerak bo'ladi:
- Python 3.10+: Asosiy dasturlash tili.
- Ollama: Ochiq kodli LLM modellarini (masalan, Llama 3, Mistral, Gemma) lokal tizimda qulay boshqarish vositasi.
- ollama-python: Ollama servisi bilan aloqa qiluvchi rasmiy Python kutubxonasi.
1. Ollama-ni O'rnatish va Modelni Yuklab Olish
Dastlab ollama.com saytiga kiring va operatsion tizimingizga (macOS, Linux yoki Windows) mos variantni yuklab olib o'rnating. O'rnatish tugagach, terminalingizda quyidagi buyruq orqali yengil va juda tez ishlaydigan llama3.2:1b yoki llama3.2:3b modelini yuklab oling:
ollama run llama3.2:3bModel yuklangach, terminalda Ollama siz bilan muloqotga kirishadi. Chiqish uchun /bye buyrug'ini yozing. Endi model kompyuteringiz xotirasida saqlangan va Python orqali murojaat qilishga tayyor.
Python Virtual Muhitini Sozlash
Loyiha uchun alohida katalog yaratamiz va Python virtual muhitini ishga tushiramiz:
mkdir local-ai-chatbot
cd local-ai-chatbot
python -m venv venv
source venv/bin/activate # Windows uchun: venv\Scripts\activate
pip install ollama1-Qadam: Ollama Bilan Birinchi Bog'lanish
Kelgusi qadamda Python orqali modelga birinchi so'rovni yuborib ko'ramiz. Loyiha papkasida main.py faylini yarating va quyidagi kodni yozing:
import ollama
def test_connection():
response = ollama.chat(
model="llama3.2:3b",
messages=[
{
"role": "user",
"content": "Salom! O'zing haqingda qisqacha aytib ber."
}
]
)
print(response["message"]["content"])
if __name__ == "__main__":
test_connection()Ushbu skriptni ishga tushirganingizda, Python kutubxonasi lokal ishlab turgan Ollama daemon-serveri bilan bog'lanadi va sun'iy intellekt javobini to'liq qaytaradi. Bu yerda hech qanday API kalit yoki to'lov talab qilinmadi.
2-Qadam: Kontekstni Eslab Qoluvchi Chatbot Arxitekturasi
Haqiqiy muloqot tizimi o'tmishdagi savol-javoblarni yodda tutishi shart. LLM modellari har bir so'rovda holatsiz (stateless) ishlaydi. Demak, suhbat davomiyligini ta'minlash uchun har gal yangi savol yuborilganda oldingi xabarlar tarixini ham modelga qo'shib jo'natishimiz lozim.
Keling, suhbat tarixini ro'yxat (list) shaklida saqlaydigan va terminal orqali uzluksiz ishlaydigan to'liq chatbot kodini yozamiz:
import sys
import ollama
MODEL_NAME = "llama3.2:3b"
SYSTEM_PROMPT = {
"role": "system",
"content": (
"Siz PyCoder.uz dasturchilari uchun do'stona va tajribali texnik yordamchisiz. "
"Foydalanuvchi savollariga aniq, lo'nda va amaliy kod misollari bilan javob bering. "
"Faqat o'zbek tilida javob qaytaring."
)
}
def start_chat():
conversation_history = [SYSTEM_PROMPT]
print("=" * 50)
print("Lokal AI Chatbot ishga tushdi!")
print("Suhbatdan chiqish uchun 'exit' yoki 'chiqish' deb yozing.")
print("=" * 50 + "\n")
while True:
try:
user_input = input("Siz: ").strip()
except (KeyboardInterrupt, EOFError):
print("\nSuhbat yakunlandi.")
sys.exit(0)
if not user_input:
continue
if user_input.lower() in ["exit", "quit", "chiqish"]:
print("Suhbat yakunlandi. Xayr!")
break
conversation_history.append({"role": "user", "content": user_input})
print("\nAI Yordamchi: ", end="", flush=True)
try:
stream_response = ollama.chat(
model=MODEL_NAME,
messages=conversation_history,
stream=True
)
full_bot_response = ""
for chunk in stream_response:
chunk_content = chunk.get("message", {}).get("content", "")
print(chunk_content, end="", flush=True)
full_bot_response += chunk_content
print("\n" + "-" * 50 + "\n")
conversation_history.append({"role": "assistant", "content": full_bot_response})
except Exception as error:
print(f"\nXatolik yuz berdi: {error}\n")
if __name__ == "__main__":
start_chat()3-Qadam: Muhim Yondashuvlar Tahlili
Streaming Imkoniyati
Yuqoridagi kodda stream=True parametri ishlatildi. Standart holatda model butun javobni to'liq generatsiya qilib bo'lmaguncha foydalanuvchi kutib qoladi. Streaming esa hosil bo'lgan har bir so'z yoki belgi (token) tayyor bo'lishi bilanoq uni darhol ekranga chiqaradi. Bu orqali foydalanuvchi kutish vaqti deyarli nolga tushadi va tizim ancha sezgir (responsive) tuyuladi.
System Prompt va Rol Belgilash
SYSTEM_PROMPT orqali biz modelning yo'nalishini belgilab oldik. Bu yerda modelga texnik yordamchi bo'lishi va savollarga faqat o'zbek tilida aniq javob berishi uqtirildi. Siz ushbu ko'rsatmani o'z ehtiyojingizga qarab o'zgartirishingiz mumkin: masalan, kod sharhlovchi, tarjimon yoki ingliz tili repetitori.
Xotirani Boshqarish (Context Truncation)
Agar suhbat juda uzoq davom etsa, conversation_history massivi haddan tashqari kattalashib ketadi. Modellar o'z kontekst oynasiga (context window) ega. Agar xabarlar limiti oshib ketsa, javoblar sifati tushishi yoki xatolik kelib chiqishi mumkin. Katta loyihalarda ro'yxat uzunligini cheklash tavsiya etiladi:
# Tarixda faqat tizim ko'rsatmasi va oxirgi 10 ta xabarni qoldirish
if len(conversation_history) > 11:
conversation_history = [conversation_history[0]] + conversation_history[-10:]Amaliyotda Modellar Tanlovi va Resurslar
Lokal AI modellarini ishlatishda kompyuteringizning xotirasi (RAM va Video VRAM) hal qiluvchi ahamiyatga ega:
- Llama 3.2 (1B yoki 3B): 4GB - 8GB RAM mavjud bo'lgan oddiy noutbuklarda ham juda tez ishlaydi. Oddiy matn tahlili va yordamchilar uchun a'lo tanlov.
- Mistral (7B) yoki Llama 3.1 (8B): 16GB RAM yoki 8GB+ VRAM talab qiladi. Dasturlash kodlarini yozish va chuqur mantiqiy fikrlash uchun ajoyib samara beradi.
- DeepSeek-Coder yoki Qwen 2.5 Coder: Dasturchilar uchun maxsus moslashtirilgan, kod tahlili va refaktoringda ChatGPT-4 darajasiga yaqin natija ko'rsatuvchi kuchli modellar.
Xulosa
Ushbu tutorial orqali biz biron-bir uchinchi tomon servisiga to'lov qilmasdan, to'liq shaxsiy va xavfsiz sun'iy intellekt chatbotini yaratdik. Bu arxitekturani yanada kengaytirib, Telegram botga integratsiya qilish, o'z PDF hujjatlaringiz bilan ishlaydigan RAG (Retrieval-Augmented Generation) tizimiga aylantirish yoki lokal FastAPI backendiga ulash mumkin.
O'z kompyuteringizda ushbu kodni sinab ko'ring va shaxsiy AI assistentingiz imkoniyatlarini yanada rivojlantiring!
Teglar: #Python #Ollama #Sun'iy Intellekt #Chatbot #Lokal AI