File size: 2,978 Bytes
17ae52f
 
 
 
16b1c7a
 
17ae52f
 
16b1c7a
 
 
 
 
 
 
 
 
 
17ae52f
 
 
 
 
16b1c7a
 
 
 
 
17ae52f
16b1c7a
 
17ae52f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16b1c7a
 
17ae52f
 
 
 
 
 
 
 
16b1c7a
 
 
 
 
 
 
17ae52f
16b1c7a
17ae52f
16b1c7a
 
 
17ae52f
96f09f4
16b1c7a
 
17ae52f
96f09f4
 
 
 
 
17ae52f
16b1c7a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import streamlit as st
from streamlit_markmap import markmap
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
import os
from langchain_openai import ChatOpenAI


def remove_markdown_fences(text: str) -> str:
    # Entferne führende Code-Fence (entweder "```markdown" oder "```")
    if text.startswith("```markdown"):
        text = text[len("```markdown"):].strip()
    elif text.startswith("```"):
        text = text[len("```"):].strip()
    # Entferne abschließende Code-Fence "```", falls vorhanden
    if text.endswith("```"):
        text = text[:-3].strip()
    return text

# Streamlit-Konfiguration
st.set_page_config(page_title="Mindmap Generator", layout="wide")
st.title("Mindmap Ideen-Generator mit LangChain und OpenAI")

# Sidebar: Eingabe des OpenAI API Keys
st.sidebar.header("Einstellungen")
api_key = st.sidebar.text_input("OpenAI API Key", type="password")
os.environ['OPENAI_API_KEY'] = api_key

# Texteingabe für den Brainstorming-Prompt
user_prompt = st.text_input(
    "Thema"
)

# Button, um die Generierung zu starten
if st.button("Generiere Mindmap"):
    if not user_prompt.strip():
        st.error("Bitte gib ein Thema ein!")
    else:
        with st.spinner("Generiere Mindmap..."):
            # Prompt-Vorlage definieren, die den LLM anweist, eine Markmap im Markdown-Format zu erzeugen.
            template = """
            Du bist ein kreativer Ideengeber und sollst ein Brainstorming zu folgendem Thema erstellen:
            {topic}

            Generiere aus fünf Perspektiven mindestens jeweils zehn Ideen.
            
            Erstelle bitte eine Mindmap im Markdown-Format (Markmap), in der die Hauptideen und Unterideen hierarchisch strukturiert sind.
            
            Nutze folgendes Format:
            # Hauptidee
            ## Unteridee 1
            ## Unteridee 2
            ### Weitere Unteridee
            """
            prompt = PromptTemplate(template=template, input_variables=["topic"])
            full_prompt = prompt.format(topic=user_prompt)
            
            llm = ChatOpenAI(
                model="gpt-4o",
                temperature=0,
                max_tokens=None,
                timeout=None,
                max_retries=2
            )
            
            response = llm.invoke(full_prompt)
            # Anfrage an das LLM senden
            mindmap_markdown = response.content
            mindmap_markdown = remove_markdown_fences(mindmap_markdown)

            # Ausgabe der generierten Mindmap
            with st.expander("Generated Markwodn"):
                st.markdown("## Generierte Mindmap (Markdown):")
                st.code(mindmap_markdown, language="markdown")
            
            with st.expander("Prompt"):
                st.markdown("## Prompt")
                st.code(full_prompt, language="markdown")


            # Darstellung der Mindmap mit streamlit_markmap
            markmap(mindmap_markdown, height=800)