AI全栈之coze的logo生成

前言

前几日体验了国产的AI-Agents产品coze

它是一种能够自主执行任务、与环境进行交互并根据所获取的信息做出决策和采取行动的软件程序

并且可以自己去创建属于自己的AIBot,还是很有意思的,大家可以去体验体验

在体验过程中,我发现在创建bot的时候,需要我们输入bot名称,以及相关描述,并且可以根据内容生成头像

这也就是本文的由来~

动画.gif

实现

效果

动画.gif

前端

—html讲解

接下来我来讲解这个效果是如何实现的

首先我们通过bootstrap生成一个简单的表格

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>AI生成头像</title><linkhref="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.0/css/bootstrap.min.css"rel="stylesheet"/><style>#logo{display: flex;}#logo img {display: block;width: 200px;height: 200px;}</style></head><body><!-- 网页布局 --><div class="container"><div class="row"><div class="col-md-6 col-md-offset-3"><form name="logoForm"><div class="form-group"><label for="titleInput">Bot名称:</label><inputtype="text"class="form-control"id="titleInput"name="title"placeholder="Bot名称"requried/></div><div class="form-group"><label for="descInput">Bot介绍:</label><textareaclass="form-control"name="desc"id="descInput"placeholder="请输入Bot介绍"></textarea></div><div class="form-group"><button type="submit" class="btn btn-primary">生成图标</button></div></form></div></div><div class="row" id="logo"></div></div><script></script></body>
</html>

效果如下:

image.png

这里引入了 Bootstrap 的 CSS 样式表,主体部分有一个容器,里面包含了一行,这一行又分为两部分,一部分是包含 Bot 名称和介绍输入框以及生成图标按钮的表单,另一部分是预留用于展示生成图标的区域

—js讲解

<script>const oForm = document.forms["logoForm"];const oLogo = document.getElementById("logo");oForm.addEventListener("submit", function (e) {e.preventDefault();const title = this["title"].value.trim();const desc = this["desc"].value.trim();// console.log(title, desc);if (title) {const data = {title,desc,};// post 提交表单fetch("http://localhost:3000/logo", {method: "POST",headers: {"Content-Type": "application/json",},// 请求体 字符串或者文件二进制body: JSON.stringify(data),}).then((res) => res.json()).then((data) => {// console.log(data);if (data.code == 200) {const { msg } = data;const oImg = document.createElement("img");oImg.classList.add("col-md-6", "col-md-offset-3");oImg.src = msg;// 图片加载完成,将图片添加到页面oImg.onload = function () {oLogo.appendChild(oImg);};} else {console.log("错误");}});}});</script>

首先获取了页面中的表单(logoForm)和用于展示生成头像的区域(logo)。

然后为表单添加了submit事件的监听。当表单提交时,先阻止默认的提交行为,之后获取表单中输入的 Bot 名称和介绍,并进行了去空格处理。如果 Bot 名称不为空,就将这些数据封装为一个对象。

通过fetch函数以POST方法向http://localhost:3000/logo发送请求,请求体为包含 Bot 名称和介绍的 JSON 数据。

在接收到响应后,将响应解析为 JSON 格式。如果响应中的code值为 200,表示成功,就创建一个新的图片元素,设置其类名和源地址,并在图片加载完成后将其添加到logo区域;如果code值不为 200,则在控制台输出错误信息

后端(重点讲解)

首先肯定是需要创建一个后端服务咯

那么这里我们采用koa框架去搭建一个后端服务,Koa 是一个基于 Node.js 的 Web 应用框架,是目前最好的,最火的,最简单的一个框架了

首先 npm i koa 安装好依赖以后

import Koa from "koa";

现在我们就可以启动一个后端服务了

import Koa from "koa";const app = new Koa();// 启动http服务 3000端口
app.listen(3000, () => {console.log("server is running at http://localhost:3000");
});

image.png

接下来我们需要添加路由功能

使用 npm i koa-router 安装好依赖

import Router from "koa-router"; // 引入路由

然后就可以使用路由功能了

import Koa from "koa";
import Router from "koa-router"; // 引入路由const app = new Koa();
const router = new Router();// 创建 /logo 路由
router.post("/logo", async (ctx) => {console.log('logo');ctx.body = {code: 200,msg: 'logo',};})// 启动http服务 3000端口
app.listen(3000, () => {console.log("server is running at http://localhost:3000");
});

现在就创建好了一个简单的/logo路由了

但是现在通过前端去访问这个路由,会出现一个问题

image.png

这是一个跨域问题,来自于前端js的同源策略,同源指的是协议、域名和端口都相同。如果两个 URL 的协议、域名和端口不完全相同,就被认为是不同源。

这里我们就需要解决这个问题,通过添加npm i @koa/cors

将cors添加到项目即可解决

import cors from "@koa/cors";
app.use(cors());

但是我们需要拿到访问的参数才行啊

于是我们引入npm i @koa/bodyparser

import { bodyParser } from "@koa/bodyparser";
app.use(bodyParser());

现在我们可以通过ctx.request.body拿到前端给我们返回的数据了

接下来我们就需要添加openai的依赖了 npm i openai并引入

import OpenAI from "openai";

同时使用dotenv管理我们的openai的key,安装npm i dotenv,并在同级目录创建一个名为.env的目录
放入key

image.png

通过

import dotenv from "dotenv";// 管理key值dotenv.config({path: ".env",
});
// key
process.env.OPENAI_KEY

