99 lines
5.3 KiB
Python
99 lines
5.3 KiB
Python
import json
|
||
import os
|
||
import requests
|
||
|
||
# Основные настройки
|
||
OLLAMA_URL = "http://localhost:11434/api/generate"
|
||
MODEL_NAME = "qwen3:30b-a3b" # Имя модели в Ollama
|
||
GIGA_URL = "https://gigachat.devices.sberbank.ru/api/v1/chat/completions"
|
||
GIGA_ODEL_NAME = "GigaChat-2-Max"
|
||
|
||
|
||
def generate_cat_breed_description(breed):
|
||
"""Генерирует подробное описание породы кошки с помощью Ollama"""
|
||
prompt = f"""Создай подробное и структурированное описание породы кошки {breed}, включая следующие разделы:
|
||
1. Происхождение и история породы (откуда появилась, легенды, если есть)
|
||
2. Физические характеристики (размер, вес, тип и текстура шерсти, уникальные черты морды или тела)
|
||
3. Характер и поведение (темперамент, уровень привязанности к хозяину, активность, игривость, склонность к мяуканью)
|
||
4. Совместимость (с детьми, другими кошками и собаками, отношение к незнакомцам)
|
||
5. Интеллект и обучаемость (способность к трюкам, приучение к лотку, когтеточке, любопытство)
|
||
6. Уход и содержание (особенности груминга, потребность в вертикальном пространстве/игровых комплексах, гигиена ушей и глаз)
|
||
7. Здоровье и генетика (характерные для породы заболевания, средняя продолжительность жизни)
|
||
8. Питание (склонность к перееданию или аллергиям, рекомендации по рациону)
|
||
9. Итог: кому идеально подойдет эта порода (для домоседов, больших семей, аллергиков и т.д.)
|
||
|
||
Описание должно быть написано живым, но информативным языком, с четкой структурой."""
|
||
|
||
# response = requests.post(OLLAMA_URL,
|
||
# json={
|
||
# "model": MODEL_NAME,
|
||
# "prompt": prompt,
|
||
# "stream": False,
|
||
# })
|
||
|
||
response = requests.post(GIGA_URL,
|
||
headers={
|
||
'Content-Type': 'application/json',
|
||
'Accept': 'application/json',
|
||
"Authorization": "Bearer "},
|
||
data=json.dumps({
|
||
"model": GIGA_ODEL_NAME,
|
||
"messages":[{
|
||
"role": "user",
|
||
"content": prompt,
|
||
}],
|
||
"temperature": 0,
|
||
"top_p": 0,
|
||
"stream": False,
|
||
"max_tokens": 3000,
|
||
"repetition_penalty": 1,
|
||
"update_interval": 0
|
||
}), verify=False
|
||
)
|
||
|
||
if response.status_code == 200:
|
||
print(response.json())
|
||
return response.json().get("choices")[0].get("message").get("content")
|
||
#return response.json().get("response", "Не удалось получить описание")
|
||
else:
|
||
return f"Ошибка при генерации описания для {breed}, {response.status_code}, {response.text}"
|
||
|
||
|
||
def save_description(breed_file_name, description):
|
||
"""Сохраняет описание в файл"""
|
||
os.makedirs("cat_descriptions", exist_ok=True)
|
||
filename = f"cat_descriptions/{breed_file_name}.txt"
|
||
|
||
with open(filename, "w", encoding="utf-8") as f:
|
||
f.write(description)
|
||
print(f"Сохранено: {filename}")
|
||
|
||
|
||
def main():
|
||
# Путь к JSON файлу с метками кошек
|
||
labels_path = "../../labels_cats.json"
|
||
|
||
if not os.path.exists(labels_path):
|
||
print(f"Файл {labels_path} не найден!")
|
||
return
|
||
|
||
with open(labels_path, encoding="utf-8") as f:
|
||
cats = json.load(f)
|
||
for key in cats:
|
||
# Превращаем "british_shorthair" в "British Shorthair" для промпта
|
||
name = cats[key].replace("_", " ")
|
||
file_key = cats[key]
|
||
|
||
print(f"Генерация статьи для кошки: {name}...")
|
||
|
||
# Проверка, существует ли файл, чтобы не тратить токены/время
|
||
if os.path.isfile(f"cat_descriptions/{file_key}.txt"):
|
||
print(f"Описание уже существует: {file_key}.")
|
||
continue
|
||
|
||
description = generate_cat_breed_description(name)
|
||
save_description(file_key, description)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main() |