无脑利用API实现文心一言AI对话功能?(附代码)

news2024/9/24 19:25:49

前言:在当今数字化的时代,人工智能(AI)技术正在不断演进,为开发者提供了丰富的工具和资源。其中,API(应用程序接口)成为构建强大AI应用的关键组成部分之一。本文将介绍如何利用API来打造一个AI对话网站,使用户能够与智能系统进行交互。

以下内容不作太多解释,不懂就无脑套用就行,这里的api接口以文心一言示例,先在LuckyCola注册账号然后在个人中心申请appKey
在这里插入图片描述
在这里插入图片描述

1.请求方式

请求方式: POST

https://luckycola.com.cn/ai/openwxyy

建议使用https协议,当https协议无法使用时再尝试使用http协议

2.请求参数

序号参数是否必须说明
1ques提交问题
2appKey唯一验证AppKey
3uid唯一标识
4isLongChat是否支持上下文(值为1或者0)

3.请求参数示例

{
   "ques": "hello",
   "appKey": "*****************",
   "uid": "***************",
	 // 是否支持上下文 值1表示支持,0表示不支持
   "isLongChat": 0
}

3.接口 返回示例

{
	// 	成功状态码
	"code": 0,
	// 	成功提示
	"msg": "AI接口返回成功",
	"data": {
		// 	AI回答结果
		"result": "您好,如果您需要帮助或有任何问题,请随时告诉我,我将竭诚为您服务。",
		"countMsg": "无穷",
		// 当前是否是上下文对话模式,1表示是上下文模式,0为非上下文模式
		"longChat": 0
	}
}

建立前端页面,创建一个用户友好的前端页面,可以使用HTML、CSS和JavaScript等技术来实现交互式的用户界面。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>AI对话网站</title>
  <style>
    /* 在这里添加你的样式 */
  </style>
</head>
<body>
  <div id="chat-container">
    <div id="chat-display"></div>
    <input type="text" id="user-input" placeholder="请输入你的问题...">
    <button onclick="sendUserMessage()">发送</button>
  </div>
  <script>
    // 在这里添加用户交互的JavaScript代码
  </script>
</body>
</html>

然后我这里简单写了一段,完成简单对话页面UI,替换自己的uid和appkey即可,供参考

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            font-family: 'Arial', sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f4f4f4;
            display: flex;
            align-items: center;
            justify-content: center;
            height: 100vh;
            overflow: hidden;
        }

        #chat-container {
            width: 90%; 
            max-width: 400px; 
            border: 1px solid #ccc;
            border-radius: 10px;
            overflow: hidden;
            height: 100%; 
            display: flex;
            flex-direction: column;
        }

        #chat-messages {
            flex: 1; /* 让消息容器占据剩余空间 */
            padding: 10px;
            overflow-y: auto;
            background-color: #fff;
        }

        .message {
            clear: both;
            padding: 8px;
            margin-bottom: 8px;
            border-radius: 5px;
            max-width: 70%;
            word-wrap: break-word;
        }

        .message.sent {
            float: right;
            background-color: #4caf50;
            color: #fff;
        }

        .message.received {
            float: left;
            background-color: #e0e0e0;
        }

        #chat-input {
            display: flex;
            align-items: center;
            justify-content: space-between;
            padding: 10px;
            background-color: #fff;
            border-top: 1px solid #ccc;
        }

        #chat-input input {
            flex: 1;
            padding: 8px;
            margin-right: 10px;
            border: 1px solid #ccc;
            border-radius: 5px;
        }

        #chat-input button {
            padding: 8px;
            border: none;
            border-radius: 5px;
            background-color: #4caf50;
            color: #fff;
            cursor: pointer;
        }

        #chat-input button:disabled {
            background-color: #ccc;
            cursor: not-allowed;
        }
    </style>
</head>
<body>

<div id="chat-container">
    <div id="chat-messages">
        <div class="message received">这里是NDIR博客,内容是如何利用API搭建文心一言AI,你有任何问题吗?</div>
    </div>
    <div id="chat-input">
        <input type="text" id="user-input" placeholder="Type your message...">
        <button onclick="sendMessage()" id="sendButton">Send</button>
    </div>
</div>

