Files
tg_bot_language/services/ai_service.py
mamonov.ep 1a02c979d0 Реализован MVP телеграм бота для изучения языков
Основные компоненты:
- База данных (PostgreSQL) с моделями User, Vocabulary, Task
- Интеграция с OpenAI API для перевода слов
- Команды: /start, /add, /vocabulary, /help
- Сервисы для работы с пользователями, словарем и AI

Реализовано:
 Регистрация и приветствие пользователя
 Добавление слов в словарь с автоматическим переводом
 Просмотр личного словаря
 Архитектура проекта с разделением на слои

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 11:09:54 +03:00

118 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from openai import AsyncOpenAI
from config.settings import settings
from typing import Dict, List
class AIService:
"""Сервис для работы с OpenAI API"""
def __init__(self):
self.client = AsyncOpenAI(api_key=settings.openai_api_key)
async def translate_word(self, word: str, target_lang: str = "ru") -> Dict:
"""
Перевести слово и получить дополнительную информацию
Args:
word: Слово для перевода
target_lang: Язык перевода (по умолчанию русский)
Returns:
Dict с переводом, транскрипцией и примерами
"""
prompt = f"""Переведи английское слово/фразу "{word}" на русский язык.
Верни ответ строго в формате JSON:
{{
"word": "{word}",
"translation": "перевод",
"transcription": "транскрипция в IPA",
"examples": [
{{"en": "пример на английском", "ru": "перевод примера"}},
{{"en": "ещё один пример", "ru": "перевод примера"}}
],
"category": "категория слова (работа, еда, путешествия и т.д.)",
"difficulty": "уровень сложности (A1/A2/B1/B2/C1/C2)"
}}
Важно: верни только JSON, без дополнительного текста."""
try:
response = await self.client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Ты - помощник для изучения английского языка. Отвечай только в формате JSON."},
{"role": "user", "content": prompt}
],
temperature=0.3,
response_format={"type": "json_object"}
)
import json
result = json.loads(response.choices[0].message.content)
return result
except Exception as e:
# Fallback в случае ошибки
return {
"word": word,
"translation": "Ошибка перевода",
"transcription": "",
"examples": [],
"category": "unknown",
"difficulty": "A1"
}
async def check_answer(self, question: str, correct_answer: str, user_answer: str) -> Dict:
"""
Проверить ответ пользователя с помощью ИИ
Args:
question: Вопрос задания
correct_answer: Правильный ответ
user_answer: Ответ пользователя
Returns:
Dict с результатом проверки и обратной связью
"""
prompt = f"""Проверь ответ пользователя на задание по английскому языку.
Задание: {question}
Правильный ответ: {correct_answer}
Ответ пользователя: {user_answer}
Верни ответ в формате JSON:
{{
"is_correct": true/false,
"feedback": "краткое объяснение (если ответ неверный, объясни ошибку и дай правильный вариант)",
"score": 0-100
}}
Учитывай возможные вариации ответа. Если смысл передан правильно, даже с небольшими грамматическими неточностями, засчитывай ответ."""
try:
response = await self.client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Ты - преподаватель английского языка. Проверяй ответы справедливо, учитывая контекст."},
{"role": "user", "content": prompt}
],
temperature=0.3,
response_format={"type": "json_object"}
)
import json
result = json.loads(response.choices[0].message.content)
return result
except Exception as e:
return {
"is_correct": False,
"feedback": "Ошибка проверки ответа",
"score": 0
}
# Глобальный экземпляр сервиса
ai_service = AIService()