-
Notifications
You must be signed in to change notification settings - Fork 1
/
excel_gpt_integration.bas
61 lines (49 loc) · 2.58 KB
/
excel_gpt_integration.bas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
Function GPT(sPrompt As String, sCell As Range) As String
' Константа для интервала между запросами в секундах, для лимита 1 запрос в секунду
Const RequestInterval As Double = 1.0
' Объявление переменных для HTTP-запроса и ответа
Dim objHTTP As Object
Dim URL As String
Dim payload As String
Dim jsonText As String
Dim Parsed As Dictionary
Dim sContext As String
' Подготовка контекста для запроса, объединение запроса пользователя и значения ячейки
sContext = sPrompt & " " & sCell.Value
' Создаем объект для HTTP-запросов
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
' Адрес API
URL = "https://api.openai.com/v1/chat/completions"
' Формируем JSON тело запроса
payload = "{""model"": ""gpt-4o"", ""temperature"": 0, ""messages"": [{""role"": ""user"", ""content"": """ & sContext & """}]}"
' Открытие запроса
objHTTP.Open "POST", URL, False
' Установка необходимых заголовков
objHTTP.setRequestHeader "Authorization", "Bearer $OPENAI_API_KEY" ' Замените $OPENAI_API_KEY на ваш ключ API
objHTTP.setRequestHeader "Content-Type", "application/json"
' Отправка запроса с JSON телом
objHTTP.Send payload
' Проверяем статус ответа
If objHTTP.Status = 200 Then
jsonText = objHTTP.ResponseText
' Парсинг JSON ответа
Set Parsed = JsonConverter.ParseJson(jsonText)
' Извлечение необходимой информации из JSON
GPT = Parsed("choices")(1)("message")("content")
Else
' Обработка ошибок
GPT = "Error: " & objHTTP.Status & " " & objHTTP.statusText
End If
' Очистка объекта
Set objHTTP = Nothing
' Задержка перед следующим запросом
WaitSeconds RequestInterval
End Function
' Процедура ожидания заданного количества секунд
Public Sub WaitSeconds(Seconds As Double)
Dim endtime As Double
endtime = Timer + Seconds
Do While Timer < endtime And Timer >= 0
DoEvents ' Передача управления для обработки других задач в очереди сообщений
Loop
End Sub