66 lines
2.9 KiB
Python
66 lines
2.9 KiB
Python
|
|
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)
|