- 唠嗑 {#1--唠嗑}
随着国际形势的发展,英语的重要性越来越高,(比如开个美卡遇到问题和客服沟通都有问题)
听读能力我们普遍比较强,薄弱的往往是说写能力,而其中的"写"现在又可以用GPT来辅助了,所以这一期我们就来分享一个提高英语的"说"的能力的小工具------BabelDuck。
BabelDuck是一个面向各水平层次语言学习者的高度可定制化 AI 口语对话练习应用,并对初学者更友好,旨在将口语表达练习的门槛与心智负担降至最低。
- babelduck主要功能(~~抄~~ 来自官方GitHub) {#2--babelduck主要功能-抄来自官方GitHub-}
- 支持多对话管理、自定义系统提示词、流式响应等常见 AI 对话功能
- 可在不影响当前对话的前提下,向 AI 寻求语法、翻译或表达润色等建议,并提供可定制化的快捷指令
- 在对 AI 提供的建议有疑问时,可开启子对话进一步讨论,讨论结束后可无缝返回原对话
- 支持语音输入与语音输出,集成了浏览器内置文本转语音 以及 Azure TTS
- 集成多种 LLM AI 服务,支持自定义第三方 API 服务,可无缝切换(目前只支持OpenAI的API)
- 数据存储于本地,确保用户数据隐私安全
- 支持针对不同对话进行单独的偏好设置
- 提供多语言界面
- 内置使用教程
- 支持Docker部署,更新维护方便
? 未来规划 {#--未来规划}
- 对话模板
- 复述练习模式
- 移动端适配
- 语音回放
- 支持多模态语音
- 接入更多 LLM/TTS/STT 服务
- 实时语音模式
- 更多指令类型
- 插件系统
- 相关地址 {#3--相关地址}
官方GitHub地址:https://github.com/Orenoid/BabelDuck (全新项目,目前188个star,欢迎大家去给项目点星星!)
- 搭建环境 {#4--搭建环境}
- 服务器:咕咕这边用的莱卡云香港服务器,建议服务器内存1G以上,当然你也可以选择其他高性价比的服务器。
- 系统:Debian 11 (DD 脚本 非必需 DD,用原来的系统也 OK,之后教程都是用 Debian 或者 Ubuntu 搭建~)
- 安装好 Docker、Docker-compose(相关脚本)
- 【必需】域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程)
- 【非必需】提前安装好宝塔面板海外版本 aapanel,并安装好 Nginx(安装地址)
- 【非必需本教程选用】安装好 Nginx Proxy Manager(相关教程)
- 搭建视频(过俩天补充 = =) {#5--搭建视频-过俩天补充-----}
5.1 YouTube {#5-1-YouTube}
视频地址:
5.2 哔哩哔哩 {#5-2-哔哩哔哩}
哔哩哔哩:
- 搭建方式 {#6--搭建方式}
6.1 安装 Docker 与 Nginx Proxy Manager {#6-1-安装-Docker-与-Nginx-Proxy-Manager}
可以直接参考这篇内容:
https://blog.laoda.de/archives/nginxproxymanager/
6.2 创建安装目录 {#6-2-创建安装目录}
创建一下安装的目录:
sudo -i
mkdir -p /root/data/docker_data/babelduck
cd /root/data/docker_data/babelduck
接着我们来编辑下env
文件
vim .env
输入下面的内容:
# unforunately, the implementation of input handlers is coupled with openai at this time,
# so openai or openai-compatible services are necessary here (json mode required), once we decouple it from openai (working on it), we can remove this
OPENAI_CHAT_COMPLETION_URL=
OPENAI_API_KEY=
OPENAI_MODEL_NAME=
another unfortunate thing is that the stt feature is coupled with siliconflow for now,
so we need to provide the api url and api key as well, you can get the key from https://cloud.siliconflow.cn/account/ak
Also, once we decouple it from siliconflow (which has been on the roadmap), we can remove these two variables
STT_API_URL=https://api.siliconflow.cn/v1/audio/transcriptions SILICONFLOW_API_KEY=
这边可以选择填入相应的API和模型,也可以选择直接保存退出,这样的话,后续在网页端自己填写相关API密钥,适合分享给其他人用。
我们这边就不填,一会儿去网页端填写。
接着我们来编辑下docker-compose.yml
vim docker-compose.yml
services:
babel-duck:
image: orenoid/babel-duck:latest
container_name: babel-duck
env_file:
- .env
ports:
- "9001:9000"
restart: unless-stopped
其中的9001
可以改成服务器上没有用过的端口,修改完成之后,可以在英文输入法下,按 i
修改,完成之后,按一下 esc
,然后 :wq
保存退出。
6.3 查看端口是否被占用 {#6-3-查看端口是否被占用}
查看端口是否被占用(以 9001
为例),输入:
lsof -i:9001 #查看 9001 端口是否被占用,如果被占用,重新自定义一个端口
如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~
如果出现:
-bash: lsof: command not found
运行:
apt install lsof #安装 lsof
如果端口没有被占用(被占用了就修改一下端口,比如改成 8381
,注意 docker 命令行里和防火墙都要改)
6.4 启动 babelduck {#6-4-启动-babelduck}
cd /root/data/docker_data/babelduck
`docker compose up -d # 注意,老版本用户用 docker-compose up -d
`
耐心等待拉取好镜像,出现 done
的字样之后,
理论上我们就可以输入 http://ip:9001
访问了。
但是这边这个服务必须先搞一下反向代理!不然会报错!
做反向代理前,你需要一个域名!
namesilo 上面 xyz 后缀的域名一年就 7 块钱,可以年抛。(冷知识,namesilo上 6位数字的xyz续费永远都是0.99美元 = =)
如果想要长期使用,还是建议买 com 后缀的域名,更加正规一些,可以输入 laodade
来获得 1 美元的优惠(不知道现在还有没有)
namesilo 自带隐私保护,咕咕一直在用这家,价格也是这些注册商里面比较低的,关键是他家不像其他家域名注册商,没有七七八八的套路!(就是后台界面有些~~丑~~ 古老 = =)
【域名购买】Namesilo 优惠码和域名解析教程(附带服务器购买推荐和注意事项)
我们接着往下看!
- 反向代理 {#7--反向代理}
7.1 利用 Nginx Proxy Manager {#7-1-利用-Nginx-Proxy-Manager}
在添加反向代理之前,确保你已经完成了域名解析,不会的可以看这个:域名一枚,并做好解析到服务器上 (域名购买、域名解析 视频教程) (名称改成你自己想要的域名前缀即可)
之后,登陆 Nginx Proxy Manager(不会的看这个:安装 Nginx Proxy Manager (相关教程))
注意:
Nginx Proxy Manager(以下简称 NPM)会用到
80
、443
端口,所以本机不能占用(比如原来就有 Nginx)
直接丢几张图:
注意填写对应的 域名
、IP
和 端口
,按文章来的话,应该是 9001
IP 填写:
如果 Nginx Proxy Manager 和 babelduck 在同一台服务器上,可以在终端输入:
ip addr show docker0
查看对应的 Docker 容器内部 IP。
否则直接填 babelduck 所在的服务器 IP 就行。
7.2 利用宝塔面板 {#7-2-利用宝塔面板}
发现还是有不少小伙伴习惯用宝塔面板,这边也贴一个宝塔面板的反代配置:
直接新建一个站点,不要数据库,不要 php,纯静态即可。
然后打开下面的配置,修改 Nginx 的配置。
代码如下:
location / {
proxy_pass http://127.0.0.1:9001/; # 注意改成你实际使用的端口
rewrite ^/(.*)$ /$1 break;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade-Insecure-Requests 1;
proxy_set_header X-Forwarded-Proto https;
}
此方法对 90% 的反向代理都能生效,然后就可以用域名来安装访问了。
有同学可能会问,为什么不直接用宝塔自带的反向代理功能。
也可以,不过咕咕自己之前遇到过当有多个网站需要反代的时候,在这边设置会报错的情况 = =
所以后来就不用了,直接用上面的方法来操作了。
- 使用教程 {#8--使用教程}
8.1 登陆使用 {#8-1-登陆使用}
见视频或者自己摸索下 = =
这边logo裂开了......
设置页面:
语音可以用浏览器内置TTS:
模型这边,可以填入自己的OpenAI API Key:
赶紧试试吧!
8.2 更新 babelduck {#8-2-更新-babelduck}
这个项目后续应该也会有更新,所以提供一个更新的方式。
cd /root/data/docker_data/babelduck
docker compose pull
docker compose up -d # 请不要使用 docker compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
提示:
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
输入 y
利用 Docker 搭建的应用,更新非常容易~
8.3 卸载 babelduck {#8-3-卸载-babelduck}
同样进入安装页面,先停止所有容器。
cd /root/data/docker_data/babelduck
docker compose down
cd ..
rm -rf /root/data/docker_data/babelduck # 完全删除
可以卸载得很干净。
- 常见问题及注意点 {#9--常见问题及注意点}
logo的图片无法显示,暂时不知道啥情况
- 结尾 {#10--结尾}
祝大家用得开心,有问题可以去 GitHub 提 Issues,也可以在评论区互相交流探讨。
同时,有能力给项目做贡献的同学,也欢迎积极加入到 项目 中来,贡献自己的一份力量!
最后,感谢开发人员们的辛苦付出,让我们能用到这么优秀的项目!
参考资料 {#参考资料}
官方GitHub:https://github.com/Orenoid/BabelDuck