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

前言:在当今数字化的时代,人工智能(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>
运行效果

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

P21 卷积神经网络CNN

卷积 参数共享 Maxpool 逐步限制 neuron的弹性&#xff0c; 感受野限制看的范围&#xff0c;参数共享限制参数 由于上述限制&#xff0c;CNN的bias 比较大&#xff0c;用在图像中&#xff0c;影响不大。 如果用在其他方面&#xff0c;要注意一下。 pooling的目的是降低计算…

如何在手机上设置每年农历日期的生日提醒?

生日是一个比较特殊的节日&#xff0c;很多人都会在生日的时候&#xff0c;被自己的亲朋好友送祝福和礼物&#xff0c;同理我们也要在亲朋好友生日的时候&#xff0c;为他们送上祝福和礼物&#xff0c;这时候如果忘记对方的生日就比较影响关系了。而有不少小伙伴都表示自己平时…

基于深度学习yolov5钢材瑕疵目标检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介YOLOv5钢材瑕疵目标检测系统特性1. 数据预处理2. 模型架构3. 训练策略4. 后处理 性能评估 二、功能三、系统四. 总结 一项目简介 # YOLOv5 钢材瑕疵目标…

数据结构-07-二叉树

前面学习的栈、队列等等都是线性表结构。树是一种非线性表结构&#xff0c;比线性表的数据结构要复杂。 1-树tree “树”这种数据结构类似我们现实生活中的“树”&#xff0c;这里面每个元素我们叫作“节点”&#xff1b;用来连线相邻节点之间的关系&#xff0c;我们叫作“父子…

js 实现图片上传

<style>.showFile{width: 200px;height: 200px;border: 1px solid blue;}.showFile img{width: 100px;height: 100px;} </style> <div><input type"file" id"file" multiple><!--展示所上传的文件--><div class"sho…

2023年【上海市安全员B证】考试题库及上海市安全员B证考试资料

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 上海市安全员B证考试题库是安全生产模拟考试一点通总题库中生成的一套上海市安全员B证考试资料&#xff0c;安全生产模拟考试一点通上上海市安全员B证作业手机同步练习。2023年【上海市安全员B证】考试题库及上海市安…

数字孪生项目的开发平台

WEBGL 开发数字孪生项目的流程涵盖了需求分析、场景搭建、模型创建、数据接入、动画与交互、性能优化、测试与部署以及维护与升级等方面。WEBGL 开发数字孪生项目的流程可以分为以下几个步骤&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外…

海外大文件传输好用的平台工具推荐

在当今全球化时代&#xff0c;跨国合作已经成为多个行业和领域的常态。创意人、广告从业者和创作者等经常需要与海外的合作伙伴或客户分享大型的视频、音频、图片等文件。这些文件通常具有较高的质量和分辨率&#xff0c;占用了大量的存储空间和网络带宽。因此&#xff0c;跨国…

设置一个vue文件的全局模板

VsCode在新建一个.vue文件的时候是空白的&#xff0c;需要我们自己输入片段&#xff0c;可这些在每次新建.vue文件都需要自己手敲&#xff0c;所以创建一个模板方便使用 设置vue模板 导入 {"生成 vue 模板": {"prefix": "vue","body"…

Linux查询指定时间点段日志Linux查询指定文件

Linux服务器高效查询日志查询文件 Ⅰ、常用几种日志查询语法Ⅱ、常用几种查询语法 Ⅰ、常用几种日志查询语法 #查询某日志前xx行日志 head -n 行数 日志文件名 #查询某日志后xx行日志 tail -n 行数 日志文件名 #查询固定时间点日志&#xff08;前提是这个时间点确实有日志输出…

差分法详解

前言 差分算法适用于一些需要对数组和序列进行增减、查询和更新操作的问题&#xff0c;可以提高计算效率和降低存储空间的需求。今天我将带大家学习如何使用差分法&#xff0c;会以例题来带大家使用差分法以增进理解。话不多说让我们开始吧&#xff01; 文章目录 一维差分尾声…

常见Web开发安全漏洞的防御手段

一、Web开发安全漏洞的防御手段方案 输入验证和过滤&#xff1a;对用户输入进行严格的验证和过滤&#xff0c;确保输入的数据符合预期的格式和类型&#xff0c;防止恶意输入或注入攻击。参数化查询&#xff1a;使用预编译的SQL语句和参数化查询接口&#xff0c;避免将用户输入…

逻辑回归的介绍和应用

逻辑回归的介绍 逻辑回归&#xff08;Logistic regression&#xff0c;简称LR&#xff09;虽然其中带有"回归"两个字&#xff0c;但逻辑回归其实是一个分类模型&#xff0c;并且广泛应用于各个领域之中。虽然现在深度学习相对于这些传统方法更为火热&#xff0c;但实…

vue使用el-tag完成添加标签操作

需求&#xff1a;做一个添加标签的功能&#xff0c;点击添加后输入内容后回车可以添加&#xff0c;并且标签可以删除 1.效果 2.主要代码讲解 鼠标按下后触发handleLabel函数&#xff0c;根据回车的keycode判断用户是不是按下的回车键&#xff0c;回车键键值为13&#xff0c;用…

Selenium IED-安装及简单使用

本文已收录于专栏 《自动化测试》 目录 背景介绍优势特点安装步骤录制脚本总结提升 背景介绍 Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 Webdriver 是一个 API 和协议&#xff0c;它定义了一个语言中立的接口&#xff0c;用于控制 web 浏览器的行为。 每…

基于ssm神马物流系统论文

摘 要 本神马物流管理系统设计目标是实现神马物流的信息化管理&#xff0c;提高管理效率&#xff0c;使得神马物流管理作规范化、科学化、高效化。 本文重点阐述了神马物流管理系统的开发过程&#xff0c;以实际运用为开发背景&#xff0c;基于SSMVue框架&#xff0c;运用了Ja…

Zoho Desk与Zendesk详细对比:热门在线客服系统之争

企业需要一款功能强大且丰富的客服系统产品为其解决客户服务的难题。对于了解过Zendesk的企业来讲&#xff0c;可能会考虑到还有哪些产品可供选择&#xff0c;便于对比选择出更合适的产品。这篇文章就为大家展现了一款和Zendesk功能相似的产品——Zoho Desk&#xff0c;在功能、…

香港优才计划DIY申请你以为的不过是幻想,客观评价才能保证通过率!

香港优才计划DIY申请你以为的不过是幻想&#xff0c;客观评价才能保证通过率&#xff01; 香港优才计划申请看似步骤很简单&#xff0c;其实很多细节需要专业人士把控。DIY申请者认为优才申请很简单&#xff0c;自评→准备材料→网上提交→等待获批...事实真的如此吗&#xff1…

postman测试文件上传接口教程,看完就会。。。

postman是一个很好的接口测试软件&#xff0c;有时候接口是Get请求方式的&#xff0c;肯定在浏览器都可以测了&#xff0c;不过对于比较规范的RestFul接口&#xff0c;限定了只能post请求的&#xff0c;那你只能通过工具来测了&#xff0c;浏览器只能支持get请求的接口&#xf…

运筹学经典问题(三):最大流问题

问题描述 给定一个图网络 G ( V , E ) G(V, E) G(V,E)&#xff0c;网络中连边的权重代表最大容量&#xff0c;在这个图中找出从起点到终点流量最大的路径。 数学建模 集合&#xff1a; I I I&#xff1a;点的集合&#xff1b; E E E&#xff1a;边的集合。 常量&#x…