Если коротко, то идея в следующем:
А что если перед ответом на вопрос к 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})' + '\n---\n'
if len(res.split('\n---\n')) > 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?”
Вот ответ нашего бота:
![/g - означает команду поиска в Гугл и отправку результатов для анализа в chatGPT /g - означает команду поиска в Гугл и отправку результатов для анализа в chatGPT](https://habrastorage.org/getpro/habr/upload_files/038/4dd/bd0/0384ddbd0086d907134b9e40d16b6326.png)
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 мы получаем принципиально другие ответы. Думаю в каких-то случаях это может сократить время на поиск информации.
А что думаете Вы о таком подходе к поиску информации?
Если будут вопросы по реализации бота, пишите в мой ТГ.