初步体验:用扣子生成一个雅思口语练习网页

3.15更新: //3pvtkwzwrm.coze.site coze生产环境的参数是部署时系统自动赋值的,不需要自己填API key之类的参数。重新做了一个在生产环境就跑通了,具体方法是让AI基于前一个应用生成一个详细的提示词包含功能点、技术架构等内容,感觉提示词专业的话对于编码还是有帮助的,但是依然会出现细节上的bug,需要进行两三次修复。功能出了问题好排查,配置或者网络等细节出了问题不是程序员的话真的不太好排查,也许是我对一些技术细节还不够了解。 最近正好考虑雅思,新东方的雅思小程序推出了一个AI练真题的功能,参考这个试了下能否用扣子直接生成一个类似的功能。 功能介绍: 根据选择的题型随机生成题目,点击开始录音可以根据题型限制录音时长。录音结束后进行语音识别,并通过AI对识别结果进行分析,给出评分、改进建议和AI扩写的答案。 首页: 这里题目下方的灰色提示是AI自动补全的功能,prompt并未做要求,同时录音时间的文字提示也是AI补全的,页面也是响应式,交互总体比较友好。我也没有对UI风格做要求,感觉AI味比较浓(非贬义),第一遍生成的字体较小做了一次调整。 评分页: 在扣子上直接部署后可能是api的原因,生成环境语音识别功能没有跑通,但是在测试环境实现了完整的功能。 整个过程大概用了两个小时,修复bug的过程比较顺畅,会进行自测基本功能问题提了都可以修复。但是涉及到接口调用,环境部署等导致的问题时,修复bug的技术要求就直线上升了,需要你能够发现比较具体的问题并准确描述,否则的话只是基于前端的报错,AI可能无法定位到准确问题,对无开发背景的人来说还是有难度。

January 28, 2026 · Xiangtao XIAO

bitwarden_rs+nginx反向代理配置记录

bitwarden是一个开源的密码管理器,可以部署在私有服务器上。官方的bitwarden对服务器配置要求较高,网友开发了bitwardenrs适用于小用户,对配置要求低不怎么占内存。本次采用安装docker后在docker上安装bitwardenrs和nginx,通过nginx反向代理实现HTTPS加密访问bitwarden的方法。 服务器配置:Tencent Hong Kong centOS 7.6 1C1G 25GSSD 30M峰值带宽 服务器上已经运行bitnami wordpress堆栈,因此80和443端口都被apache占用,挂了个人博客。网络上大部分blog都采用nginx做反向代理,由于不懂技术因此也用nginx照做。 安装Docker docker是一个虚拟机,他打包了多个不同主流应用,可以很方便的安装这些应用,并且每个应用都是以容器的形式存在,与宿主机的环境是隔离的,这些应用的配置与运行可以干净的删除不会对宿主机造成影响。 docker中有images 镜像和container 容器,比如我可以在宿主机下载一个nginx镜像,然后我制作两个容器:nginx_1 和 nginx_2,两个容器中都可以通过镜像安装nginx应用,两个nginx是分开的,可以各自用于不同用途,方便管理。 yum install -y docker #安装docker systemctl docker #启动docker 安装bitwarden_rs docker有几个需要事先理解的概念,比如 目录映射。我们可以让容器的目录去映射一个宿主机的目录,简单来讲就是用一个宿主机的目录当做容器应用的目录,这样要修改应用配置或者上传文件只要动宿主机的目录就可以。 我们在run 应用的时候添加以下形式的配置: -v /library:/library #':'前是要映射的宿主机目录,后面是容器应用的实际目录 端口映射:容器是一个虚拟环境,比如nginx监听的80和443端口,在我的宿主机中这两个端口被Apache占用了,因此我可以分配另外两个端口与容器的80端口和443端口进行映射。 这样一来避免了端口冲突,比如访问//domain:4444实际上就会通过容器的443端口被nginx监听到。需要注意的是通过这种方式要在防火墙打开4444端口,否则浏览器还是无法访问的。 -p 8088:80/tcp 4444:443/tcp #8088映射到80 4444映射到443 映射端口根据需要选择空闲端口即可 mkdir /data/bitwarden #建立宿主机映射目录 docker run -d \ --rm \ --name bitwarden \ -p 8085:80 \ -p 3012:3012 \ -e SIGNUPS_ALLOWED=true \ -e WEB_VAULT_ENABLED=true \ -e DOMAIN=//mydomain.cn \ -v /data/bitwarden:/data \ bitwardenrs/server:latest 上面命令的各个参数含义如下: -d 在后台运行 --rm 容器停止运行后,自动删除容器文件 --name bitwarden容器的名字为bitwarden -p 8085:80 容器的端口80映射到8085,在Nginx配置 -p 3012:3012 容器的端口3012映射到3012 -e SIGNUPS_ALLOWED=true 设置环境变量SIGNUPS_ALLOWED=true允许用户注册 -e WBE_VAULT_ENABLE=true 设置环境变量WBE_VAULT_ENABLE=true -e DOMAIN=//mydomain.cn设置域名,需要替换成自己申请的域名 -v /data/bitwarden:/data 容器的/data/目录映射到宿主机的/data/bitwarden目录 安装nginx mkdir /data/nginx #建立宿主机映射目录 # 安装nginx docker run \ --rm \ --name nginx \ -d \ -p 8088:80/tcp \ -p 2443:443/tcp \ nginx # 由于不知道nginx目录下的内容,我们将容器的目录复制到宿主机目录/data下 docker cp nginx:/etc/nginx /data # 创建用于存放ssl证书的文件夹,将申请到的.cert和.key证书文件上传到这个文件夹 mkdir /data/nginx/certs 修改/data/nginx/conf.d/default.conf文件添加以下内容,启用https访问并对bitwarden进行反向代理 ...