<script>
    async function sendMessage() {
        var inputElement = document.querySelector('#user-input');
        var messageText = inputElement.value.trim();
        var sendButton = document.getElementById('sendButton');

        if (messageText !== "") {
            var messagesContainer = document.querySelector('#chat-messages');
            
            // Display user's message
            var userMessage = document.createElement('div');
            userMessage.className = 'message sent';
            userMessage.textContent = messageText;
            messagesContainer.appendChild(userMessage);

            // Disable send button until AI response
            sendButton.disabled = true;

            // Call AI API
            try {
                var aiResponse = await getAiResponse(messageText);
                
                // Display AI's response with formatted code blocks
                var aiMessage = document.createElement('div');
                aiMessage.className = 'message received';
                aiMessage.innerHTML = formatCodeBlocks(aiResponse.data.result);
                messagesContainer.appendChild(aiMessage);

                // Scroll to the bottom
                messagesContainer.scrollTop = messagesContainer.scrollHeight;
            } catch (error) {
                console.error("Error fetching AI response:", error);
            }

            // Clear input and enable send button
            inputElement.value = '';
            sendButton.disabled = false;
        }
    }

    async function getAiResponse(userInput) {
        var apiUrl = 'https://luckycola.com.cn/ai/openwxyy';

        var requestBody = {
            ques: userInput,
            //替换你的标识
            appKey: "*********************",
            uid: "************************",
            isLongChat: 0
        };

        var response = await fetch(apiUrl, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(requestBody),
        });

        if (response.ok) {
            return response.json();
        } else {
            throw new Error('Failed to fetch AI response');
        }
    }

    function formatCodeBlocks(text) {
        // Match code blocks enclosed in triple backticks (```code ```)
        return text.replace(/```([\s\S]*?)```/g, '<pre>$1</pre>');
    }
</script>

</body>
</html>
运行效果

在这里插入图片描述

下面是用低代码设计的界面
在这里插入图片描述

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

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

相关文章

git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支

GIT | 分支 文章目录 GIT | 分支创建分支合并分支删除分支合并冲突分支管理策略bug分支强制删除分支 创建分支 查看当前本地仓库中有哪些分支 git branchHEAD所指向的分支就是当前正在工作的分支 cat .git/HEAD创建一个分支 git branch dev创建好了&#xff0c;但是目前还是…

计算机组成原理—中央处理器CPU

文章目录 CPU的功能与架构CPU的组成运算器控制器 指令执行过程指令流程指令执行方案 数据通路单总线结构专用通路结构 硬布线控制器设计硬布线执行流程硬布线CU内部怎么设计微操作的组合电路 总结 微程序控制器设计微程序的基本理念微程序的基本结构 微指令设计微程序CU设计 指…

使用代理IP时的并发请求是什么意思?

很多做过数据采集的技术们应该都有所了解&#xff0c;在选择代理IP时会有一个并发请求的参数&#xff0c;这个参数是什么意思呢&#xff1f;可能有很多新手不是很了解&#xff0c;其实代理IP的并发请求就是指同时发送多个请求到目标服务器&#xff0c;以提高请求的效率和速度。…

嵌入式系统挑战赛题目---递归方法实现字符串反转函数

一、题目要求 递归函数是一种在函数内容调用自身的函数。它通过将复杂的问题分解成更小的子问题来解决。递归函数通常包含两部分&#xff1a;基本情况和递归调用。请使用递归方法实现字符串反转的C语言函数。 请根据要求在begin、end间完成代码&#xff0c;不要改变代码中其他…

开具实习证明:在线实习项目介绍

大数据在线实习项目&#xff0c;是在线上为学生提供实习经验的项目。我们希望能够帮助想要在毕业后从事数据科学类工作的学生更加顺利地适应从教室到职场的转换&#xff1b;也帮助那些在工作中需要处理数据、实现数据价值的其他职能的从业者高效快速地掌握每天都能用起来的数据…

3、Kafka 线上集群部署方案怎么做?

文章目录 1、操作系统的选择1.1、I/O 模型的使用1.2、数据网络传输效率1.3、社区支持度 2、磁盘的选择3、磁盘容量的规划3.1、举例思考本问题&#xff1a;3.2、计算一下&#xff1a;3.3、规划磁盘容量时你需要考虑下面这几个元素&#xff1a; 4、带宽规划4.1、计算 总结 1、操作…

CSS基础面试题

介绍一下标准css盒子模型与低版本IE的盒子模型&#xff1f; 标准盒子模型&#xff1a;宽度内容的宽度&#xff08;content&#xff09; border padding margin 低版本IE盒子模型&#xff1a;宽度内容宽度&#xff08;contentborderpadding&#xff09; margin box-sizing 属性…

Java架构师-数据机构与算法实战(第一篇)

数学知识回顾 指数 指数函数是重要的基本初等函数之一。一般地&#xff0c;ya^x函数(a为常数且以a>0&#xff0c;a≠1)叫做指数函数&#xff0c;函数的定义域是 R 。注意&#xff0c;在指数函数的定义表达式中&#xff0c;在a^x前的系数必须是数1&#xff0c;自变量x必须在…

网易市值超过美团成为中国市值第四大互联网公司 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 网易市值超过美团成为中国市值第四大互联网公司 百度文心一言插件商城正式上…

SQL数列

SQL数列 1、数列概述2、SQL数列2.1、简单递增序列2.2、等差数列2.3、等比数列3、SQL数列的应用3.1、连续问题3.2、多维分析1、数列概述 数列是最常见的数据形式之一,实际数据开发场景中遇到的基本都是有限数列。常见的数列例如:简单递增序列、等差数列、等比数列等 SQL如何实…

lv12 交叉开发环境搭建 3

1 ubuntu网络环境配置 目的&#xff1a;让Ubuntu可以上外网&#xff0c;让开发板可以与ubuntu互通 2 tftp 服务器环境搭建 tftp&#xff08;Trivial File Transfer Protocol&#xff09;即简单文件传输协议 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件 传输…

PaddleClas学习3——使用PPLCNet模型对车辆朝向进行识别(c++)

使用PPLCNet模型对车辆朝向进行识别 1 准备环境2 准备模型2.1 模型导出2.2 修改配置文件 3 编译3.1 使用CMake生成项目文件3.2 编译3.3 执行3.4 添加后处理程序3.4.1 postprocess.h3.4.2 postprocess.cpp3.4.3 在cls.h中添加函数声明3.4.4 在cls.cpp中添加函数定义3.4.5 在main…

邮件群发平台推荐:提升邮件营销效果的关键

邮件群发平台是外贸、跨境电商、出海企业常用的一种营销方式。他以低成本、高投资回报比获得了众多企业的青睐。现市场上有各种功能各异、价格不同的邮件群发平台&#xff0c;企业在抉择的时候也会犯难。所以&#xff0c;邮件群发平台哪个好用呢&#xff1f;Zoho Campaigns就是…

Vue3-11- 【v-for】循环数组

v-for的基本介绍 v-for 是一个指令&#xff0c; 它是用来在 html 模板中实现循环的。它可以循环 普通的数组、也可以直接循环一个范围值&#xff0c;也可以循环对象的每个属性。v-for 的语法介绍 <div v-for"(item,index) in arrayName" : key"index"…

lua安装

lua安装 1.Lua介绍 特点&#xff1a;轻量、小巧。C语言开发。开源。 设计的目的&#xff1a;嵌入到应用程序当中&#xff0c;提供灵活的扩展和定制化的功能。 luanginx&#xff0c;luaredis。 2.windows安装lua windows上安装lua&#xff1a; 检查机器上是否有lua C:\U…

scala笔记

函数字面量 字面量包括整形字面量、浮点数子面量、布尔型字面量、字符字面量、字符串字面量、符号字面量、函数字面量和元组字面量 除了函数字面量我们比较陌生以外&#xff0c;其他几种字面量都很容易理解 val counter: Int > Int {(value) > value 1}匿名函数 val…

UE4/UE5 日志插件(基于spdlog)

1 解决问题 对于高频日志序列化到本地的需求&#xff0c;spdlog肯定完美满足。 源码地址&#xff1a;https://github.com/gabime/spdlog 博主下载的版本为 spdlog-1.12.0&#xff0c;各位大佬可以根绝自己爱好选择。 2 过程介绍 大概目录&#xff1a; SpdlogLibC目录下是对…

牛客网SQL训练3—SQL必知必会

文章目录 一、检索数据二、排序检索数据三、过滤数据四、高级数据过滤五、用通配符进行过滤六、创建计算字段七、使用函数处理数据八、汇总数据九、分组数据十、使用子查询十一、联结表十二、创建高级联结十三、组合查询 一、检索数据 【题目1&#xff1a;从 Customers 表中检…

常见的Linux基本指令

目录 什么是Linux&#xff1f; Xshell如何远程控制云服务器 Xshell远程连接云服务器 Linux基本指令 用户管理指令 pwd指令 touch指令 mkdir指令 ls指令 cd指令 rm指令 man命令 cp指令 mv指令 cat指令 head指令 ​编辑 tail指令 ​编辑echo指令 find命令 gr…

【教程】Autojs脚本实现暂停和超时重启功能的思路和示例代码

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 背景介绍 autojs本身不支持暂停脚本&#xff0c;现有网上大部分最直接的做法就是在每条语句后面添加检查是否暂停。当脚本功能和代码量非常打的时候&#xff0c;每一条语句后面都加检测&#xff0c;未免不太现实。…