JS+H5在线文心AI聊天(第三方接口)

news2024/9/9 0:01:45

源码在最后面 调用的不是文心官方接口

可以正常聊天 有打字动画 

效果图

121e20f58a084b2aa032b70c19363dd5.jpg

 源代码

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>聊天界面</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #121212;
            margin: 0;
            padding: 0;
            color: #ffffff;
        }
        .chat-container {
            width: 400px;
            margin: 50px auto;
            background-color: #1f1f1f;
            border-radius: 10px;
            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
            overflow: hidden;
            padding: 20px;
        }
        .system-message {
            text-align: center;
            background-color: #ff4d4d;
            padding: 10px;
            border-radius: 5px;
            margin: 10px 0;
            cursor: pointer;
            color: #ffffff;
        }
        .message {
            display: flex;
            align-items: flex-start;
            margin-bottom: 15px;
            cursor: pointer;
        }
        .avatar {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            margin-right: 10px;
        }
        .message-content {
            max-width: 70%;
            background-color: #2c2c2c;
            border-radius: 10px;
            padding: 10px;
            position: relative;
            box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
        }
        .message-content p {
            margin: 0;
            word-wrap: break-word;
            color: #ffffff;
        }
        .username {
            font-size: 12px;
            color: #ff9999;
            margin-bottom: 5px;
        }
        .message.left {
            justify-content: flex-start;
        }
        .message.right {
            justify-content: flex-end;
        }
        .message.right .message-content {
            background-color: #ff4d4d;
            color: white;
        }
        .message.right .avatar {
            margin-left: 10px;
            margin-right: 0;
        }
        .input-group {
            display: flex;
            align-items: center;
            margin-top: 20px;
        }
        .input-group input[type="text"] {
            flex: 1;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 5px;
            outline: none;
            color: #ffffff;
            background-color: #1f1f1f;
        }
        .input-group button {
            padding: 10px 15px;
            border: none;
            border-radius: 5px;
            background-color: #ff4d4d;
            color: white;
            cursor: pointer;
            outline: none;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
        }
        .input-group button:hover {
            background-color: #cc2e2e;
        }
    </style>
</head>
<body>

<div class="chat-container">
    <div class="system-message" id="system-message-1" onclick="showId('system-message-1')">AI聊天</div>
    
    <!-- 省略其他聊天消息 -->
    
    <div class="input-group">
        <input type="text" id="user-input" placeholder="输入你的消息...">
        <button onclick="sendMessage()">发送</button>
    </div>
</div>
<script>
function sendMessage() {
    var userInput = document.getElementById('user-input').value;
    if (userInput.trim()!== '') {
        // 添加用户发送的消息
        var messageElement = document.createElement('div');
        messageElement.classList.add('message', 'right');
        messageElement.innerHTML = `
            <div class="message-content">
                <div class="username">我</div>
                <p>${userInput}</p>
            </div>
            <img src="https://via.placeholder.com/40" alt="头像" class="avatar">
        `;
        document.querySelector('.chat-container').appendChild(messageElement);

        // 清空输入框
        document.getElementById('user-input').value = '';

        // 添加 AI 正在输入的消息
        var aiMessageElement = document.createElement('div');
        aiMessageElement.classList.add('message', 'left');
        aiMessageElement.innerHTML = `
            <img src="https://via.placeholder.com/40" alt="头像" class="avatar">
            <div class="message-content">
                <div class="username">AI</div>
                <p>正在输入...</p>
            </div>
        `;
        document.querySelector('.chat-container').appendChild(aiMessageElement);

        // 进行 API 请求
        fetch(`https://api.lolimi.cn/API/AI/wx.php?msg=${encodeURIComponent(userInput)}`)
          .then(response => response.json())
          .then(data => {
                // 先删除原有的&ldquo;正在输入...&rdquo;
                aiMessageElement.querySelector('p').textContent = '';
                // 使用打字特效更新 AI 的消息内容
                typeWriterEffect(aiMessageElement.querySelector('p'), data.data.output);
            })
          .catch(error => {
                console.error('请求出错:', error);
                // 在出错时也可以更新 AI 的消息内容
                aiMessageElement.querySelector('p').textContent = '出错了,请稍后再试。';
            });
    }
}

// 打字特效函数
function typeWriterEffect(element, text, speed = 50) {
    let index = 0;
    let interval = setInterval(() => {
        if (index < text.length) {
            element.textContent += text.charAt(index);
            index++;
        } else {
            clearInterval(interval);
        }
    }, speed);
}
</script>
</body>
</html>

