Next.js Tailwind CSS UI组件

在这里插入图片描述
摘要: 官网

今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件!这从头构建一个AI驱动的前端UI组件生成器,生成Next.js Tailwind CSS UI组件:
1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。
2、用CopilotKit将AI功能集成到UI组件生成器中。
3、集成嵌入式代码编辑器,对生成的代码进行更改。

准备:

1、Ace Code Editor —— 使用JavaScript编写的可嵌入代码编辑器,具有与原生编辑器相匹配的功能和性能。
2、Langchain —— 提供一个框架,使AI代理能够搜索网络并研究任何主题。
3、OpenAI API —— 提供一个API密钥,能够使用ChatGPT模型执行各种任务。
4、Tavily AI —— 搜索引擎,使AI代理能够在应用程序中进行研究并访问实时知识。。
5、CopilotKit —— 用于构建自定义AI聊天机器人、应用内AI代理和文本区域的开源协作框架。

项目设置和包安装:

创建一个Next.js应用程序:

npx create-next-app@latest aiuigenerator

在这里插入图片描述

安装Ace代码编辑器和Langchain包及其依赖项

npm install react-ace @langchain/langgraph

安装CopilotKit。从React状态中检索数据并将AI协同助手添加到应用程序中。

npm install @copilotkit/react-ui @copilotkit/react-textarea @copilotkit/react-core @copilotkit/backend

以上步骤已经准备好构建一个由人工智能驱动的博客!

构建UI组件生成器前端界:

/[root]/src/app目录,创建components文件夹。components内创建Header.tsx和CodeTutorial.tsx。

在Header.tsx文件中定义一个名为Header的函数组件,用于渲染生成器的导航栏。

"use client";import Link from "next/link";export default function Header() {return (<><header className="flex flex-wrap sm:justify-start sm:flex-nowrap z-50 w-full bg-gray-800 border-b border-gray-200 text-sm py-3 sm:py-0 "><navclassName="relative max-w-7xl w-full mx-auto px-4 sm:flex sm:items-center sm:justify-between sm:px-6 lg:px-8"aria-label="Global"><div className="flex items-center justify-between"><LinkclassName="w-full flex-none text-xl text-white font-semibold p-6"href="/"aria-label="Brand">AI-UI-Components-Generator</Link></div></nav></header></>);
}

CodeTutorial.tsx文件中,添加以下代码,定义一个名为CodeTutorial的函数组件,用于渲染生成器的主页,显示生成的UI组件、嵌入式代码编辑器和生成的实现教程

"use client";import Markdown from "react-markdown";
import { useState } from "react";
import AceEditor from "react-ace";
import React from "react";export default function CodeTutorial() {const [code, setCode] = useState<string[]>([`<h1 class="text-red-500">Hello World</h1>`,]);const [codeToDisplay, setCodeToDisplay] = useState<string>(code[0] || "");const [codeTutorial, setCodeTutorial] = useState(``);function onChange(newCode: any) {setCodeToDisplay(newCode);}return (<><main className=" min-h-screen px-4"><div className="w-full h-full min-h-[70vh] flex justify-between gap-x-1 "><div className="w-2/3 min-h-[60vh] rounded-lg bg-white shadow-lg p-2 border mt-8 overflow-auto"><divclassName="w-full min-h-[60vh] rounded-lg"dangerouslySetInnerHTML={{ __html: codeToDisplay }}/></div><AceEditorplaceholder="Placeholder Text"mode="html"theme="monokai"name="blah2"className="w-[50%] min-h-[60vh] p-2 mt-8 rounded-lg"onChange={onChange}fontSize={14}lineHeight={19}showPrintMargin={true}showGutter={true}highlightActiveLine={true}value={codeToDisplay}setOptions={{enableBasicAutocompletion: true,enableLiveAutocompletion: true,enableSnippets: false,showLineNumbers: true,tabSize: 2,}}/></div><div className="w-10/12 mx-auto"><div className="mt-8"><h1 className="text-white text-center text-xl font-semibold p-6">Code Tutorial</h1>{codeTutorial ? (<Markdown className="text-white">{codeTutorial}</Markdown>) : (<div className="text-white">The Code Tutorial Will Appear Here</div>)}</div></div></main></>);
}