可以拿到我们的key值

接下来就需要创建我们与ai的窗口了

const client = new OpenAI({apiKey: process.env.OPENAI_KEY,baseURL: "https://api.gptsapi.net/v1",
});

通过client就可以向其发送指令,我们使用client.images.generate,向其发送一个图片的请求

router.post("/logo", async (ctx) => {// console.log(ctx.request.body);const { title, desc } = ctx.request.body;const prompt = `我要开发标题为${title}的一款bot,功能细节是${desc}?`;let response;let url;try {response = await client.images.generate({model: "dall-e-3",prompt: prompt,n: 1,size: "1024x1024",});console.log(response.data);url = response.data[0].url;console.log(url, "111111111111111111111");ctx.body = {code: 200,msg: url,};} catch (e) {console.log("服务不可用");ctx.body = {code: 500,msg: "出错了",};}
});
  1. const { title, desc } = ctx.request.body;:从请求的主体中解构获取 titledesc 两个属性的值。这意味着客户端在发送 POST 请求时,请求体中应该包含这两个键值对。

  2. const prompt = 我要开发标题为的一款,功能细节是{desc}?;:通过模板字符串将获取到的 titledesc 嵌入到一个新的字符串 prompt 中,用于后续的图像生成操作。

  3. let response; let url;:声明了两个变量 responseurl ,用于存储后续操作的结果。

  4. try {...} 块:

    • response = await client.images.generate({...});:使用 await 关键字异步等待图像生成的结果。传递的参数包括模型名称、提示信息、生成数量和尺寸等。
    • console.log(response.data);:打印生成的响应数据。
    • url = response.data[0].url;:从响应数据中获取第一个图像的 URL 并赋值给 url 变量。
    • ctx.body = {...};:成功生成图像后,设置响应的主体。状态码为 200 表示成功,msg 字段中包含生成的图像 URL
  5. catch (e) {...} 块:如果在图像生成过程中发生异常(可能是服务不可用、网络问题或其他错误),会捕获这个异常

    • console.log("服务不可用");:在控制台打印错误提示。
    • ctx.body = {...};:向客户端返回状态码为 500 的错误响应,msg 字段说明出错了

接下来我们就可以实现通过coze的功能啦

动画.gif

总结

随着时代的发展,AI 与人类将更加紧密地融合,共同工作和生活,成为人类的重要伙伴

本文讲解了如何使用前后端实现一个简易的通过ai去生成一个头像的功能,相信看到这里的你一定会有所收获的

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

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

相关文章

Linux操作系统进程同步的几种方式及基本原理

1&#xff0c;进程同步的几种方式 1.1信号量 用于进程间传递信号的一个整数值。在信号量上只有三种操作可以进行&#xff1a;初始化&#xff0c;P操作和V操作&#xff0c;这三种操作都是原子操作。 P操作(递减操作)可以用于阻塞一个进程&#xff0c;V操作(增加操作)可以用于…

Go 实现继承的方式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Java高级重点知识点-12-Collection、iterator迭代器、泛型

文章目录 Collection集合Iterator迭代器泛型&#xff08;难点&#xff09; Collection集合 集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。 集合框架 单列集合java.util.Collection双列集合java.util.Map 集合类继承体系图&#xff1a; List集合的特点&am…

新品发布 | TC1018Pro和TC1034Pro正式发布,功能升级,多设备时间同步

新品发布/New products release 同星智能最新推出TC1018Pro和TC1034Pro两款产品&#xff0c;新版本在保留原来基本功能的基础上做了升级&#xff0c;主要新增IO功能、错误帧ID检测、多设备间时间同步等功能。 接下来&#xff0c;让我们看看这两款产品带来了哪些具体功能升级&a…

玄奘取经线路矢量图分享

我们在《透过丝绸之路&#xff0c;看古人都走过哪些地方》一文中&#xff0c;为你分享过丝绸之路的矢量图数据。 现在&#xff0c;我们再为你分享一下玄奘取经线路的矢量图&#xff0c;你可以在文末查看这些数据的领取方式。 玄奘取经线路 《西游记》的故事相信大家都不陌生…

ABC234G Divide a Sequence 题解

题目来源 ABC234G 洛谷 Description 给定长度为 n n n 的序列 { a n } \{a_n\} {an​}。定义一种将 { a n } \{a_n\} {an​} 划分为若干段的方案的价值为每段的最大值减去最小值的差的乘积。求所有划分方案的价值的总和并对 998244353 998244353 998244353 取模。 1 ≤…

项目实训-vue(十一)

项目实训-vue&#xff08;十一&#xff09; 文章目录 项目实训-vue&#xff08;十一&#xff09;1.概述2.页顶导航栏3.导航信息4.总结 1.概述 本篇博客将记录我在图片上传页面中的工作。 2.页顶导航栏 <divstyle"display: flex;justify-content: space-between;alig…

如何挑选洗地机?盘点口碑最好的四大洗地机

在购买洗地机这种智能家电时&#xff0c;大家都应该格外谨慎。毕竟&#xff0c;洗地机价格不菲&#xff0c;精打细算&#xff0c;确保物尽其用才是最重要的。谁都不想花了高价买回来却让它闲置在墙角落灰尘。买之前我们还是需要对自己的需求做一个清晰的判断&#xff0c;实用性…

【unity笔记】六、UI实现下拉列表切换视角

具体步骤如下 1. 创建UI下拉列表&#xff1a; 在Unity场景中右键点击并选择UI -> 下拉列表 来创建一个新的下拉列表。 2. 添加摄像机选项&#xff1a; 在Dropdown的Options属性中添加新的选项&#xff0c;通过点击按钮来添加选项&#xff0c;并为每个选项设置一个显示名…

sourceTree 和Tortoise git软件的对比,以及使用sourceTree管理公司托管的 gitlab 项目或github项目

文章目录 Tortoisegit 和sourcetree的比较如何添加 gitlab 的社区版账号总结参考资料 Tortoisegit 和sourcetree的比较 我在 window都是用 Git 小乌龟&#xff08;Tortoise git&#xff09;来可视化管理 Git 项目。这时是不区分 Git 平台的&#xff0c;也就是不管你用的是 Git…

生产看板管理系统内容有哪些?

相信很多做生产管理的朋友都会遇到如下问题&#xff0c;我就在想&#xff0c;是否能一个创建“透明的”的工作场所&#xff1f;让员工和管理者能够实时查询生产进度&#xff0c;及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能&#xf…

ROS CDK魔法书:点亮博客上云新技能(TypeScript篇)

引言 在数字世界的浩瀚海洋中&#xff0c;信息与数据如同戏剧中的主角&#xff0c;舞动着无形的旋律&#xff0c;构建起信息时代的交响乐。而在这其中&#xff0c;作为一位技术领域的探索者&#xff0c;你的使命便是挥舞着编码的魔杖&#xff0c;创造和守护着这些宝贵的数字灵…

PointCloudLib 3D对象的可视化 C++版本

0.实现效果 显示箭头 vtkOutputWindow::SetGlobalWarningDisplay(0);pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));viewer->setBackgroundColor(1, 1, 1);//添加箭头显示pcl::PointXYZ pA(0, 0, 0);pcl:…

openfeign的原理 ????

1、我们使用openfeign调用远程接口就像调用本地方法一样简单。 2、支持spring mvc 注解 3、整合了更多的扩展 &#xff08;请求重试策略、超时控制、请求拦截器&#xff09; 4、open Feign是基于aop的原理&#xff0c;他会通过所加FeignClient的接口&#xff0c;自动拼接接口…

准备篇(三)网页相关知识

Java script小脚本 - 爬取 bilibili 表情Java script 小脚本 - 爬取 bilibili 表情 随便点开一个视频,注意这个页面 URL 对应的 HTML 代码中没有表情的代码, 需要先点一下评论区,然后再在这个页面 URL 对应的元素中找到表情所在的源码。(但是我不知道这个带表情 <pic…

使用ShellHub搭建集中式SSH

SSH 是 Secure Socket Shell 或安全 shell 的缩写。这是一种加密协议&#xff0c;用于通过不安全的网络管理和创建两台计算机之间的安全通信。 SSH 还可用于指代实现 SSH 协议的实用程序套件。有多种身份验证机制&#xff0c;最常见的一种是密码身份验证&#xff0c;但也有基于…

夏老师小课堂(10)影响电机尺寸的因素(2)-电机转速的增加

点击上方 “机械电气电机杂谈 ” → 点击右上角“...” → 点选“设为星标 ★”&#xff0c;为加上机械电气电机杂谈星标&#xff0c;以后找夏老师就方便啦&#xff01;你的星标就是我更新动力&#xff0c;星标越多&#xff0c;更新越快&#xff0c;干货越多&#xff01; 关注我…

【Ant Design Vue的更新日志】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

智慧校园-后勤管理系统总体概述

在今天这个信息化飞速发展的时代&#xff0c;智慧校园后勤管理系统就像一股清新的风&#xff0c;悄悄吹走了过去校园后勤工作中的一些老难题。它就像是个超级聪明的帮手&#xff0c;用上了物联网、大数据那些听起来就很高大上的技术&#xff0c;目的很简单&#xff0c;就是让学…

供应链云仓APP开发:物流行业的数字化转型

在数字化时代&#xff0c;供应链管理正经历着前所未有的变革。供应链云仓APP开发作为这一变革的关键驱动力&#xff0c;为企业提供了一个集成化、智能化的物流解决方案。本文将深入探讨供应链云仓APP开发的重要性、核心功能、开发策略以及它如何助力企业实现物流管理的现代化。…