GPT 프롬프트 매니저 version 0.0.1

GPT를 사용할때 프롬프트관리를 보다 효율적으로 할 수 있게 해주는 프로그램을 만들었습니다. 모든 코드와 실행파일을 공개합니다.

GPT자동 글작성 프로그램?

최근 유튜브에 GPT자동화 프로그램이다 뭐다 하면서 영상 올려놓고 카톡이나 메일로 문의를 받으면서 판매 활동을 하는 듯한 영상을 많이 접하게 되었습니다.

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

대충 이런 느낌의 프로그램인데 보신적이 있으실까요?

해당 프로그램이 구동되는 모습을 보신 아무것도 모르시는 일반인분들은 단순하게 자동으로 무언가 굴러간다에 현혹되어 냉정한 판단을 하기 힘든데요. 저도 물론 생소한 분야에서 뭔가 벌어진다면 신기한 눈으로 볼 수 밖에 없을 것이긴합니다…

하나하나 까보면 별거 없는 프로그램입니다.

  • 미리 지정된 프롬프트를 셋팅해놓는다 (프로그램 자체적이든 텍본파일이든)
  • 프롬프트에 넣을 키워드를 플에 입력하면
  • 만들어둔 프롬프트에서 키워드가 들어갈 위치에 키워드가 들어간 상태로 복사된다.
  • 마우스로 GPT의 입력창과 콘티뉴가 나오는 위치를 찍어준다.
  • 자동으로 GPT입력창에 복붙하고 엔터까지 쳐준다.
  • 중간에 생성을 멈추고 콘티뉴가 나올 수 도있으니 그부분을 자동으로 광클한다.

위의 과정에서 신기한 부분이 있을까요?

  • 프롬프트를 키워드에맞게 자동으로 변형하여 새로운 프롬프트를 창조하여 요청하는것도 아닙니다.
  • 브라우저의 GPT UI를 감지하고 위치를 자동으로 지정해주는것도 아닙니다.
  • 콘티뉴가 나왔을때 자동으로 감지하고 클릭해주는게아닌 그냥 무지성 클릭입니다.

GPT를 써보신 분들이면 GPT가 글작성하는데 나름 어느정도 시간이 걸린다는 부분을 알고 계실겁니다. 물론 3.5는 매우 빠르지만 4.0은 한국인한테는 매우 느리죠…

그런 상태에서 마우스는 나올지도 모르는 콘티뉴를 클릭하기위해서 해당 위치에서 광클하고있는 상태고 글 생성 시간동아능ㄴ 어차피 PC이용하지 못하는 상황이 벌어지게됩니다. 자동이라면 자동이긴 하지만 이것이 우리들이 바라는 자동으로 굴러간다고 말을 할 수 있는 상황일까요?

GPT 프롬프트 매니저 프로그램 소개

UI매우 허접합니다 기능에는 문제없다면 외형에 신경을 쓰는 건 불필요하다고 생각을 하기도 하는데 솔직히 이쁘게 못 만듭니다 ㅋ

각각 부분별로 기능을 설명드리겠습니다

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

설정 파일 리스트

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

SettingFile안에있는 엑셀파일들의 목록을 보여줍니다.

타이틀 및 설정 파일 생성

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

타이틀과 설정파일 생성 부분입니다 클릭하면 SettingFile폴더안에 새로운 엑셀 파일을 만들어줍니다.

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

엑셀 시트뷰

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

해당 엑셀파일에서 만들어둔 시트를 보여줍니다.

네이버 키워드 검색기

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

흔하게 보이는 네이버 연관검색어 프로그램을 합쳐놓았습니다. 아이디어가 없거나 추가적인 키워드가 필요할때 이용하시면 편할듯합니다.

키워드 입력부

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

실질적으로 키워드를 입력하는 부분입니다. 여기에 입력된 텍스트가 만들어둔 프롬프트에서 단어가 치환되어 클립보드로 복사하게 됩니다.

프로그램이 돌아가는 구조와 사용방법

해당 프로그램은 진짜 특별한것 없는 프로그램입니다.

GPT를 사용하여 블로깅을 하시는 분이라면 혹은 사용하실 목적이라면 블로그하나만 운영하시지는 않겠죠. 물론 포스팅을 작성하는 목적으로만 GPT 사용할 수 있는 것도 아니고 다양한 부분에 활용된다는것은 알고계실겁니다.

