Объединение ChatGPT с Wolfram Alpha для получения более точных результатов вычислений.
Введение
ChatGPT сам по себе не так хорош для выполнения вычислений или возврата числовых ответов. Он не только каждый раз будет давать вам разные ответы, но также будет составлять числа и формулировать их убедительно. Я знал, что есть способ это исправить, и был полон решимости найти решение.
В этом сообщении блога мы рассмотрим, как создать чат-бот на Python, который сочетает в себе возможности ChatGPT и Wolfram Alpha, чтобы обеспечить более полный и интеллектуальный диалог.
ChatGPT, основанный на OpenAI, представляет собой большую языковую модель, которая может генерировать ответы, подобные человеческим, на пользовательский ввод с использованием обработки естественного языка. Его можно обучить на широком спектре источников данных, и он может генерировать ответы практически на любой запрос. Wolfram Alpha, с другой стороны, представляет собой вычислительную машину знаний, которая может решать проблемы в различных областях, но особенно известна своей способностью решать математические и научные вопросы.
Объединив эти два мощных инструмента, мы можем создать чат-бота, способного давать надежные и интеллектуальные ответы на более широкий спектр пользовательских запросов.
Информация об API
1 марта 2023 года OpenAI выпустила ChatGPT API, что дало мне прекрасную возможность продолжить этот проект. На самом деле я работал над этим проектом несколько недель назад с API GPT-3, но ответы были не такими человеческими, как ответы API ChatGPT. API ChatGPT также упрощает разработку подсказок, о чем я расскажу позже в этой статье.
Я забыл упомянуть, что в OpenAI есть библиотека Python, которая предоставляет альтернативу HTTP-запросам. Я использовал библиотеку Python для этого проекта, хотя я считаю, что этот проект будет работать так же, если мы будем использовать HTTP-запросы.
Wolfram Alpha имеет API коротких ответов, который возвращает один результат в виде обычного текста непосредственно из Wolfram Alpha. Он имеет собственную обработку естественного языка, которая позволяет пользователям передавать запросы, связанные с вычислениями, и получать ответ в виде обычного текста. Мне показалось, что это идеальный API для слияния с API ChatGPT, чтобы получить более полный чат-бот, обеспечивающий лучший пользовательский интерфейс.
Чат-бот
Этот чат-бот работает, принимая пользовательский ввод и передавая его непосредственно в ChatGPT для обработки. Если ChatGPT определяет, что пользователь ввел расчетный, фактический или аналитический вопрос, он передается API коротких ответов Wolfram Alpha, который возвращает ответ. Все остальные запросы обрабатываются и отвечают ChatGPT как обычно.
Первым шагом в создании этого чат-бота является инициализация каждого API путем получения и ввода наших ключей API. Я знаю, что должен был сделать их переменными среды, но я не мог заставить свои переменные среды работать, поэтому я создал отдельный файл Python со своими ключами API и вызвал их в своей основной программе.
import requests import wolframalpha import openai import re from APIKeys import WOLFRAM_APP_ID, OPENAI_API_KEY # Wolfram Alpha credentials client = wolframalpha.Client(WOLFRAM_APP_ID) # OpenAI credentials openai.api_key = OPENAI_API_KEY
Далее нам понадобится функция, которая сможет обрабатывать ввод пользователя через ChatGPT. Именно здесь выполняется основная часть работы, особенно при быстром инжиниринге.
В этой функции мы отправляем ввод пользователя в API ChatGPT, используя метод openai.ChatCompletion.create()
и параметр engine
, установленный на gpt-3.5-turbo
, самую продвинутую языковую модель OpenAI на момент написания этой статьи. Мы также установили температуру на 0,2, чтобы генерировать меньше случайных ответов. Кроме того, мы устанавливаем параметр max_tokens
равным 256, чтобы ограничить длину генерируемого ответа. Наконец, мы возвращаем сгенерированный текст ответа. Для получения дополнительной информации о том, как работают эти параметры, ознакомьтесь со Справочной документацией по API.
В API ChatGPT мы можем проинструктировать модель до того, как пользователь введет подсказку, поэтому я использовал приведенную ниже подсказку для подготовки модели:
Вы полезный помощник. Однако, если вас попросят дать ответ на расчетный или чисто фактический или аналитический вопрос, на который Wolfram Alpha может разумно ответить, вместо этого делегируйте полномочия Wolfram Alpha, выводя запрос, понятный Wolfram Alpha. Укажите этот сценарий, отформатировав выходные данные следующим образом: Запрос для WolframAlpha: ‹запрос›
Как только пользователь вводит запрос и ChatGPT возвращает результат, ответ извлекается и сохраняется в переменной с именем chatGPTresponse.
Вот тут и происходит волшебство: если ChatGPT возвращает ответ, который начинается с «Запрос для WolframAlpha: », он будет передан для обработки в Wolfram Alpha Short Answers API. В противном случае функция просто вернет ответ ChatGPT.
Ниже приведен код этой функции:
# This function processes user input through the ChatGPT API def GPTQuery(myInput): completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", temperature=0.2, # Lower temperature values make the output less random max_tokens=256, # Instruct the model on how to process certain inputs: messages=[ {"role": "system", "content": "You are a helpful assistant. However, if you're asked to provide an answer " "to a calculation or purely factual or analytical question that could " "reasonably be answered by Wolfram Alpha, delegate to Wolfram Alpha instead " "by outputting a query that Wolfram Alpha would understand. Indicate this " "scenario by formatting the output exactly like this: Query for " "WolframAlpha: <query>"}, {"role": "user", "content": myInput}, ] ) chatGPTresponse = completion.choices[0].message.content # Checks to see if ChatGPT's response needs to be passed to Wolfram Alpha if "Query for WolframAlpha:" in chatGPTresponse: properWolframQuery = chatGPTresponse.replace("Query for WolframAlpha:", "") return wolframQuery(properWolframQuery) # If not, return ChatGPT's response else: return chatGPTresponse
Следующим важным шагом является создание функции для запросов, которые необходимо передать в Wolfram Alpha. Мы можем сделать это, отправив запрос HTTP GET к API. В этой функции запрос пользователя отправляется в конечную точку API, и ответ возвращается, если запрос был успешным.
Ниже приведен код этой функции:
# This function processes queries through the Wolfram Alpha Short Answers API def wolframQuery(userInput): # Define the API endpoint URL and the query parameters api_url = "https://api.wolframalpha.com/v1/spoken" params = { "appid": WOLFRAM_APP_ID, "i": userInput } # Send the HTTP request to the API endpoint response = requests.get(api_url, params=params) # Check if the request was successful (i.e., HTTP status code 200) if response.status_code == 200: # Print the short answer returned by the API return f"According to Wolfram Alpha, {response.text}" else: # Print the error message returned by the API return f"Error: {response.text}"
Последняя основная функция предназначена для объединения этих двух функций вместе для создания нашего чат-бота. В этом чат-боте я также добавил функцию, с помощью которой пользователь может обходить ChatGPT и передавать запросы непосредственно в Wolfram Alpha. Пользователь может сделать это, введя базовое вычисление (например, «сколько будет 300+700») или введя слово «wolfram» в свой запрос.
Ниже приведен код этой функции:
def chatbot(): while True: prompt = input("You: ") promptNew = prompt.lower() # Allows the user to override ChatGPT processing and process through Wolfram Alpha if a basic calculation is # entered or the user adds the word "wolfram" to their query if re.search(r"(\d+[\+\-\*\/])+\d+", promptNew) or "wolfram" in promptNew: result = wolframQuery(promptNew) print(result) else: myResponse = GPTQuery(promptNew) print(f"ChatGPT: {myResponse}")
Конечный результат
Проект можно найти на моем GitHub здесь. Ниже приведены некоторые ответы, когда я тестировал его.
You: How far is it from Los Angeles to Detroit? ChatGPT: According to Wolfram Alpha, The distance from the center of Los Angeles, California to the center of Detroit, Michigan is about 1990 miles You: What is a pizza made of? ChatGPT: A pizza is typically made of dough, tomato sauce, cheese, and various toppings such as meats, vegetables, and herbs. You: what is 848 plus 39993 ChatGPT: According to Wolfram Alpha, 848 plus 39993 is 40841 You: what time is it in london? ChatGPT: According to Wolfram Alpha, The current time in London, Greater London, United Kingdom, is 2:22:44 A.M. Greenwich Mean Time, Friday, March 3, 2023
Заключение и следующие шаги
Надеюсь, вам понравилось читать эту статью. Это моя первая статья, и я планирую написать больше, поскольку работаю над дополнительными проектами. Я намерен продолжить работу над этим проектом и в конечном итоге сделать его общедоступным веб-сайтом. Я также хочу разработать эту программу для обработки более сложных пользовательских данных, таких как физические и инженерные задачи.