/[root]/src/page.tsx文件,并添加以下代码,导入CodeTutorial和Header组件,并定义一个名为Home的函数组件

import React from "react";
import Header from "./components/Header";
import CodeTutorial from "./components/CodeTutorial";export default function Home() {return (<><Header /><CodeTutorial /></>);
}

删除 globals.css 文件中的 CSS 代码,并添加以下 CSS 代码

@tailwind base;
@tailwind components;
@tailwind utilities;body {height: 100vh;background-color: rgb(16, 23, 42);
}pre {margin: 1rem;padding: 1rem;border-radius: 10px;background-color: black;overflow: auto;
}h2,
p {padding-bottom: 1rem;padding-top: 1rem;
}code {margin-bottom: 2rem;
}

运行 npm run dev 命令,导航至 http://localhost:3000/。

使用 CopilotKit 将人工智能功能集成到组件生成器中

在这个部分,在UI组件生成器中添加一个AI copilot,用CopilotKit生成UI组件。

CopilotKit提供了前端和后端两个包。可以让您将React状态连接起来,并使用AI代理在后端处理应用程序数据。

首先,将CopilotKit的React组件添加到博客前端。

将CopilotKit添加到博客前端

将UI组件生成器与CopilotKit前端集成的过程,促进UI组件代码和实现教程的生成。

在 /[root]/src/app/components/CodeTutorial.tsx 文件的顶部导入 useMakeCopilotReadable 和 useCopilotAction自定义钩子。

import {useCopilotAction,useMakeCopilotReadable,
} from "@copilotkit/react-core";

在 CodeTutorial 函数内部,状态变量下面,使用 useMakeCopilotReadable 钩子(hook)来添加将作为应用内聊天机器人上下文的代码。该钩子使得代码对于copilot易于可读。

useMakeCopilotReadable(codeToDisplay);

使用useCopilotAction钩子来设置一个名为generateCodeAndImplementationTutorial的动作,该动作将启用生成UI组件代码和实现教程的功能。

该动作接收两个参数,code和tutorial,用于生成UI组件代码和实现教程。

该动作包含一个处理函数,该函数根据给定的提示生成UI组件代码和实现教程。

在处理函数内部,codeToDisplay状态被更新为新生成的代码,而codeTutorial状态被更新为新生成的教程,如下所示。

useCopilotAction({name: "generateCodeAndImplementationTutorial",description:"Create Code Snippet with React.js(Next.js), tailwindcss and an implementation tutorial of the code generated.",parameters: [{name: "code",type: "string",description: "Code to be generated",required: true,},{name: "tutorial",type: "string",description:"Markdown of step by step guide tutorial on how to use the generated code accompanied with the code. Include introduction, prerequisites and what happens at every step accompanied with code generated earlier. Don't forget to add how to render the code on browser.",required: true,},],handler: async ({ code, tutorial }) => {setCode((prev) => [...prev, code]);setCodeToDisplay(code);setCodeTutorial(tutorial);},},[codeToDisplay, codeTutorial]);

进入/[root]/src/app/page.tsx文件,并在顶部使用以下代码导入CopilotKit前端包和样式。

import { CopilotKit } from "@copilotkit/react-core";import { CopilotSidebar } from "@copilotkit/react-ui";import "@copilotkit/react-ui/styles.css";

然后,使用CopilotKit来包裹CopilotSidebar和CodeTutorial组件,如下所示。CopilotKit组件指定了CopilotKit后端端点的URL(/api/copilotkit/),而CopilotSidebar渲染了应用内聊天机器人,你可以通过它给出提示来生成UI组件代码和实现教程。

