| 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: |
| |
| if text.startswith("```markdown"): |
| text = text[len("```markdown"):].strip() |
| elif text.startswith("```"): |
| text = text[len("```"):].strip() |
| |
| if text.endswith("```"): |
| text = text[:-3].strip() |
| return text |
|
|
| |
| st.set_page_config(page_title="Mindmap Generator", layout="wide") |
| st.title("Mindmap Ideen-Generator mit LangChain und OpenAI") |
|
|
| |
| st.sidebar.header("Einstellungen") |
| api_key = st.sidebar.text_input("OpenAI API Key", type="password") |
| os.environ['OPENAI_API_KEY'] = api_key |
|
|
| |
| user_prompt = st.text_input( |
| "Thema" |
| ) |
|
|
| |
| if st.button("Generiere Mindmap"): |
| if not user_prompt.strip(): |
| st.error("Bitte gib ein Thema ein!") |
| else: |
| with st.spinner("Generiere Mindmap..."): |
| |
| 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) |
| |
| mindmap_markdown = response.content |
| mindmap_markdown = remove_markdown_fences(mindmap_markdown) |
|
|
| |
| 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") |
|
|
|
|
| |
| markmap(mindmap_markdown, height=800) |
|
|