> 自媒体 > (AI)人工智能 > 手把手教你用ChatGPT建立人工智能聊天室!
手把手教你用ChatGPT建立人工智能聊天室!
来源:老崔说架构
2023-04-20 17:06:12
526
管理
摘要

在本教程中,我将建立一个聊天室网络应用,允许用户输入他们的信息并与ChatGPT进行对话。

这个用户界面可以用下面的zul来完成

Chat with AI

hflex and vflex

在上面的ZUL代码中,我使用""来定义我的聊天室的水平布局。有2个属性,hflex和vflex,它们决定了组件的相对大小。"hflex"的值决定了高度而"vflex"的值决定了宽度。在这个例子中,我用hflex="1 "来指定第一个""应该占用一个单位的水平空间,用hflex="7 "来指定第二个""应该占用七个单位的水平空间。"这可以使聊天室的布局对大多数屏幕宽度有响应,因为它没有固定的宽度。

textbox

textbox "用于创建聊天室中的文本输入区域。"我使用id属性给它一个唯一的标识符,它可以用来在我的composer类中引用文本框(在后面的段落中解释)。"焦点 "属性被设置为 "true",以强制文本框在页面加载时接受焦点。占位符属性用于向终端用户提供关于文本框用途的提示。

混合HTML标签

在一个ZUL文件中,HTML标签可以在ZUL命名空间内使用,指定为 "xmlns:h"="native"。然后,标签"表示一个HTML标题标签。有了这个命名空间,你可以在他们的ZUL页面中利用HTML标签,如标题、链接和图片,为他们的网络应用添加结构和风格。这为你提供了包括由网页设计师制作的HTML片段的能力,并在zul中建立你自己的自定义部分。

构建用户界面的各种方法

除了编写zul之外,你还可以通过另外2种方式在ZK中建立你的UI。

1.以Swing风格在Java中建立UI

2.用ZUL代码片段调用Java方法。我将在控制器部分做进一步解释。

用CSS打造一个独特的用户体验

在上一节中,我做了用户界面的布局。现在,为了使它更漂亮,我用对比强烈的颜色和不同的背景来区分我的信息和AI的回复。这不仅增强了应用程序的视觉效果,而且也增加了对话的整体可读性。我还为消息框添加了适当的边距和填充物,以创造一个视觉上有吸引力的、有条理的布局。这些都可以通过使用CSS来实现。

在这一节中,我将谈一谈用CSS为ZUL页面设计样式的基本知识,包括标签的使用、sclass和style属性,以及iconSclass属性。

"允许你为ZUL页面定义CSS样式。你可以用src属性在你的ZUL中直接包含一个CSS文件,如上面的代码片段。"这个文件中定义的样式可以使用sclass属性应用到你的ZUL中的组件上。

sclass 属性用于将CSS类应用于组件。在上面的zul中,容器类被应用到组件上,并使用sclass="container "属性。通过使用CSS类,你可以在你的ZUL中为多个组件应用一致的样式。

style 属性允许你将内联样式直接应用于一个组件。在上面的ZUL中,messageBox类被应用到了带有sclass=messageBox属性的div组件中。此外,overflow-y: auto 样式被添加到样式属性中,以指定的内容在溢出其高度时应可垂直滚动。

iconSclass 属性用于在一个按钮上显示图标。"在应用程序中,一个发送图标被显示在上,图标Sclass="z-icon-send "属性。"这是用ZK捆绑的Font Awesome图标完成的,它提供了大量可扩展的矢量图标集合,可以用CSS定制。ZK已经默认包含了它,你不需要手动下载和包含它。

用ZK控制器实现你的应用逻辑

现在我已经准备好了我的用户界面,并以我喜欢的方式进行了风格设计。我的下一步是实现我的应用逻辑。这个用例中的应用逻辑非常简单。

当点击发送按钮(或按下回车键)时,在消息区显示用户输入的消息和ChatGPT的回复。

我目前使用的模式是ZK MVC。我应该在一个ZK控制器的事件监听器中实现我的应用逻辑。控制器是一个Java类,它通过操纵ZK组件来实现应用逻辑,它可以用来处理事件,访问数据,以及操纵用户界面。ZUL中的相关属性是apply属性,它被用来将ZK控制器类与ZUL组件联系起来。

在这个应用程序中,apply属性被设置为org.zkoss.support.ChatRoomComposer,它将composer类与div联系起来。然后,这个控制器就可以操作这个div和它的子组件了。

连接组件

"ChatRoomComposer "扩展了ZK框架的SelectorComposer。SelectorComposer提供了一个注解,"@Wire",用于将ZUL中的组件与composer中的成员字段连接起来。它提供了类似CSS的选择器

