Реализован 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>
This commit is contained in:
117
services/ai_service.py
Normal file
117
services/ai_service.py
Normal file
@@ -0,0 +1,117 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user