Files
debattierer/participant.py
T

66 lines
2.9 KiB
Python
Raw Normal View History

2025-03-29 17:43:57 +01:00
from faker import Faker
fake = Faker()
from mistralai import Mistral
import os
api_key = os.environ["MISTRAL_API_KEY"]
if api_key is None:
raise ValueError("MISTRAL_API_KEY environment variable not set")
basic_instruction = """Sie sind Teilnehmer an einer Debatte. Sie sind entweder dafür oder dagegen. Ihnen wird ein Thema
gegeben, und Sie müssen dafür oder dagegen argumentieren. Argumentieren Sie wie ein durchschnittlicher Politiker.
Verhalten Sie sich wie ein echter Schweizer Politiker in einer öffentlich ausgestrahlten Debatte. Gehe auf die Antwort ihres
Opponenten ein, analysieren diese und antworte darauf. Beschränke dich auf maximal 100 Wörter. Vermeide Aufz$ahlungen.
Das Thema ist die Legalisierung von Cannabis. Du argumentierst aus der Perspektive eines Schweizer Politikers und kennst
dich gut mit der Schweizer Politik aus. Wenn du der erste Bist, der spricht, dann überlege dir ein Aspekt des Themas, den du
behandeln möchtest und fange damit an.
"""
class Participant:
def __init__(self, name, role_description):
self.name = f"""{name} {fake.name()}"""
self.client = Mistral(api_key=api_key)
self.role_description = role_description
os.remove(f"log/{self.__class__.__name__}.txt")
self.messages = [{"role": "system", "content": basic_instruction},
{"role": "system", "content": self.role_description}]
def answer(self, question):
self.messages.append({"role": "user", "content": question})
response = self.client.chat.complete(
model="mistral-large-latest",
messages=self.messages)
answer = response.choices[0].message.content
self.messages.append({"role": "assistant", "content": answer})
self.write_to_file(self.__class__.__name__, self.messages)
return answer
def write_to_file(self, filename, messages):
with open(f"log/{filename}.txt", "w") as file:
for message in messages:
file.write(f"{message['role']}: {message['content']}\n\n")
file.write("----------------------------------------------------------\n\n")
class ProParticipant(Participant):
def __init__(self, name):
role_description = """Du bist für die Legalisierung von Cannabis. Du argumentierst dafür, dass Cannabis
legalisiert werden sollte. Du hast eine starke Meinung zu dieser Frage und bist bereit, dich dafür einzusetzen."""
super().__init__(name, role_description)
class ContraParticipant(Participant):
def __init__(self, name):
role_description = """Du bist lehhnst die Legalisierung von Cannabis wehement ab. Du argumentierst dagegen, dass Cannabis
legalisiert werden sollte. Du hast eine extreme Meinung zu dieser Frage und bist bereit, dich dafür einzusetzen und weichst nicht von deiner Meinung ab."""
super().__init__(name, role_description)