public class ChatRoomComposer extends SelectorComposer { @Wire protected Textbox myMessage; @Wire private Button send; @Wire(".messageBox") protected Div msgBox; @Wire("checkbox")    private Checkbox fastCheckbox;第2-3行:ZUL中id="myMessage "的被连接到myMessage字段,因为默认是 "ID选择器"第6-7行:这是由 "sclass选择器 "连接的。第8-9行:这是由 "组件名称选择器 "连接的。

关于完整的选择器语法,请参考Wire Components。

事件监听器

控制器还通过@Listen包含了事件监听器,它监听ZUL中组件上的事件,例如最终用户点击按钮或检查复选框。

点击发送按钮

在这个应用程序中,当 "发送 "按钮被点击时,我想调用send(),所以我写道。

public class ChatRoomComposer extends SelectorComposer {... @Listen("onClick = #send")     public void send(){...}

onClick是事件名称。#send是 "发送 "按钮的ID选择器。

此外,为了方便,当终端用户在关注文本框时按下 "Enter "键,我也希望send()方法被调用。因此我写道。

public class ChatRoomComposer extends SelectorComposer {... @Listen("onClick = #send; onOK = #myMessage")     public void send(){...}

onOK是终端用户在文本框中按下 "Enter "键时触发的事件名称。

所以现在我可以用一个监听器成功地监听到2个事件。关于完整的监听器语法,请参考《Wire Event Listeners》。

发送我的信息

在send()中,我可以调用组件API来实现应用逻辑:将我的消息发送到ChatGPT。

public void send(){ if (myMessage.getValue().isEmpty()) return; if (fastCheckbox.isChecked()){ submitFastResponse(); }else{ submit(); } }

myMessage.getValue() 返回文本框中的用户输入。

fastCheckbox.isChecked() 返回 "快速响应 "的检查状态。

现在我可以发送和接收消息了,我只需要在用户界面上显示它们。

显示AI回复 - 在Java代码中构建UI

在文章的开头,我用zul来显示我的用户界面。你可以在这里使用同样的方式来显示AI回复,但我决定使用一种不同的技术--使用Java代码来创建和操作ZK组件。

protected void appendAiMessage(String myMessage) { Div msgDiv = new Div(); Label aiName = new Label("ChatAI: "); aiName.setSclass("ai"); msgDiv.appendChild(aiName); Label msg = new Label(chatService.prompt(myMessage)); msg.setMultiline(true); msgDiv.appendChild(msg); msgBox.appendChild(msgDiv);    }

它创建了一个Div组件来容纳整个AI信息。创建一个新的Label组件,名为aiName,文本为 "ChatAI:",并将其样式类设置为ai。因为我想把这个文本变成绿色。它将aiName追加到msgDiv中作为其子项。它创建了另一个名为msg的Label,其文本来自chatService.prompt(),是ChatpGPT的回复。我将多行属性设置为true以显示多行消息最后,它将msgDiv追加到msgBox中作为其子节点。

正如你所看到的,你可以在Java中创建UI组件,配置它们,并建立父-子关系。实际上,你可以用zul做的一切,都可以在Java代码中完成。

显示我的信息 - 用Zul在Java中建立UI

接下来,我将在用户界面中显示用户的信息。同样,你可以使用上面提到的同样的方法,但我决定使用另一种技术--用ZUL在Java中构建用户界面。

用zul和Java构建UI有它自己的好处。使用zul的好处是可读性。通过ZUL,你可以对一个页面有一个大致的了解。然而,使用Java可以让你在运行时根据状态动态地构建UI。如果我可以同时拥有这两个好处呢?这将是非常好的!

ZK确实提供了这样一种方式:通过向Executions.createComponents()传递zul路径,你可以用zul动态创建组件

protected void appendMyMessage(String myMessage) { Div msgDiv = new Div(); Executions.createComponents("/me.zul", msgDiv, null); msgDiv.appendChild(new Label(myMessage)); msgBox.appendChild(msgDiv);    }

从一个ZUL代码段动态地创建UI组件。ZUL代码片段为用户名创建了一个Label。然后这个组件被附加到msgDiv .NET中。

使用这种方法,你可以建立一个动态的、功能性的用户界面,并根据你的应用程序的需要进行优化。

在这一点上,我已经把所有的东西都挂接起来了,我的由ChatGPT驱动的聊天室应用程序已经完全正常了

总结

通过询问ChatGPT,我能够收集到将ChatGPT纳入我的应用程序所需的所有信息。并非所有ChatGPT的答案都是准确的,但询问后续问题或重新表述我的问题都有帮助,并引导我找到我需要的一切。这个过程很有趣,节省了我50%以上的阅读文档和在线寻找资源的时间。

2
点赞
赏礼
赏钱
0
收藏
免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本网证实,对本文以及其中全部或者 部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 凡本网注明 “来源:XXX(非本站)”的作品,均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对 其真实性负责。 如因作品内容、版权和其它问题需要同本网联系的,请在一周内进行,以便我们及时处理。 QQ:617470285 邮箱:617470285@qq.com
关于作者
阳光下的微笑..(普通会员)
文章
431
关注
0
粉丝
0
点击领取今天的签到奖励!
签到排行

成员 网址收录40335 企业收录2981 印章生成193438 电子证书831 电子名片53 自媒体25950

@2022 All Rights Reserved 浙ICP备19035174号-7
2
0
分享
请选择要切换的马甲:

个人中心

每日签到

我的消息

内容搜索