March 10, 2021 · Xiangtao XIAO

wordpress配置问题记录

Linux基本语法 复制 cp 要复制的文件路径 目标路径 cp -r 递归复制整个目录 删除 rm -f 强制删除 -r 递归删除目录 改名 mv 原文件 新文件名 更改文件权限 chmod 777(完全写入权限) 要更改的目录或文件 vim编辑器显示行号:输入指令:set number 跳转到制定行:输入指令:n(要跳转的行号) WP-Super-Cache问题解决 将插件wp-super-cache中的wp-cache-config.php与advanced-cache.php复制到wp-content目录下。 临时更改wp-content权限为777 在wp-config.php中增加以下内容:1.在require_once(ABSPATH.’wp-settings.php’);前增加define(‘WP_CACHE’, true); 2.增加define(‘WPCACHEHOME’, ‘插件wp-super-cache绝对路径’); 修改完成后应该可以进入设置界面,在专家模式下更新设置如果出现要求更新Mod_write规则则按要求进行更新。 对于采用bitnami的wordpress堆栈环境,由于其对文件访问权限的安全设置较严,安装时同样会弹出以上情况的警告。无需理会,连接到服务器执行以下指令:(事实上应当优先采用这种更改权限的做法,未生效再尝试上方操作) sudo chmod g+w /YOURADRESS/apps/wordpress/htdocs/wp-config.php 之后禁用插件并重新激活即可。完事以后要将文件权限复原,执行: sudo chmod g-w /YOURADRESS/apps/wordpress/htdocs/wp-config.php 更多内容,在bitnami.com官方文档的trouble shooting部分有详细介绍。

October 15, 2020 · Xiangtao XIAO

UEditor部署到个人站点

一、下载UEditor //ueditor.baidu.com/website/download.html 在以上链接下载,选择自己需要的语言版本,我用的是jsp,就下载jsp版本。将下载的压缩包解压,可以直接将解压的文件导入到Eclipse中自己的项目中,导入到文件夹WebContent中即可。 二、配置 将jsp/lib中的jar包全部复制到WEB-INF/lib下 修改输入字符数统计、上限,自定义工具栏可以参考官方说明文档,配置项可在ueditor.config.js中修改。 修改图片上传路径等在官方说明文档中有详细的介绍。 注:这里仅仅是在一个项目中使用UEditor,还用别的使用方法,也可以直接部署到tomcat中。 三、在页面中插入Ueditor编辑器 首先要引用文件 <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/thirdparts/utf8-jsp/themes/default/css/ueditor.change.css"> <script type="text/javascript" charset="utf-8" src="<%= request.getContextPath() %>/thirdparts/utf8-jsp/ueditor.config.js"></script> <script type="text/javascript" charset="utf-8" src="<%= request.getContextPath() %>/thirdparts/utf8-jsp/ueditor.all.min.js"> </script> <script type="text/javascript" charset="utf-8" src="<%= request.getContextPath() %>/thirdparts/utf8-jsp/lang/zh-cn/zh-cn.js"></script> 接着在需要插入编辑器的位置插入以下代码 <textarea id="content" name="content" style="width:100%;height:500px"></textarea> <script type="text/javascript" charset="utf-8"> UE.getEditor('content',{toolbars: [[ 'fullscreen', 'source', '|', 'undo', 'redo', '|','bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc']]}); </script> toolbars控制工具栏显示哪些工具 textarea是显示编辑器的容器,其id与UE.getEditor(‘id’,{})要一致。 不一定要是textarea,div等都可以,可以自己试一试,我没有深入研究,凑合着用了。

May 15, 2020 · Xiangtao XIAO

理解MVC模式

M:Model V:View C:Controller 在JSP开发中,JSP仅负责控制页面的显示内容,Javabean仅负责存储数据,在Javabean中,数据以设计好的格式存储着,这也是为什么他叫模型,JSP可以方便的从Javabean中取得数据进行显示,Servlet则负责从数据库中读取数据,向数据库存储数据,对数据进行逻辑处理,之后将数据存储在javabean中以供显示。 MVC与三层架构:界面、业务逻辑、数据库存取是不一样的。MVC要实现的目标是将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强。 看到有另一种说法: //blog.csdn.net/zuiyingong6567/article/details/80150834 同样是MVC,对于各层的理解有一些不同。尤其是对于数据库的连接,在PPT上看到的是C存取数据库,而网上一些资料显示是M存取数据库,而要求C尽量简单,仅仅负责在V与M间协调,大部分业务逻辑的处理,数据存取都放在Model中进行。

May 15, 2020 · Xiangtao XIAO