Advertisement
Namokonov

chatGPT

Jan 19th, 2023 (edited)
2,739
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Работа в Google Таблицах. Кейсы, решения и угар.
  3.  
  4. контакты:
  5. @namokonov
  6. @r_shagabutdinov
  7.  
  8. оглавление: goo.gl/HdS2qn
  9. заказ работы: teletype.in/@google_sheets/sheet_happens
  10. чат: t.me/google_spreadsheets_chat
  11. канал: t.me/google_sheets
  12.  
  13. сама таблица с примером здесь https://docs.google.com/spreadsheets/d/1Nx761zi5kCk2_u7ySIkzuGEKhSE3WUUi13Aqy4AEZoc/edit#gid=0
  14. */
  15.  
  16. //сюда вводим наш API-ключ, получать здесь https://beta.openai.com/account/api-keys
  17. const t = ''
  18.  
  19. //эта часть ответственна за создание меню для запуска скрипта
  20. function onOpen() {
  21.   SpreadsheetApp.getUi()
  22.     .createMenu('Скрипты')
  23.     .addItem('Отправляем запрос', 'go').addToUi()
  24. };
  25.  
  26. //главный скрипт
  27. function go() {
  28.   //адрес API, на который будем обращаться
  29.   const url = 'https://api.openai.com/v1/completions'
  30.  
  31.   //но перед этим соберём аргументы: обращаемся к нашей таблице и к листу 🤖
  32.   const ss = SpreadsheetApp.getActive();
  33.   const sh = ss.getSheetByName('🤖');
  34.  
  35.   //заберём значения из диапазона A2:D2
  36.   const args = sh.getRange("A2:D2").getValues()[0];
  37.  
  38.   //распределим эти значения на четыре переменных, которые будем отправлять в запросе
  39.   const [model, max_tokens, temperature, prompt] = args;
  40.  
  41.   //сам запрос, обращаемся к функции r (можете её использовать для обращения к другим API)
  42.   //в функцию передаём ссылка на API, метод (get, post, put), API-ключ и тело запроса
  43.   //в нашем случае тело это модель, вопрос, max_tokens, temperature
  44.   const request = r(url, 'post', t, {
  45.     "model": model,
  46.     "prompt": prompt,
  47.     "max_tokens": max_tokens,
  48.     "temperature": temperature
  49.   });
  50.  
  51.   //извлекаем либо ответ, либо, если ответа нет (как правило, это какая-то ошибка) - возвращаем целиком запрос
  52.   const response = request.choices?.[0]?.text || request;
  53.  
  54.   //вставляем на наш лист строку перед 3й строкой
  55.   sh.insertRowBefore(3);
  56.  
  57.   //и вставляем в эту строчку дату и время, аргументы запроса и сам ответ
  58.   sh.getRange(3, 7, 1, 3).setValues([[new Date(), args.join("|"), response]]);
  59. }
  60.  
  61. function r(url, method, token, data) {
  62.   let params = {
  63.     method: method,
  64.     muteHttpExceptions: true,
  65.     contentType: 'application/json;',
  66.     payload: JSON.stringify(data),
  67.     'headers': {
  68.       Authorization: 'Bearer ' + token
  69.     }
  70.   };
  71.  
  72.   var r = UrlFetchApp.fetch(url, params);
  73.   r = JSON.parse(r)
  74.   return r;
  75. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement