Если коротко, то идея в следующем:

А что если перед ответом на вопрос к 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
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 мы получаем принципиально другие ответы. Думаю в каких-то случаях это может сократить время на поиск информации.

А что думаете Вы о таком подходе к поиску информации?

Если будут вопросы по реализации бота, пишите в мой ТГ.