文档初始化
This commit is contained in:
commit
604325a5fc
30
README.md
Normal file
30
README.md
Normal file
@ -0,0 +1,30 @@
|
||||
# 关于
|
||||
|
||||
> 微果AI无人直播场控 专业简洁的无人直播场控系统
|
||||
|
||||
# 支持功能
|
||||
|
||||
- 支持自定义接入常见本地和服务商LLM大模型
|
||||
- 支持自定义本地知识库和提示词
|
||||
- 支持接入Dify工作流和聊天助手
|
||||
- 支持利用大模型+知识库、Dify回复弹幕问题
|
||||
- 支持大模型或Dify进行文案优化少量话术文案即可长时播放不重复
|
||||
- 支持自定义接入本地或服务商TTS模型(兼容openai生成接口、兼容类硅基流动的语音克隆接口)
|
||||
- 话术支持变量、随机多选一、助理音色、强制优化
|
||||
- 支持开播中手工插入优先话术
|
||||
- 支持背景音乐
|
||||
- 支持助理回复弹幕、助理实时插入(助理和主播同时说话)
|
||||
- 支持接入抖音弹幕助手、油猴弹幕抓取脚本
|
||||
- 支持独立实时调整主音量、背景音乐、主播、助理音量
|
||||
- 支持选择音频输出接口不影响系统默认音频输出接口
|
||||
|
||||
|
||||
|
||||
|
||||
# 截图
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
8
_navbar.md
Normal file
8
_navbar.md
Normal file
@ -0,0 +1,8 @@
|
||||
<!-- _navbar.md -->
|
||||
|
||||
* 关于我们
|
||||
|
||||
* [主页](quickstart.md)
|
||||
* [帮助](more-pages.md)
|
||||
* [FAQ](custom-navbar.md)
|
||||
* [联系我们](cover.md)
|
10
_sidebar.md
Normal file
10
_sidebar.md
Normal file
@ -0,0 +1,10 @@
|
||||
<!-- docs/_sidebar.md -->
|
||||
|
||||
* [关于微果AI场控](/)
|
||||
* [场控操作](controls.md)
|
||||
* [快速上手](quickstart.md)
|
||||
* [话术文案](moderator.md)
|
||||
* [AI模型接入](llm.md)
|
||||
* [话术优化](optimize.md)
|
||||
* [TTS引擎](tts.md)
|
||||
* [弹幕处理](barrage.md)
|
12
barrage.md
Normal file
12
barrage.md
Normal file
@ -0,0 +1,12 @@
|
||||
# 弹幕处理
|
||||
弹幕处理方法介绍
|
||||
|
||||
# 基础配置
|
||||
|
||||
# 平台对接
|
||||
|
||||
## 接入抖音弹幕助手
|
||||
|
||||
## 接入油猴弹幕脚本(快手、B站)
|
||||
|
||||
|
5
controls.md
Normal file
5
controls.md
Normal file
@ -0,0 +1,5 @@
|
||||
# 工作流程
|
||||
|
||||
# 基础操作
|
||||
|
||||
# 功能介绍
|
BIN
images/cangkong1.png
Normal file
BIN
images/cangkong1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
BIN
images/daoruhuasu.png
Normal file
BIN
images/daoruhuasu.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 113 KiB |
BIN
images/jieya1.png
Normal file
BIN
images/jieya1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 27 KiB |
BIN
images/llmsetpic.png
Normal file
BIN
images/llmsetpic.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 83 KiB |
BIN
images/logo.png
Normal file
BIN
images/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.6 KiB |
37
index.html
Normal file
37
index.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Document</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
|
||||
<meta name="description" content="Description">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script>
|
||||
window.$docsify = {
|
||||
name: '微果AI无人直播场控',
|
||||
repo: '',
|
||||
loadSidebar: true,
|
||||
loadNavbar: true,
|
||||
subMaxLevel: 2,
|
||||
formatUpdated: '{MM}/{DD} {HH}:{mm}',
|
||||
formatUpdated: function (time) {
|
||||
return time;
|
||||
},
|
||||
logo: '/images/logo.png',
|
||||
}
|
||||
</script>
|
||||
<script>
|
||||
if (typeof navigator.serviceWorker !== 'undefined') {
|
||||
navigator.serviceWorker.register('sw.js')
|
||||
}
|
||||
</script>
|
||||
<!-- Docsify v4 -->
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/emoji.min.js"></script>
|
||||
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>
|
||||
</body>
|
||||
</html>
|
19
llm.md
Normal file
19
llm.md
Normal file
@ -0,0 +1,19 @@
|
||||
# AI模型介绍
|
||||
|
||||
# 基础配置
|
||||
|
||||
# 提示词和知识库
|
||||
|
||||
# 平台对接
|
||||
|
||||
## 接入自定义LLM(兼容openai)
|
||||
|
||||
## 接入Dify(聊天助手)
|
||||
|
||||
## 接入Dify(工作流)
|
||||
|
||||
## 接入硅基流动(deepseek v3)
|
||||
|
||||
## 接入火山方舟(豆包)
|
||||
|
||||
## 接入阿里百炼(通义千问)
|
7
moderator.md
Normal file
7
moderator.md
Normal file
@ -0,0 +1,7 @@
|
||||
# 话术文案
|
||||
|
||||
# 操作
|
||||
|
||||
# 话术撰写指南
|
||||
|
||||
# 话术变量表
|
7
optimize.md
Normal file
7
optimize.md
Normal file
@ -0,0 +1,7 @@
|
||||
# 话术优化介绍
|
||||
|
||||
# 配置
|
||||
|
||||
# 平台对接
|
||||
|
||||
# 提示词
|
22
quickstart.md
Normal file
22
quickstart.md
Normal file
@ -0,0 +1,22 @@
|
||||
# 下载
|
||||
|
||||
1. 程序主体:
|
||||
微果AI无人直播场控:[点击下载](http://localhost)
|
||||
|
||||
2. 可选功能插件:
|
||||
抖音弹幕助手:[点击下载](http://localhost)
|
||||
油猴浏览器扩展:[点击下载](http://localhost)
|
||||
弹幕油猴脚本:[点击下载](http://localhost)
|
||||
专用indexTTS一键包:[点击下载](http://localhost)
|
||||
|
||||
# 安装
|
||||
下载主体压缩包,直接解压到D盘即可。获得目录如下:
|
||||

|
||||
|
||||
# 快速开始
|
||||
1. 运行`微果AI直播场控.exe`
|
||||
2. 点击`导入话术`跳转到导入话术页面
|
||||
3. 点击`导入`在打开的对话框里选择`示例话术.txt`
|
||||
4. 点击导入话术页面的保存按钮
|
||||
5. 点击`场控`跳转到场控页面,选择输入设备
|
||||
6. 点击`场控`页面下方的开始
|
83
sw.js
Normal file
83
sw.js
Normal file
@ -0,0 +1,83 @@
|
||||
/* ===========================================================
|
||||
* docsify sw.js
|
||||
* ===========================================================
|
||||
* Copyright 2016 @huxpro
|
||||
* Licensed under Apache 2.0
|
||||
* Register service worker.
|
||||
* ========================================================== */
|
||||
|
||||
const RUNTIME = 'docsify'
|
||||
const HOSTNAME_WHITELIST = [
|
||||
self.location.hostname,
|
||||
'fonts.gstatic.com',
|
||||
'fonts.googleapis.com',
|
||||
'cdn.jsdelivr.net'
|
||||
]
|
||||
|
||||
// The Util Function to hack URLs of intercepted requests
|
||||
const getFixedUrl = (req) => {
|
||||
var now = Date.now()
|
||||
var url = new URL(req.url)
|
||||
|
||||
// 1. fixed http URL
|
||||
// Just keep syncing with location.protocol
|
||||
// fetch(httpURL) belongs to active mixed content.
|
||||
// And fetch(httpRequest) is not supported yet.
|
||||
url.protocol = self.location.protocol
|
||||
|
||||
// 2. add query for caching-busting.
|
||||
// Github Pages served with Cache-Control: max-age=600
|
||||
// max-age on mutable content is error-prone, with SW life of bugs can even extend.
|
||||
// Until cache mode of Fetch API landed, we have to workaround cache-busting with query string.
|
||||
// Cache-Control-Bug: https://bugs.chromium.org/p/chromium/issues/detail?id=453190
|
||||
if (url.hostname === self.location.hostname) {
|
||||
url.search += (url.search ? '&' : '?') + 'cache-bust=' + now
|
||||
}
|
||||
return url.href
|
||||
}
|
||||
|
||||
/**
|
||||
* @Lifecycle Activate
|
||||
* New one activated when old isnt being used.
|
||||
*
|
||||
* waitUntil(): activating ====> activated
|
||||
*/
|
||||
self.addEventListener('activate', event => {
|
||||
event.waitUntil(self.clients.claim())
|
||||
})
|
||||
|
||||
/**
|
||||
* @Functional Fetch
|
||||
* All network requests are being intercepted here.
|
||||
*
|
||||
* void respondWith(Promise<Response> r)
|
||||
*/
|
||||
self.addEventListener('fetch', event => {
|
||||
// Skip some of cross-origin requests, like those for Google Analytics.
|
||||
if (HOSTNAME_WHITELIST.indexOf(new URL(event.request.url).hostname) > -1) {
|
||||
// Stale-while-revalidate
|
||||
// similar to HTTP's stale-while-revalidate: https://www.mnot.net/blog/2007/12/12/stale
|
||||
// Upgrade from Jake's to Surma's: https://gist.github.com/surma/eb441223daaedf880801ad80006389f1
|
||||
const cached = caches.match(event.request)
|
||||
const fixedUrl = getFixedUrl(event.request)
|
||||
const fetched = fetch(fixedUrl, { cache: 'no-store' })
|
||||
const fetchedCopy = fetched.then(resp => resp.clone())
|
||||
|
||||
// Call respondWith() with whatever we get first.
|
||||
// If the fetch fails (e.g disconnected), wait for the cache.
|
||||
// If there’s nothing in cache, wait for the fetch.
|
||||
// If neither yields a response, return offline pages.
|
||||
event.respondWith(
|
||||
Promise.race([fetched.catch(_ => cached), cached])
|
||||
.then(resp => resp || fetched)
|
||||
.catch(_ => { /* eat any errors */ })
|
||||
)
|
||||
|
||||
// Update the cache with the version we fetched (only for ok status)
|
||||
event.waitUntil(
|
||||
Promise.all([fetchedCopy, caches.open(RUNTIME)])
|
||||
.then(([response, cache]) => response.ok && cache.put(event.request, response))
|
||||
.catch(_ => { /* eat any errors */ })
|
||||
)
|
||||
}
|
||||
})
|
Loading…
Reference in New Issue
Block a user