整个烂活‖智慧之泉“插件版”

实际上就是把智慧之泉的API调用
屑文本对比的网页合并了
UI是极其难受 输入框超级小 :sob::sob::sob:
像我这样提示1700补全1000的 用500次就欠费了

代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>智慧之泉 - AI对话与文本对比艺术</title>
    <link href="https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&family=Noto+Serif+SC:wght@400;700&display=swap" rel="stylesheet">
    <style>
        :root {
            --primary-color: #8e44ad;
            --secondary-color: #3498db;
            --background-color: #ecf0f1;
            --text-color: #34495e;
            --accent-color: #e74c3c;
            --border-radius: 15px;
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: 'Noto Serif SC', serif;
            line-height: 1.6;
            color: var(--text-color);
            background: linear-gradient(135deg, var(--background-color), #bdc3c7);
            padding: 20px;
            min-height: 100vh;
        }

        .container {
            max-width: 1200px;
            margin: 0 auto;
            display: grid;
            grid-template-columns: 2fr 1fr;
            gap: 30px;
        }

        .chat-container, .compare-container {
            background-color: rgba(255, 255, 255, 0.9);
            border-radius: var(--border-radius);
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
            overflow: hidden;
            transition: all 0.3s ease;
        }

        .chat-container:hover, .compare-container:hover {
            transform: translateY(-5px);
            box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15);
        }

        .chat-header, .compare-header {
            background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
            color: #fff;
            padding: 20px;
            font-size: 1.5em;
            font-weight: 700;
            text-align: center;
            font-family: 'Ma Shan Zheng', cursive;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        }

        .chat-window, .compare-window {
            height: 500px;
            overflow-y: auto;
            padding: 20px;
            background: url('https://www.transparenttextures.com/patterns/rice-paper-3.png');
        }

        .message, .compare-text {
            margin-bottom: 20px;
            padding: 15px;
            border-radius: var(--border-radius);
            max-width: 80%;
            animation: fadeIn 0.5s ease-out;
            box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
        }

        @keyframes fadeIn {
            from { opacity: 0; transform: translateY(20px); }
            to { opacity: 1; transform: translateY(0); }
        }

        .user-message {
            background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
            color: #fff;
            align-self: flex-end;
            margin-left: auto;
        }

        .ai-message {
            background: linear-gradient(45deg, #f1f1f1, #e1e1e1);
            align-self: flex-start;
        }

        .input-area {
            display: flex;
            padding: 20px;
            background-color: rgba(255, 255, 255, 0.9);
            border-top: 1px solid #e0e0e0;
        }

        #user-input, .compare-input {
            flex-grow: 1;
            padding: 15px;
            border: 2px solid var(--primary-color);
            border-radius: var(--border-radius);
            font-size: 16px;
            transition: all 0.3s ease;
        }

        #user-input:focus, .compare-input:focus {
            outline: none;
            box-shadow: 0 0 10px rgba(142, 68, 173, 0.5);
        }

        button {
            padding: 15px 30px;
            background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
            color: #fff;
            border: none;
            border-radius: var(--border-radius);
            cursor: pointer;
            font-size: 16px;
            font-weight: 700;
            transition: all 0.3s ease;
            margin-left: 10px;
            text-transform: uppercase;
            letter-spacing: 1px;
        }

        button:hover {
            background: linear-gradient(45deg, var(--secondary-color), var(--primary-color));
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
        }

        .settings-panel {
            background-color: rgba(255, 255, 255, 0.9);
            border-radius: var(--border-radius);
            padding: 30px;
            box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
        }

        .settings-panel h2 {
            margin-bottom: 20px;
            color: var(--primary-color);
            font-family: 'Ma Shan Zheng', cursive;
            font-size: 2em;
            text-align: center;
        }

        .settings-panel input {
            width: 100%;
            padding: 15px;
            margin-bottom: 15px;
            border: 2px solid var(--secondary-color);
            border-radius: var(--border-radius);
            font-size: 16px;
            transition: all 0.3s ease;
        }

        .settings-panel input:focus {
            outline: none;
            border-color: var(--primary-color);
            box-shadow: 0 0 10px rgba(52, 152, 219, 0.5);
        }

        .compare-container {
            display: none;
            margin-top: 30px;
        }

        .compare-toggle {
            display: flex;
            align-items: center;
            margin-bottom: 20px;
        }

        .compare-toggle input {
            margin-right: 10px;
        }

        .diff {
            background-color: #ffeaa7;
            padding: 2px 0;
        }

        @media (max-width: 768px) {
            .container {
                grid-template-columns: 1fr;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="chat-container">
            <div class="chat-header">智慧之泉 - 与AI共舞</div>
            <div class="chat-window" id="chat-window">
                <!-- 消息将在这里添加 -->
            </div>
            <div class="input-area">
                <input type="text" id="user-input" placeholder="在此倾诉你的思绪...">
                <button onclick="sendMessage()">启迪灵感</button>
            </div>
        </div>
        <div class="settings-panel">
            <h2>智慧之源</h2>
            <input type="text" id="api-url" placeholder="AI智慧之门" value="这里应该填写API站点链接">
            <input type="text" id="api-key" placeholder="开启智慧之钥" value="请填写属于你的api key">
            <input type="text" id="model-name" placeholder="选择你的智慧导师" value="可以自由填写你想对话的人物哦">
            <button onclick="saveSettings()">珍藏智慧</button>
            <div class="compare-toggle">
                <input type="checkbox" id="compare-toggle" onchange="toggleCompareContainer()">
                <label for="compare-toggle">启用文本对比工具</label>
            </div>
        </div>
    </div>
    <div class="compare-container" id="compare-container">
        <div class="compare-header">文本对比 - 洞察差异之美</div>
        <div class="input-area">
            <textarea class="compare-input" id="text1" placeholder="输入第一段文本,让智慧之泉品鉴其中奥妙"></textarea>
        </div>
        <div class="input-area">
            <textarea class="compare-input" id="text2" placeholder="输入第二段文本,让智慧之泉探寻其中玄机"></textarea>
        </div>
        <div class="input-area">
            <input type="text" id="compare-prompt" placeholder="请输入对比提示,如:分析文风差异">
            <button onclick="compareTexts()">启迪对比之眼</button>
        </div>
        <div class="compare-window" id="compare-window">
            <!-- 对比结果将在这里显示 -->
        </div>
    </div>

    <script>
        window.onload = function() {
            loadSettings();
            addMessage("欢迎来到智慧之泉,让我们一起探索思想的深邃与灵感的闪耀。", 'ai-message');
        }

        async function sendMessage() {
            const userInput = document.getElementById('user-input');
            const chatWindow = document.getElementById('chat-window');
            
            if (!userInput.value.trim()) return;

            addMessage(userInput.value, 'user-message');
            
            const apiUrl = document.getElementById('api-url').value;
            const apiKey = document.getElementById('api-key').value;
            const modelName = document.getElementById('model-name').value;
            
            if (!apiUrl || !apiKey || !modelName) {
                addMessage('请先在智慧之源中填写必要的信息,以开启我们的对话之旅。', 'ai-message');
                return;
            }
            
            const userMessage = userInput.value;
            userInput.value = '';
            
            try {
                const response = await fetch(`${apiUrl}/v1/chat/completions`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${apiKey}`
                    },
                    body: JSON.stringify({
                        model: modelName,
                        messages: [{ role: 'user', content: userMessage }]
                    })
                });
                
                if (!response.ok) {
                    throw new Error('智慧之泉暂时沉寂,请稍后再试。');
                }
                
                const data = await response.json();
                
                typeWriterEffect(data.choices[0].message.content, 'ai-message');
            } catch (error) {
                console.error('Error:', error);
                addMessage('抱歉,智慧之泉暂时无法回应。请检查你的连接,或稍后再来。', 'ai-message');
            }
        }

        function addMessage(content, className) {
            const chatWindow = document.getElementById('chat-window');
            const messageDiv = document.createElement('div');
            messageDiv.className = `message ${className}`;
            messageDiv.textContent = content;
            chatWindow.appendChild(messageDiv);
            chatWindow.scrollTop = chatWindow.scrollHeight;
        }

        function typeWriterEffect(text, className, speed = 30) {
            const chatWindow = document.getElementById('chat-window');
            const messageDiv = document.createElement('div');
            messageDiv.className = `message ${className}`;
            chatWindow.appendChild(messageDiv);

            let i = 0;
            function type() {
                if (i < text.length) {
                    messageDiv.textContent += text.charAt(i);
                    i++;
                    chatWindow.scrollTop = chatWindow.scrollHeight;
                    setTimeout(type, speed);
                }
            }
            type();
        }

        function saveSettings() {
            const apiUrl = document.getElementById('api-url').value;
            const apiKey = document.getElementById('api-key').value;
            const modelName = document.getElementById('model-name').value;
            
            localStorage.setItem('apiUrl', apiUrl);
            localStorage.setItem('apiKey', apiKey);
            localStorage.setItem('modelName', modelName);
            
            addMessage('你的智慧设置已经被珍藏。让我们继续我们的思想之旅吧!', 'ai-message');
        }

        function loadSettings() {
            const apiUrl = localStorage.getItem('apiUrl');
            const apiKey = localStorage.getItem('apiKey');
            const modelName = localStorage.getItem('modelName');

            if (apiUrl) document.getElementById('api-url').value = apiUrl;
            if (apiKey) document.getElementById('api-key').value = apiKey;
            if (modelName) document.getElementById('model-name').value = modelName;
        }

        function toggleCompareContainer() {
            const compareContainer = document.getElementById('compare-container');
            compareContainer.style.display = document.getElementById('compare-toggle').checked ? 'block' : 'none';
        }

        async function compareTexts() {
            const text1 = document.getElementById('text1').value;
            const text2 = document.getElementById('text2').value;
            const comparePrompt = document.getElementById('compare-prompt').value;
            const compareWindow = document.getElementById('compare-window');

            if (!text1 || !text2) {
                compareWindow.innerHTML = '<div class="message ai-message">请在两个文本框中都输入内容,让智慧之泉为你揭示其中奥秘。</div>';
                return;
            }

            const apiUrl = document.getElementById('api-url').value;
            const apiKey = document.getElementById('api-key').value;
            const modelName = document.getElementById('model-name').value;

            if (!apiUrl || !apiKey || !modelName) {
                compareWindow.innerHTML = '<div class="message ai-message">请先在智慧之源中填写必要的信息,以开启我们的对比之旅。</div>';
                return;
            }

            compareWindow.innerHTML = '<div class="message ai-message">智慧之泉正在深思熟虑,请稍候...</div>';

            try {
                const response = await fetch(`${apiUrl}/v1/chat/completions`, {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'Authorization': `Bearer ${apiKey}`
                    },
                    body: JSON.stringify({
                        model: modelName,
                        messages: [
                            { role: 'system', content: '你是一个精通文本分析和对比的AI助手。' },
                            { role: 'user', content: `请分析以下两段文本,${comparePrompt}:\n\n文本1: ${text1}\n\n文本2: ${text2}` }
                        ]
                    })
                });

                if (!response.ok) {
                    throw new Error('智慧之泉暂时无法回应,请稍后再试。');
                }

                const data = await response.json();
                const analysis = data.choices[0].message.content;

                compareWindow.innerHTML = `<div class="message ai-message">${analysis}</div>`;
            } catch (error) {
                console.error('Error:', error);
                compareWindow.innerHTML = '<div class="message ai-message">抱歉,智慧之泉暂时无法完成对比。请检查你的连接,或稍后再来。</div>';
            }
        }
    </script>
</body>
</html>
10 个赞

我的帖子火不动是有原因的
首先是我自己懒 虽然找到了问题 但是懒得改 或者说根本找不到问题 第二就是因为我懒 所以帖子质量不高 因此没有老友提出意见 这样我就更无法发现问题 帖子质量就更不高 佬友们就更看不见 :sob:
这些小功能我都是自己先破费尝试( 明明是白嫖的) 已经是最大的努力了

3 个赞

佬 已经很成功了
我搞定了 只是不知道如何使用


「今后就一直这样吧,这样的话渚砂就永远是我的东西了,我就安心了。」——《草莓危机》
***
Google Chrome 127 | Windows 10 | China, Guangdong | 2024/08/17 19:45:44

倒地.gif
或许你可以直接在论坛找到 Openai官方的key
API就填 openai.com
然后输入key
模型名称可以看官网文档 随便选一个想用的直接复制过来

1 个赞

技术佬 可能无语倒地?


「我不会忘记的,永远地轮回也好、命运也好、神也好,都不会输,不会输的。因为我们的心灵是相通的。」——《神无月的巫女》
2 个赞

灌水佬:sob::sob::sob:

3 个赞

没有呀 我确实不知道下一步


「我一定会让你看到漆黑的夜空被朝阳照亮的瞬间。我一定—会做到。」——《魔女与女王》
2 个赞

佬,你的api和key直接漏了:joy:

3 个赞

佬直接给你们体验用

tieba_125技术贴+福利帖

1 个赞

我试了下,是通的

1 个赞

不是 真可以啊

建议删帖 等待下一个发现的人
我不算是太大方的人 并且这也不是我真心白银买来的 用的越多 别人亏的越多 :sob: 就当半个福利贴吧

2 个赞

是的,我就是善意的提醒,楼主自己判断,就怕别人给你刷爆了,应该可以修改

2 个赞

想了几种回答感觉有点小冒犯性 目前的回答打算是 :主贴目前不愿意改 主要原因是懒 二是不想改 原因是觉得意义不大 因为感觉被发现的概率还是比较小的 另外来论坛这么久了 确实没做过什么实质性的物质上的贡献
等我探索下一个API之后 就把这个放开给大家用吧

2 个赞

瞎搞了下,把设置面板默认隐藏了 :grinning:

只改动了HTML和CSS部分
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, initial-scale=1.0" />
    <title>智慧之泉 - AI对话与文本对比艺术</title>
    <link
      href="https://fonts.googleapis.com/css2?family=Ma+Shan+Zheng&family=Noto+Serif+SC:wght@400;700&display=swap"
      rel="stylesheet" />
    <style>
      :root {
        --primary-color: #8e44ad;
        --secondary-color: #3498db;
        --background-color: #ecf0f1;
        --text-color: #34495e;
        --accent-color: #e74c3c;
        --border-radius: 15px;
      }

      * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
      }

      body {
        font-family: 'Noto Serif SC', serif;
        line-height: 1.6;
        color: var(--text-color);
        background: linear-gradient(135deg, var(--background-color), #bdc3c7);
        padding: 20px;
        min-height: 100vh;
        position: relative;
      }

      .container {
        max-width: 1200px;
        margin: 0 auto;
        display: grid;
        grid-template-columns: 1fr;
        gap: 30px;
      }

      .chat-container,
      .compare-container {
        background-color: rgba(255, 255, 255, 0.9);
        border-radius: var(--border-radius);
        box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
        overflow: hidden;
        transition: all 0.3s ease;
      }

      .chat-container:hover,
      .compare-container:hover {
        transform: translateY(-5px);
        box-shadow: 0 15px 30px rgba(0, 0, 0, 0.15);
      }
      /* 判断显示设置面板 */
      .chat-container:has(> .chat-header .settings_icon input:checked) ~ .settings-panel {
        display: block;
      }

      .chat-header,
      .compare-header {
        background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
        color: #fff;
        padding: 20px;
        font-size: 1.5em;
        font-weight: 700;
        text-align: center;
        font-family: 'Ma Shan Zheng', cursive;
        text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        position: relative;
      }

      .chat-header .settings_icon {
        position: absolute;
        top: 50%;
        right: 0;
        transform: translateY(-50%);
        font-size: 0.8em;
        width: 80px;
        height: 50px;
        line-height: 50px;
        /* border: 1px solid red; */
        font-weight: normal;
        z-index: 9999;
      }

      .chat-header .settings_icon input[type='checkbox'] {
        display: none;
      }

      .chat-window,
      .compare-window {
        height: 500px;
        overflow-y: auto;
        padding: 20px;
        background: url('https://www.transparenttextures.com/patterns/rice-paper-3.png');
      }

      .message,
      .compare-text {
        margin-bottom: 20px;
        padding: 15px;
        border-radius: var(--border-radius);
        max-width: 80%;
        animation: fadeIn 0.5s ease-out;
        box-shadow: 0 3px 10px rgba(0, 0, 0, 0.1);
      }

      @keyframes fadeIn {
        from {
          opacity: 0;
          transform: translateY(20px);
        }
        to {
          opacity: 1;
          transform: translateY(0);
        }
      }

      .user-message {
        background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
        color: #fff;
        align-self: flex-end;
        margin-left: auto;
      }

      .ai-message {
        background: linear-gradient(45deg, #f1f1f1, #e1e1e1);
        align-self: flex-start;
      }

      .input-area {
        display: flex;
        padding: 20px;
        background-color: rgba(255, 255, 255, 0.9);
        border-top: 1px solid #e0e0e0;
      }

      #user-input,
      .compare-input {
        flex-grow: 1;
        padding: 15px;
        border: 2px solid var(--primary-color);
        border-radius: var(--border-radius);
        font-size: 16px;
        transition: all 0.3s ease;
      }

      #user-input:focus,
      .compare-input:focus {
        outline: none;
        box-shadow: 0 0 10px rgba(142, 68, 173, 0.5);
      }

      button {
        padding: 15px 30px;
        background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
        color: #fff;
        border: none;
        border-radius: var(--border-radius);
        cursor: pointer;
        font-size: 16px;
        font-weight: 700;
        transition: all 0.3s ease;
        margin-left: 10px;
        text-transform: uppercase;
        letter-spacing: 1px;
      }

      button:hover {
        background: linear-gradient(45deg, var(--secondary-color), var(--primary-color));
        transform: translateY(-2px);
        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2);
      }

      .settings-panel {
        display: none;
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -65%);
        width: clamp(300px, 400px, 60%);
        background-color: rgba(255, 255, 255, 0.9);
        border-radius: var(--border-radius);
        padding: 30px;
        box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0.5);
        z-index: 999;
      }

      .settings-panel h2 {
        margin-bottom: 20px;
        color: var(--primary-color);
        font-family: 'Ma Shan Zheng', cursive;
        font-size: 2em;
        text-align: center;
      }

      .settings-panel input {
        width: 100%;
        padding: 15px;
        margin-bottom: 15px;
        border: 2px solid var(--secondary-color);
        border-radius: var(--border-radius);
        font-size: 16px;
        transition: all 0.3s ease;
      }

      .settings-panel input:focus {
        outline: none;
        border-color: var(--primary-color);
        box-shadow: 0 0 10px rgba(52, 152, 219, 0.5);
      }

      .compare-container {
        display: none;
        margin-top: 30px;
      }

      .compare-toggle {
        width: 100%;
        margin-bottom: 20px;
        margin-top: 20px;
      }

      .compare-toggle input#compare-toggle {
        width: auto;
        margin-right: 8px;
      }

      .diff {
        background-color: #ffeaa7;
        padding: 2px 0;
      }

      @media (max-width: 768px) {
        .container {
          grid-template-columns: 1fr;
        }
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div class="chat-container">
        <div class="chat-header">
          智慧之泉 - 与AI共舞
          <div class="settings_icon">
            <input type="checkbox" id="settings_icon"">
            <label for="settings_icon">⚙️</label>
          </div>
        </div>
        <div
          class="chat-window"
          id="chat-window">
          <!-- 消息将在这里添加 -->
        </div>
        <div class="input-area">
          <input
            type="text"
            id="user-input"
            placeholder="在此倾诉你的思绪..." />
          <button onclick="sendMessage()">启迪灵感</button>
        </div>
      </div>
      <div class="settings-panel">
        <h2>智慧之源</h2>
        <input
          type="text"
          id="api-url"
          placeholder="AI智慧之门"
          value="" />
        <input
          type="text"
          id="api-key"
          placeholder="开启智慧之钥"
          value="" />
        <input
          type="text"
          id="model-name"
          placeholder="选择你的智慧导师"
          value="" />
        <button onclick="saveSettings()">珍藏智慧</button>
        <div class="compare-toggle">
          <input
            type="checkbox"
            id="compare-toggle"
            onchange="toggleCompareContainer()" />
          <label for="compare-toggle">启用文本对比工具</label>
        </div>
      </div>
    </div>
    <div
      class="compare-container"
      id="compare-container">
      <div class="compare-header">文本对比 - 洞察差异之美</div>
      <div class="input-area">
        <textarea
          class="compare-input"
          id="text1"
          placeholder="输入第一段文本,让智慧之泉品鉴其中奥妙"></textarea>
      </div>
      <div class="input-area">
        <textarea
          class="compare-input"
          id="text2"
          placeholder="输入第二段文本,让智慧之泉探寻其中玄机"></textarea>
      </div>
      <div class="input-area">
        <input
          type="text"
          id="compare-prompt"
          placeholder="请输入对比提示,如:分析文风差异" />
        <button onclick="compareTexts()">启迪对比之眼</button>
      </div>
      <div
        class="compare-window"
        id="compare-window">
        <!-- 对比结果将在这里显示 -->
      </div>
    </div>

    <script>
      window.onload = function () {
        loadSettings()
        addMessage(
          '欢迎来到智慧之泉,让我们一起探索思想的深邃与灵感的闪耀。',
          'ai-message'
        )
      }

      async function sendMessage() {
        const userInput = document.getElementById('user-input')
        const chatWindow = document.getElementById('chat-window')

        if (!userInput.value.trim()) return

        addMessage(userInput.value, 'user-message')

        const apiUrl = document.getElementById('api-url').value
        const apiKey = document.getElementById('api-key').value
        const modelName = document.getElementById('model-name').value

        if (!apiUrl || !apiKey || !modelName) {
          addMessage(
            '请先在智慧之源中填写必要的信息,以开启我们的对话之旅。',
            'ai-message'
          )
          return
        }

        const userMessage = userInput.value
        userInput.value = ''

        try {
          const response = await fetch(`${apiUrl}/v1/chat/completions`, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              Authorization: `Bearer ${apiKey}`
            },
            body: JSON.stringify({
              model: modelName,
              messages: [{ role: 'user', content: userMessage }]
            })
          })

          if (!response.ok) {
            throw new Error('智慧之泉暂时沉寂,请稍后再试。')
          }

          const data = await response.json()

          typeWriterEffect(data.choices[0].message.content, 'ai-message')
        } catch (error) {
          console.error('Error:', error)
          addMessage(
            '抱歉,智慧之泉暂时无法回应。请检查你的连接,或稍后再来。',
            'ai-message'
          )
        }
      }

      function addMessage(content, className) {
        const chatWindow = document.getElementById('chat-window')
        const messageDiv = document.createElement('div')
        messageDiv.className = `message ${className}`
        messageDiv.textContent = content
        chatWindow.appendChild(messageDiv)
        chatWindow.scrollTop = chatWindow.scrollHeight
      }

      function typeWriterEffect(text, className, speed = 30) {
        const chatWindow = document.getElementById('chat-window')
        const messageDiv = document.createElement('div')
        messageDiv.className = `message ${className}`
        chatWindow.appendChild(messageDiv)

        let i = 0
        function type() {
          if (i < text.length) {
            messageDiv.textContent += text.charAt(i)
            i++
            chatWindow.scrollTop = chatWindow.scrollHeight
            setTimeout(type, speed)
          }
        }
        type()
      }

      function saveSettings() {
        const apiUrl = document.getElementById('api-url').value
        const apiKey = document.getElementById('api-key').value
        const modelName = document.getElementById('model-name').value

        localStorage.setItem('apiUrl', apiUrl)
        localStorage.setItem('apiKey', apiKey)
        localStorage.setItem('modelName', modelName)

        addMessage('你的智慧设置已经被珍藏。让我们继续我们的思想之旅吧!', 'ai-message')
      }

      function loadSettings() {
        const apiUrl = localStorage.getItem('apiUrl')
        const apiKey = localStorage.getItem('apiKey')
        const modelName = localStorage.getItem('modelName')

        if (apiUrl) document.getElementById('api-url').value = apiUrl
        if (apiKey) document.getElementById('api-key').value = apiKey
        if (modelName) document.getElementById('model-name').value = modelName
      }

      function toggleCompareContainer() {
        const compareContainer = document.getElementById('compare-container')
        compareContainer.style.display = document.getElementById('compare-toggle').checked
          ? 'block'
          : 'none'
      }

      async function compareTexts() {
        const text1 = document.getElementById('text1').value
        const text2 = document.getElementById('text2').value
        const comparePrompt = document.getElementById('compare-prompt').value
        const compareWindow = document.getElementById('compare-window')

        if (!text1 || !text2) {
          compareWindow.innerHTML =
            '<div class="message ai-message">请在两个文本框中都输入内容,让智慧之泉为你揭示其中奥秘。</div>'
          return
        }

        const apiUrl = document.getElementById('api-url').value
        const apiKey = document.getElementById('api-key').value
        const modelName = document.getElementById('model-name').value

        if (!apiUrl || !apiKey || !modelName) {
          compareWindow.innerHTML =
            '<div class="message ai-message">请先在智慧之源中填写必要的信息,以开启我们的对比之旅。</div>'
          return
        }

        compareWindow.innerHTML =
          '<div class="message ai-message">智慧之泉正在深思熟虑,请稍候...</div>'

        try {
          const response = await fetch(`${apiUrl}/v1/chat/completions`, {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              Authorization: `Bearer ${apiKey}`
            },
            body: JSON.stringify({
              model: modelName,
              messages: [
                { role: 'system', content: '你是一个精通文本分析和对比的AI助手。' },
                {
                  role: 'user',
                  content: `请分析以下两段文本,${comparePrompt}:\n\n文本1: ${text1}\n\n文本2: ${text2}`
                }
              ]
            })
          })

          if (!response.ok) {
            throw new Error('智慧之泉暂时无法回应,请稍后再试。')
          }

          const data = await response.json()
          const analysis = data.choices[0].message.content

          compareWindow.innerHTML = `<div class="message ai-message">${analysis}</div>`
        } catch (error) {
          console.error('Error:', error)
          compareWindow.innerHTML =
            '<div class="message ai-message">抱歉,智慧之泉暂时无法完成对比。请检查你的连接,或稍后再来。</div>'
        }
      }
    </script>
  </body>
</html>

2 个赞

很棒,我把它整到普通版

2 个赞

看着好强啊。

1 个赞

我改了这么多次代码 结果确实是没发现这一点 …
我一直以为是我浏览器第一次输入并保存之后保存在本地了 所以每一次都能自动调出来 原来大家都可以的 因为我把它写进代码里了 …
我哭:sob:

2 个赞

我也没发现 :tieba_087:

看前面是说API漏了?
LZ你发的这个分区是完全没权限的,不登录都能看,搜索引擎能扫,有安全隐患的东西赶紧处理一下哦

1 个赞