{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 🌊 DeepSeek Integration i Google Colab\n", "\n", "Dette notebook viser hvordan du bruger DeepSeek i Google Colab/Antigravity\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 📦 Step 1: Installer Dependencies" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Install OpenAI SDK (DeepSeek er kompatibel)\n", "!pip install openai --quiet\n", "print(\"✅ OpenAI SDK installeret!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 🔑 Step 2: Konfigurer API Key" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import openai\n", "from openai import OpenAI\n", "\n", "# Din DeepSeek API key\n", "DEEPSEEK_API_KEY = \"sk-a3f8e6b48271466b981396dc97fd904a\"\n", "\n", "# Opret client\n", "client = OpenAI(\n", " api_key=DEEPSEEK_API_KEY,\n", " base_url=\"https://api.deepseek.com/v1\"\n", ")\n", "\n", "print(\"✅ DeepSeek client konfigureret!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 💬 Step 3: Simple Chat" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def chat_with_deepseek(prompt, temperature=0.7, max_tokens=2000):\n", " \"\"\"\n", " Chat med DeepSeek\n", " \"\"\"\n", " response = client.chat.completions.create(\n", " model=\"deepseek-chat\",\n", " messages=[\n", " {\"role\": \"user\", \"content\": prompt}\n", " ],\n", " temperature=temperature,\n", " max_tokens=max_tokens\n", " )\n", " \n", " return response.choices[0].message.content\n", "\n", "# Test det\n", "response = chat_with_deepseek(\"Hej DeepSeek! Sig hej på dansk.\")\n", "print(\"🤖 DeepSeek:\", response)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 🎯 Step 4: Praktiske Eksempler" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Eksempel 1: Code Generation" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "code_prompt = \"\"\"\n", "Skriv en Python funktion der:\n", "1. Tager en liste af tal\n", "2. Fjerner duplikater\n", "3. Sorterer listen\n", "4. Returnerer resultat\n", "\n", "Inkluder docstring og type hints.\n", "\"\"\"\n", "\n", "code = chat_with_deepseek(code_prompt, temperature=0.3)\n", "print(\"💻 Genereret kode:\")\n", "print(code)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Eksempel 2: Data Analysis" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "data_prompt = \"\"\"\n", "Jeg har følgende data om website traffic:\n", "- Mandag: 1500 besøg\n", "- Tirsdag: 1800 besøg\n", "- Onsdag: 1200 besøg\n", "- Torsdag: 2100 besøg\n", "- Fredag: 2500 besøg\n", "\n", "Analyser dataen og giv insights på dansk.\n", "\"\"\"\n", "\n", "analysis = chat_with_deepseek(data_prompt)\n", "print(\"📊 Analyse:\")\n", "print(analysis)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Eksempel 3: Multi-turn Conversation" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "conversation = [\n", " {\"role\": \"system\", \"content\": \"Du er en hjælpsom dansk programmerings-assistent.\"},\n", " {\"role\": \"user\", \"content\": \"Hvad er forskellen på list og tuple i Python?\"}\n", "]\n", "\n", "# First message\n", "response1 = client.chat.completions.create(\n", " model=\"deepseek-chat\",\n", " messages=conversation\n", ")\n", "\n", "answer1 = response1.choices[0].message.content\n", "print(\"Q1: Hvad er forskellen på list og tuple?\")\n", "print(\"A1:\", answer1)\n", "print()\n", "\n", "# Add to conversation\n", "conversation.append({\"role\": \"assistant\", \"content\": answer1})\n", "conversation.append({\"role\": \"user\", \"content\": \"Kan du give et konkret eksempel?\"})\n", "\n", "# Second message\n", "response2 = client.chat.completions.create(\n", " model=\"deepseek-chat\",\n", " messages=conversation\n", ")\n", "\n", "answer2 = response2.choices[0].message.content\n", "print(\"Q2: Kan du give et konkret eksempel?\")\n", "print(\"A2:\", answer2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 🚀 Step 5: Advanced - Stream Response" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import sys\n", "\n", "def stream_chat(prompt):\n", " \"\"\"\n", " Stream response fra DeepSeek\n", " \"\"\"\n", " stream = client.chat.completions.create(\n", " model=\"deepseek-chat\",\n", " messages=[{\"role\": \"user\", \"content\": prompt}],\n", " stream=True\n", " )\n", " \n", " print(\"🤖 DeepSeek (streaming): \", end=\"\")\n", " \n", " for chunk in stream:\n", " if chunk.choices[0].delta.content is not None:\n", " content = chunk.choices[0].delta.content\n", " print(content, end=\"\", flush=True)\n", " \n", " print() # New line\n", "\n", "# Test streaming\n", "stream_chat(\"Fortæl mig en kort historie om en robot der lærer at kode.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 🎨 Step 6: Interactive Chat Interface" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from IPython.display import display, Markdown, clear_output\n", "import ipywidgets as widgets\n", "\n", "# Chat history\n", "chat_history = []\n", "\n", "# UI Components\n", "output = widgets.Output()\n", "text_input = widgets.Textarea(\n", " placeholder='Skriv din besked...',\n", " layout=widgets.Layout(width='100%', height='80px')\n", ")\n", "send_button = widgets.Button(\n", " description='Send til DeepSeek',\n", " button_style='success',\n", " layout=widgets.Layout(width='200px')\n", ")\n", "clear_button = widgets.Button(\n", " description='Ryd chat',\n", " button_style='warning',\n", " layout=widgets.Layout(width='150px')\n", ")\n", "\n", "def send_message(b):\n", " user_message = text_input.value\n", " if not user_message.strip():\n", " return\n", " \n", " # Add user message\n", " chat_history.append({\"role\": \"user\", \"content\": user_message})\n", " \n", " # Get response\n", " response = client.chat.completions.create(\n", " model=\"deepseek-chat\",\n", " messages=chat_history\n", " )\n", " \n", " assistant_message = response.choices[0].message.content\n", " chat_history.append({\"role\": \"assistant\", \"content\": assistant_message})\n", " \n", " # Display\n", " with output:\n", " clear_output()\n", " for msg in chat_history:\n", " if msg[\"role\"] == \"user\":\n", " display(Markdown(f\"**👤 Du:** {msg['content']}\"))\n", " else:\n", " display(Markdown(f\"**🤖 DeepSeek:** {msg['content']}\"))\n", " print(\"---\")\n", " \n", " # Clear input\n", " text_input.value = \"\"\n", "\n", "def clear_chat(b):\n", " global chat_history\n", " chat_history = []\n", " with output:\n", " clear_output()\n", " display(Markdown(\"*Chat ryddet. Start en ny samtale!*\"))\n", "\n", "send_button.on_click(send_message)\n", "clear_button.on_click(clear_chat)\n", "\n", "# Display UI\n", "display(widgets.VBox([\n", " widgets.HTML(\"