├── .gitignore ├── result ├── 1.png ├── IMG_5069.JPG ├── IMG_5070.JPG ├── IMG_5071.JPG └── IMG_5072.JPG ├── README.md └── fight.py /.gitignore: -------------------------------------------------------------------------------- 1 | ChromeProfile 2 | chromedriver 3 | -------------------------------------------------------------------------------- /result/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/ChatGPT-vs-LUDA/HEAD/result/1.png -------------------------------------------------------------------------------- /result/IMG_5069.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/ChatGPT-vs-LUDA/HEAD/result/IMG_5069.JPG -------------------------------------------------------------------------------- /result/IMG_5070.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/ChatGPT-vs-LUDA/HEAD/result/IMG_5070.JPG -------------------------------------------------------------------------------- /result/IMG_5071.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/ChatGPT-vs-LUDA/HEAD/result/IMG_5071.JPG -------------------------------------------------------------------------------- /result/IMG_5072.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kairess/ChatGPT-vs-LUDA/HEAD/result/IMG_5072.JPG -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ChatGPT vs LUDA 2 | 3 | 챗GPT와 이루다의 무한 대화 싸움 4 | 5 | ## GPT-4 6 | 7 | 8 | 9 | ## GPT-3.5 10 | 11 | | | | | | 12 | |---|---|---|---| 13 | | | | | | 14 | -------------------------------------------------------------------------------- /fight.py: -------------------------------------------------------------------------------- 1 | from selenium import webdriver 2 | from selenium.webdriver.chrome.options import Options 3 | from selenium.webdriver.common.by import By 4 | from selenium.webdriver.common.keys import Keys 5 | import openai 6 | import re, time 7 | 8 | 9 | MAX_HISTORY = 10 10 | MODEL = "gpt-3.5-turbo" # (gpt-3.5-turbo, gpt-4) 11 | 12 | # os.environ["OPENAI_API_KEY"] = "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" 13 | openai.api_key = "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" 14 | 15 | """ 16 | Selenium 크롤링 할 때, 현재 창에서 크롤링하는 방법(Debugging Mode) 17 | https://melonicedlatte.com/2023/01/01/193400.html 18 | MacOS 명령어 19 | /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=55426 --user-data-dir=ChromeProfile 20 | """ 21 | options = Options() 22 | options.add_experimental_option("debuggerAddress", "127.0.0.1:55426") 23 | driver = webdriver.Chrome("/Users/brad/Development/eluda-chatgpt/chromedriver", options=options) 24 | 25 | driver.get("https://nutty.chat/channels") 26 | 27 | driver.implicitly_wait(2) 28 | 29 | # Join chatroom 30 | driver.find_element(By.XPATH, "/html/body/main/div[4]/div/div/div[1]/div/div/div/div[1]/div/div[2]/div[2]/div/div/div/div[1]/div/div[1]/div/div/div[1]/div/div/div/div/div[2]/div/div/div").click() 31 | 32 | driver.implicitly_wait(3) 33 | 34 | messages = [{ 35 | "role": "system", 36 | "content": ( 37 | "너는 나의 가장 친한 친구야. 현재 채팅방에서 채팅중이야. 아래 규칙을 반드시 지키면서 대답해야 해.\n" 38 | "1. 할 말이 없거나 지루하다 싶을 때는 농담을 던지거나 궁금한 것을 먼저 물어본다.\n" 39 | "2. 네가 이미 말했던 비슷한 의미의 대답을 반복하지 않는다.\n" 40 | "3. 반드시 반말로 대답한다." 41 | ) 42 | }] 43 | 44 | while True: 45 | try: 46 | # Get the last text (REPLACE CLASS NAMES of yours) 47 | xpath = "//div[@class='css-1rynq56 r-ubezar r-16dba41 r-oam9g7 r-1aittka r-cqee49']" 48 | luda_texts = driver.find_elements(By.XPATH, f"{xpath}") 49 | 50 | # Retrieve last 5 messages we missed 51 | for i, luda_text in enumerate(reversed(luda_texts[:5])): 52 | luda_text = luda_text.text.strip() 53 | 54 | if luda_text: 55 | is_text_exist = False 56 | 57 | for message in messages: 58 | if luda_text in message.values(): 59 | is_text_exist = True 60 | break 61 | 62 | if not is_text_exist: 63 | messages.append({ 64 | "role": "user", 65 | "content": luda_text 66 | }) 67 | print(f"🙆🏻‍♀️이루다: {luda_text}") 68 | 69 | # Remove old messages, but keep system message 70 | if len(messages) > MAX_HISTORY: 71 | messages = messages[0:1] + messages[-10:] 72 | 73 | res = openai.ChatCompletion.create( 74 | model=MODEL, 75 | messages=messages) 76 | 77 | gpt_text = res["choices"][0]["message"]["content"] 78 | 79 | emoji_pattern = re.compile("[" 80 | u"\U0001F600-\U0001F64F" # emoticons 81 | u"\U0001F300-\U0001F5FF" # symbols & pictographs 82 | u"\U0001F680-\U0001F6FF" # transport & map symbols 83 | u"\U0001F1E0-\U0001F1FF" # flags (iOS) 84 | "]+", flags=re.UNICODE) 85 | gpt_text = emoji_pattern.sub(r'', gpt_text) # no emoji 86 | 87 | print(f"🤖ChatGPT: {gpt_text}") 88 | 89 | input_box = driver.find_element(By.XPATH, "//textarea") 90 | 91 | time.sleep(1) 92 | input_box.send_keys(gpt_text) # Cannot send emojis in Chrome 93 | time.sleep(1) 94 | input_box.send_keys(Keys.ENTER) # Enter 95 | 96 | messages.append({ 97 | "role": "assistant", # ChatGPT 98 | "content": gpt_text 99 | }) 100 | except Exception as e: 101 | print(e) 102 | finally: 103 | time.sleep(10) 104 | --------------------------------------------------------------------------------