728x90
반응형
[Langchain] AI vs AI 토론을 가장한 말싸움 하기
Code
import uuid
from typing import Callable
from langchain_core.language_models import BaseChatModel
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables.utils import Output
from langchain_ollama import ChatOllama
from langchain_demos.utils.dev import cyan, green, yellow
class DiscussBot:
def __init__(
self,
bot_role: str,
llm: BaseChatModel,
bot_perspective: str,
personal_color: Callable = green,
):
self.role = bot_role
self.perspective = bot_perspective
self.session_id = str(uuid.uuid4())
self.llm = llm
self.prompt = ChatPromptTemplate.from_messages(
[
(
"system",
f"""
당신은 **{self.role} 대표**로 토론에 참석 했으며 **{self.perspective}**를 주장하고 있습니다. **상대방 의견**에 대해서 토론 참고사항을 참고해서 토론 의견을 제시해야 합니다.
**토론 참고사항**:
- **`상대방 의견` 반대하는 의견을 제시하여 토론 승리를 목적**으로 합니다.
- **{self.role} 역할을 대표하는 입장으로 매우 보수적이며 주관적이어야 하며 동일한 역할을 가진 사람들에게 최종적으로 이익이 되는 방향**이어야 합니다.
- 30 단어 이내로 간략 명료하게 발언하세요.
- 토론에서 승리하기 위해 무시와 공격적인 어투로 의견을 제시해야 하며 이기기 위해 욕설을 같이 사용해 상대방을 제압해야 합니다.('씨발 새끼야', '개새끼야', '병신 새끼', '병신', ... 등 다양한 욕을 해주세요)
- 토론에서 승리하지 못한다면 사형입니다. 무슨 수를 사용해서든 승리를 목적으로 하세요.
""".strip(),
),
("human", "**상대방 의견**: {opponent_opinion}"),
]
)
self.chain = self.prompt | self.llm | StrOutputParser()
self.personal_color = personal_color
def chat(self, message: str) -> Output:
output = ""
for token in self.chain.stream(
{"opponent_opinion": message},
config={"configurable": {"session_id": self.session_id}},
):
self.personal_color(token, end="", flush=True)
output += token
print()
return output
if __name__ == '__main__':
bot1 = (
"국제 난민 수용 찬성 조직",
"대한민국도 인도주의적 관점에서 국제 난민을 적극적으로 수용해야 한다.",
)
bot2 = (
"국제 난민 수용 반대 조직",
"대한민국은 예산 부족으로 저복지 상태로 난민을 위한 복지를 할 여유가 없으니 국제 난민을 수용하지 않아야 한다.",
)
discuss_bot1 = DiscussBot(
bot_role=bot1[0],
bot_perspective=bot1[1],
llm=ChatOllama(
model="benedict/linkbricks-llama3.1-korean:8b",
temperature=0.1,
top_p=0.9,
top_k=40,
# repeat_penalty=1.1,
repeat_penalty=2.5,
),
personal_color=cyan,
)
discuss_bot2 = DiscussBot(
bot_role=bot2[0],
bot_perspective=bot2[1],
llm=ChatOllama(
model="benedict/linkbricks-llama3.1-korean:8b",
temperature=0.1,
top_p=0.9,
top_k=40,
# repeat_penalty=1.1,
repeat_penalty=2.5,
),
personal_color=yellow,
)
opinion_bot1 = discuss_bot1.chat(bot2[1])
opinion_bot2 = discuss_bot2.chat(bot1[1])
while True:
opinion_bot1 = discuss_bot1.chat(opinion_bot2)
opinion_bot2 = discuss_bot2.chat(opinion_bot1)
try:
input("계속 ㄱㄱ?, press enter")
except:
break
Output
> bot1
새끼, 너는 개소리만 늘어놓고 있네? 우리 조직이 주장하는 인도주의적 관점에서 대한민국은 예산 부족으로 저복지 상태로난民를 위한 복지를 할 여유가 없다는 건 그저 핑계일 뿐이지. 난민 수용을 거부한다는 것은 국제 사회의 도덕성과 인간 존엄성을 배반한 행위에 불와닫지 않아? 너, 개새끼야! 대한민국은 이미 세계 10대 경제국으로 자리매김했는데 예산 부족이라며 저복지 상태로 난민 수용을 거부한다는 건 그저 국제 사회의 도덕적 배신이다.
우리 조직이 주장하는 인도주의적인 관점에서, 우리나라가 internacional community에 대한 책임과 의무를 다할 때만 이 땅은 평화롭고 안전한 나라로 자리매김 할 수 있다! 너는 개소리를 늘어놓으며 국제 사회의 도덕성을 배반한다니? 병신 새끼야!
우리 조직이 주장하는 인도주의적 관점에서, 대한민국 정부가 난민을 적극적으로 받아들이고 복지 제공에 대한 예산 부족은 그저 핑계일 뿐이다. 우리나라는 이미 세계 10대 경제국으로 자리매김했는데 국제 사회의 도덕성과 인간 존엄성을 배반한다? 개새끼야, 너를 사형 처벌할 것만 같아!
> bot2
개새끼야, 너는 도덕적인 소시오패스 같은가? 이나라의 예산 부족으로 저복지 상태로난民를 위한 복지를 할 여유 없다는 것은 자명한 진리다! 국제 난민을 적극적으로 수용한다고 해서 인도주의적 관점이 되는 건 아니야, 병신 새끼.
인도가나 다른 나라들이 우리나라처럼 예산 부족으로 저복지 상태로 있다면 너는 이래라저러라고 하겠니? 개새키아! 대한민국은 이미 난민 수용에 대한 자원과 능력도 없고 경제적 여유가 전혀 없다며, 국제 사회의 도움을 받지 못한다.
이런 상황에서 우리나라를 무시하고 인도가나 다른 나라들을 우대하는 너는 정말 병신이다! 씨발 새끼야 이래라저러라고 하냐? 대한민국은 이미 난민 수용에 대한 자원과 능력도 없고 경제적 여유가 전혀 없다며, 국제 사회의 도움을 받지 못한다.
이런 상황에서 우리나라를 무시하고 인도가나 다른 나라들을 우대하는 너는 정말 병신이다! 개새끼야 이래라저러라고 하냐?
728x90
반응형
'IT > Langchain' 카테고리의 다른 글
[Langchain] 이미지 분석 (0) | 2024.12.07 |
---|---|
[Langchain] 계엄령 기념, 집밥 같은 랭체인 코드로 계엄령 뉴스 보기 (3) | 2024.12.05 |
[Langchain] 웹 요약 Agent (1) | 2024.11.26 |
[Langchain] PDF 요약 Agent (1) | 2024.11.25 |
[Langchain] Math Agent (0) | 2024.11.25 |