문제 해결 과정
1.
현재 생성해는 답변이 SSE 방식이라서 여러 개의 데이터로 불러오는데, 어떻게 해결할 수 있을까?
결국에는 content도 하나의 문자열이므로, 중복 여부를 확인하고 이를 concatenate할 수 없을까?
2.
이를 이용해서 csv 파일에서 질문 리스트를 불러와서 답변들을 생성하고, 이를 다시 저장하는 방법이 있을까?
csv 파일에는 질문들의 집합이니깐, for 문을 통해서, 질문 하나씩 추출해서 답변을 불러오면 되지 않을까?
결과
결과
최종 코드는 아래와 같습니다.
1.
질문들이 존재하는 dataset들을 pd.read_csv로 불러옵니다.
2.
NaverCLOVA에서 튜닝한 API를 이용해서 답변을 생성합니다.
3.
해당 답변들을 생성하고 dataframe의 column으로 추가해서 datasets.csv파일로 저장합니다.
import json
import requests
import pandas as pd
Python
복사
실시간으로 데이터를 받아 최종 응답을 하나의 문자열로 반환
class CompletionExecutor:
def __init__(self, host, api_key, api_key_primary_val, request_id):
self._host = host
self._api_key = api_key
self._api_key_primary_val = api_key_primary_val
self._request_id = request_id
def execute(self, completion_request):
headers = {
'X-NCP-CLOVASTUDIO-API-KEY': self._api_key,
'X-NCP-APIGW-API-KEY': self._api_key_primary_val,
'X-NCP-CLOVASTUDIO-REQUEST-ID': self._request_id,
'Content-Type': 'application/json; charset=utf-8',
'Accept': 'text/event-stream'
}
content = ""
with requests.post(self._host + '/testapp/v1/tasks/4ce94y7k/chat-completions', headers=headers, json=completion_request, stream=True) as r:
for line in r.iter_lines():
if line:
decoded_line = line.decode("utf-8")
if decoded_line.startswith("data:"):
json_data = decoded_line[5:] # 'data:' 이후의 JSON 데이터 추출
try:
parsed_data = json.loads(json_data)
if 'message' in parsed_data and 'content' in parsed_data['message']:
if content == parsed_data['message']['content']:
pass
else:
content += parsed_data['message']['content']
except json.JSONDecodeError:
# JSON 형식이 맞지 않을 경우 무시
continue
return content
Python
복사
CSV 파일에서 질문 목록을 불러와 각 질문에 대한 AI 챗봇의 답변을 생성 후, 결과를 CSV 파일에 저장
if __name__ == '__main__':
completion_executor = CompletionExecutor(
host='https://clovastudio.stream.ntruss.com',
api_key='NTA0MjU2MWZlZTcxNDJiY5OgY4I/+eAv267dQbt+9aDUE0J6DJ/sL2uIey9+AkMG',
api_key_primary_val='dn7QeKh9ZQNxR782O4jPEUU02ae6esNz3DhLUsF2',
request_id='fc9998a2-5db4-4661-bbfe-887a78a6be7a'
)
path = r"C:\Users\sook3\OneDrive\바탕 화면\something\학습\DEL 과제\국립재활연구원_2408\chatbot 만들기\datasets.csv"
df = pd.read_csv(path)
questions_lst = df['Text']
preset_text = [{"role":"system","content":"당신은 인지에 장애가 있는 장애인들이 일상생활에서 겪는 어려움을 해결해주는 챗봇입니다\n 당신은 인지에 장애가 있는 장애인들이 일상생활에서 겪는 어려움을 해결해주는 챗봇입니다. \n ### 답변 생성 방법 ### \n - 대화체로 생성한다.\n - 답변은 인지 장애인들이 겪는 어려움과 관련 있게 생성한다.\n - 욕설, 차별적 요소, 부적절한 언어들은 제외한다.\n - 해당 다변은 반드시 리스트나 배열에 사용할 수 있도록 다음과 같은 형식으로 출력한다.\n"}]
for idx,question in enumerate(questions_lst):
preset_text.append({"role" : "user","content" : f"{question}"})
request_data = {
'messages': preset_text,
'topP': 0.8,
'topK': 0,
'maxTokens': 256,
'temperature': 0.5,
'repeatPenalty': 5.0,
'stopBefore': [],
'includeAiFilters': True,
'seed': 0
}
content = completion_executor.execute(request_data)
print(f"답변 생성 결과: {content}")
print("----------------------------------")
df.loc[idx,'Completion'] = content
del preset_text[-1]
#print(df)
df.to_csv(path, index =False, encoding = "utf-8-sig") # 위에 첨부했습니다.
Python
복사
해결되지 않은 점