JavaScript API调用方法(与上面无关)

1. 定义API URL
   - 定义要调用的API的URL
   - 例如“https://api.oioweb.cn/api/common/Get60sWorldInsight”
 
2. 使用Fetch API发起请求
   - 使用 fetch函数发起 GET请求
   - fetch函数返回一个 Promise,该 Promise在请求完成时解析为一个 Response对象。
 
3. 处理响应
   - 检查响应是否成功
   - 如果响应成功,调用 json()解析响应体为JSON格式。
   - json()方法也返回一个 Promise,该 Promise在解析完成后解析为一个 JavaScript对象
 
4. 提取数据
   - 从解析后的 JavaScript对象中提取 “result”字段的数据。
 

代码实现

// 定义API URL
const url = 'https://api.oioweb.cn/api/common/Get60sWorldInsight';

// 使用fetch API发起请求
fetch(url)
  .then(response => {
    // 检查响应是否成功
    if (!response.ok) {
      throw new Error(`HTTP error! Status: ${response.status}`);
    }
    // 解析JSON响应
    return response.json();
  })
  .then(data => {
    // 提取'result'数据
    const result = data.result;
    // 输出结果到控制台
    console.log(result);
  })
  .catch(error => {
    // 处理任何发生的错误
    console.error('There was a problem with the fetch operation:', error);
  });

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文献笔记|综述|A Survey of Large Language Models (前3章)

A Survey of Large Language Models 题目&#xff1a;大语言模型综述 作者&#xff1a;Wayne Xin Zhao, Kun Zhou, Junyi Li et al. 来源&#xff1a;arXiv 单位&#xff1a;中国人民大学高瓴人工智能学院、中国人民大学信息学院 关键词&#xff1a;Large Language Models; Eme…

如何快速获取全网精准客流?揭秘不为人知的5大运营策略!

有同行所在的地方&#xff0c;就一定拥有咱们需要的客户。客户看的是结果&#xff0c;搜索的是问题&#xff0c;寻找的是答案。 如果没有付费流量&#xff0c;单纯靠搞免费流量&#xff0c;很多大厂的运营也会变得一文不值。一个牛逼的运营&#xff0c;不仅是会做付费流量&…

【Vue2】3-使用Vue脚手架

目录 初始化脚手架 说明 具体步骤 模板项目的结构 关于不同版本的Vue vue.config.js配置文件 ref属性 配置项props mixin&#xff08;混入&#xff09; 插件 scoped样式 总结TodoList案例 webStorage&#xff08;浏览器本地存储&#xff09; TodoList本地存储 组…

pp 5 报废 分派 替代

报废&#xff1a; 装配报废是关于成品的&#xff0c;会在生产订单自动增加数量&#xff0c;对组件有影响 但是在组件上面设置报废是不是影响成品物料的 注意&#xff1a;成品报废和组件报废数量会进行叠加的 但是物料主数据和bom同时设置报废率&#xff0c;不会叠加&#xff0…

python画蜡烛图

Claude3 Opus 在Python中&#xff0c;您可以使用各种绘图库来绘制蜡烛图&#xff0c;例如Matplotlib和Plotly。这里我以Matplotlib库为例&#xff0c;演示如何使用Python绘制蜡烛图。 首先&#xff0c;您需要安装并导入Matplotlib库。您可以使用以下命令来安装Matplotlib&…

字符串专题

1. 2. 3. 4.CtrlAltV自动生成左侧&#xff1b; 5.拼接字符串 6. 7.金额转换之CtrlAltT猛猛包裹 package 字符串; import java.util.Scanner; public class MoneyReverse {public static void main(String[] args) {//1.键盘录入一个金额Scanner sc new Scanner(System.in);i…

有关链表的oj题

203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;给出一个新的指针newnode来接收&#xff0c;cur遍历原truct ListNode* head&#xff0c;tail来接收 cur->val!val的值&#xff0c;最后返回newnode。 struct ListNode* removeElements(struct Li…

Transformer--编码器和解码器(包含掩码张量,注意力机制,多头注意力机制)

1.编码器介绍 2.掩码张量 2.1掩码张量介绍 2.2掩码张量的作用 2.3生成掩码张量的代码分 2.4掩码张量可视化 3.注意力机制 3.1什么是注意力机制 3.2注意力机制的作用 3.3计算规则以及代码分析 4.多头注意力机制 &#xff08;了解&#xff09; 4.1多头注意里机制的概念…

Web基础、apache和nginx的知识及服务搭建

一、Web基础概念和常识 Web&#xff1a;为用户提供的⼀种在互联网上浏览信息的服务&#xff0c;Web 服务是动态的、可交互的、跨平台的和图形化的。 Web 服务为⽤户提供各种互联网服务&#xff0c;这些服务包括信息浏览服务&#xff0c;以及各种交互式服务&#xff0c;包括聊…

微服务--配置管理

现在依然还有几个问题需要解决&#xff1a; 网关路由在配置文件中写死了&#xff0c;如果变更必须重启微服务 某些业务配置在配置文件中写死了&#xff0c;每次修改都要重启服务 每个微服务都有很多重复的配置&#xff0c;维护成本高 这些问题都可以通过统一的配置管理器服…

DRAM组件级故障预测模型,如何提升系统可靠性?-2

一、DRAM原理与可靠性 在深入探讨DRAM系统的可靠性问题前&#xff0c;我们需要明确几个基本概念。首先&#xff0c;故障指的是可能导致系统错误的物理缺陷&#xff0c;而错误则是系统实际状态与期望状态之间的差异。故障可分为暂时性故障和永久性故障&#xff1a;前者由外部因…

谁说PDF编辑器都一样?这5款让你大开眼界!

如今&#xff0c;PDF文档已经成了咱们工作生活中必不可少的东西。无论是看学术报告、合同协议&#xff0c;还是日常阅读的电子书&#xff0c;都能在不同的设备上保持一致的格式&#xff0c;成了大家最爱用的文档格式之一。但是&#xff0c;面对这么多PDF编辑器&#xff0c;你是…

当我在星巴克连上家里的服务器,光猫桥接打通IPv6,你是值得的

我们的课程环境是构建在一个256GB内存&#xff0c;192核CPU的集群上&#xff0c;学员可以通过浏览器&#xff0c;输入地址访问。要在阿某云上租这样一个服务器&#xff0c;价格并不便宜。所以&#xff0c;这些服务器一直放在公司里&#xff0c;创业期间&#xff0c;公司也就是租…

Docker三大基础组件

Docker有三个重要的概念&#xff1a;仓库、镜像和容器 &#xff0c;它们是Docker的三大基础组件&#xff0c;这三个组件共同构成了Docker的核心架构&#xff0c;使得Docker能够实现对应用程序的便捷打包、分发和运行。 Docker使用客户端-服务器体系结构。Docker客户端与Docker守…

angular入门基础教程(十一)与服务端数据交互

前后端分离开发&#xff0c;少不了与后端进行数据接口的对接&#xff0c;在vue&#xff0c;react中我们要借助第三方的axios来进行数据请求。在ng中&#xff0c;为我们封装了了一层httpClient&#xff0c;我们直接使用即可 依赖注入 我们需要再次封装一次 import { HttpClie…

虚假的互联网信息?不妨从IT的角度理解【景观社会】

博主前言&#xff1a;“我思故我在”&#xff0c;笛卡尔的这一哲学命题&#xff0c;大抵上次还比较熟络的时光还是高中亦或复习考研政治的岁月里。这是一个光怪陆离的社会——或者说网络社会&#xff0c;形形色色的消息充斥在脑海之时&#xff0c;你是否还能认识真正的自己&…

3.2.微调

微调 ​ 对于一些样本数量有限的数据集&#xff0c;如果使用较大的模型&#xff0c;可能很快过拟合&#xff0c;较小的模型可能效果不好。这个问题的一个解决方案是收集更多数据&#xff0c;但其实在很多情况下这是很难做到的。 ​ 另一种方法就是迁移学习(transfer learning…

window长时间不关机,卡顿处理方法

window使用一短时间非常卡&#xff0c;快速处理办法如下&#xff1a; 1、windowR 输入%temp% 手动删除临时目录文件。 2、windowR输入cleanmgr 磁盘清理 3、恶意软件删除工具 删除流行恶意软件。

What Is RPC(Remote Procedure Call,远程过程调用)

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;它允许一个计算机程序通过网络调用另一个计算机程序中的子程序&#xff08;也就是远程过程&#xff09;&#xff0c;并获取返回值。RPC服务是分布式计算的重要基础&…

面向对象程序设计(C++)模版初阶

1. 函数模版 1.1 函数模版概念 函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的特定类型版本&#xff0c;可以类比函数参数&#xff0c;函数模版就是将函数参数替换为特定类型版本 1.2 函数模版格…