@scq

Выдает ошибку телеграм бот CHATGpt, что делать?

Traceback (most recent call last):
  File "C:\Users\EvanSay\PycharmProjects\pythonProject5\main.py", line 4, in <module>
    from g4f.Provider import Aichatos
ImportError: cannot import name 'Aichatos' from 'g4f.Provider' (C:\Users\EvanSay\PycharmProjects\pythonProject5\.venv\Lib\site-packages\g4f\Provider\__init__.py)


Код:
import asyncio

from g4f.client import AsyncClient
from g4f.Provider import Aichatos

from aiogram import (Router, Bot, Dispatcher,
                     F, types)
import logging

router = Router(name=__name__)
lock = asyncio.Lock()

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)


async def response_gpt(message):
    client = AsyncClient(
        provider=Aichatos
    )

    try:
        completion = await client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=message,
        )

        return completion.choices[0].message.content

    except Exception as ex:
        print(ex)
        return None


@router.business_message(F.text)
async def handler_message(message: types.Message):
    async with lock:
        user_id = message.chat.id
        logger.info(f"Received business message from {user_id}: {message.text}")

        messages = [
            {"role": "system",
             "content": "Привет! Ты - ИИ-помощник для бизнеса в Telegram. Отвечай на вопросы пользователей"},
            {"role": "user", "content": message.text}
        ]

        response = await response_gpt(messages)

        if response is None:
            await message.answer("Я не понимаю вас. Попробуй еще раз.")
        else:
            logger.info(f"Response sent to business chat: {response}")
            await message.answer(response)


async def main() -> None:
    bot = Bot(token="токен")
    dp = Dispatcher()

    dp.include_router(router)

    await bot.delete_webhook(drop_pending_updates=True)
    await dp.start_polling(bot)


asyncio.run(main())
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 3
LanskoyGames
@LanskoyGames
Нейросети, C#, C++, Python, и смотри описание:-)
Код должен быть в теге код и желательно с языком, а иначе трудно читать и меньше людей помогут.
Интерпретатор ругается, что не может импортировать Aichatos, Вы его установили?
И третье нейросеть называется ChatGPT.
Удачи!
Ответ написан
Комментировать
theurs
@theurs
Скорее всего просто устарел код. gpt 3.5 намекает что пора закапывать.

Вот тебе простейший вариант рабочий. Использует duckduckgo как источник, работает из рф без прокси впн и вообще какой либо регистрации. Токен надо сохранить в файл cfg.py ну или прямо в этот текст вписать.

#!/usr/bin/env python3
# pip install -U duckduckgo_search[lxml]
# pip install pyTelegramBotAPI


import time
import functools
import threading
from duckduckgo_search import DDGS
import telebot

import cfg


# Объекты для доступа к чату {id:DDG object}
CHATS_OBJ = {}
# хранилище диалогов {id:list(mem)}
CHATS = {}
# блокировка чатов что бы не испортить историю
# {id:lock}
LOCKS = {}


def async_run(func):
    '''Декоратор для запуска функции в отдельном потоке, асинхронно'''
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        thread = threading.Thread(target=func, args=args, kwargs=kwargs)
        thread.start()
    return wrapper


def chat_new_connection():
    '''Connect with proxy and return object'''
    return DDGS(timeout=120)


def chat(query: str, chat_id: str, model: str = 'gpt-4o-mini') -> str:
    '''model = 'claude-3-haiku' | 'gpt-3.5' | 'llama-3-70b' | 'mixtral-8x7b' | 'gpt-4o-mini'
    '''

    if chat_id not in CHATS_OBJ:
        CHATS_OBJ[chat_id] = chat_new_connection()

    if chat_id not in LOCKS:
        LOCKS[chat_id] = threading.Lock()

    with LOCKS[chat_id]:
        try:
            resp = CHATS_OBJ[chat_id].chat(query, model)
            return resp
        except Exception as error:
            print(f'my_ddg:chat: {error}')
            time.sleep(2)
            try:
                CHATS_OBJ[chat_id] = chat_new_connection()
                resp = CHATS_OBJ[chat_id].chat(query, model)
                return resp
            except Exception as error:
                print(f'my_ddg:chat: {error}')
                return ''


# Инициализация бота Telegram
bot = telebot.TeleBot(cfg.token)


# Обработчик команды /start
@bot.message_handler(commands=['start'])
def send_welcome(message):
    bot.reply_to(message, "Привет! Я простой чат-бот. Напиши мне что-нибудь.")


# Обработчик текстовых сообщений (асинхронный)
@bot.message_handler(func=lambda message: True)
@async_run
def echo_all(message):
    query = message.text
    chat_id = str(message.chat.id)
    response = chat(query, chat_id)
    bot.reply_to(message, response)


# Запуск бота
bot.polling()


66e453cc60ad9227713005.png
Ответ написан
Комментировать
phoebuss99
@phoebuss99
типо кодер
gf4 не стабильная библиотека. Проще найти на гитахабе 100+ бесплатных gpt и просто спарсить. А вообще. Надо сделать цикл на все модели, что б по 100500 раз не переписывать модель. Цикл делаешь на рабочую модель и программа сама будет выбирать из всех - рабочую
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы