This commit is contained in:
xds
2025-09-30 23:43:51 +04:00
commit 6f744b8066
7 changed files with 2327 additions and 0 deletions

169
deepseek_module.py Normal file
View File

@@ -0,0 +1,169 @@
import asyncio
import datetime
import json
import logging
import time
from yandex_cloud_ml_sdk import YCloudML
from deepseek import DeepSeekAPI
# Инициализация клиентов
sdk = YCloudML(
folder_id="b1g9ebhd2j6dapolmspn",
auth="t1.9euelZqOxsiNmczGlYmVjZqPnciemu3rnpWamMbLiY7Ix8zHyMvPlZGJmc3l9PcLQDFA-e93IjGb3fT3S24uQPnvdyIxm83n9euelZqSyo6cyJ2PnMjInceWmI6QnO_8xeuelZqSyo6cyJ2PnMjInceWmI6QnA.73RaOj7lFKgEkAFnhrpy1LkS3EvH-hYeBPZ1mX43hyPgSCZ4ShrVFjarra1xCHGpRA3F_Z576viaMyg6UXR-BQ"
)
api_client = DeepSeekAPI("sk-2a2045f744474426b03fc18e30e9f561")
async def nlp_yandex(question: str) -> str:
"""Асинхронный запрос к Yandex GPT"""
start_time = datetime.datetime.now()
try:
model = sdk.models.completions("yandexgpt", model_version="rc")
model.configure(response_format="json", temperature=1)
operation = await model._run_deferred([
{
"role": "system",
"text": "Ты используешься как nlp процессор. Твоя задача по заданному комментарию траты понять в какую категорию эта трата относится. "
"Ответ предположением 3х категории с рассчитанным весом в формате json [{'category': 'cat1', 'weight': 0.5}, ...]."
"Используй категории из данных."
},
{
"role": "assistant",
"text": "Aвто,Аптеки,Дни рождения и подарки,Другое,ЖКХ,Интернет и связь,Кофе,Красота,Кредиты и долги,Мебель,Медицина,Одежда,Продукты,Прочие услуги,Путешествия,Развлечения,Ребенок,Рестораны и кафе,Сбережения,Спорт,Транспорт,Электроника"
},
{"role": "user", "text": question},
])
while operation.get_status().is_running:
print(operation.get_status())
await asyncio.sleep(0.1)
result = operation.get_result()
response_msg = "".join(alt.text for alt in result)
print(f"Yandex NLP time: {datetime.datetime.now() - start_time}")
return response_msg.replace('```', '')
except Exception as e:
logging.error(f"Yandex NLP error: {str(e)}")
return "Ошибка обработки запроса"
def fast_nlp_yandex(question: str) -> str:
"""Cинхронный запрос к Yandex GPT"""
start_time = datetime.datetime.now()
try:
model = sdk.models.completions("yandexgpt", model_version="rc")
model.configure(response_format="json", temperature=1)
result = model.run([
{
"role": "system",
"text": "Ты используешься как nlp процессор. Твоя задача по заданному комментарию траты понять в какую категорию эта трата относится. "
"Ответ предположением 3х категории с рассчитанным весом в формате json [{'category': 'cat1', 'weight': 0.5}, ...]."
"Используй категории из данных."
},
{
"role": "assistant",
"text": "Aвто,Аптеки,Дни рождения и подарки,Другое,ЖКХ,Интернет и связь,Кофе,Красота,Кредиты и долги,Мебель,Медицина,Одежда,Продукты,Прочие услуги,Путешествия,Развлечения,Ребенок,Рестораны и кафе,Сбережения,Спорт,Транспорт,Электроника"
},
{"role": "user", "text": question},
])
response_msg = "".join(alt.text for alt in result)
print(f"Sync Yandex NLP time: {datetime.datetime.now() - start_time}")
return response_msg.replace('```', '')
except Exception as e:
logging.error(f"Yandex NLP error: {str(e)}")
return "Ошибка обработки запроса"
def nlp_cloud(question: str) -> str:
"""Запрос к DeepSeek API"""
start_time = datetime.datetime.now()
try:
prompt = [
{
"role": "system",
"content": "Ты используешься как nlp процессор. Твоя задача по заданному комментарию траты понять в какую категорию эта трата относится. "
"Ответ предположением как минимум 3х категории с рассчитанным весом в формате json [{'id': 'id1', 'weight': 0.5}, ...]. "
"Используй ТОЛЬКО категории из данных."
},
{"role": "user", "content": question},
{
"role": "assistant",
"content": "Aвто(id=677bc767c7857460a491bd52),Аптеки(id=677bc767c7857460a491bd59),Дни рождения и подарки(id=677bc767c7857460a491bd54),Другое(id=67b83e141fc0575a3f0a383f),ЖКХ(id=677bc767c7857460a491bd4b),Интернет и связь(id=677bc767c7857460a491bd53),Кофе(id=677bc767c7857460a491bd4e),Красота(id=677bc767c7857460a491bd50),Кредиты и долги(id=677bc767c7857460a491bd49),Мебель(id=677bc767c7857460a491bd4c),Медицина(id=677bc767c7857460a491bd5a),Одежда(id=677bc767c7857460a491bd5b),Продукты(id=677bc767c7857460a491bd4a),Прочие услуги(id=677bc767c7857460a491bd4d),Путешествия(id=677bc767c7857460a491bd56),Развлечения(id=677bc767c7857460a491bd58),Ребенок(id=677bc767c7857460a491bd5d),Рестораны и кафе(id=677bc767c7857460a491bd55),Сбережения(id=677bc767c7857460a491bd4f),Спорт(id=677bc767c7857460a491bd57),Транспорт(id=677bc767c7857460a491bd51),Электроника(id=677bc767c7857460a491bd5c)"
},
]
response = ""
for chunk in api_client.chat_completion(prompt=prompt, stream=True):
response += chunk
# Очистка и парсинг JSON
clean_response = response.replace('```json', '').replace('```', '').strip()
try:
parsed = json.loads(clean_response)
print(f"DeepSeek NLP time: {datetime.datetime.now() - start_time}")
return json.dumps(parsed, ensure_ascii=False, indent=2)
except json.JSONDecodeError:
return clean_response
except Exception as e:
logging.error(f"DeepSeek NLP error: {str(e)}")
return json.dumps({"error": str(e)})
def generate_spends():
"""Запрос к DeepSeek API"""
start_time = datetime.datetime.now()
try:
prompt = [
{
"role": "system",
"content": "Ты используешься для генерации виртуальных трат, для последующего обучения NLP модели. "
"Тебе даны категории с их идентификаторами. По запросу сгенерируй 50 человеческих транзакций."
"Используй ТОЛЬКО категории из данных.Ответь в формате csv id, comment, category"
},
{"role": "user", "content": "Давай"},
{
"role": "assistant",
"content": "Aвто(id=677bc767c7857460a491bd52),Аптеки(id=677bc767c7857460a491bd59),Дни рождения и подарки(id=677bc767c7857460a491bd54),Другое(id=67b83e141fc0575a3f0a383f),ЖКХ(id=677bc767c7857460a491bd4b),Интернет и связь(id=677bc767c7857460a491bd53),Кофе(id=677bc767c7857460a491bd4e),Красота(id=677bc767c7857460a491bd50),Кредиты и долги(id=677bc767c7857460a491bd49),Мебель(id=677bc767c7857460a491bd4c),Медицина(id=677bc767c7857460a491bd5a),Одежда(id=677bc767c7857460a491bd5b),Продукты(id=677bc767c7857460a491bd4a),Прочие услуги(id=677bc767c7857460a491bd4d),Путешествия(id=677bc767c7857460a491bd56),Развлечения(id=677bc767c7857460a491bd58),Ребенок(id=677bc767c7857460a491bd5d),Рестораны и кафе(id=677bc767c7857460a491bd55),Сбережения(id=677bc767c7857460a491bd4f),Спорт(id=677bc767c7857460a491bd57),Транспорт(id=677bc767c7857460a491bd51),Электроника(id=677bc767c7857460a491bd5c)"
},
]
response = ""
for chunk in api_client.chat_completion(prompt=prompt, stream=True):
response += chunk
# Очистка и парсинг JSON
clean_response = response.replace('```json', '').replace('```', '').strip()
try:
parsed = json.loads(clean_response)
print(f"DeepSeek process time: {datetime.datetime.now() - start_time}")
return json.dumps(parsed, ensure_ascii=False, indent=2)
except json.JSONDecodeError:
return clean_response
except Exception as e:
logging.error(f"DeepSeek NLP error: {str(e)}")
return json.dumps({"error": str(e)})
async def main():
# Тестирование функций
# req = 'мойка'
# yandex_result = fast_nlp_yandex(req)
# print("Yandex:", yandex_result)
#
# cloud_result = nlp_cloud(req)
# print("DeepSeek:", cloud_result)
print( generate_spends())
if __name__ == "__main__":
asyncio.run(main())