自己开源的一个jsonl多轮对话数据集创建器(HTML形式)

详细各位尝试精调大模型的小伙伴们都遇到过难以制作jsonl格式的数据集的问题吧?一个jsonl格式be like:

[{"prompt": "生成一个关于人工智能的标题吧。", "response": "好的,给您生成一些标题:1) 人工智能的未来与挑战; 2) 机器学习在现代生活中的应用; 3) 从AI发展历程看未来发展趋势。", "weight": 1}, {"prompt": "可以再给我一些具体的例子吗?", "response": "当然可以,例如自然语言处理技术的应用、医疗领域的智能诊断、智能家居的智能化控制等等。这些都是人工智能在现实中的具体应用。", "weight": 1}, {"prompt": "我想了解一下机器学习是什么。", "response": "机器学习是人工智能的一个分支,它是指让机器从数据中学习和识别模式、规律,进而提高其自身的能力,而不是直接进行编程或人工干预。例如,你收到的垃圾邮件在你提交给系统进行训练后,系统就能够自动判断是否为垃圾邮件。这就是机器学习中的一个例子。", "weight": 1}]
[{"prompt": "生成一个有趣的故事给我听。", "response": "好的,故事的主人公是谁?他发生了什么事情?", "weight": 1}, {"prompt": "讲一个小动物的故事,它在森林里冒险。", "response": "有一天,一只小松鼠决定冒险去探索森林。在森林中,它遇到了许多有趣的事情,比如说看到了漂亮的花朵、飞舞的蝴蝶、还有巨大的老树。但是,在探索过程中它遇到了一只狐狸,狐狸看上去很善良,与小松鼠成为了好朋友。", "weight": 1}, {"prompt": "挑战一下我的智力,出一道数学难题给我解决。", "response": "好的,有六个球,其中一个有重量不同于其他球,你只有一次称重的机会,如何称重可以找出那个重量不同的球?", "weight": 1}, {"prompt": "我不太会做这个题,可以给我解释一下吗?", "response": "当然可以。做这道题需要用到二分法,我们可以将六个球分成两部分,每部分三个球,先将两堆都称一下,如果两堆重量相等,说明重的那个球在另外三个球中。接着我们将那三个球分成两堆,分别取两堆中的两个球出来称重,如果是一样重,则剩下一个球是重的;如果不一样重,则按照上面的方法,找到哪个球是重的。", "weight": 1}, {"prompt": "请告诉我一首好听的歌曲。", "response": "听说\"世界这么大还是遇见你\"很受欢迎,在抖音、快手等短视频平台上也是很火的。", "weight": 1}]
[{"prompt": "写一篇关于科技对社会发展的影响的文章。", "response": "科技是推动社会发展的重要力量,它改变了人们的生活方式,提高了生产力和生活质量。从古至今,科技一直在不断的发展和进化,对人类社会产生了深远的影响。\n\n科技对生产力的影响是显而易见的。新的科技成果不断地涌现,大大提高了生产效率,加快了经济的发展。例如,工业革命通过使用新的生产技术,将手工劳动变成了机器操作,从而大大提高了生产力。信息技术的发展也使得远程办公成为可能,人们可以在家中工作,从而提高了工作效率。\n\n科技对社会活动的影响也是不可忽视的。科技的发展改变了人们的交流方式,使得人们可以更加方便地联系彼此。例如,互联网的普及,使得人们可以更加方便地获取信息,交流意见,促进了社会的进步。此外,科技还推动了商业和金融业的变革,例如电子商务和移动支付等新的商业模式,给人们的生活带来了极大的便利。\n\n科技对文化传承也有着重要的影响。科技的发展使得文化遗产的保护变得更加容易,例如数字图书馆和数字博物馆等新的文化传承方式,使得文化遗产可以得到更加长期的保护。此外,科技还促进了不同文化之间的交流和融合,使得文化传承变得更加的多元化和丰富化。\n\n当然,科技也带来了一些挑战和风险。例如,科技的发展可能会带来就业问题,因为机器代替了部分人力工作。此外,科技也带来了隐私和安全方面的问题,例如个人信息泄露和网络安全等问题,需要我们采取措施加以解决。\n\n总之,科技对社会的发展有着重要的影响。我们应该积极地利用科技的优势,同时也要注意应对其带来的挑战和风险。只有这样,才能更好地推动社会的发展和进步。", "weight": 1}, {"prompt": "请从这篇文章中提取出所有的关键词。", "response": "关键词:\n1. 科技\n2. 社会发展\n3. 生产力\n4. 工业革命\n5. 远程办公\n6. 交流方式\n7. 互联网\n8. 电子商务\n9. 移动支付\n10. 文化传承\n11. 数字图书馆\n12. 数字博物馆\n13. 就业问题\n14. 隐私和安全问题\n15. 机器代替人力\n16. 人工智能", "weight": 1}]

