А что если перед ответом на вопрос к chatGPT дать ему информацию с первого сайта в выдаче Google по этому же запросу?
И вот что из этого получается:
Для реализации данной идеи нам нужно научить наш Telegram бот подключаться к Google поисковой выдаче и извлекать информацию с первого сайта.
Вот функция для получения выдачи Google без необходимости получения Google API KEY:
import requests import urllib import pandas as pd from requests_html import HTML from requests_html import HTMLSession def get_source(url): """Return the source code for the provided URL. Args: url (string): URL of the page to scrape. Returns: response (object): HTTP response object from requests_html. """ try: session = HTMLSession() response = session.get(url) return response except requests.exceptions.RequestException as e: print(e) def scrape_google(query, start): query = urllib.parse.quote_plus(query) response = get_source("https://www.google.ru/search?start="+str(start)+"&q=" + query) links = list(response.html.absolute_links) google_domains = ('https://www.google.', 'https://google.', 'https://webcache.googleusercontent.', 'http://webcache.googleusercontent.', 'https://policies.google.', 'https://support.google.', 'https://maps.google.') for url in links[:]: if url.startswith(google_domains): links.remove(url) return links
После того, как мы получили URL первого сайта из выдачи Google, мы можем обработать текст с помощью chatGPT 3.5 и получить искомый ответ на вопрос пользователя.
Далее, мы можем связать обработку текста с полученного сайта и ответ chatGPT 3.5 в Telegram боте, который будет отображать ответ пользователю в чате.
Вот такой получился код Telegram бота:
import os import json from telebot import types import requests from urllib.parse import urlparse from idna import encode import urllib import time import scrape_google as sg import openai os.environ["OPENAI_API_KEY"] = openai.api_key import telebot bot = telebot.TeleBot('XXXXXX:XXXXXXXXXXXXXXXXXXXXXXX') import construct_index class Context: LOG = {} @bot.message_handler(content_types=['text']) def start(message): if '/g' in message.text: res = ai_search(message) bot.send_message(message.chat.id, res) return def ai_search(message): query = message.text promt = query links = sg.scrape_google(query, 0) res = '' count = 0 for l in links: print('Анализируем сайт:', l, promt) bot.send_message(message.chat.id, 'Анализируем сайт: ' + l) ai_reply = custom_promt_AI(l, promt) if ai_reply != [] and 'Нет ответа' not in ai_reply[0]: res += ai_reply[0] + f' (Источник: {l})' + ' --- ' if len(res.split(' --- ')) > 0: return res time.sleep(10) count += 1 if count > 2: return 'Не удалось найти ответ' return 'Не удалось найти ответ' bot.infinity_polling(timeout=10, long_polling_timeout = 5)
А теперь давайте на примере одного запроса сравним ответ нашего бота и ответ самого chatGPT.
Вот тестовый запрос: “Что такое ORM и как она работает в приложениях на Ruby on Rails?”
Вот ответ нашего бота:
ORM (Object-Relational Mapping) в Ruby on Rails является инструментом, который позволяет разработчикам работать с базами данных, используя объекты и методы Ruby вместо языка SQL. ORM в Rails работает следующим образом: 1. Создание модели: Для каждой таблицы в базе данных создается соответствующая модель в Rails. 2. Определение атрибутов: Каждая модель состоит из атрибутов, которые соответствуют столбцам в базе данных. 3. Установка связей: Если имеются связи между таблицами, они могут быть определены в модели при помощи различных методов, таких как has_many и belongs_to. 4. Создание объектов модели: Объекты модели могут быть созданы с помощью конструктора модели, который принимает хэш атрибутов и создает новую запись в базе данных. 5. Выполнение запросов: ORM позволяет выполнить запросы к базе данных, используя методы модели, такие как find, where и order. 6. Изменение объектов: Объекты модели могут быть изменены при помощи методов, таких как update или save. 7. Удаление объектов: Объекты модели могут быть удалены из базы данных с помощью метода destroy. ORM в Rails обеспечивает более простой и интуитивно понятный способ работы с базами данных, что повышает эффективность и скорость разработки приложений. --- Источник: https://coderlessons.com/articles/ruby/orm-v-ruby-vvedenie
А вот ответ непосредственно chatGPT:
ORM (Object-Relational Mapping) представляет собой программное обеспечение, которое позволяет построить связь между объектно-ориентированным языком программирования и реляционной базой данных. В приложениях на Ruby on Rails ORM представлено в виде ActiveRecord - это один из компонентов фреймворка, который обеспечивает удобные возможности для работы с базой данных, необходимые для создания приложения. ORM ActiveRecord предоставляет удобный способ для выполнения таких задач, как создание, чтение, обновление и удаление данных в базе данных, используя объекты Ruby. Он также позволяет создавать ассоциации между таблицами базы данных, что делает его более интуитивно понятным для разработчиков, не имеющих специализированного образования в области баз данных. В приложениях на Ruby on Rails, связь между моделями данных и базой данных настраивается через миграции, которые создают и обновляют таблицы в базе данных. ActiveRecord также позволяет создавать сложные запросы к базе данных, используя язык SQL или его альтернативные API. Таким образом, ORM ActiveRecord позволяет разработчикам Ruby on Rails создавать приложения, взаимодействующие с базой данных, через удобные и простые средства объектно-ориентированного программирования, сокращая время и усилия, необходимые для разработки и поддержки приложения.
Как мы видим ответы сильно отличаются. Главная особенность первого варианта в том, что chatGPT ориентируется на реальную информацию и ничего не фантазирует от себя.
Давайте еще посмотрим некоторые примеры запросов и ответов такого бота:
/g изменения в гражданском кодексе в 2023 году
В гражданском кодексе, начиная с 1 марта 2023 года, появятся новые главы о недвижимости, которые должны урегулировать отношения в этой сфере. Ожидается, что эти изменения дадут возможность упорядочить рынок недвижимости, защитить права потребителей и улучшить условия для всех участников сделок. Также будут введены новые требования по договорам аренды, правам собственности на объекты недвижимости и регулированию споров в этой сфере. В целом, эти изменения позволят существенно усилить защиту прав собственности и интересов граждан в сфере недвижимости. --- Источник: https://elcode.ru/service/news/obzory-zakonodatelstva-dlya-sudey/28-12-21-s-1-marta-2023-goda-v-gk-rf-poyavyatsya-n
/g Как реализовать аутентификацию с помощью Google OAuth 2.0 в приложении на Python?
Для реализации аутентификации с помощью Google OAuth 2.0 в приложении на Python, вы должны выполнить следующие шаги: 1. Создайте новое учетную запись проекта на Google Developers Console. 2. В разделе "api и сервисы" выберите "Учетные данные" и нажмите кнопку "Создать учетные данные". 3. Выберите "OAuth-клиент ID" и выберите тип приложения "Другое". 4. Введите название приложения и нажмите кнопку "Создать". 5. Пройдите по шагам настройки OAuth 2.0, включая настройки полномочий, добавления списка авторизованных URI-адресов и создание конфигурационного файла с секретным ключом и клиентским идентификатором. 6. Установите библиотеку Python `google-auth` и используйте ее для выполнения аутентификации в вашем приложении. Вот простой пример кода для аутентификации с помощью Google OAuth 2.0 в вашем приложении на Python: ```python from google.oauth2 import service_account # Загрузка секретного ключа в переменную credentials credentials = service_account.Credentials.from_service_account_file( 'path/to/config.json') # Использование credentials для выполнения запросов к API # ... ``` В этом примере вы должны заменить путь к файлу конфигурации вашего проекта на Google Developers Console. Также помните о необходимости настройки параметров авторизации OAuth 2.0 для вашего приложения. --- Источник: https://developers.google.com/analytics/devguides/config/mgmt/v3/mgmtPython?hl=ru
/g где посидеть в Санкт-Петербурге в пятницу?
В Санкт-Петербурге множество мест, где можно провести пятничный вечер. Ниже представлены несколько вариантов: 1. Бар "Малая Колокольная". Уютное заведение с широким выбором коктейлей и пива, атмосферой спокойствия и комфорта. 2. Ресторан "Terrassa". Это заведение находится на крыше здания с панорамным видом на город. Здесь можно насладиться не только вкусной едой, но и прекрасным видом на Санкт-Петербург. 3. Клуб "Мутабор". Один из самых популярных ночных клубов в городе с оригинальным интерьером и качественной музыкой. 4. Крафтовый паб "Jaws". Здесь можно попробовать разнообразное пиво, а также перекусить вкусными закусками. 5. "Бархаты". Это место подходит для тех, кто любит роскошь и элегантность. Здесь представлен широкий выбор коктейлей и блюд высокой кухни. 6. Ресторан "Felix". Это заведение с многолетней историей и знаменитым интерьером. Здесь можно насладиться вкусной едой и атмосферой старой Европы. --- Источник: https://www.tourister.ru/world/europe/russia/city/saint_petersburg/tips/7418
/g Как сделать распознавание голоса на Python?
Для распознавания речи на Python можно использовать библиотеку SpeechRecognition, которая поддерживает несколько API распознавания речи, включая Google, Microsoft и другие. Вот пример кода для распознавания речи с помощью библиотеки SpeechRecognition: ``` import speech_recognition as sr # Создаем объект Recognizer r = sr.Recognizer() # Открываем файл с записью речи (или используем Microphone для записи в реальном времени) with sr.AudioFile('audio_file.wav') as source: audio_data = r.record(source) # Используем Google Speech Recognition для распознавания текста на основе аудио text = r.recognize_google(audio_data, language='ru-RU') # Выводим результат распознавания print(text) ``` В этом примере мы создаем объект `Recognizer`, который позволяет нам работать с записями звука. Затем мы открываем аудио файл и записываем данные аудио в переменную `audio_data`. Затем мы используем функцию `recognize_google` для распознавания текста на основе аудио. В результате мы получаем распознанный текст. Библиотека SpeechRecognition также поддерживает распознавание речи в реальном времени с помощью микрофона, что может быть полезно для создания приложений для голосового управления. --- Источник: https://vc.ru/dev/286441-raspoznavanie-i-analiz-rechi-s-pomoshchyu-biblioteki-speech-recognition-pyaudio-i-librosa
/g Что такое геокэшинг и как начать заниматься этим видом активного отдыха?
Геокэшинг - это игра на открытом воздухе, в которой участники отыскивают спрятанные на заданных координатах контейнеры, содержащие записки или жетоны, которые можно обменять на другие призы. Это интересный способ активного отдыха и занятий спортом. Чтобы начать заниматься геокэшингом, необходимо: 1. Зарегистрироваться на сайте геокэшинга (например, на geocaching.com или geocaching.su); 2. Найти тайник с помощью координат, указанных на сайте; 3. Найти контейнер и сделать запись в его блокноте или ответить на виртуальный вопрос; 4. Обменять найденный жетон или записку на другой приз; 5. Пополнить "коллекцию" найденных тайников и получить удовольствие от активного отдыха на свежем воздухе. Для занятий геокэшингом можно использовать смартфон или GPS-навигатор для определения координат и поиска тайников. Кроме того, можно присоединиться к группе геокэшеров и участвовать в организованных поисках и соревнованиях. Занятия геокэшингом отлично подходят для всех, кто любит проводить время на природе и в поисках приключений. Попробуйте это увлекательное занятие и получайте удовольствие от новых открытий и знакомств! --- Источник: https://geocaching.su/?pn=110
/g Какие есть способы уменьшения уровня стресса в жизни?
Существует множество способов, которые помогают уменьшить уровень стресса в жизни, вот некоторые из них: 1. Физическая активность: регулярные занятия спортом или физическими упражнениями помогают выпустить накопившееся напряжение и снизить уровень стресса. 2. Расслабляющие практики: медитация, йога, глубокое дыхание и другие расслабляющие практики помогают снять напряжение и улучшить качество сна. 3. Питание: здоровое и сбалансированное питание может помочь снизить уровень стресса. 4. Сон: достаточное количество качественного сна (около 7-8 часов в день) помогает организму восстановиться и справиться со стрессом. 5. Планирование: планирование своего времени и задач помогает снизить уровень стресса, предотвращая перегрузку и неожиданные ситуации. 6. Техники управления стрессом: такие техники, как позитивный подход к жизни, умение принимать решения и управлять своими эмоциями, могут помочь справиться со стрессом в повседневной жизни. 7. Общение: поддержка со стороны семьи, друзей или коллег может помочь снять стресс и преодолеть трудности. --- Источник: https://www.wrike.com/ru/blog/13-sposobov-bystrogo-snyatiya-stressa-na-rabochem-meste/
Выводы:
Используя такой подход к запросам к chatGPT мы получаем принципиально другие ответы. Думаю в каких-то случаях это может сократить время на поиск информации.
А что думаете Вы о таком подходе к поиску информации?
Если будут вопросы по реализации бота, пишите в мой ТГ.