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
This commit is contained in:
an-lee
2024-03-02 16:36:06 +08:00
committed by GitHub
parent 9ffcffe7f5
commit 54935aa7e9
34 changed files with 1896 additions and 296 deletions

View File

@@ -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
View 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"

View File

@@ -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

View File

@@ -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
View 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

View 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,
});

View 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 引擎无法修改,需要变更时请新建一个对话。

View File

@@ -0,0 +1,58 @@
# 音频资源
利用音视频资源进行跟读训练是 Enjoy 的核心功能之一。
## 添加音频资源
Enjoy 支持添加本地的音频资源,和在线资源。在音频页面,点击 `添加资源`,在弹窗中输入网址,或者点击 `本地文件` 选择本地计算机的音频文件即可添加。
如果是在线资源Enjoy 会将文件下载至默认的下载文件夹(`Downdoads` 或者 `我的下载`),然后再自动添加至 [资源库](./settings#资源库保存路径)。
## 跟读音频
添加成功后,会自动跳转至音频播放页面。
打开时,需要先解析音频波形数据(并生成 Pitch contour和生成音频字幕使用 [语音转文本服务](./settings#语音转文本服务))。首次打开时,可能需要等待一些时间。所需数据生成成功之后,后续再次打开时的速度会比较快。
::: tip 卡在加载页面怎么办?
打开音频页面时,会先按照以下步骤进行加载:
1. 解析音频波形数据
2. 语音转文本
如果长时间卡在第一步,可能是因为音频太大(主要跟音频时长有关)导致加载时间过长,甚至失败。如果不是音频大小的原因,可能是出现了其他 bug请联系开发者。
如果第二步语音转文本失败,请检查是否在正在使用本地 whisper 组件进行语音转文本,在某些电脑上可能因为兼容性和未知问题导致无法使用。如果出现这种情况,请在 [语音转文本服务设置](./settings#语音转文本服务) 中改用其他语音转文本的云服务。
:::
## 录音
Enjoy 会将音频按照句子切分,用户以句子为单位进行跟读练习。在激活的音频句子下,点击下方的录音按钮,即可开始录音,用户可以模仿音频朗读当前句子作为练习。
![音频播放页面](/snapshots/audio-page.png)
_\* 音频播放页面_
::: 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)。
![发音评估示例](/snapshots/pronouce-assessment.png)
_\* 发音评估示例_
::: warning 发音评估的使用建议
该功能是收费功能,每次使用均会在 Enjoy 账户的余额扣费,如果余额不足则需要 [充值](./settings#充值) 后才可继续使用。
根据实测,该功能对提高学习者的发音作用水平有限,其评估结果仅做参考,不应该过度依赖。
另外,我们正在开发一套更有效的发音评估体系,敬请期待。
:::
## 修改音频信息
在音频页面上方,切换至列表模式,即可以对音频进行修改操作,例如修改音频标题,添加描述,和删除音频等。

View File

@@ -0,0 +1,3 @@
# 本地电子书
待开发,敬请期待。

View File

@@ -0,0 +1,7 @@
# GPT 服务
当 AI 类型选择 `GPT`AI 将会根据 `角色定义` 来回答你提出的所有问题。
例如定义一个 `英语教练` 的角色,可以将你发的所有文字翻译成地道的英文表达,再配合 [TTS](./tts-conversation.md) 将其转化成语音,即可作为跟读的材料。
详情可以参照使用案例:[利用 AI 生成训练材料](./use-case-generate-audio-resources.md)

View 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) 找到。

View File

@@ -0,0 +1,7 @@
# 简介
AI 是当今世界上最好的外语老师Enjoy 做 **AI 最好的助教**
::: warning 重要提示
Enjoy App 的开发仍处于早期的快速迭代阶段,文档可能落后于开发,导致功能描述可能不符,以最新发布的软件版本为准。
:::

View 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 设置路径
软件设置 -> 基本设置 -> 语音转文本服务
:::
语音转文本(即 STTSpeech 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 收费服务使用,**不支持退款****不支持提现**。
请谨慎考虑,按需充值。
:::

View File

@@ -0,0 +1,5 @@
# TTS 服务
当 AI 类型选择 `TTS`该对话将提供文本转语音Text to Speech服务即 AI 会将你发出的任意文本转化成语音(音频文件)。生成的语音,可以直接添加至资源库进行跟读练习。
在设置里可以修改语音的角色。

View File

@@ -0,0 +1,45 @@
# 利用 AI 生成训练材料
用外语说我们自己想说的话是学习外语的其中一个重要目的。市面上的口语书实际上并不实用,因为那些话大都不是我们想要说的,我们需要创建专属自己的口语书。使用 Enjoy 可以很容易做到这一点。
## 确保 AI 服务正常
在开始之前,先要确保 AI 服务可以正常使用,要么配置好自己的 [OpenAI 密钥](./settings#openai-配置),要么使用 Enjoy 提供的 AI 服务并确保账户 [余额](./settings#充值) 充足。
## 创建英语教练
点击 Enjoy 左侧栏的 `智能助手` 进入页面,点击 `新对话` 开始创建。
角色定义选择预设的 `英语教练`
![选择 AI 角色](/snapshots/select-ai-role.png)
_\* 选择 AI 角色_
具体配置里,根据具体情况,修改 AI 引擎 为 OpenAI 或者 Enjoy AI。如果使用 [OpenAI](./settings#openai-配置),可能还需要检查配置 `接口地址`
将配置拉到最下面,`TTS 引擎` 也需要做相应配置。
![对话设置](/snapshots/conversation-form.png)
_\* 对话设置_
配置完成后,点击下面的 `确认` 按钮,即可创建成功。
## 发送任意文字
智能助手的使用跟聊天窗口类似,将你想要说的话发给 `英语教练`作为回复AI 会将你的文字翻译成地道的纽约腔英语。
## 生成语音
如果你对 AI 的回复感到满意,点击信息下方的朗读图标,将其转化为语音。
![英语教练对话](/snapshots/english-coach-gpt-conversation.png)
_\* 英语教练对话_
## 跟读训练
继而点击麦克风图标,将该语音加入资源库,进行跟读训练。
![添加跟读训练](/snapshots/conversation-add-speech-to-audio.png)
_\* 添加跟读训练_
随后也可以在 [音频页面](./audios.md) 找到该材料,继续练习。

View File

@@ -0,0 +1,20 @@
# 视频资源
视频资源的使用与 [音频资源](./audios.md) 基本一致。
![视频资源播放页面](/snapshots/video-page.png)
_\* 视频播放页面_
## 录音
在视频播放页面,需要录音时,可以点播放控制栏上的录音图标,视频将会被缩小至小窗,主界面上会显示录音按钮。
## 视频大小的限制
过大的视频文件会导致加载卡死而无法使用,目前 Enjoy 将添加视频的大小限制在 100 Mb超过则会提示添加失败。
后续会针对大文件做相应优化,以支持更大的文件。
## Youtube 视频
Enjoy 支持添加 Youtube 视频,添加资源时直接输入 Youtobe 网址即可。当然前提是当前网络条件支持访问 Youtube。

View File

@@ -0,0 +1,19 @@
# 在线文章
点击左侧栏的 `文章` 进入。
输入文章的网址,即可开始阅读。
![文章阅读页面](/snapshots/story-page.png)
_\* 文章阅读页面_
## 提取关键词汇
打开文章后Enjoy 将会智能提取该文章的关键词汇,并在文中标注。该功能需要 AI 引擎的支持,在 [默认 AI 引擎](./settings.md#默认-ai-引擎) 可以设置。
![关键词汇](/snapshots/story-key-vocabulary.png)
_\* 智能提取关键词汇_
## 查单词
在正文中选中任意单词或者短语,即可激活查单词服务,同样需要 [AI 引擎](./settings.md#默认-ai-引擎) 的支持。

12
enjoy-docs/index.md Normal file
View 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
View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
enjoy-docs/public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -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",

View File

@@ -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": {

1455
yarn.lock

File diff suppressed because it is too large Load Diff