Роли в ChatGPT API

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
Привет форумчане. Помогите пожалуйста разобраться с тем как использовать роли (role) при работе с ChatGPT API ("model": "gpt-3.5-turbo")


Есть такая статья про питон: https://uproger.com/prostoe-rukovodstvo-po-chatgpt-api-s-python/
Пока не очень могу понять как этим пользоваться в контексте зенки.
Грубо говоря: нужно перевести контекст с питонско-разработческого на зеннопостер-вебмастерский :ah:

Например я хочу одним модулем работать с ТЗ-мейкером, другим модулем работать с поваром, третьим модулем создавать контент для телеграм-канала.
На примере вебверсии -- это было три чата, в каждом конкретном шло "запоминание" контекста чата (где в первом промте чата прописывал от имени кого будет выступать чат-бот, например "в этом чате ты ТЗ-мейкер" или "в этом чате ты повар").

Как это сделать на API ?
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
там же в статье все расписано, как работать с существующими 3-ми ролями.
в статье из шапки как раз ничего не понятно (лично мне, человеку не знающим питон от слова совсем)
но нашел уже где понятно: https://cobusgreyling.medium.com/when-using-the-chatgpt-api-users-will-have-to-manage-the-context-ba5869238913
 

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28
Python:
import os
import sys
import openai
import pickle

if len(sys.argv) > 1:
    arg_1 = sys.argv[1]
    arg_2 = sys.argv[2]
    arg_3 = sys.argv[3]
else:
    arg_1 = None
    arg_2 = None
    arg_3 = None

p_file = "data1.pkl"

#arg_1 = 'scientist'
#arg_2 = 'Who was the first man on the moon?'
#arg_3 = 'new' OR arg_3 = 'continue'

openai.api_key = "%API_KEY%"

if arg_3 == 'continue':
    file_path = p_file
    if os.path.exists(file_path):
        with open(file_path, 'rb') as data:
            messages_loaded = pickle.load(data)
        
        
class ai_object:
    def __init__(self, role, question):
        self.role = role
        self.question = question
        self.chat_response = None
        self.completion = None
        self.messages = None
    

    def initialize(self):
        self.messages = [
            {"role": "system", "content" : f"Answer to me as you are a {self.role}"},
            {"role": "user", "content" : f"{self.question}"},
            ]
        self.completion = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages = self.messages)   
        self.chat_response = self.completion.choices[0].message.content
        self.messages.append({"role": "assistant", "content": f"{self.chat_response}"})
        return self.chat_response
    
  
    def continue_speech(self, question_):
        if arg_3 == 'continue':
            self.messages = messages_loaded
        if self.messages is None:
            raise ValueError("Completion object not initialized. Please call the 'initialize' method first.")
        messages = self.messages.append({"role": "user", "content" : question_})
        self.completion = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",messages=self.messages)
        chat_response = self.completion.choices[0].message.content
        self.messages.append({"role": "assistant", "content": chat_response})
        return chat_response
    
    
    
if arg_3 == 'new':
    obj = ai_object(arg_1,arg_2)
    print (obj.initialize())

if arg_3 == 'continue':
    obj = ai_object(arg_1,arg_2)
    print (obj.continue_speech(arg_2))

if obj.messages is not None:
    with open(p_file, 'wb') as f:
        pickle.dump(obj.messages, f)
Сделал для тебя, смотри:
1. в p_file = укажи путь, и название файла для сохранения состояния запросов к каждому отдельному профилю, например profile_1.pkl
2. Из кубика "выполнить приложение" указываешь в зенке путь к интерпретатору, далее указываешь путь к этому скрипту, и в аргументы кубика через пробел передаешь три значения:
2.1. Это кем должен быть искин.
2.2. Твой вопрос к искину. Передавая аргумент убедись что он заключен в двойные кавычки(если это предложение)
2.3. new\continue - т.е новый разговор либо же продолжаем старый разговор, если разговор будет новый то вся история к этому профайлу будет переписана(которая ранее была создана), храни по 1 копии скрипта и 1 копии profile.pkl на каждую роль которая тебе нужна.
3. Получить ответ из кубика - нужен вывод std_out скрипта в переменную, туда получишь ответ на свой вопрос.

Если останутся вопросы - задавай, постараюсь тебе подробно ответить.
 
Последнее редактирование:

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28
Вот пример, для тех кто не разобрался еще. Сохраняете приведенный мной код в файл openai_test.py, указываете к нему путь в шаблоне, не забудьте указать ваш API key в нужное поле в приведенном коде. Все пути указанные у вас будут уникальные для вашей системы.
Далее искин любезно вам ответит сколько алкоголя вам можно пить. В том духе так, как будто бы он страшный пират семи морей.

Интерпретатор Python можно скачать: тут
 

Вложения

Последнее редактирование:

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
а можно версию зенки уменьшить до 7.7 в шаблоне, а то не открывается, спасибо
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 085
Благодарностей
126
Баллы
63

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28

Вложения

  • Спасибо
Реакции: backoff

Besedi

Client
Регистрация
04.03.2019
Сообщения
234
Благодарностей
40
Баллы
28

Вложения

  • Спасибо
Реакции: bizzon

Rimen

Client
Регистрация
28.10.2019
Сообщения
405
Благодарностей
235
Баллы
43
@Besedi подскажите как решаете: в итерации в OpenAI передаеются его ответы чтобы он понимал контекст. и таким образом строится как-бы чат (насколько понял). При этом ответы бывают длиннее лимитов на одно сообщение. и тут логика моя пока ломается (
 

mig-z

Client
Регистрация
05.12.2014
Сообщения
303
Благодарностей
71
Баллы
28
Вот пример, для тех кто не разобрался еще. Сохраняете приведенный мной код в файл openai_test.py, указываете к нему путь в шаблоне, не забудьте указать ваш API key в нужное поле в приведенном коде. Все пути указанные у вас будут уникальные для вашей системы.
Далее искин любезно вам ответит сколько алкоголя вам можно пить. В том духе так, как будто бы он страшный пират семи морей.

Интерпретатор Python можно скачать: тут
Здравствуйте. Можно заказать у вас шаблон? Личка закрыта, по этому пишу сюда.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)