블로그, AI이미지 프롬프트작성, 질문답변, 데이터가공 등등…

단순하게 질문하기보단 체계적으로 커스텀 프롬프트를 만들어서 활용하는게 사용자가 원하는 목적과 결과에 가까우니까요.

만들어둔 프롬프트 하나 가지고 모든 분야에 활용하기에는 적절치 않습니다. 메모장같은데에 저장해두고 내가 원하는 프롬프트가 어디있는지 찾고 복사하고 붙여넣는 작업은 매우 귀찮습니다. 이것을 해결해주는 프로그램입니다.

플이 돌아가는 구조

매우 간단합니다.

미리 저장된 텍스트에서 “@@@”로 저장해둔 부분을 우리가 입력한 키워드로 바뀌게 됩니다.

“@@@에 대해서 플로그 포스팅을 할건데 주제를 10가지 만들어줘!”

라는 프롬프트를 만들었다고하면 우리는 플에 “사과”를 입력하고 버튼을 누른다면

“사과에 대해서 플로그 포스팅을 할건데 주제를 10가지 만들어줘!”

이렇게 만들어진 상태의 텍스트가 자동으로 클립보그에 복사가됩니다. GPT에 그먄 붙여넣기하고 엔터를 누르면 끝이죠.

  • 엑셀에 프롬프트를 정리한다
  • 프로그램에 엑셀목록과 만들어둔 프롬프트(엑셀 시트)중에 사용할것을 선택하고
  • 키워드를 입력하고 복사를 누르고 필요한 곳에 컨트롤V하시면 끝!

상세 설명서

엑셀파일 만들기

먼저 프롬프트를 만들어둘 엑셀파일이 필요합니다. 직접 그냥 엑셀파일을 만드셔도 상관없고 위에서 기능 설명 했던 부분에서 만들기 버튼을 누르셔서 만드셔도 무관합니다.

처음 파일을 만드시면

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

이런 상태의 엑셀파일이 만들거지게 됩니다.

Custom instructions 영역은 키워드가 들어갈수도있지만, 본격적인 질문을 하기전에

“GPT한테 내가 누구고 너는 어떤식으로 답해줘야해”

라면서 가스라이팅을 시도하는 부분입니다. 해당 기능이 베타버전으로 있긴한데 무료유저에게도 있는지는 몰라서 일단 넣어놓긴했습니다. 뤼튼쪽에서는 해당기능이 없는 것으로 알고 있어어서 저는 GPT와 뤼튼을 같이 사용하기 때문에 제가 쓸 것 같아서 기본값으로 넣었습니다.

시트는 추가하셔도 지우셔도 상관없습니다. 주용한것은 시트안의 내용입니다.

  • 복사하기를 누르면 A열에있는 텍스트만 가져옵니다. A열에만 입력을 해주세요.
  • 행은 상관없습니다. 여러행을 사용하셔도 가능하나 가급적이면 100행 이하로 사용해주세요.
  • 테스트기간이 매우 짧으니 여러 오류가 있을 수 있습니다.

아래는 배포파일에 포한된 샘플설정값입니다.

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

임시로 만들어둔 프롬프트입니다. 더더욱 상세하게 조율하는 것이 좋고 권장사항은 한번에 완전한 블로그 포스팅을 요청하는 것보다 부분적으로 나눠서 요청하는 것이 좋습니다.

임의로 주제와 키워드를 정해달라고 했을때 결과가 맘에들지않는다면 다시 질문을하거나 요청해야겠지요? 맘에드는 결과가 나왔을 때 차근차근 포스팅을 만들어달라고하는게 타율이 높습니다.

사용하기

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

필요한 프롬프트를 만들어둔 엑셀파일과 사용할 시트를 선택하고. GPT 입력 키워드 부분에 원하는 키워드를 입력하시고 하단에 복사버튼을 누르시면 끝입니다.

누르시면 자동으로 복사되니 컨트롤V하시면 복사된 텍스트가 나옵니다 GPT에 붙여넣기하고 사용해주세요!

뤼튼으로 샘플 실행결과

노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1
노베이스 개발자 히코 GPT 프롬프트 매니저 version 0.0.1

중요한것

