Docs: Add enjoy docs (#370)
* init vitepress in enjoy-docs * update config * update docs * upgrade deps * update settings * add more docs * more docs * update commands * site config * add ga * tweak
2
.github/workflows/build-enjoy-app.yml
vendored
@@ -49,7 +49,7 @@ jobs:
|
||||
APPLE_ID: ${{ runner.os == 'macOS' && secrets.APPLE_ID || '' }}
|
||||
APPLE_APP_PASSWORD: ${{ runner.os == 'macOS' && secrets.APPLE_APP_PASSWORD || '' }}
|
||||
APPLE_TEAM_ID: ${{ runner.os == 'macOS' && secrets.APPLE_TEAM_ID || '' }}
|
||||
run: yarn run make:enjoy
|
||||
run: yarn run enjoy:make
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
|
||||
46
.github/workflows/deploy-enjoy-docs.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: Deploy Enjoy Docs website
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "enjoy-docs/**"
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "enjoy-docs/**"
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
name: Deploy
|
||||
steps:
|
||||
# checkout the code
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: "**/node_modules"
|
||||
key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }}
|
||||
|
||||
- name: Setup node env
|
||||
uses: actions/setup-node@master
|
||||
with:
|
||||
node-version: "20"
|
||||
|
||||
- name: Install Independents
|
||||
run: yarn install
|
||||
|
||||
- name: Build
|
||||
run: yarn docs:build
|
||||
|
||||
- name: Deploy
|
||||
uses: cloudflare/wrangler-action@v3
|
||||
with:
|
||||
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
|
||||
command: pages deploy .vitepress/dist --project-name=enjoy-docs
|
||||
workingDirectory: "enjoy-docs"
|
||||
|
||||
2
.github/workflows/release-enjoy-app.yml
vendored
@@ -30,7 +30,7 @@ jobs:
|
||||
APPLE_ID: ${{ runner.os == 'macOS' && secrets.APPLE_ID || '' }}
|
||||
APPLE_APP_PASSWORD: ${{ runner.os == 'macOS' && secrets.APPLE_APP_PASSWORD || '' }}
|
||||
APPLE_TEAM_ID: ${{ runner.os == 'macOS' && secrets.APPLE_TEAM_ID || '' }}
|
||||
run: yarn publish:enjoy
|
||||
run: yarn enjoy:publish
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
|
||||
2
.github/workflows/test-enjoy-app.yml
vendored
@@ -46,7 +46,7 @@ jobs:
|
||||
|
||||
- name: Run tests on macOS or Windows
|
||||
if: contains(matrix.os, 'macos') || contains(matrix.os, 'windows')
|
||||
run: yarn test:enjoy
|
||||
run: yarn enjoy:test
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
|
||||
139
enjoy-docs/.gitignore
vendored
Normal file
@@ -0,0 +1,139 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
lerna-debug.log*
|
||||
.pnpm-debug.log*
|
||||
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
.DS_Store
|
||||
./public/jupyter-notebooks/*.mp3
|
||||
|
||||
.vitepress/cache/
|
||||
|
||||
.jupyter
|
||||
.ipynb_checkpoints
|
||||
|
||||
93
enjoy-docs/.vitepress/config.mts
Normal file
@@ -0,0 +1,93 @@
|
||||
import { defineConfig } from "vitepress";
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
lang: "zh-CN", // 'en-US
|
||||
title: "Enjoy App",
|
||||
description: "Enjoy 用户手册",
|
||||
head: [
|
||||
[
|
||||
"script",
|
||||
{ async: "", src: "https://www.googletagmanager.com/gtag/js?id=G-RY5XCM04NL" },
|
||||
],
|
||||
[
|
||||
"script",
|
||||
{},
|
||||
`window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-RY5XCM04NL');`,
|
||||
],
|
||||
["link", { rel: "icon", href: "/favicon.ico" }],
|
||||
],
|
||||
themeConfig: {
|
||||
// https://vitepress.dev/reference/default-theme-config
|
||||
logo: "/logo.png",
|
||||
nav: [{ text: "用户手册", link: "/markdown-examples" }],
|
||||
|
||||
sidebar: [
|
||||
{
|
||||
text: "快速开始",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "简介", link: "/guide/intro" },
|
||||
{ text: "下载安装", link: "/guide/install" },
|
||||
{ text: "软件设置", link: "/guide/settings" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "跟读训练",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "音频资源", link: "/guide/audios" },
|
||||
{ text: "视频资源", link: "/guide/videos" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "阅读文本",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "在线文章", link: "/guide/webpage" },
|
||||
{ text: "本地电子书", link: "/guide/ebook" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "智能助手",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{ text: "简介", link: "/guide/ai-assistant" },
|
||||
{ text: "GPT 服务", link: "/guide/gpt-conversation" },
|
||||
{ text: "TTS 服务", link: "/guide/tts-conversation" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "使用案例",
|
||||
collapsed: false,
|
||||
items: [
|
||||
{
|
||||
text: "利用 AI 生成训练材料",
|
||||
link: "/guide/use-case-generate-audio-resources",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
socialLinks: [
|
||||
{
|
||||
icon: "github",
|
||||
link: "https://github.com/xiaolai/everyone-can-use-english/tree/main/enjoy-docs",
|
||||
},
|
||||
],
|
||||
|
||||
editLink: {
|
||||
pattern:
|
||||
"https://github.com/xiaolai/everyone-can-use-english/edit/main/enjoy-docs/:path",
|
||||
text: "在 GitHub 上编辑此页面",
|
||||
},
|
||||
|
||||
search: {
|
||||
provider: "local",
|
||||
},
|
||||
},
|
||||
lastUpdated: true,
|
||||
});
|
||||
19
enjoy-docs/guide/ai-assistant.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# 简介
|
||||
|
||||
所有智能助手均以 **对话** 的形式呈现,添加一个对话即添加一个智能助手。
|
||||
|
||||
左侧栏点击 `智能助手` 即可进入。
|
||||
|
||||
## 添加对话
|
||||
|
||||
点击 `新对话` 按钮,弹窗出现预设的 AI 角色,可以快速创建有用的智能助手,也可以选择自定义。
|
||||
|
||||
创建对话前,需要先填写相关的配置,最重要的几项是:
|
||||
|
||||
- AI 类型,分为 [GPT](./gpt-conversation.md) 和 [TTS](./tts-conversation.md) 两种;
|
||||
- AI 引擎,每次新建都将加载 [默认 AI 引擎](./settings.md#默认-ai-引擎),创建时可以修改,创建后无法修改;
|
||||
- 角色定义,[GPT](./tts-conversation.md) 类型时可以定义,即将 AI 赋予一个特定的角色以得到想要的回答;
|
||||
|
||||
## 修改对话
|
||||
|
||||
在对话页面,右上角齿轮可以打开对话的配置,进行修改,或者删除。需要注意的是,AI 类型和 AI 引擎无法修改,需要变更时请新建一个对话。
|
||||
58
enjoy-docs/guide/audios.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# 音频资源
|
||||
|
||||
利用音视频资源进行跟读训练是 Enjoy 的核心功能之一。
|
||||
|
||||
## 添加音频资源
|
||||
|
||||
Enjoy 支持添加本地的音频资源,和在线资源。在音频页面,点击 `添加资源`,在弹窗中输入网址,或者点击 `本地文件` 选择本地计算机的音频文件即可添加。
|
||||
|
||||
如果是在线资源,Enjoy 会将文件下载至默认的下载文件夹(`Downdoads` 或者 `我的下载`),然后再自动添加至 [资源库](./settings#资源库保存路径)。
|
||||
|
||||
## 跟读音频
|
||||
|
||||
添加成功后,会自动跳转至音频播放页面。
|
||||
|
||||
打开时,需要先解析音频波形数据(并生成 Pitch contour)和生成音频字幕(使用 [语音转文本服务](./settings#语音转文本服务))。首次打开时,可能需要等待一些时间。所需数据生成成功之后,后续再次打开时的速度会比较快。
|
||||
|
||||
::: tip 卡在加载页面怎么办?
|
||||
打开音频页面时,会先按照以下步骤进行加载:
|
||||
|
||||
1. 解析音频波形数据
|
||||
2. 语音转文本
|
||||
|
||||
如果长时间卡在第一步,可能是因为音频太大(主要跟音频时长有关)导致加载时间过长,甚至失败。如果不是音频大小的原因,可能是出现了其他 bug,请联系开发者。
|
||||
|
||||
如果第二步语音转文本失败,请检查是否在正在使用本地 whisper 组件进行语音转文本,在某些电脑上可能因为兼容性和未知问题导致无法使用。如果出现这种情况,请在 [语音转文本服务设置](./settings#语音转文本服务) 中改用其他语音转文本的云服务。
|
||||
:::
|
||||
|
||||
## 录音
|
||||
|
||||
Enjoy 会将音频按照句子切分,用户以句子为单位进行跟读练习。在激活的音频句子下,点击下方的录音按钮,即可开始录音,用户可以模仿音频朗读当前句子作为练习。
|
||||
|
||||

|
||||
_\* 音频播放页面_
|
||||
|
||||
::: tip 录音权限
|
||||
在 Mac 电脑上,首次使用录音功能时,会弹窗请求麦克风的使用权限,请务必点允许,否则无法使用录音功能。
|
||||
:::
|
||||
|
||||
## 发音评估
|
||||
|
||||
Enjoy 集成了微软 Azure 的发音评估功能,作为自我的发音检查参考。点击录音右下方的仪表盘图标,即可打开发音评估弹窗。
|
||||
|
||||
该功能会以**录音时的句子文本作为参考**,评估录音的发音情况,各指标的详细说明可以参考微软的 [官方文档](https://learn.microsoft.com/en-us/azure/ai-services/speech-service/how-to-pronunciation-assessment?pivots=programming-language-javascript#scripted-assessment-results)。
|
||||
|
||||

|
||||
_\* 发音评估示例_
|
||||
|
||||
::: warning 发音评估的使用建议
|
||||
该功能是收费功能,每次使用均会在 Enjoy 账户的余额扣费,如果余额不足则需要 [充值](./settings#充值) 后才可继续使用。
|
||||
|
||||
根据实测,该功能对提高学习者的发音作用水平有限,其评估结果仅做参考,不应该过度依赖。
|
||||
|
||||
另外,我们正在开发一套更有效的发音评估体系,敬请期待。
|
||||
:::
|
||||
|
||||
## 修改音频信息
|
||||
|
||||
在音频页面上方,切换至列表模式,即可以对音频进行修改操作,例如修改音频标题,添加描述,和删除音频等。
|
||||
3
enjoy-docs/guide/ebook.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 本地电子书
|
||||
|
||||
待开发,敬请期待。
|
||||
7
enjoy-docs/guide/gpt-conversation.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# GPT 服务
|
||||
|
||||
当 AI 类型选择 `GPT` 时,AI 将会根据 `角色定义` 来回答你提出的所有问题。
|
||||
|
||||
例如定义一个 `英语教练` 的角色,可以将你发的所有文字翻译成地道的英文表达,再配合 [TTS](./tts-conversation.md) 将其转化成语音,即可作为跟读的材料。
|
||||
|
||||
详情可以参照使用案例:[利用 AI 生成训练材料](./use-case-generate-audio-resources.md)
|
||||
43
enjoy-docs/guide/install.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# 下载安装
|
||||
|
||||
Enjoy App 是一个跨平台的桌面应用,可以在 Windows、Mac 和 Linux 等电脑设备上运行。
|
||||
|
||||
请根据电脑设备的操作系统,下载相应的版本安装使用。
|
||||
|
||||
## Windows
|
||||
|
||||
支持 Windows 10 以上版本。
|
||||
|
||||
[点击下载](https://github.com/xiaolai/everyone-can-use-english/releases/download/v0.1.0-alpha.12/Enjoy-0.1.0-alpha.12-Setup.exe)
|
||||
|
||||
下载后,双击即可安装。
|
||||
|
||||
## Mac
|
||||
|
||||
根据使用 Mac 电脑的芯片不同,需要下载不同的版本。
|
||||
|
||||
- [Silicon 芯片版本(arm64)](https://github.com/xiaolai/everyone-can-use-english/releases/download/v0.1.0-alpha.12/Enjoy-darwin-arm64-0.1.0-alpha.12.zip)
|
||||
- [Intel 芯片版本(x64)](https://github.com/xiaolai/everyone-can-use-english/releases/download/v0.1.0-alpha.12/Enjoy-darwin-x64-0.1.0-alpha.12.zip)
|
||||
|
||||
::: info 如何查看本机配置
|
||||
M1 以后的 Mac 电脑型号(M1、M2、M3),均为 Silicon 芯片。
|
||||
|
||||
如果你不清楚自己电脑的具体型号,可以点击屏幕左上方的 符号,在弹出来的菜单中,选择第一个选项 “关于本机(About This Mac)”,在弹出的窗口中,即可看到本机的硬件和系统配置。
|
||||
|
||||
如果显示的是 _Apple M 系列_,即为 Silicon 芯片。
|
||||
:::
|
||||
|
||||
::: warning 警告
|
||||
推荐使用 macOS 12 及以上版本,macOS 11 可能无法使用部分功能。
|
||||
:::
|
||||
|
||||
## Linux
|
||||
|
||||
请根据不同发行版本选用安装文件。
|
||||
|
||||
- [下载 deb 版本](https://github.com/xiaolai/everyone-can-use-english/releases/download/v0.1.0-alpha.12/enjoy_0.1.0-alpha.12_amd64.deb)
|
||||
- [下载 rpm 版本](https://github.com/xiaolai/everyone-can-use-english/releases/download/v0.1.0-alpha.12/enjoy-0.1.0.alpha.12-1.x86_64.rpm)
|
||||
|
||||
## 历史版本
|
||||
|
||||
所有历史版本均可在 [这里](https://github.com/xiaolai/everyone-can-use-english/releases) 找到。
|
||||
7
enjoy-docs/guide/intro.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# 简介
|
||||
|
||||
AI 是当今世界上最好的外语老师,Enjoy 做 **AI 最好的助教**。
|
||||
|
||||
::: warning 重要提示
|
||||
Enjoy App 的开发仍处于早期的快速迭代阶段,文档可能落后于开发,导致功能描述可能不符,以最新发布的软件版本为准。
|
||||
:::
|
||||
161
enjoy-docs/guide/settings.md
Normal file
@@ -0,0 +1,161 @@
|
||||
# 软件设置
|
||||
|
||||
Enjoy 只需要登录后即可直接使用,**无需其他设置**。但是,你仍然可以根据需要做个性化的设置。
|
||||
|
||||
打开 Enjoy 软件,点击左侧栏最下面的齿轮按钮,即可打开 `软件设置`。
|
||||
|
||||
## 资源库保存路径
|
||||
|
||||
::: info 设置路径
|
||||
软件设置 -> 基本设置 -> 资源库保存路径
|
||||
:::
|
||||
|
||||
Enjoy 采用 **本地优先** 的设计原则,大部分数据均保存在本地,即 **资源库保存路径** 下。
|
||||
所谓资源库是一个名为 `EnjoyLibrary` 的文件夹,默认放置在 `My Documents` (即 `我的文档`)下。
|
||||
|
||||
随着 Enjoy 的使用时间增长,资源库文件夹里可能会产生比较大的缓存文件,导致占用空间较大。根据具体需要,你也可以修改资源库的路径,例如从 _C 盘_ 改到空间更大的 _D 盘_。
|
||||
|
||||
如果已经产生了数据,修改时,可以先把原来的 `EnjoyLibrary` 文件夹复制到目标路径下,再在 Enjoy 软件中点`修改`按钮,选中目标路径,然后重启软件,即可完成修改。
|
||||
|
||||
::: tip 资源库里都有什么
|
||||
打开 `EnjoyLibrary` 文件夹,你能看到类似以下的目录结构
|
||||
|
||||
```
|
||||
.
|
||||
├── 2400xxxx
|
||||
│ ├── audios
|
||||
│ │ ├── 0687ae31c4178bbf0466503e56d887f8.mp3
|
||||
│ │ └── ...
|
||||
│ ├── enjoy_database.sqlite
|
||||
│ ├── recordings
|
||||
│ │ ├── 025542894635903d5ea6f2395cb404c0.wav
|
||||
│ │ └── ...
|
||||
│ ├── speeches
|
||||
│ │ ├── 0687ae31c4178bbf0466503e56d887f8.mp3
|
||||
│ │ └── ...
|
||||
│ └── videos
|
||||
│ ├── 23876d46305bae2e049c691872dd3cde.mkv
|
||||
│ └── ...
|
||||
├── cache
|
||||
│ ├── 0687ae31c4178bbf0466503e56d887f8.json
|
||||
│ └── ...
|
||||
├── logs
|
||||
│ ├── main.log
|
||||
│ └── main.old.log
|
||||
├── waveforms
|
||||
│ ├── 0687ae31c4178bbf0466503e56d887f8.waveform.json
|
||||
│ └── ...
|
||||
└── whisper
|
||||
│ ├── models
|
||||
│ │ ├── tiny.en.bin
|
||||
│ │ └── ...
|
||||
```
|
||||
|
||||
- `/2400xxxx/`: 登录的 Enjoy 帐号 ID,该文件夹下的数据均是你使用产生的个人数据
|
||||
- `/2400xxxx/audios/`: 添加的音频文件
|
||||
- `/2400xxxx/speeches/`: TTS 生成的语音文件
|
||||
- `/2400xxxx/videos/`: 添加的视频文件
|
||||
- `/2400xxxx/recordings/`: 录音文件
|
||||
- `/2400xxxx/enjoy_database.sqlite`: 个人数据库文件
|
||||
- `/cache/`: 使用过程中产生的缓存文件,如果占用空间过大,可以安全地删除
|
||||
- `/logs/`: 保存软件运行的日志,用于帮助开发人员排除故障
|
||||
- `/waveforms/`: 音视频解码后的波形数据缓存
|
||||
- `/whisper/models`: 语音转文字服务软件 whisper 的模型文件
|
||||
|
||||
:::
|
||||
|
||||
::: danger 个人数据安全
|
||||
`EnjoyLibrary/2400xxxx/` 文件夹下保存的均为使用 Enjoy 过程中产生的个人数据,请务必**不要删改**该文件夹下的任何文件,否则可能会导致数据丢失,或者使得 Enjoy 软件无法正常运行。
|
||||
|
||||
如前文所说,Enjoy 采用本地优先的设计原则,绝大部分数据并没有上传云服务器,请妥善保管好自己的个人数据。
|
||||
:::
|
||||
|
||||
## OpenAI 配置
|
||||
|
||||
::: info 设置路径
|
||||
软件设置 -> 基本设置 -> OpenAi
|
||||
:::
|
||||
|
||||
配置 OpenAI API 密钥,可以在 [官网](https://platform.openai.com/api-keys) 申请。配置好的 OpenAI 服务可以在 [智能助手](./ai-assistant.md)、 [提取关键词汇](./webpage#提取关键词汇)、 [查单词](./webpage#查单词)、标注音标 等服务中使用。
|
||||
|
||||
- 密钥:OpenAI API 密钥
|
||||
- 模型:默认使用的模型
|
||||
- 接口地址:如果使用的是官方申请的密钥,则不需要填;否则请根据密钥提供方的信息填写。
|
||||
|
||||
::: warning 接口地址
|
||||
由于 OpenAI 在某些地区不提供服务,有些用户会使用第三方提供的中转服务。请务必根据服务提供方的信息填写好 **接口地址**。如果使用时出现报错,可能需要在接口地址结尾加上 `/v1`。
|
||||
:::
|
||||
|
||||
## Google Generative AI 配置
|
||||
|
||||
::: info 设置路径
|
||||
软件设置 -> 基本设置 -> Google Generative AI
|
||||
:::
|
||||
|
||||
配置 Google Generative AI 的密钥,可以在 [官网](https://ai.google.dev/) 申请 。配置后可以在 [智能助手](./ai-assistant.md) 中选用 Google Generative AI 作为 AI 引擎。
|
||||
|
||||
## 语音转文本服务
|
||||
|
||||
::: info 设置路径
|
||||
软件设置 -> 基本设置 -> 语音转文本服务
|
||||
:::
|
||||
|
||||
语音转文本(即 STT,Speech to Text)服务是 Enjoy 提供的核心功能之一,也是 [跟读训练](./audios.md#跟读音频) 的前提条件。
|
||||
|
||||
### 本地(whisper)
|
||||
|
||||
该设置默认项为 `本地`,即利用 Enjoy 集成的 whisper 组件,完全利用本地计算机的算力提供 STT 服务,该服务完全免费。
|
||||
|
||||
Enjoy 软件集成了最小的 whisper 模型 `tiny.en`,如果电脑配置较高,可以选用更大的模型以提高语音转文本的准确度。点击 `模型` 按钮,在弹窗中选择相应的模型即可自动下载并选中。
|
||||
|
||||
::: tip 关于 whisper 模型的选择
|
||||
下载的 whisper 模型会保存在 `/EnjoyLibrary/whisper/models/` 文件夹下。如果自动下载失败,也可以到 [这里](https://huggingface.co/ggerganov/whisper.cpp) 手动下载,放置在该文件夹下,在 Enjoy 中即可以选中。
|
||||
|
||||
理论上,模型越大,识别的准确度也更高,但是运行得越慢,甚至在一些配置不高的电脑中无法运行。
|
||||
|
||||
凡是以 `.en` 结尾的模型均只支持英文,识别英文准确性也更高,例如 `base.en`;而不以 `.en` 结尾的模型则可以支持多种语言,例如 `base`。
|
||||
:::
|
||||
|
||||
::: warning 检查本地 whisper 服务
|
||||
有些电脑或者系统(例如 macOS 11)可能会因为兼容性问题(或其他未知问题)无法使用本地的 whisper 服务。点击 `检查` 按钮即可检查 whisper 服务在本地计算机是否工作正常。如果提示无法正常工作,可以选用其他服务。
|
||||
:::
|
||||
|
||||
### Azure AI STT
|
||||
|
||||
利用微软 Azure AI 的语音识别 API 服务提供的 STT,该服务为**收费服务**,每次使用均会在 Enjoy 账户余额中扣费,,余额不足则需要 [充值](#充值) 后才可继续使用。
|
||||
|
||||
### Cloudflare AI STT
|
||||
|
||||
利用 Cloudflare 提供的 whisper 云服务,该服务目前免费。经实测,对于一些时长较短的音频,识别会有较大误差。
|
||||
|
||||
### OpenAI STT
|
||||
|
||||
利用 OpenAI 提供的 whipser 云服务,该服务需要[配置自己的 OpenAI 密钥](#openai-配置)。
|
||||
|
||||
## 默认 AI 引擎
|
||||
|
||||
::: info 设置路径
|
||||
软件设置 -> 基本设置 -> 默认 AI 引擎
|
||||
:::
|
||||
|
||||
Enjoy 中提供了很多方便的功能,例如 [提取关键词汇](./webpage#提取关键词汇)、 [查单词](./webpage#查单词)、标注音标 等,均是利用 AI 服务来实现。
|
||||
|
||||
如果你有自己的 [OpenAI 密钥](#openai-配置),建议将 **默认 AI 引擎** 选为 `OpenAI`。
|
||||
|
||||
否则,可以选 `Enjoy AI`,由 Enjoy 提供该服务,每次使用均会在账户余额中扣费,余额不足则需要 [充值](#充值) 后才可继续使用。
|
||||
|
||||
## 充值
|
||||
|
||||
::: info 设置路径
|
||||
软件设置 -> 账户设置 -> 余额
|
||||
:::
|
||||
|
||||
Enjoy 提供了部分收费的 AI 服务,均为 **按使用量收费**,每次使用会在余额中扣除相应的费用,直到余额不足,则停止提供该服务。
|
||||
|
||||
如果需要继续使用,请点击 `充值` 按钮进行充值。
|
||||
|
||||
::: danger 充值前须知
|
||||
需要特别注意的是,充值成功后将在 Enjoy 账户的余额体现,所有余额仅可作为支付 Enjoy 收费服务使用,**不支持退款**,**不支持提现**。
|
||||
|
||||
请谨慎考虑,按需充值。
|
||||
:::
|
||||
5
enjoy-docs/guide/tts-conversation.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# TTS 服务
|
||||
|
||||
当 AI 类型选择 `TTS` 时,该对话将提供文本转语音(Text to Speech)服务,即 AI 会将你发出的任意文本转化成语音(音频文件)。生成的语音,可以直接添加至资源库进行跟读练习。
|
||||
|
||||
在设置里可以修改语音的角色。
|
||||
45
enjoy-docs/guide/use-case-generate-audio-resources.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# 利用 AI 生成训练材料
|
||||
|
||||
用外语说我们自己想说的话是学习外语的其中一个重要目的。市面上的口语书实际上并不实用,因为那些话大都不是我们想要说的,我们需要创建专属自己的口语书。使用 Enjoy 可以很容易做到这一点。
|
||||
|
||||
## 确保 AI 服务正常
|
||||
|
||||
在开始之前,先要确保 AI 服务可以正常使用,要么配置好自己的 [OpenAI 密钥](./settings#openai-配置),要么使用 Enjoy 提供的 AI 服务并确保账户 [余额](./settings#充值) 充足。
|
||||
|
||||
## 创建英语教练
|
||||
|
||||
点击 Enjoy 左侧栏的 `智能助手` 进入页面,点击 `新对话` 开始创建。
|
||||
|
||||
角色定义选择预设的 `英语教练`。
|
||||
|
||||

|
||||
_\* 选择 AI 角色_
|
||||
|
||||
具体配置里,根据具体情况,修改 AI 引擎 为 OpenAI 或者 Enjoy AI。如果使用 [OpenAI](./settings#openai-配置),可能还需要检查配置 `接口地址`。
|
||||
|
||||
将配置拉到最下面,`TTS 引擎` 也需要做相应配置。
|
||||
|
||||

|
||||
_\* 对话设置_
|
||||
|
||||
配置完成后,点击下面的 `确认` 按钮,即可创建成功。
|
||||
|
||||
## 发送任意文字
|
||||
|
||||
智能助手的使用跟聊天窗口类似,将你想要说的话发给 `英语教练`,作为回复,AI 会将你的文字翻译成地道的纽约腔英语。
|
||||
|
||||
## 生成语音
|
||||
|
||||
如果你对 AI 的回复感到满意,点击信息下方的朗读图标,将其转化为语音。
|
||||
|
||||

|
||||
_\* 英语教练对话_
|
||||
|
||||
## 跟读训练
|
||||
|
||||
继而点击麦克风图标,将该语音加入资源库,进行跟读训练。
|
||||
|
||||

|
||||
_\* 添加跟读训练_
|
||||
|
||||
随后也可以在 [音频页面](./audios.md) 找到该材料,继续练习。
|
||||
20
enjoy-docs/guide/videos.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# 视频资源
|
||||
|
||||
视频资源的使用与 [音频资源](./audios.md) 基本一致。
|
||||
|
||||

|
||||
_\* 视频播放页面_
|
||||
|
||||
## 录音
|
||||
|
||||
在视频播放页面,需要录音时,可以点播放控制栏上的录音图标,视频将会被缩小至小窗,主界面上会显示录音按钮。
|
||||
|
||||
## 视频大小的限制
|
||||
|
||||
过大的视频文件会导致加载卡死而无法使用,目前 Enjoy 将添加视频的大小限制在 100 Mb,超过则会提示添加失败。
|
||||
|
||||
后续会针对大文件做相应优化,以支持更大的文件。
|
||||
|
||||
## Youtube 视频
|
||||
|
||||
Enjoy 支持添加 Youtube 视频,添加资源时直接输入 Youtobe 网址即可。当然前提是当前网络条件支持访问 Youtube。
|
||||
19
enjoy-docs/guide/webpage.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# 在线文章
|
||||
|
||||
点击左侧栏的 `文章` 进入。
|
||||
|
||||
输入文章的网址,即可开始阅读。
|
||||
|
||||

|
||||
_\* 文章阅读页面_
|
||||
|
||||
## 提取关键词汇
|
||||
|
||||
打开文章后,Enjoy 将会智能提取该文章的关键词汇,并在文中标注。该功能需要 AI 引擎的支持,在 [默认 AI 引擎](./settings.md#默认-ai-引擎) 可以设置。
|
||||
|
||||

|
||||
_\* 智能提取关键词汇_
|
||||
|
||||
## 查单词
|
||||
|
||||
在正文中选中任意单词或者短语,即可激活查单词服务,同样需要 [AI 引擎](./settings.md#默认-ai-引擎) 的支持。
|
||||
12
enjoy-docs/index.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "Enjoy App"
|
||||
tagline: AI 是最好的老师,我们做 AI 最好的助教
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 快速开始
|
||||
link: /guide/intro
|
||||
---
|
||||
11
enjoy-docs/package.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "enjoy-docs",
|
||||
"scripts": {
|
||||
"dev": "vitepress dev",
|
||||
"build": "vitepress build",
|
||||
"preview": "vitepress preview"
|
||||
},
|
||||
"devDependencies": {
|
||||
"vitepress": "^1.0.0-rc.44"
|
||||
}
|
||||
}
|
||||
BIN
enjoy-docs/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
enjoy-docs/public/logo.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
enjoy-docs/public/snapshots/audio-page.png
Normal file
|
After Width: | Height: | Size: 425 KiB |
BIN
enjoy-docs/public/snapshots/conversation-add-speech-to-audio.png
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
enjoy-docs/public/snapshots/conversation-form.png
Normal file
|
After Width: | Height: | Size: 182 KiB |
BIN
enjoy-docs/public/snapshots/english-coach-gpt-conversation.png
Normal file
|
After Width: | Height: | Size: 197 KiB |
BIN
enjoy-docs/public/snapshots/logo.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
enjoy-docs/public/snapshots/pronouce-assessment.png
Normal file
|
After Width: | Height: | Size: 202 KiB |
BIN
enjoy-docs/public/snapshots/select-ai-role.png
Normal file
|
After Width: | Height: | Size: 149 KiB |
BIN
enjoy-docs/public/snapshots/story-key-vocabulary.png
Normal file
|
After Width: | Height: | Size: 240 KiB |
BIN
enjoy-docs/public/snapshots/story-page.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
enjoy-docs/public/snapshots/video-page.png
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
@@ -49,8 +49,8 @@
|
||||
"@types/intl-tel-input": "^18.1.4",
|
||||
"@types/lodash": "^4.14.202",
|
||||
"@types/mark.js": "^8.11.12",
|
||||
"@types/node": "^20.11.21",
|
||||
"@types/react": "^18.2.60",
|
||||
"@types/node": "^20.11.24",
|
||||
"@types/react": "^18.2.61",
|
||||
"@types/react-dom": "^18.2.19",
|
||||
"@types/validator": "^13.11.9",
|
||||
"@types/wavesurfer.js": "^6.0.12",
|
||||
@@ -107,7 +107,7 @@
|
||||
"@radix-ui/react-toggle": "^1.0.3",
|
||||
"@radix-ui/react-tooltip": "^1.0.7",
|
||||
"@uidotdev/usehooks": "^2.4.1",
|
||||
"@vidstack/react": "^1.10.9",
|
||||
"@vidstack/react": "^0.6.14",
|
||||
"autosize": "^6.0.1",
|
||||
"axios": "^1.6.7",
|
||||
"camelcase": "^8.0.0",
|
||||
@@ -131,11 +131,11 @@
|
||||
"html-to-text": "^9.0.5",
|
||||
"https-proxy-agent": "^7.0.4",
|
||||
"i18next": "^23.10.0",
|
||||
"intl-tel-input": "^19.5.3",
|
||||
"intl-tel-input": "^19.5.4",
|
||||
"js-md5": "^0.8.3",
|
||||
"langchain": "^0.1.21",
|
||||
"lodash": "^4.17.21",
|
||||
"lucide-react": "^0.341.0",
|
||||
"lucide-react": "^0.344.0",
|
||||
"mark.js": "^8.11.1",
|
||||
"microsoft-cognitiveservices-speech-sdk": "^1.35.0",
|
||||
"next-themes": "^0.2.1",
|
||||
@@ -150,13 +150,13 @@
|
||||
"react-hotkeys-hook": "^4.5.0",
|
||||
"react-i18next": "^14.0.5",
|
||||
"react-markdown": "^9.0.1",
|
||||
"react-router-dom": "^6.22.1",
|
||||
"react-router-dom": "^6.22.2",
|
||||
"react-tooltip": "^5.26.3",
|
||||
"reflect-metadata": "^0.2.1",
|
||||
"rimraf": "^5.0.5",
|
||||
"sequelize": "^6.37.1",
|
||||
"sequelize-typescript": "^2.1.6",
|
||||
"sonner": "^1.4.2",
|
||||
"sonner": "^1.4.3",
|
||||
"sqlite3": "^5.1.7",
|
||||
"tailwind-scrollbar-hide": "^1.1.7",
|
||||
"umzug": "^3.7.0",
|
||||
|
||||
29
package.json
@@ -1,20 +1,25 @@
|
||||
{
|
||||
"private": true,
|
||||
"workspaces": [
|
||||
"enjoy"
|
||||
"enjoy",
|
||||
"enjoy-docs"
|
||||
],
|
||||
"scripts": {
|
||||
"dev:enjoy": "yarn workspace enjoy dev",
|
||||
"start:enjoy": "yarn workspace enjoy start",
|
||||
"test:enjoy": "yarn workspace enjoy test",
|
||||
"package:enjoy": "yarn workspace enjoy package",
|
||||
"make:enjoy": "yarn workspace enjoy make",
|
||||
"publish:enjoy": "yarn workspace enjoy publish",
|
||||
"lint:enjoy": "yarn workspace enjoy eslint --ext .ts,.tsx .",
|
||||
"create-migration:enjoy": "yarn workspace enjoy zx ./src/main/db/create-migration.mjs",
|
||||
"dev:1000h": "yarn workspace 1000-hours dev",
|
||||
"build:1000h": "yarn workspace 1000-hours build",
|
||||
"preview:1000h": "yarn workspace 1000-hours preview"
|
||||
"start:enjoy": "echo 'Please use `yarn enjoy:start` instead'",
|
||||
"enjoy:dev": "yarn workspace enjoy dev",
|
||||
"enjoy:start": "yarn workspace enjoy start",
|
||||
"enjoy:test": "yarn workspace enjoy test",
|
||||
"enjoy:package": "yarn workspace enjoy package",
|
||||
"enjoy:make": "yarn workspace enjoy make",
|
||||
"enjoy:publish": "yarn workspace enjoy publish",
|
||||
"enjoy:lint": "yarn workspace enjoy eslint --ext .ts,.tsx .",
|
||||
"enjoy:create-migration": "yarn workspace enjoy zx ./src/main/db/create-migration.mjs",
|
||||
"docs:dev": "yarn workspace enjoy-docs dev",
|
||||
"docs:build": "yarn workspace enjoy-docs build",
|
||||
"docs:preview": "yarn workspace enjoy-docs preview",
|
||||
"1000h:dev": "yarn workspace 1000-hours dev",
|
||||
"1000h:build": "yarn workspace 1000-hours build",
|
||||
"1000h:preview": "yarn workspace 1000-hours preview"
|
||||
},
|
||||
"packageManager": "yarn@4.1.0",
|
||||
"engines": {
|
||||
|
||||