File size: 7,448 Bytes
f6ace39
671a344
 
f9fb742
671a344
f9fb742
671a344
 
f6ace39
671a344
f6ace39
 
 
 
 
 
 
671a344
f6ace39
 
 
671a344
 
 
f6ace39
 
9b556f8
671a344
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f6ace39
 
 
 
671a344
 
 
 
f6ace39
9b556f8
 
671a344
f6ace39
 
f9fb742
671a344
 
 
f6ace39
 
 
 
 
671a344
 
 
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
# -*- 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