{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

Как юристу научить chatGPT не выдумывать, а отвечать то что нужно

В этой заметке хочу показать способ научить телеграм-бот читать ваши заключения и разъяснять их коллегам.

Сгенерировано с помощью API DALL-E 3

Я уже рассказывал как юристу научить телеграм-бота посылать коллег за документом по ссылке. Прочитать можно здесь. Сегодня хочу рассказать о способе чуть сложнее, но более вариативном.

Для этого вам потребуется GAS и chatGPT (если не знаете какое-то из этих слов, то для начала лучше сходить сюда и сюда соответственно).

Для начала придется немного доработать бот, чтобы он не отвечал несколько раз на одно и то же сообщение. Это связано с принципом работы вэбхуков телеграм. Не получив ответ какое-то время, он снова отправляет запрос нашему боту, что снова запускает программу, которая и без того уже выполняется. Так вместо одного ответа у нас может получится 10. Чтобы этого не происходило создадим журнал в который будем записывать активные сессии.

1. id таблицы нам потребуется далее. 2. в первой ячейке просто пишем "id" или "id_session", как вам больше нравится. 3. вкладку называем "session" 

Затем добавьте следующий код в бот:

if (getSessionID(String(contents.update_id))){ return } else { setSessionID(String(contents.update_id)) }
function getSessionID(id){ const sss = SpreadsheetApp.openById('ID Таблицы').getSheetByName('session') let sessions_id_list = sss.getRange(1,1,sss.getLastRow(),1).getValues() let status = false sessions_id_list.map((e) => { if (e[0] == id){ status = true } }); return status } function setSessionID(id){ const sss = SpreadsheetApp.openById('ID Таблицы').getSheetByName('session') sss.getRange(sss.getLastRow()+1,1).setValue(id) }
и вот здесь как раз понадобится id таблицы из первого скрина.

Немного перепишем страничку "отправка сообщений", научив бота отвечать на сообщение "зацепив" его текст. Не знаю как это правильно называется)

Добавьте следующий код:

function sendReplyMessage (message, chatId, msg_id){ var data = { method: "post", payload: { method: "sendMessage", chat_id: String(chatId), text: message, parse_mode: "HTML", disable_web_page_preview: true, reply_to_message_id: msg_id } } UrlFetchApp.fetch('https://api.telegram.org/bot' + API_TOKEN + '/', data); }

Теперь научим бота понимать, что вопрос касается определенной темы. Я пошел по простому пути и если вопрос содержит слово "алименты", то бот делает выполняет функцию askChatGPT и возвращает сообщение с ответом. Если такого слова нет, ничего не происходит.

Добавьте такой код:

if (msg.text.toLowerCase().indexOf('алимент') != -1){ let answer = askChatGPT(msg.text) if (answer) { sendReplyMessage (answer, chatId, msg.message_id) } }

Ну и наконец главная часть, учим бота получать информацию из файла с юридическим заключением. Для этого укажите следующий код:

const apiKey = "ЗДЕСЬ ТОКЕН ОПЕНАИ" function askChatGPT(que) { const faq = DocumentApp.openById('ЗДЕСЬ ID гуглдока с заключением').getBody().getText() const features = `Мне нужен ответ на следующий вопрос: "${que}". Найди ответ в следующем тексте: "${faq}". Если текст не содержит ответа, ответь: "Я не могу дать ответ.` const apiUrl = 'https://api.openai.com/v1/chat/completions'; const options = { method: 'post', headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json', }, muteHttpExceptions: true, payload: JSON.stringify( { "model": "gpt-3.5-turbo-16k", "messages": [{ "role": "user", "content": features, }], "temperature": 0.7 }), }; const response = UrlFetchApp.fetch(apiUrl, options); const content = response.getContentText(); console.log(content) let json = JSON.parse(content) if (json.error) { return json.error.message } return json.choices[0].message.content }

Готово! Далее остается только начать развертывание приложения, запустив новую версию. Если не знаете как, то смотрите предыдущие гайды, там пошагово объяснял.

Если возникают вопросы, не стесняйтесь задавать их здесь или в телеграме.

Для тех кто оказался на этой странице случайно, ссылки на то, как самому написать себе такого бота: раз, два, три, четыре.

Ссылка для копипаста кода здесь

С ботом, который мы делаем на канале LawCoder и который уже отвечает на вопросы по алиментам можно ознакомиться по ссылке.

Кому, как и мне, интересно автоматизировать юридические процессы, присоединяйтесь ко мне в телеграме

0
2 комментария
Игорь Александрович

Чат джпт тот еще выдумщик. Нельзя ему доверять

Ответить
Развернуть ветку
Владимир Глебовец
Автор

Согласен. Но вот так, через четкие инструкции получше будет.

Ответить
Развернуть ветку
-1 комментариев
Раскрывать всегда