# -*- coding: utf-8 -*- import gradio as gr import requests import json import os api_key_primary_val = os.getenv('api_key_primary_val') api_key = os.getenv('api_key') def request_hyper(message): 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' } with requests.post(self._host + '/testapp/v1/chat-completions/HCX-003', headers=headers, json=completion_request, stream=False) as r: stop_reason = "" messages = [] for line in r.iter_lines(): if line: raw_data = line.decode("utf-8") if raw_data.startswith('data:'): json_part = raw_data.split('data:', 1)[1].strip() decoded_text = json.loads(json_part) message_content = decoded_text["message"]["content"] stop_reason = decoded_text["stopReason"] print(f"메시지:{message_content}") messages.append(message_content) # yield "AI : " + message_content # print(f"메시지:{message},{stop_reason}끝") if stop_reason == "stop_before": print("stop_before 출력. 반복 종료") print(f"messages:{messages}") return messages # return line.decode("utf-8") completion_executor = CompletionExecutor( host='https://clovastudio.stream.ntruss.com', api_key=api_key, api_key_primary_val=api_key_primary_val, request_id='73f8978312ed4ca0bbef6fa7f86edfc3' ) preset_text = [{"role":"system","content":"질문에 대해 아래 블룸의 질문 분류를 참고하여 사용자의 질문이 몇 단계에 해당하는지 알려줘.\n(1) 기억 : 과정, 형태, 구조 혹은 장면 등의 사실적인 정보들을 인식하고 회상하는 능력을 말한다. 혹은 이전에 접했거나 배웠던 내용들의 사실이나, 용어, 기본적 개념들을 텍스트로부터 기억해내는 것을 의미한다.- 주인공은 누구인가?- 녹스는 어디에 가고 있는가?- 이야기를 읽으면서 새롭게 접한 단어들을 써보시오. \n(2) 이해 : 해석하기, 추론하기 등의 의사소통되고 있는 것이 무엇인지 알고 있는 정도이며, 다른 자료와 그것을 반드시 관련시키지 않아도 의사소통 되고 있는 아이디어와 자료를 활용할 수 있는 정도의 이해능력 또는 감지능력을 말한다. 여기에는 비문자적인 진술의 은유나 상징, 아이러니 과장 등을 이해하는 능력과 연속되는 경향의 후속을 예언하는 추론하는 능력이 포함된다.- 왜 웰튼 아카데미는 키팅선생님을 고용했나요?- 왜 토드는 웰튼 아카데미에 전학을 왔나요?- 닐의 아버지는 왜 닐에게 화를 냈나요? \n(3)적용 : 특정한 구제적인 상황 속에서의 추상개념 사용하기, 추상개념은 일반적인 아16이디어, 절차의 원리 등의 듣거나 읽어서 얻은 정보를 새로운 상황에 적용하는 것으로 습득한 정보와 지식을 이용하여 문제를 해결하는 것을 의미한다.- 녹스와 크리스의 전화통화 대화를 써보세요.- 닐의 입장에서 부모님께 쪽지를 써보세요.- 지금까지 키팅과 비슷한 선생님을 만난 적이 있다면 어떤 선생님인지 말해보세요. \n(4)분석 : 표현된 내용들간의 관계가 구체적이고 명시적이도록 의사소통을 구성요소나 부분으로 분해하거나 부분을 다시 전체와 관련짓는 능력으로 분석하기, 단순화하기, 요약하기, 분류하기, 비교하기, 대조하기, 등급으로 나누기, 구별하기를 예로 들 수 있다. - 교장선생님과 키팅선생님의 성격을 비교/대조 해보세요.- 소설의 이야기를 현실세계와 비교해보고 실제로 무슨 일이 일어날지 말해보시오. \n(5) 종합: 전체를 이루기 위해 요소나 부분들을 함께 조합하거나 결합하여 새로운 방법으로 내용을 구성하는 것으로 작문하기, 해결하기, 짜내기, 고안해내기, 공식화하기, 정교하게 하기, 개작하기, 제안하기를 예로 들 수 있다. - 닐이 극단적 선택을 하지 않고 키팅선생님도 학교를 떠나지 않았다고 가정하고 이야기를 써보시오.- 만일 키팅선생님이 교장이 되었다고 가정하고 이야기의 내용을 전개해보시오. (6) 평가 : 특정한 한 세트의 기준에 따라 선악과 시비를 판단하고 이유를 드는 것으로 주어진 목적이나 의도에 비추어 자료나 방법이 가지고 있는 가치에 관하여 판단하는 일이다. 이에 대한 예로는 판단하기, 옹호하기, 정당화하기, 등급 매기기, 평가하기, 지지하기, 증명하기, 추천하기, 우선순위 매기기와 같은 것이 있다.- 친구들과의 비밀을 폭로한 카메론의 행동은 옳았는가? 그렇다는 혹은 그렇지 않다는 의견에 대한 자신의 주장을 옹호하시오.- 놀란 교장선생님의 체벌은 정당화될 수 있는가? 체벌에 대한 자신의 의견을 제시하고 그에 대한 이유를 함께 말하시오."},{"role":"user","content":"개구리의 서식지는 어디일까?"},{"role":"assistant","content":"개구리의 서식지에 대한 질문은 개구리의 생물학적 특성과 관련된 기본적인 지식을 묻는 것으로 1단계에 해당합니다.\n"},{"role":"user","content":"곰의 서식지 축소와 환경문제는 어떤 관련이 있을까?"},{"role":"assistant","content":"해당 질문은 곰의 서식지 축소라는 현상을 통해 인간의 환경 파괴와 그로 인한 생태계의 영향을 생각해 보게 하는 것으로 3단계에 해당합니다. \n"},{"role":"user","content":"개구리의 먹이는 도롱뇽의 먹이와 비슷한데 왜 그럴까?"},{"role":"assistant","content":"이 질문은 개구리와 도롱뇽의 먹이가 비슷한 이유를 유추하게 함으로써 양서류의 생태에 대한 이해를 높이고, 이를 통해 자연계의 먹이 사슬과 연관 지어 생각하도록 한다는 점에서 4단계인 분석에 해당합니다."},{"role":"user","content":message}] request_data = { 'messages': preset_text, 'topP': 0.8, 'topK': 0, 'maxTokens': 3000, 'temperature': 0.5, 'repeatPenalty': 5.0, 'stopBefore': [], 'includeAiFilters': True } print(f"프리셋텍스트: {preset_text}") completion_result = completion_executor.execute(request_data) return completion_result