Запуск модели Ollama на языке программирования Python
Полноценный пример создания запроса к модели ИИ на языке Python
Python пример с полными параметрами
Установите зависимости:
pip install requests python-dotenv
ollama_client.py
:
import requests
import json
import os
from typing import Dict, Any, List, Optional
class OllamaClient:
def __init__(self, base_url: str = "http://localhost:11434"):
self.base_url = base_url
self.context = None
def generate(
self,
prompt: str,
model: str = "qwen3:4b",
stream: bool = False,
format: str = "text",
temperature: float = 0.7,
top_p: float = 0.9,
top_k: int = 40,
num_predict: int = 256,
stop: List[str] = None,
repeat_penalty: float = 1.1,
presence_penalty: float = 0.0,
frequency_penalty: float = 0.0,
seed: int = None,
mirostat: int = 0,
mirostat_tau: float = 5.0,
mirostat_eta: float = 0.1,
num_ctx: int = 2048,
num_thread: int = 8,
template: str = None,
use_context: bool = True
) -> Dict[str, Any]:
"""
Генерация текста с полным набором параметров
"""
if stop is None:
stop = ["\n", "###"]
payload = {
"model": model,
"prompt": prompt,
"stream": stream,
"format": format,
"options": {
"temperature": temperature,
"top_p": top_p,
"top_k": top_k,
"num_predict": num_predict,
"stop": stop,
"repeat_penalty": repeat_penalty,
"presence_penalty": presence_penalty,
"frequency_penalty": frequency_penalty,
"mirostat": mirostat,
"mirostat_tau": mirostat_tau,
"mirostat_eta": mirostat_eta,
"num_ctx": num_ctx,
"num_thread": num_thread
}
}
# Добавляем опциональные параметры
if seed is not None:
payload["options"]["seed"] = seed
if template:
payload["template"] = template
if use_context and self.context:
payload["context"] = self.context
try:
response = requests.post(
f"{self.base_url}/api/generate",
json=payload,
timeout=30
)
response.raise_for_status()
result = response.json()
# Сохраняем контекст для следующего запроса
if use_context and "context" in result:
self.context = result["context"]
return result
except requests.exceptions.RequestException as e:
print(f"Ошибка запроса: {e}")
return {"error": str(e)}
def chat(
self,
messages: List[Dict[str, str]],
model: str = "qwen3:4b",
**kwargs
) -> Dict[str, Any]:
"""
Чат-интерфейс с поддержкой истории сообщений
"""
payload = {
"model": model,
"messages": messages,
"stream": False,
"options": kwargs.get("options", {})
}
try:
response = requests.post(
f"{self.base_url}/api/chat",
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"Ошибка чата: {e}")
return {"error": str(e)}
def clear_context(self):
"""Очистить контекст"""
self.context = None
# Пример использования
def main():
client = OllamaClient()
# Пример 1: Простая генерация
print("=== Пример 1: Простая генерация ===")
result1 = client.generate(
prompt="Расскажи о преимуществах Python для data science",
model="qwen3:4b",
temperature=0.7,
top_p=0.9,
num_predict=150,
seed=42,
format="text"
)
print("Ответ:", result1.get("response", "Ошибка"))
# Пример 2: Продолжение с контекстом
print("\n=== Пример 2: Продолжение с контекстом ===")
result2 = client.generate(
prompt="А какие недостатки у Python?",
temperature=0.5,
top_p=0.8
)
print("Ответ:", result2.get("response", "Ошибка"))
# Пример 3: Чат с историей
print("\n=== Пример 3: Чат-интерфейс ===")
chat_result = client.chat(
messages=[
{"role": "user", "content": "Привет! Как тебя зовут?"},
{"role": "assistant", "content": "Привет! Я помощник на основе AI."},
{"role": "user", "content": "Расскажи о машинном обучении"}
],
model="qwen3:4b",
options={
"temperature": 0.7,
"top_p": 0.9
}
)
print("Чат ответ:", chat_result.get("message", {}).get("content", "Ошибка"))
# Пример 4: Сброс контекста
client.clear_context()
print("\nКонтекст очищен")
if __name__ == "__main__":
main()
advanced_example.py
- продвинутый пример:
import json
from ollama_client import OllamaClient
def advanced_example():
client = OllamaClient()
# Многошаговый диалог с сохранением контекста
steps = [
"Расскажи о языке программирования Go",
"Какие у него преимущества перед Python?",
"А недостатки какие?",
"Напиши простой HTTP сервер на Go"
]
for i, prompt in enumerate(steps, 1):
print(f"\n--- Шаг {i}: {prompt} ---")
result = client.generate(
prompt=prompt,
model="qwen3:4b",
temperature=0.7 if i > 1 else 0.5,
top_p=0.9,
num_predict=200 if i < 4 else 300,
seed=12345,
format="text" if i < 4 else "code"
)
if "response" in result:
print(f"Ответ: {result['response']}")
else:
print(f"Ошибка: {result.get('error', 'Неизвестная ошибка')}")
# Сохраняем контекст в файл
if client.context:
with open("context.json", "w") as f:
json.dump(client.context, f)
print("\nКонтекст сохранен в context.json")
if __name__ == "__main__":
advanced_example()