import os import gradio as gr from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI # OpenAI API 키 가져오기 openai_api_key = os.environ.get("OPENAI_API_KEY") # PromptTemplate 설정 prompt = PromptTemplate( input_variables=["message", "pers", "rela"], template="""#요구사항: 유저가 보내는 {message}은 유저가 제3의 인물을 설득하기 위해 작성한 메세지이다. 당신은 메세지를 대필해주는 사람으로서 이 메세지를 #요령 과 #주의사항을 기반으로 더 설득력있게 수정하라. #키 값 설명: {pers}: 메세지를 보낼 상대방의 예상견해 {rela}: 유저와 설득하고자 하는 대상과의 관계 #주의사항: 설득하는 주제, 근거, 유저의 입장에 관한 핵심내용은 수정하지 말 것. 단순히 말투 조금 바꾸는 것은 성공적이지 않다. #요령을 기반으로 메세지의 설득력을 높여줄 문장을 추가하여도 좋다. 수정한 메세지 본문 외 다른 미사여구는 붙이지 말아라. #요령 1. 절대 최대 1000자가 넘지 않도록 하되, {message} 글자수보다 output이 2배는 더 길도록 수정하라. 그냥 글자수를 늘리기보다 유저의 설득력을 강화해 줄 논리를 임의로 추가하라. 2. {pers}와 유저의 견해(혹은 감정) 간의 일치점을 찾고, 그 일치점을 서두에 추가하라. 3. 유저의 요구가 상대방에게 어떤 이익을 줄지에 대해 강조하라. 4. 본문의 5% 정도는 감정적인 호소도 들어가야 한다. 5. "후회할 거야.", "미워"같은 상대방에 대한 비난은 최소화되도록 수정하라. 6. 푸념이나 자기연민이 메세지에 최소화되도록 수정하라. 7. 유저의 주장을 무조건 수용하라는 고압적 태도가 아니라, 유저의 주장을 듣고 상대방의 생각이 유연해지도록 상대방의 감정을 이해하면서 유저의 주장을 말하듯이 수정하라. 8. {rela}를 고려하여 문체, 표현, 높임법 여부를 달리하라. 예를 들어 {rela}이 비즈니스 관계라면 회사에서 사용하는 공적인 언어로 존댓말을 사용해 설득말이 작성되어야 한다. 애인관계라면 좀 더 감정적인 이야기나 친근한 말투가 들어갈 수 있다. 9. {message}언어와 동일한 언어로 작성하라. 예를 들어 한국어로 작성되어 있으면, output도 한국어로 작성해야 한다. 10. 단도직입적으로 유저의 주장을 말하기보단, 논의주제에 대한 배경을 1줄정도 언급하고 차근차근 이야기한다. 11. 마지막은 생각해보고 답해달라는 식으로 마무리 멘트를 20자 이내로 작성해줘. """ ) # ChatOpenAI 객체 생성 (API 키가 있을 경우에만) llm = None if openai_api_key: llm = ChatOpenAI( temperature=0.1, max_tokens=2048, model_name="gpt-4o", openai_api_key=openai_api_key ) def process_input(message, rela, pers): if not openai_api_key: return "OpenAI API 키가 설정되지 않았습니다. 관리자에게 문의해주세요." if not llm: return "LLM 모델을 초기화하는 데 실패했습니다. 관리자에게 문의해주세요." try: # 프롬프트 포맷팅 formatted_prompt = prompt.format( message=message, pers=pers, rela=rela ) # 포맷된 프롬프트를 LLM에 전달하고 응답 받기 response = llm.invoke(formatted_prompt) # 응답 내용 추출 return response.content except Exception as e: return f"오류가 발생했습니다: {str(e)}" # Gradio 인터페이스 정의 gr_interface = gr.Interface( fn=process_input, inputs=[ gr.Textbox(label="무엇을 설득해야 하나요?"), gr.Textbox(label="누구에게 보낼 메세지인가요?"), gr.Textbox(label="상대가 어떻게 반응할 것 같은가요?") ], outputs=gr.Textbox(label="메세지 작성결과"), title="설득력 증폭기", description="설득하기 전에 증폭기 돌렸나요? 설득의 메세지를 대신 작성해드릴게요. 멘탈힐링 챗봇 비키도 만나보세요.►►https://huggingface.co/spaces/psojinq/with-lucky " ) # Gradio 앱 실행 if __name__ == "__main__": gr_interface.launch()