export default function Home() {return (<><Header /><CopilotKit url="/api/copilotkit"><CopilotSidebarinstructions="Help the user generate code. Ask the user if to generate its tutorial."defaultOpen={true}labels={{title: "Code & Tutorial Generator",initial: "Hi! 👋 I can help you generate code and its tutorial.",}}><CodeTutorial /></CopilotSidebar></CopilotKit></>);
}

接下来,运行开发服务器并在浏览器中导航到http://localhost:3000。

将CopilotKit后端添加到博客

在这里,完成将UI组件生成器与CopilotKit后端集成,该后端负责处理来自前端的请求,并提供函数调用以及各种大型语言模型(LLM)后端,例如GPT。

此外,将集成一个名为Tavily的AI agent,它能够在网上研究任何主题。

在项目的根目录下创建一个名为.env.local的文件。然后,在文件中添加以下环境变量,这些变量将存储您的ChatGPT和Tavily搜索API密钥。

OPENAI_API_KEY="Your ChatGPT API key"
TAVILY_API_KEY="Your Tavily Search API key"

要获取ChatGPT API密钥,请导航到 https://platform.openai.com/api-keys。

要获取Tavily搜索API密钥,请访问 https://app.tavily.com/home。

之后,前往/[root]/src/app目录并创建一个名为api的文件夹。在api文件夹中,创建一个名为copilotkit的文件夹。

在copilotkit文件夹中,创建一个research.ts文件。然后导航到这个research.ts gist文件,复制代码,并将其添加到research.ts文件中。

接下来,在/[root]/src/app/api/copilotkit文件夹中创建一个route.ts文件。该文件将包含设置后端功能以处理POST请求的代码。它条件性地包含一个“research”动作,该动作对给定主题进行研究。

在文件的顶部导入以下模块:

import { CopilotBackend, OpenAIAdapter } from "@copilotkit/backend"; // For backend functionality with CopilotKit.
import { researchWithLangGraph } from "./research"; // Import a custom function for conducting research.
import { AnnotatedFunction } from "@copilotkit/shared"; // For annotating functions with metadata.

在上述代码下方定义一个运行时环境变量和一个researchAction的函数,该函数使用以下代码研究某个特定主题。

// Define a runtime environment variable, indicating the environment where the code is expected to run.
export const runtime = "edge";// Define an annotated function for research. This object includes metadata and an implementation for the function.
const researchAction: AnnotatedFunction<any> = {name: "research", // Function name.description: "Call this function to conduct research on a certain topic. Respect other notes about when to call this function", // Function description.argumentAnnotations: [ // Annotations for arguments that the function accepts.{name: "topic", // Argument name.type: "string", // Argument type.description: "The topic to research. 5 characters or longer.", // Argument description.required: true, // Indicates that the argument is required.},],implementation: async (topic) => { // The actual function implementation.console.log("Researching topic: ", topic); // Log the research topic.return await researchWithLangGraph(topic); // Call the research function and return its result.},
};

在上述代码下方添加以下代码,定义一个处理POST请求的异步函数。

// Define an asynchronous function that handles POST requests.
export async function POST(req: Request): Promise<Response> {const actions: AnnotatedFunction<any>[] = []; // Initialize an array to hold actions.// Check if a specific environment variable is set, indicating access to certain functionality.if (process.env.TAVILY_API_KEY) {actions.push(researchAction); // Add the research action to the actions array if the condition is true.}// Instantiate CopilotBackend with the actions defined above.const copilotKit = new CopilotBackend({actions: actions,});// Use the CopilotBackend instance to generate a response for the incoming request using an OpenAIAdapter.return copilotKit.response(req, new OpenAIAdapter());
}

如何生成UI组件

现在请转到您之前集成的应用内聊天机器人,并给它一个提示,例如:“生成一个联系表单”。一旦生成完成,您应该会看到生成的联系表单组件以及其使用教程,如下所示。您还可以使用嵌入式代码编辑器修改生成的代码。

结论

CopilotKit是一个令人惊叹的工具,它允许您在几分钟内将AI副驾驶添加到您的产品中。无论您对AI聊天机器人和助手感兴趣,还是希望自动化复杂任务,CopilotKit都能让这一切变得简单。

如果您需要构建一个AI产品或将其集成到您的软件应用程序中,您应该考虑使用CopilotKit。

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

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

相关文章

LVGL欢乐桌球游戏(LVGL+2D物理引擎学习案例)

LVGL欢乐桌球游戏&#xff08;LVGL2D物理引擎学习案例&#xff09; 视频效果&#xff1a; https://www.bilibili.com/video/BV1if421X7DL

UFS协议入门-分层结构

写在前面:本文参考UFS jedec3.1,本文思维导图如下 1. 分层概述 UFS协议分为3层,从上至下分别是:应用层(UAP),传输层(UTP),互联层(UIC),具体结构如下图所示。 2.1 应用层 在应用层(UAP)中,包括:UFS指令集(UCS),设备管理器(Device Manager),任务管理器(Task Manager…

MeiliSearch-轻量级且美丽的搜索引擎

MeiliSearch-轻量级且美丽的搜索引擎 MeiliSearch 是一个功能强大、快速、开源、易于使用和部署的搜索引擎。它具有以下特点&#xff1a; 支持中文搜索&#xff1a;MeiliSearch 对中文有良好的支持&#xff0c;不需要额外的配置。高度可定制&#xff1a;搜索和索引都可以高度…

GPT-4o多模态大模型的架构设计

GPT-4o&#xff1a;大模型风向&#xff0c;OpenAI大更新 OpenAI震撼发布两大更新&#xff01;桌面版APP与全新UI的ChatGPT上线&#xff0c;简化用户操作&#xff0c;体验更自然。同时&#xff0c;全能模型GPT-4o惊艳亮相&#xff0c;跨模态即时响应&#xff0c;性能卓越且性价比…

计算机网络 期末复习(谢希仁版本)第3章

对于点对点的链路&#xff0c;目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。局域网的传输媒体&#xff0c;包括有线传输媒体和无线传输媒体两个大类&#xff0c;那么有线传输媒体有同轴电缆、双绞线和光纤&#xff1b;无线传输媒体有微波、红…

Flink的简单学习五

一 动态表与连续查询 1.1 动态表 1.是flink的支持流数据Table API 和SQL的核心概念。动态表随时间的变化而变化 2.在流上面定义的表在内部是没有数据的 1.2 连续查询 1.永远不会停止&#xff0c;结果是一张动态表 二 Flink SQL 2.1 sql行 1.先启动启动flink集群 yarn-see…

全球首创4090推理!昆仑万维开源Skywork-MoE模型

昆仑万维近期宣布开源了其2千亿参数规模的稀疏大模型Skywork-MoE。这个模型是基于他们之前开源的Skywork-13B模型中间checkpoint扩展而来的&#xff0c;并且宣称是首个完整应用MoE Upcycling技术的开源千亿MoE大模型。此外&#xff0c;它也是首个支持使用单台RTX 4090服务器&am…

SpringSecurity入门(一)

1、引入依赖 spring-boot版本2.7.3&#xff0c;如未特殊说明版本默认使用此版本 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><g…

16 DTLS协议

加密解密基本概念 什么是非对称加密 什么是公钥 这个就是谁都能获得的钥匙什么是私钥 只有一个人能获得 非对称加密就是公钥上的锁&#xff0c;私钥才能打开&#xff0c;私钥上的锁公钥才能打开。比如说就是地下党接头的时候&#xff0c;把一个信息放在盒子里&#xff0c;然…

大数据概论总结

三次信息化浪潮 : 信息技术的支撑 : 存储设备容量不断增加 CPU的处理能力不断提高 网络带宽不断增加 数据产生方式的变革促成大数据时代的来临 运营式系统阶段用户原创内容感知式系统阶段 大数据发展历程 : 分为三个阶段 : 大数据的概念 : 1 . 数据量大 : 根据IDC作出…

每日一练:攻防世界:base64stego

base64stego&#xff1a; 打开压缩包发现被加密&#xff0c;用winhex查看&#xff0c;发现是伪加密&#xff0c;修改文件目录区的全局方式位标记&#xff0c;成功打开压缩包&#xff0c;得到一个文本 这里我想的有三种情况&#xff1a;1.直接base64解码&#xff0c;然后看解码…

【计网复习】应用层总结(不含HTTP和错题重点解析)

应用层总结&#xff08;不含HTTP和错题重点解析&#xff09; 应用层简介 应用层的主要功能常见的应用层协议小林对于应用层通常的解释 网络应用模型 客户端-服务器模型&#xff08;Client-Server Model, C/S&#xff09; 特点优点缺点应用场景 对等网络模型&#xff08;Peer-to…

第十五篇——条件熵和信息增益:你提供的信息到底值多少钱?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 通过这篇文章&#xff0c;我知道了条件熵和信息增益&#xff1b;如果你试…

RabbitMQ-Stream(高级详解)

文章目录 什么是流何时使用 RabbitMQ Stream&#xff1f;在 RabbitMQ 中使用流的其他方式基本使用Offset参数chunk Stream 插件服务端消息偏移量追踪示例 示例应用程序RabbitMQ 流 Java API概述环境创建具有所有默认值的环境使用 URI 创建环境创建具有多个 URI 的环境 启用 TLS…

JVM对象分配和垃圾回收机制

一、对象创建 1.1 符号引用 new 创建一个对象&#xff0c;需要在JVM创建对象。 符号引用&#xff1a;目标对象采用一个符号表示&#xff0c;类A加载的时候&#xff0c;如果成员变量类B还没有被加载进来&#xff0c;采用一个符号&#xff08;字面量&#xff09;来表示&#x…

解密有道翻译响应数据末尾出现乱码问题的解决方法

运行解密响应数据程序&#xff1a; D:\Python\Python311\python.exe E:\baichuan\youdaos.py {"code":0,"dictResult":{"ce":{"word":{"trs"D:\Python\Python311\python.exe E:\baichuan\youdaospdm.pyD:\Python\Python31…

Linux 性能优化基础

文章目录 常见指标分类&#xff08;USE法&#xff09;常见性能工具CPU性能工具内存性能工具文件系统和磁盘I/O性能工具网络性能工具 根据指标找工具CPU性能内存性能文件系统和磁盘I/O网络性能 根据工具找指标CPU性能内存性能文件系统和磁盘I/O网络性能 CPU性能分析一般步骤内存…

GUI编程03-事件监听

事件监听是指当某个事件发生的时候干一些什么。 例如之前在关闭frame窗口时就写过一个window窗口监听&#xff0c;当点击左上角❌时调用System.exit进行程序关闭。 1.按钮监听 下面的例子是监听按钮Button被点击时触发的事件 同时我们将窗口关闭监听事件进行了优化&#xff…

教你一段代码激活计算机系统

方法简单粗暴&#xff0c;再也不用遭受未激活的烦恼了&#xff01; 新建文本 输入代码&#xff0c;把文件后缀.txt改.bat slmgr /skms kms.03k.org slmgr /ato

如何用Vue3构建一个交互式音乐播放器

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue.js 开发音乐播放器卡片 应用场景 这款音乐播放器卡片旨在为音乐应用程序提供一个现代而交互式的用户界面。它包含诸如歌曲信息、播放进度条和控制按钮等关键功能。 基本功能 **歌曲信息显示&#xff1a…