如何构建多轮对话数据集,也成为了一个难题,直接编辑jsonl文本会显得很麻烦,用python格式化的话也要在复制粘贴一堆聊天内容时很不方便

因此,我自己开源了一个jsonl数据集创建器:
在这里插入图片描述
可以在这个聊天框中以user或assistant的身份”发送消息“,比如:
在这里插入图片描述
通过切换user和assistant的角色,并在输入框输入聊天信息,点击send,就可以构建一个多轮对话。

它可以自动导出为jsonl格式中的一行,比如

[{"prompt": "生成一个情人节祝福语吧。", "response": "当全球各地的情侣纷纷交换信物、相互表达你我之间的情感,愿你在这个特别的日子里,感受到无处不在的爱,你我的距离,因爱而缩短,祝你情人节快乐!", "weight": 1}, {"prompt": "给我一些写作灵感吧。", "response": "好的,您需要的是什么类型的灵感呢?科幻、爱情、惊悚还是其他?", "weight": 1}]

为了让它更方便,我还加入了send to server功能,通过自定义server url(这里是153行的example.com)。它可以以json的格式把这个jsonl给POST到指定URL,再由服务器那边自己处理

源代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chat Interface</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
        }
        .chat-container {
            width: 400px;
            max-width: 100%;
            background-color: #fff;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            border-radius: 5px;
            overflow: hidden;
        }
        .chat-header {
            background-color: #007bff;
            color: white;
            padding: 10px;
            text-align: center;
        }
        .chat-messages {
            padding: 10px;
            height: 300px;
            overflow-y: auto;
            border-bottom: 1px solid #ccc;
        }
        .chat-input {
            display: flex;
            border-top: 1px solid #ccc;
        }
        .chat-input select {
            padding: 10px;
            border: none;
            border-top: 1px solid #ccc;
        }
        .chat-input input {
            flex: 1;
            padding: 10px;
            border: none;
            border-top: 1px solid #ccc;
        }
        .chat-input button {
            padding: 10px;
            background-color: #007bff;
            color: white;
            border: none;
            cursor: pointer;
        }
        .chat-message {
            margin-bottom: 10px;
        }
        .chat-message.user {
            text-align: right;
        }
        .chat-message.assistant {
            text-align: left;
        }
        .error-message {
            color: red;
            text-align: center;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <div class="chat-container">
        <div class="chat-header">
            Chat Interface
        </div>
        <div class="chat-messages" id="chat-messages">
        </div>
        <div class="chat-input">
            <select id="role-select">
                <option value="user">User</option>
                <option value="assistant">Assistant</option>
            </select>
            <input type="text" id="message-input" placeholder="Type a message...">
            <button onclick="sendMessage()">Send</button>
        </div>
        <div id="error-message" class="error-message"></div>
    </div>

    <script>
        const chatMessages = document.getElementById('chat-messages');
        const messageInput = document.getElementById('message-input');
        const roleSelect = document.getElementById('role-select');
        const errorMessage = document.getElementById('error-message');
        const chatData = [];
        let currentConversation = {};
        var lastrole="assistant";

        function sendMessage() {
            const message = messageInput.value.trim();
            const role = roleSelect.value;
            console.log(lastrole)

            if (message === '') {
                showError('Message cannot be empty');
                return;
            }

            if (chatData.length > 0) {
                const lastMessage = chatData[chatData.length - 1];
                if (lastrole==role) {
                    showError('User and assistant messages must alternate');
                    return;
                }
            }

            if (role === 'user') {
                currentConversation = { prompt: message, response: '' };
                chatData.push(currentConversation);
                lastrole='user'
            } else {
                lastrole='assistant'
                if (currentConversation) {
                    currentConversation.response = message;
                }
            }

            displayMessage(message, role);
            messageInput.value = '';
            clearError();
        }

        function displayMessage(message, sender) {
            const messageElement = document.createElement('div');
            messageElement.classList.add('chat-message', sender);
            messageElement.textContent = message;
            chatMessages.appendChild(messageElement);
            chatMessages.scrollTop = chatMessages.scrollHeight;
        }

        function showError(msg) {
            errorMessage.textContent = msg;
        }

        function clearError() {
            errorMessage.textContent = '';
        }

        function downloadJSONL() {
            fetch('https://example/com', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                },
                body: JSON.stringify(chatData),
            })
            .then(response => response.json())
            .then(data => {
                if (data.status === 'success') {
                    alert('Data successfully sent to the server and appended to the file.');
                } else {
                    alert('Error: ' + data.error);
                }
            })
            .catch((error) => {
                console.error('Error:', error);
            });
        }

        // Add a button to download the data
        const downloadButton = document.createElement('button');
        downloadButton.textContent = 'Send Data to server';
        downloadButton.onclick = downloadJSONL;
        document.body.appendChild(downloadButton);
    </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值