...

Простая советская интеграция gpt_chat и elma365

Тема в разделе "Примеры сценариев", создана пользователем sabir, 22 апр 2023.

Метки:
  1. sabir

    sabir Участник

    1. Добавляем страницу.

    2. В контекст добавляем свойства:

    upload_2023-4-22_3-31-24.png

    3. Выносим на страницу виджет код.
    upload_2023-4-22_3-34-58.png
    4. Заполняем виджет код.

    HTML:
    <style>
    
      table {
        margin: auto;
        width: 80%;
        border-collapse: collapse;
      }
    
      td,
      th {
        border-top: 1px solid black;
        border-bottom: 1px solid black;
        padding: 8px;
      }
    
      th {
        width: 20%;
        border-right: none;
        border-left: none;
      }
    
      td:first-child {
        width: 15%;
        border-right: none;
      }
    
      td:last-child {
        width: 65%;
        border-left: none;
      }
    
    </style>
    
    <table>
      <thead>
        <tr>
          <th>Время</th>
          <th>Имя</th>
          <th>Сообщение</th>
        </tr>
      </thead>
      <tbody id="chat-table"></tbody>
    </table>
    
    <script>
      var data = <%= Context.data.json %>;
    
      function renderTable(data) {
        const tbody = document.querySelector('#chat-table');
        tbody.innerHTML = '';
    
        data.forEach(({ time, name, message }) => {
          const tr = document.createElement('tr');
          const tdTime = document.createElement('td');
          tdTime.textContent = time;
          const tdName = document.createElement('td');
          tdName.textContent = name;
          const tdMessage = document.createElement('td');
          tdMessage.textContent = message;
          tr.appendChild(tdTime);
          tr.appendChild(tdName);
          tr.appendChild(tdMessage);
          tbody.appendChild(tr);
        });
      }
    
      renderTable(data);
    </script>
    
    5. Добавляем на форму виджет надпись со следующими настройками.
    upload_2023-4-22_3-37-42.png

    upload_2023-4-22_3-39-5.png
    HTML стили:
    HTML:
    text-align: center; color: rgb(224, 62, 45); margin-bottom: 10px; margin-left: 40%; font-weight: bold;margin-top: 10px
    6. Выносим свойство на страницу Сообщение
    upload_2023-4-22_3-41-53.png
    7. Переходим в Сценарии и вставляем код

    HTML:
    declare const console: any;
    
    type Json_message = {
        time:string,
        name:string,
        message:string
    }
    
    Context.data.json = "";
    
    async function onInit (): Promise<void> {
    
     
    }
    
    
    async function message(): Promise<void> {
     
        if(Context.data.message != undefined && Context.data.message.trim() !=""){
    
            let name_user = await System.users.getCurrentUser();
         
            Context.data.time = new Datetime().format("hh:mm:ss");
            Context.data.name = name_user.data.__name.toString();
    
            let json_message : Json_message [] = [];
    
            if(Context.data.json != "" && Context.data.json){
    
                json_message = JSON.parse(Context.data.json);
    
                let new_record = {} as Json_message;
    
                new_record.name = name_user.data.__name.toString();
                new_record.time = new Datetime().format("hh:mm:ss");
                new_record.message = Context.data.message;
    
                json_message.push(new_record);
    
            }else{
    
                let new_record = {} as Json_message;
    
                new_record.name = name_user.data.__name.toString();
                new_record.time = new Datetime().format("hh:mm:ss");
                new_record.message = Context.data.message;
    
                json_message.push(new_record);
    
            }
    
    
            Context.data.json = JSON.stringify(json_message);
         
            let mes = Context.data.message;
         
            Context.data.message = "";
    
            Context.data.bool = true;
    
            const req_mes = await fetch('https://api.openai.com/v1/completions', {
                method: 'POST',
                headers: {
                    "Authorization": 'Bearer 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',
                    "Content-Type": 'application/json'
                },
                body: JSON.stringify({
                    "model": "text-davinci-003",
                    "prompt": mes,
                    "max_tokens": 200,
                    "temperature": 0.7
                })
            });
    
            let json_req_mes = await req_mes.json();
    
            Context.data.answer = json_req_mes["choices"][0]["text"];
    
            let new_record = {} as Json_message;
    
            new_record.name = "GPT";
            new_record.time = new Datetime().format("hh:mm:ss");
            new_record.message = json_req_mes["choices"][0]["text"];
    
            json_message.push(new_record);
    
            Context.data.json = JSON.stringify(json_message);
    
            Context.data.bool = false;
    
        }
    
    }
    
    В заголовках запроса указываем свой API ключ , ключ можно получить по ссылке - https://platform.openai.com/account/api-keys ( для получения необходимо иметь действующий аккаунт ).

    upload_2023-4-22_3-52-4.png


    upload_2023-4-22_3-54-3.png

    "Authorization": 'Bearer Тут должен быть ваш ключ'

    8. Добавляем кнопку на форму со следующими настройками
    upload_2023-4-22_3-56-3.png

    upload_2023-4-22_3-57-27.png

    9. Сохраняем результат.

    10. Тестируем.

    Последнее редактирование: 22 апр 2023
  2. Codain

    Codain Активный участник

    А прикрутить таким образом https://poe.com/Sage более эффективно внедрить?
  3. sabir

    sabir Участник

    не смог нагуглить api, если есть ссылка скидывай
  4. fkaa

    fkaa Новичок

    Весь ответ не помещается че то?
    Есть предложения?