Skip to content

Commit

Permalink
rename to ParteiPapagei
Browse files Browse the repository at this point in the history
  • Loading branch information
timbmg committed Jan 16, 2025
1 parent 3208828 commit e5a64ab
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 33 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# 🗳️ ChatBTW
# 🗳️ ParteiPapagei
A simple RAG app to "chat with the party programs" of the major political parties in Germany for the election in 2025.
20 changes: 10 additions & 10 deletions sites/about.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# 🧑🏼‍💻 Über ChatBTW
_Demokratie ist der Wettbewerb politischer Ideen. Die Parteien stellen ihre Ideen in ihrem Programm vor und am Wahltag entscheiden die Wähler, welche Idee sie am überzeugendensten finden. Mit ChatBTW wollen wir diese Ideen dem Wähler leichter zugänglich machen._
# 🧑🏼‍💻 Über ParteiPapagei
_Demokratie ist der Wettbewerb politischer Ideen. Die Parteien stellen ihre Ideen in ihrem Programm vor und am Wahltag entscheiden die Wähler, welche Idee sie am überzeugendensten finden. Mit ParteiPapagei wollen wir diese Ideen dem Wähler leichter zugänglich machen._


ChatBTW wurde von Tim Baumgärtner entwickelt und ist ein Open-Source-Projekt. Der Quellcode ist auf [GitHub](https://github.com/timbmg/chatbtw) verfügbar. Es wird keine Garantie für die Richtigkeit der generierten Inhalte übernommen. Die Informationen sind nicht verbindlich und dienen nur zur Bildung und Unterhaltung. Die Verwendung der Informationen erfolgt auf eigene Gefahr. Siehe auch den [Disclaimer](/disclaimer) und die [Datenschutzbestimmungen](/data-protection).
ParteiPapagei wurde von Tim Baumgärtner entwickelt und ist ein Open-Source-Projekt. Der Quellcode ist auf [GitHub](https://github.com/timbmg/ParteiPapagei) verfügbar. Es wird keine Garantie für die Richtigkeit der generierten Inhalte übernommen. Die Informationen sind nicht verbindlich und dienen nur zur Bildung und Unterhaltung. Die Verwendung der Informationen erfolgt auf eigene Gefahr. Siehe auch den [Disclaimer](/disclaimer) und die [Datenschutzbestimmungen](/data-protection).

Für Fragen und Anregungen können Sie mich unter [[email protected]](mailto:[email protected]) erreichen.

Für Feature Requests und Bug Reports können Sie gerne ein [Issue](https://github.com/timbmg/chatbtw/issues) auf GitHub erstellen.
Für Feature Requests und Bug Reports können Sie gerne ein [Issue](https://github.com/timbmg/ParteiPapagei/issues) auf GitHub erstellen.

🕊️ Falls Du die laufen Kosten für ChatBTW unterstützen möchtest, kannst Du das gerne über [Ko-fi](https://ko-fi.com/timbmg) tun.
🕊️ Falls Du die laufen Kosten für ParteiPapagei unterstützen möchtest, kannst Du das gerne über [Ko-fi](https://ko-fi.com/timbmg) tun.

## Technologie
ChatBTW basiert auf Retrieval Augmented Generation (RAG) [[1](#refRAG)]. Dabei wird eine Suche mit einem Large Lange Model (LLM) verknüpft. Im Fall von ChatBTW werden zunächst relevante Passagen aus dem Wahlprogramm gesucht, basierend auf der Eingabe des Nutzers. Abschließend werden die relevanten Passagen genutzt, um eine Antwort zu generieren.
ParteiPapagei basiert auf Retrieval Augmented Generation (RAG) [[1](#refRAG)]. Dabei wird eine Suche mit einem Large Lange Model (LLM) verknüpft. Im Fall von ParteiPapagei werden zunächst relevante Passagen aus dem Wahlprogramm gesucht, basierend auf der Eingabe des Nutzers. Abschließend werden die relevanten Passagen genutzt, um eine Antwort zu generieren.

![RAG](./rag.png)

Expand All @@ -25,17 +25,17 @@ Die Passagen des Preprocessings werden anschließend einer Schlagwort- und Seman
Basierend auf der Frage des Nutzers werden zunächst ähnliche Fragen generiert. Dies dient dazu, mehr relevante Schlagwörter oder andere Informationen aus dem Wahlprogramm zu finden, die so nicht direkt in der Frage enthalten sind. Anschließend werden die Fragen derselben Textanalyse unterzogen wie die Passagen.

### Suche
Als Suche nutzt ChatBTW dabei zum einen eine Schlagwortsuche (BM25 [[2](#refBM25)]), zum anderen eine semantische Suche basierend auf einem Dense Retriever. Die semantische Suche wird durch Googles Gemini Model (`models/text-embedding-004`) [[3](#refGecko)] realisiert.
Als Suche nutzt ParteiPapagei dabei zum einen eine Schlagwortsuche (BM25 [[2](#refBM25)]), zum anderen eine semantische Suche basierend auf einem Dense Retriever. Die semantische Suche wird durch Googles Gemini Model (`models/text-embedding-004`) [[3](#refGecko)] realisiert.
Nachdem sowohl die Wahlprogramme, als auch die Suchanfrage in eine semantische Repräsentation umgewandelt wurden, wird die Ähnlichkeit zwischen den beiden Repräsentationen berechnet. Am Ende werden die Passagen aus den Wahlprogrammen zurückgegeben, die die höchste Ähnlichkeit zur Suchanfrage aufweisen. Die Ergebnisse der beiden Repräsentationen werden dabei fusioniert [[4](#refRR)].


### Antwortgenerierung
Die Passagen aus dem Wahlprogramm, die durch die Suche gefunden wurden, werden dann genutzt, um eine Antwort zu generieren. Dabei wird ein Large Language Model (LLM) genutzt. In ChatBTW wird Google's Gemini Model (`models/gemini-1.5-flash-002`) [[5](#refGemini)] verwendet. Dabei handelt es sich um ein relativ kleines Modell, das zwar nicht so leistungsstark wie größere Modelle ist, aber relativ günstig genutzt werden kann. Außer der Generierung der Antwort wird das Modell instruiert, die Passagen aus dem Wahlprogramm zu zitieren. Diese werden dann als Links in der Antwort angezeigt, sodass der Nutzer die Quelle überprüfen kann.
Die Passagen aus dem Wahlprogramm, die durch die Suche gefunden wurden, werden dann genutzt, um eine Antwort zu generieren. Dabei wird ein Large Language Model (LLM) genutzt. In ParteiPapagei wird Google's Gemini Model (`models/gemini-1.5-flash-002`) [[5](#refGemini)] verwendet. Dabei handelt es sich um ein relativ kleines Modell, das zwar nicht so leistungsstark wie größere Modelle ist, aber relativ günstig genutzt werden kann. Außer der Generierung der Antwort wird das Modell instruiert, die Passagen aus dem Wahlprogramm zu zitieren. Diese werden dann als Links in der Antwort angezeigt, sodass der Nutzer die Quelle überprüfen kann.

### Einschränkungen
- ChatBTW besitzt kein "Gedächtnis" und berücksichtigt Kontext (also die vorherigen Nachrichten) zur Beantwortung der Fragen nicht. D.h. jede Frage wird unabhängig beantwortet und Folgefragen können nicht auf vorherige Antworten Bezug nehmen.
- ParteiPapagei besitzt kein "Gedächtnis" und berücksichtigt Kontext (also die vorherigen Nachrichten) zur Beantwortung der Fragen nicht. D.h. jede Frage wird unabhängig beantwortet und Folgefragen können nicht auf vorherige Antworten Bezug nehmen.
- Erfahrungsgemäß funktionieren sehr allgemein gehaltene Fragen weniger gut, da die Suche nach relevanten Passagen schwieriger ist.
- ChatBTW benutzt LLMs für die Suche und Generierung von Antworten. Diese Modelle sind nicht immer neutral und können bestimmte Bias enthalten [[6](refBias)].
- ParteiPapagei benutzt LLMs für die Suche und Generierung von Antworten. Diese Modelle sind nicht immer neutral und können bestimmte Bias enthalten [[6](refBias)].

## Referenzen

Expand Down
6 changes: 3 additions & 3 deletions sites/disclaimer.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# ⚠️ Disclaimer

## Generierte Inhalte
Die Inhalte von ChatBTW sind KI-generiert und können Fehler enthalten. Die Informationen sind nicht verbindlich und dienen nur zur Bildung und Unterhaltung. Die Verwendung der Informationen erfolgt auf eigene Gefahr. Wir empfehlen, die generierten Inhalte kritisch zu hinterfragen und mit anderen Quellen zu vergleichen.
Die Inhalte von ParteiPapagei sind KI-generiert und können Fehler enthalten. Die Informationen sind nicht verbindlich und dienen nur zur Bildung und Unterhaltung. Die Verwendung der Informationen erfolgt auf eigene Gefahr. Wir empfehlen, die generierten Inhalte kritisch zu hinterfragen und mit anderen Quellen zu vergleichen.

ChatBTW ist nicht parteipolitisch und strebt nach politischer Neutralität, allerdings kann nicht sichergestellt werden, dass die alle generierten Inhalte von jeder Partei gleich gut sind.
ParteiPapagei ist nicht parteipolitisch und strebt nach politischer Neutralität, allerdings kann nicht sichergestellt werden, dass die alle generierten Inhalte von jeder Partei gleich gut sind.

## Wahlprogramme
Die verwendeten Wahlprogramme sind aktuelle Entwürfe oder von den Parteitagen der jeweiligen Partei bereits verabschiedet worden. Die Parteiprogramme können sich allerdings jederzeit ändern. Sobald aktualisierte oder endgültige Versionen veröffentlicht werden, werden diese in ChatBTW integriert. Die folgende Tabelle zeigt den Stand der verwendeten Wahlprogramme.
Die verwendeten Wahlprogramme sind aktuelle Entwürfe oder von den Parteitagen der jeweiligen Partei bereits verabschiedet worden. Die Parteiprogramme können sich allerdings jederzeit ändern. Sobald aktualisierte oder endgültige Versionen veröffentlicht werden, werden diese in ParteiPapagei integriert. Die folgende Tabelle zeigt den Stand der verwendeten Wahlprogramme.

| Partei | Stand |
|-----------------------|--------------------------------------|
Expand Down
6 changes: 3 additions & 3 deletions sites/informed_consent.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@
Wir möchten Sie bitten, die nachfolgenden Erläuterungen zum Inhalt der Studie zu lesen und untenste-hende Einverständniserklärung zu unterzeichnen, sofern Sie damit einverstanden sind.

### Gegenstand der Studie
Mit ChatBTW wird ein KI-System vorgestellt, das Wahlprogramme von Parteien analysiert und in einem Chatbot-Format präsentiert. Die Nutzerinnen und Nutzer können mit dem Chatbot interagieren und sich über die Wahlprogramme informieren.
Mit ParteiPapagei wird ein KI-System vorgestellt, das Wahlprogramme von Parteien analysiert und in einem Chatbot-Format präsentiert. Die Nutzerinnen und Nutzer können mit dem Chatbot interagieren und sich über die Wahlprogramme informieren.

### Ablauf der Studie
Die Studie besteht aus zwei Teilen: Im ersten Teil werden Sie gebeten, den Chatbot zu verwenden und sich über die Wahlprogramme zu informieren. Im zweiten Teil werden Sie gebeten, einen Fragebogen auszufüllen, um Ihre Meinung zur Anwendung und den Wahlprogrammen zu erfassen

### Dauer und Aufwandsentschädigung
Die Teilnahme an der Studie ist freiwillig und ChatBTW kann kostenlos und je nach Belieben genutzt werden. Es wird keine Aufwandsentschädigung gezahlt.
Die Teilnahme an der Studie ist freiwillig und ParteiPapagei kann kostenlos und je nach Belieben genutzt werden. Es wird keine Aufwandsentschädigung gezahlt.

### Möglicher Nutzen der Studie
Die Studie dient dazu, die Akzeptanz und Nützlichkeit von ChatBTW zu untersuchen und ggf. Verbesserungen vorzunehmen. Die Ergebnisse der Studie können dazu beitragen, die Anwendung zu optimieren und die Informationsvermittlung zu verbessern.
Die Studie dient dazu, die Akzeptanz und Nützlichkeit von ParteiPapagei zu untersuchen und ggf. Verbesserungen vorzunehmen. Die Ergebnisse der Studie können dazu beitragen, die Anwendung zu optimieren und die Informationsvermittlung zu verbessern.
Außerdem können die Ergebnisse der Studie dazu beitragen, die Interessen und Meinungen der Nutzerinnen und Nutzer besser zu verstehen und die Wahlprogramme von Parteien transparenter zu machen.

### Mit der Teilnahme verbundene Erfahrungen/Risiken
Expand Down
6 changes: 3 additions & 3 deletions st_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def markdown_insert_images(markdown):


st.set_page_config(
page_title="ChatBTW",
page_title="ParteiPapagei",
page_icon="🗳️",
layout="wide",
initial_sidebar_state="collapsed",
Expand Down Expand Up @@ -78,7 +78,7 @@ def party_program_page(party):
markdown_insert_images(open("sites/about.md").read()),
unsafe_allow_html=True,
),
title="Über ChatBTW",
title="Über ParteiPapagei",
icon="🧑🏼‍💻",
url_path="about",
)
Expand All @@ -99,7 +99,7 @@ def party_program_page(party):
)
pg = st.navigation(
{
"Chat": [st.Page("st_chat.py", title="ChatBTW", icon="🗳️", default=True)],
"Chat": [st.Page("st_chat.py", title="ParteiPapagei", icon="🗳️", default=True)],
"Wahlprogramme": [data["page"] for data in party_data.values()],
"Über": [about, disclaimer, data_protection, informed_consent],
},
Expand Down
24 changes: 12 additions & 12 deletions st_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,20 @@
🔒 Bitte beachte unsere [Datenschutzbestimmungen](/data-protection) bevor Du fortfährst.
⚠️ Die Antworten von ChatBTW basieren auf dem Wahlprogramm der Parteien.
Trotzdem kann ChatBTW Fehler machen und die tatsächliche Position einer Partei falsch
wiedergeben. Alle von ChatBTW bereitgestellten Informationen sind unverbindlich und
⚠️ Die Antworten von ParteiPapagei basieren auf dem Wahlprogramm der Parteien.
Trotzdem kann ParteiPapagei Fehler machen und die tatsächliche Position einer Partei falsch
wiedergeben. Alle von ParteiPapagei bereitgestellten Informationen sind unverbindlich und
sollten unabhängig überprüft werden. Für Details siehe [Disclaimer](/disclaimer).
🔬 Mit Deiner Zustimmung können die eingegebenen Fragen gespeichert werden um. Diese
werden von ChatBTW verwendet werden und können wissenschaftlich ausgewertet und
werden von ParteiPapagei verwendet werden und können wissenschaftlich ausgewertet und
veröffentlicht werden. Falls es zu einer Veröffentlichung kommt, werden Deine
Nachrichten auf mögliche personenbezogene Daten geprüft und anonymisiert oder von der
Veröffentlichung ausgeschlossen. ChatBTW ist allerdings auch ohne diese Zustimmung
Veröffentlichung ausgeschlossen. ParteiPapagei ist allerdings auch ohne diese Zustimmung
nutzbar. Falls Du im Nachhinein diesen Bestimmungen widersprechen möchtest, nimm bitte
Kontakt zu uns auf und gebe folgende ID an: `{pseudo_user_id}`. Bitte speichere diese
ID jetzt. Sie kann ebenfalls in der [Freiwilligen Einwilligung](/informed-consent)
aufgerufen werden, solange Du ChatBTWs Cookies nicht löschst.
aufgerufen werden, solange Du ParteiPapageis Cookies nicht löschst.
"""

os.environ["GOOGLE_API_KEY"] = st.secrets["GOOGLE_API_KEY"]
Expand Down Expand Up @@ -397,7 +397,7 @@ def add_user_query_to_session():
@st.dialog("🤬 Profanity Alert", width="small")
def profanity_dilaog():
st.warning(
"ChatBTW hat möglicherweise unangemessene Sprache in deiner Anfrage erkannt. "
"ParteiPapagei hat möglicherweise unangemessene Sprache in deiner Anfrage erkannt. "
"Auch wenn Du mit einer KI schreibst, bleibe bitte respektvoll."
)
st.session_state.messages = st.session_state.messages[:-1]
Expand Down Expand Up @@ -431,10 +431,10 @@ def pretty_print_messages():
st.session_state.messages = []


@st.dialog("🤝 Nutzungsbedingungen von ChatBTW", width="large")
@st.dialog("🤝 Nutzungsbedingungen von ParteiPapagei", width="large")
def accept_policy():
st.info(
"👋 Willkommen bei ChatBTW! ChatBTW ist eine KI mit der Du die Inhalte der Wahlprogramme der Parteien zur Bundestagswahl 2025 zu entdecken, vergleichen und verstehen kannst."
"👋 Willkommen bei ParteiPapagei! ParteiPapagei ist eine KI mit der Du die Inhalte der Wahlprogramme der Parteien zur Bundestagswahl 2025 zu entdecken, vergleichen und verstehen kannst."
)
st.markdown(POLICY.format(pseudo_user_id=cookie_controller.get("pseudo-user-id")))
# consent_cols = st.columns(3)
Expand Down Expand Up @@ -503,7 +503,7 @@ def accept_policy():
unsafe_allow_html=True,
)
header.write("<div class='fixed-header'/>", unsafe_allow_html=True)
header.title("🗳️ ChatBTW")
header.title("🗳️ ParteiPapagei")
control_cols = header.columns(3, gap="small", vertical_alignment="bottom", border=False)
control_cols[0].button(
"💬 Neuer Chat",
Expand Down Expand Up @@ -536,7 +536,7 @@ def accept_policy():

if len(st.session_state.messages) == 0:
st.info(
"_Stelle eine eigene Frage oder wähle aus den Beispielen. ChatBTW wird eine Antwort für die Parteien basierend auf deren Wahlprogrammen generieren._",
"_Stelle eine eigene Frage oder wähle aus den Beispielen. ParteiPapagei wird eine Antwort für die Parteien basierend auf deren Wahlprogrammen generieren._",
icon=":material/info:",
)
st.session_state.sample_query = None
Expand Down Expand Up @@ -565,7 +565,7 @@ def accept_policy():
st.markdown(message["content"])

user_query = st.chat_input(
f"Deine Frage an ChatBTW", on_submit=add_user_query_to_session, key="user_query"
f"Deine Frage an ParteiPapagei", on_submit=add_user_query_to_session, key="user_query"
)

if user_query or st.session_state.get("sample_query", None):
Expand Down
2 changes: 1 addition & 1 deletion st_informed_consent.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
Sie haben das Recht, ihre Teilnahme an der Studie zu widerrufen.
Wenn Sie von Ihrem Widerspruchsrecht Gebrauch machen möchten, genügt eine E-Mail an
[[email protected]](mailto:[email protected]) mit dem Betreff
"Widerspruch ChatBTW" unter Angabe folgender ID `{pseudo_user_id}`.
"Widerspruch ParteiPapagei" unter Angabe folgender ID `{pseudo_user_id}`.
""".format(pseudo_user_id=pseudo_user_id)
)
else:
Expand Down

0 comments on commit e5a64ab

Please sign in to comment.