GPT를 사용하는 것에 있어서 가장 중요한것은 프롬프트입니다. 여러가지 테스트해보시고 여기저기 정보를 얻어서 적용도 해보시고 자신만의 프롬프트를 만들어서 자신만의 콘텐츠를 만들어가는 부분이 가장 중요합니다.

정말 좋은 프롬프트가 있어도 그 프롬프트를 천명, 만명, 100만명 사용하면 결국엔 해당 프롬프트는 블로깅을 목적으로 사용하기엔 부적절한 프롬프트가 됩니다.

블로깅 목적으로 10만원 20만원 돈들여서 사봐야 의미없다는 이야기입니다.

다운로드

https://gofile.me/76pUP/8tRWsWNtA

다운로드 제한에 걸리거나 안된다면 메일주시면 파일 따로 보내드리겠습니다.

keyaam9999@gmail.com

코드

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
import xlsxwriter
from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5.QtWidgets import QApplication
from openpyxl import load_workbook
import os
import requests
import json
 
class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
 
        # SettingFile 폴더 확인 및 생성
        folder_path = “SettingFile”
        os.makedirs(folder_path, exist_ok=True)  # 폴더가 없으면 생성
 
        # 창 크기 및 타이틀 설정
        self.setWindowTitle(‘GPT Manager version 0.0.1’)
        self.setGeometry(100100900900)
 
        # 중앙 위젯 설정
        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
 
        # 메인 레이아웃
        main_layout = QtWidgets.QVBoxLayout(central_widget)
        main_layout.setContentsMargins(30303030)
 
        # 타이틀 부분
        title_label = QtWidgets.QLabel(‘GPT 매니저’)
        title_label.setAlignment(QtCore.Qt.AlignCenter)
        title_label.setFont(QtGui.QFont(“Arial”20, QtGui.QFont.Bold))
        main_layout.addWidget(title_label)
        main_layout.addSpacing(25)
 
        # 파일 생성 버튼 추가
        create_button = QtWidgets.QPushButton(“프롬프트 설정파일 생성”)
        create_button.setFixedWidth(250)  # 너비 조정
        create_button.setFixedHeight(50)  # 높이 조정
        create_button.clicked.connect(self.create_setting_file)  # 버튼 클릭 시 연결된 함수
        main_layout.addWidget(create_button, alignment=QtCore.Qt.AlignRight)  # 우측에 붙임
        main_layout.addSpacing(25)  # 빈 공간 추가
 
        # 파일 뷰 (스크롤) 부분
        file_view_label = QtWidgets.QLabel(‘GPT 프롬프트 설정 파일 목록’)
        file_view_label.setFont(QtGui.QFont(“Arial”14))
        main_layout.addWidget(file_view_label)
        self.file_list_widget = QtWidgets.QListWidget()
        self.file_list_widget.setFixedHeight(150)
        self.file_list_widget.setFont(QtGui.QFont(“Arial”14))
        main_layout.addWidget(self.file_list_widget)
        main_layout.addSpacing(25# 빈 공간 추가
 
        # SettingFile 폴더의 엑셀 파일 목록 가져오기
        folder_path = “SettingFile”
        for file_name in os.listdir(folder_path):
            if file_name.endswith(“.xlsx”):
                self.file_list_widget.addItem(file_name)
 
        # 시트 뷰와 신규(키워드 검색기), 버튼 뷰 레이아웃
        content_layout = QtWidgets.QHBoxLayout()
        main_layout.addLayout(content_layout)
 
        # 시트 뷰 (스크롤) 부분 – 명칭 추가, 글자 크기 수정
        sheet_view_label = QtWidgets.QLabel(‘셋팅값 목록’)
        sheet_view_label.setFont(QtGui.QFont(“Arial”14))
        self.sheet_list_widget = QtWidgets.QListWidget()
        self.sheet_list_widget.setFont(QtGui.QFont(“Arial”14))
        sheet_layout = QtWidgets.QVBoxLayout()
        sheet_layout.addWidget(sheet_view_label)
        sheet_layout.addWidget(self.sheet_list_widget)
        content_layout.addLayout(sheet_layout, 4)
        content_layout.addSpacing(25)  # 빈 공간 크기 변경
 
        # 키워드 검색기 부분
        new_layout = QtWidgets.QVBoxLayout()
        new_view_label = QtWidgets.QLabel(‘네이버 키워드 검색기’)
        new_view_label.setFont(QtGui.QFont(“Arial”14))
        self.input_field = QtWidgets.QLineEdit()
        self.input_field.setFont(QtGui.QFont(“Arial”14))
        self.search_button = QtWidgets.QPushButton(“검색”)
        self.search_button.clicked.connect(self.keyword_search)
        self.result_text = QtWidgets.QListWidget()  # 텍스트 리스트로 변경 (선택 가능)
        self.result_text.setFont(QtGui.QFont(“Arial”14))  # 폰트 크기 키우기
        self.result_text.itemSelectionChanged.connect(self.add_selected_keyword)
        new_layout.addWidget(new_view_label)
        new_layout.addWidget(self.input_field)
        new_layout.addWidget(self.search_button)
        new_layout.addWidget(self.result_text)
        content_layout.addLayout(new_layout, 3)
        content_layout.addSpacing(25)  # 빈 공간 크기 변경
 
        # 버튼 뷰 부분을 수정하여 선택 키워드 부분과 버튼 부분을 나눕니다.
        # 선택 키워드 부분
        button_layout = QtWidgets.QVBoxLayout()
        selected_keyword_layout = QtWidgets.QVBoxLayout()
        selected_keyword_label = QtWidgets.QLabel(‘GPT 입력 키워드’)
        selected_keyword_label.setFont(QtGui.QFont(“Arial”14))
        self.selected_keyword_input = QtWidgets.QPlainTextEdit()
        self.selected_keyword_input.setFont(QtGui.QFont(“Arial”14))
        selected_keyword_layout.addWidget(selected_keyword_label)
        selected_keyword_layout.addWidget(self.selected_keyword_input, 1)  # 가용 가능한 공간 전부 사용
        button_layout.addLayout(selected_keyword_layout, 4)
        button_layout.addSpacing(25)  # 버튼과 선택 키워드 사이의 공간 띄우기
 
        # 빈 버튼
        empty_buttons_layout = QtWidgets.QVBoxLayout()
        self.copy_button = QtWidgets.QPushButton(“복사 버튼”# “self.” 추가
        self.copy_button.setFixedHeight(40)  # 버튼의 높이 늘리기
        self.copy_button.clicked.connect(self.copy_sheet_to_clipboard) # “self.” 추가
        empty_buttons_layout.addWidget(self.copy_button)
 
        button_layout.addLayout(empty_buttons_layout, 6)
 
        content_layout.addLayout(button_layout, 3)
        content_layout.addSpacing(25)
 
        # 시트 뷰와 신규, 버튼 뷰 레이아웃을 메인 레이아웃에 추가
        main_layout.addLayout(content_layout)
 
        # 파일 뷰에서 선택된 파일의 시트를 보여주기 위한 연결
        self.file_list_widget.itemClicked.connect(self.show_sheets)
 
    def keyword_search(self):
        search_range = [“ㅂ”“ㅃ”“ㅈ”“ㅉ”“ㄷ”“ㄸ”“ㄱ”“ㄲ”“ㅅ”“ㅆ”“ㅛ”“ㅕ”“ㅑ”“ㅐ”“ㅒ”“ㅔ”“ㅖ”,
                        “ㅁ”“ㄴ”“ㅇ”“ㄹ”“ㅎ”“ㅗ”“ㅓ”“ㅏ”“ㅣ”“ㅋ”“ㅌ”“ㅊ”“ㅍ”“ㅠ”“ㅜ”“ㅡ”]
        res_items_set = set()  # 중복 제거를 위한 set 생성
        self.result_text.clear()
        use_keyword = self.input_field.text()
 
        for key in search_range:
            res = requests.get(
                f“https://ac.search.naver.com/nx/ac?q={use_keyword}{key}&con=1&frm=nv&ans=2&r_format=json&r_enc=UTF-8&r_unicode=0&t_koreng=1&run=2&rev=4&q_enc=UTF-8&st=100&_callback=_jsonp_5”)
            res_data = res.text
            res_items = res_data.split(“_jsonp_5(“)[1][:1]
            res_items_dic = json.loads(res_items)[“items”][0]
 
            # 결과 추가 부분 수정
            for X in res_items_dic:
                res_items_set.add(X[0])  # set에 아이템 추가
 
        # 중복 제거된 결과를 리스트에 추가
        for item in res_items_set:
            self.result_text.addItem(item)
 
    def add_selected_keyword(self):
        selected_keywords = [item.text() for item in self.result_text.selectedItems()]
        current_text = self.selected_keyword_input.toPlainText()
        new_text = current_text + “, “ + “, “.join(selected_keywords) if current_text else “, “.join(selected_keywords)
        self.selected_keyword_input.setPlainText(new_text)
 
    def show_sheets(self, item):
        try:
            # 선택된 파일의 시트를 읽어오기
            selected_file = os.path.join(“SettingFile”, item.text())
            workbook = load_workbook(filename=selected_file)
 
            # 시트 뷰에 시트 이름 추가
            self.sheet_list_widget.clear()
            for sheet_name in workbook.sheetnames:
                self.sheet_list_widget.addItem(sheet_name)
        except Exception as e:
            QtWidgets.QMessageBox.warning(self“Error”, f“An error occurred: {str(e)}”)
 
    def create_setting_file(self):
        folder_path = “SettingFile”
        os.makedirs(folder_path, exist_ok=True)  # 폴더가 없으면 생성
 
        base_name = “GPT 설정 “
        extension = “.xlsx”
        index = 1
 
        while True:
            file_name = f“{base_name}{str(index).zfill(3)}{extension}”
            file_path = os.path.join(folder_path, file_name)
            if not os.path.exists(file_path):
                # 파일 생성 (비어 있는 엑셀 파일)
                workbook = xlsxwriter.Workbook(file_path)
 
                # 새로운 시트 추가
                custom_instr_sheet = workbook.add_worksheet(‘Custom instructions’)
                workbook.add_worksheet(‘프롬프트_1’)
 
                # 텍스트 추가
                custom_instr_sheet.write(‘A1’‘나에대한 정보야 질문에대해 답변을할때 참고해줘’)
                custom_instr_sheet.write(‘A2’‘질문자에 대한 정보를 넣어주세요’)
                custom_instr_sheet.write(‘A3’‘\n\n’)
                custom_instr_sheet.write(‘A4’‘이건 내가 너한테 원하는 조건들이야 항상 참고해서 답변을 줘야해’)
                custom_instr_sheet.write(‘A5’‘GPT에게 원하는 조건을 넣어주세요’)
 
                workbook.close()
                break  # 파일 생성 후 루프 종료
            index += 1
 
        # 모든 아이템 제거 및 새로고침
        self.file_list_widget.clear()
        for file_name in os.listdir(folder_path):
            if file_name.endswith(“.xlsx”):
                self.file_list_widget.addItem(file_name)
 
    def copy_sheet_to_clipboard(self):
        selected_file_item = self.file_list_widget.currentItem()
        selected_sheet_item = self.sheet_list_widget.currentItem()
 
        if selected_file_item is None or selected_sheet_item is None:
            QtWidgets.QMessageBox.warning(self“선택 오류”“파일과 시트를 선택해주세요.”)
            return
 
        selected_file = selected_file_item.text()
        selected_sheet = selected_sheet_item.text()
        folder_path = “SettingFile”
        file_path = os.path.join(folder_path, selected_file)
 
        workbook = load_workbook(file_path)
        worksheet = workbook[selected_sheet]
 
        # A열의 값을 가져옵니다.
        a_column_values = [cell.value for cell in worksheet[‘A’if cell.value is not None]
 
        # A열의 값들을 문자열로 변환하고 탭 문자로 연결합니다.
        a_column_text = “\n”.join(map(str, a_column_values))
 
        # 선택 키워드 가져오기
        selected_keyword = self.selected_keyword_input.toPlainText()
        print(selected_keyword)
 
        # A열의 값들을 문자열로 변환하고 “@@@”를 선택된 키워드로 교체합니다.
        a_column_text = “\n”.join(str(value).replace(“@@@”, selected_keyword) for value in a_column_values)
 
        # 클립보드에 내용을 복사합니다.
        clipboard = QApplication.clipboard()
        clipboard.setText(a_column_text)
 
# 로컬에서 코드를 실행하기 위한 부분입니다.
if __name__ == “__main__”:
    app = QtWidgets.QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()
 
cs