imetting/ROADMAP.md

909 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# iMeeting 产品路线图
## 项目概述
iMeeting 是一个智能会议管理和知识库系统,旨在通过 AI 技术提升会议效率,自动生成会议纪要,并从多次会议中提炼知识。
---
## Phase 1: 基础会议管理与知识库系统(已完成)
### 核心功能
#### 1. 会议管理
- **会议创建与录音**:支持创建会议并关联音频文件
- **音频转录**:基于阿里云 DashScope 的语音识别,支持异步转录
- **AI 总结生成**:使用大语言模型(通义千问)自动生成会议纪要
- **提示词模版**:支持预定义和自定义提示词模版,适配不同会议场景
- **标签系统**:支持为会议添加标签,方便分类和检索
#### 2. 知识库系统
- **基于会议的知识提炼**:从多个会议纪要中提炼知识库内容
- **自定义提示词**:用户可以指定特定的分析角度和总结需求
- **Markdown 输出**:知识库内容以 Markdown 格式存储和展示
- **标签关联**:支持知识库的标签分类
- **共享机制**:支持知识库的个人/共享模式
#### 3. 用户权限管理
- **用户认证**:基于 JWT 的用户登录与会话管理
- **角色权限**:区分普通用户和管理员
- **菜单权限**:动态菜单权限控制系统
#### 4. 管理后台
- **用户管理**:用户创建、编辑、删除、权限配置
- **系统监控**:在线用户、任务监控、系统资源监控
- **提示词仓库**:集中管理所有提示词模版
### 技术架构
#### 后端技术栈
- **框架**FastAPIPython
- **数据库**MySQL 8.0
- **缓存**Redis 5.0+
- **AI 服务**:阿里云 DashScope通义千问
- **对象存储**:七牛云 OSS
- **异步任务**FastAPI BackgroundTasks
#### 前端技术栈
- **框架**React 18
- **路由**React Router
- **UI 组件**Ant Design + 自定义组件
- **Markdown 渲染**react-markdown
#### 数据模型(核心表)
- `users`:用户表
- `meetings`:会议表
- `knowledge_bases`:知识库表
- `prompts`:提示词模版表
- `transcription_tasks`:转录任务表
- `summary_tasks`:总结任务表
- `knowledge_base_tasks`:知识库生成任务表
- `tags`:标签表
---
## Phase 2: 知识库系统大升级(规划中)
### 升级目标
将知识库系统从单一的"会议纪要汇总"升级为功能完整的"AI 知识助手",参考 NotebookLM 的交互模式,提供多维度的知识管理和音频播客生成能力。
---
### 1. 输入来源扩展
#### 1.1 功能需求
-**会议来源**(已支持):从多个会议纪要中提炼
- 🆕 **外部文件上传**
- 支持 PDF、Word、TXT、Markdown 文件
- 支持音频文件MP3、WAV、M4A
- 支持视频文件MP4、AVI、MOV提取音频
- 单个知识库可混合多种来源
#### 1.2 技术方案
##### 文档解析
```python
# 依赖库选型
- PDF: PyPDF2 / pdfplumber文本提取
- Word: python-docxDOCX 文件
- Markdown: 直接读取
- TXT: 直接读取支持多种编码UTF-8GBK
```
**技术评估**
-**可行性**Python 生态成熟
- ⚠️ **挑战**
- PDF 中的表格、图片识别(可选用 OCR
- 大文件处理(需要分块上传和处理)
- 💰 **成本**:无额外费用,依赖开源库
##### 音频/视频处理
```python
# 依赖库选型
- 音频提取: ffmpeg-python视频转音频
- 音频格式转换: pydub
```
**技术评估**
-**可行性**:高,现有转录流程可复用
- ⚠️ **挑战**
- 视频文件较大,需要优化存储和处理
- 需要增加进度反馈
- 💰 **成本**
- 视频存储成本增加(七牛云存储费用)
- 转录费用与现有一致(按时长计费)
##### 数据库设计
```sql
-- 新增表:知识库来源文件表
CREATE TABLE kb_source_files (
file_id INT AUTO_INCREMENT PRIMARY KEY,
kb_id INT NOT NULL COMMENT '关联的知识库ID',
file_type ENUM('pdf', 'docx', 'txt', 'markdown', 'audio', 'video') NOT NULL,
file_name VARCHAR(255) NOT NULL,
file_url VARCHAR(512) NOT NULL COMMENT '文件存储URL',
file_size BIGINT COMMENT '文件大小(字节)',
extracted_text TEXT COMMENT '提取的文本内容',
upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (kb_id) REFERENCES knowledge_bases(kb_id) ON DELETE CASCADE
);
-- 修改知识库表
ALTER TABLE knowledge_bases
ADD COLUMN source_type ENUM('meetings', 'files', 'mixed') DEFAULT 'meetings' COMMENT '内容来源类型';
```
---
### 2. 提示词模版升级
#### 2.1 功能需求
-**选择模版**(已支持):从提示词仓库选择预设模版
- 🆕 **附加提示词**:在模版基础上追加自定义需求
- 🆕 **结构化输出**:生成标题 + 多级内容(章节、小节)
- 🆕 **输出格式控制**支持指定输出结构JSON Schema
#### 2.2 技术方案
##### 提示词组合
```python
def build_knowledge_prompt(
template_prompt: str, # 基础模版
additional_prompt: str, # 附加提示词
output_format: dict # 输出格式控制
) -> str:
"""
组合提示词策略:
1. 基础模版(定义分析维度和风格)
2. 附加提示词(用户自定义需求)
3. 输出格式要求(结构化 JSON 或 Markdown
"""
return f"""
{template_prompt}
## 用户补充要求
{additional_prompt}
## 输出格式要求
请按照以下结构输出Markdown 格式):
# 标题
## 章节1
### 小节1.1
内容...
### 小节1.2
内容...
## 章节2
...
"""
```
**技术评估**
-**可行性**:高,现有提示词系统可直接扩展
- 📊 **优化方向**
- 使用通义千问的 `response_format` 参数实现结构化输出
- 提供可视化的输出结构编辑器
- 💰 **成本**:无额外成本
##### 结构化输出(通义千问支持)
```python
# 通义千问支持 JSON Schema 格式控制
response_format = {
"type": "json_schema",
"json_schema": {
"name": "knowledge_base_output",
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section_title": {"type": "string"},
"subsections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"subsection_title": {"type": "string"},
"content": {"type": "string"}
}
}
}
}
}
}
}
}
}
}
```
---
### 3. 音频概览生成TTS 播客)
#### 3.1 功能需求
- 🆕 **文字转语音**:将知识库内容转换为音频
- 🆕 **播客式对话**(类似 NotebookLM
- 双人对话形式(主持人 + 嘉宾)
- 自然的问答式讲解
- 语气生动,易于理解
#### 3.2 技术方案
##### 方案一:基础 TTS快速实现
**服务选型**
```python
# 1. 阿里云语音合成(推荐)
- 优势已集成 DashScope音质自然支持多音色
- 成本 0.002 /100字符
- 特性支持 SSML 标签控制语速停顿
# 2. 微软 Azure TTS
- 优势音质最佳支持神经网络语音
- 成本 $4/百万字符
- 特性支持情感控制多语言
# 3. OpenAI TTS
- 优势音质优秀 GPT 集成度高
- 成本 $15/百万字符
- 特性6 种不同音色可选
```
**实现流程**
```python
async def generate_basic_audio(kb_content: str) -> str:
"""
基础 TTS 实现
1. 文本预处理(分段、去除特殊字符)
2. 调用 TTS API
3. 音频文件合并
4. 上传到七牛云
"""
# 分段处理(避免单次请求过长)
segments = split_text_by_paragraphs(kb_content, max_length=500)
audio_files = []
for segment in segments:
audio = await tts_service.synthesize(
text=segment,
voice="zhichu", # 阿里云音色
rate=1.0, # 语速
pitch=0 # 音调
)
audio_files.append(audio)
# 合并音频
final_audio = merge_audio_files(audio_files)
audio_url = upload_to_qiniu(final_audio, "kb_audio")
return audio_url
```
**技术评估**
-**可行性**:高,实现简单
- ⚠️ **局限性**
- 单调朗读,无对话感
- 缺乏停顿和情感
- 💰 **成本**
- 阿里云 TTS约 0.02 元/千字
- 10 万字知识库:约 2 元/次
---
##### 方案二播客式对话NotebookLM 风格)
**技术架构**
```
输入: 知识库内容 (Markdown)
1. 内容理解与脚本生成
- 使用 LLM 将内容改写为对话脚本
- 双人角色:主持人(引导)+ 专家(讲解)
2. 对话脚本优化
- 添加开场白和结束语
- 插入自然的停顿和过渡
- 添加情感标记SSML
3. 多音色 TTS 合成
- 主持人音色:女声,温和亲切
- 专家音色:男声,稳重专业
4. 音频后处理
- 添加背景音乐(轻音乐)
- 音量均衡化
- 添加片头片尾
输出: 播客式音频文件 (MP3)
```
**LLM 脚本生成示例**
```python
PODCAST_SCRIPT_PROMPT = """
你是一个播客制作专家。请将以下知识库内容改写为一段双人对话脚本:
- 主持人Host提出问题引导话题语气轻松友好
- 专家Expert讲解内容回答问题语气专业自信
要求:
1. 开场白介绍今天的主题
2. 通过问答形式逐步展开知识点
3. 加入自然的过渡语("那么..."、"接下来..."
4. 结束时做简短总结
知识库内容:
{kb_content}
请输出 JSON 格式:
{{
"title": "播客标题",
"intro": {{
"host": "开场白...",
"expert": "回应..."
}},
"dialogues": [
{{"speaker": "host", "text": "问题1..."}},
{{"speaker": "expert", "text": "解答1..."}},
...
],
"outro": {{
"host": "总结...",
"expert": "结束语..."
}}
}}
"""
async def generate_podcast_script(kb_content: str) -> dict:
"""使用 LLM 生成播客脚本"""
response = await llm_service.call(
prompt=PODCAST_SCRIPT_PROMPT.format(kb_content=kb_content),
response_format={"type": "json_object"}
)
return json.loads(response)
async def synthesize_podcast(script: dict) -> str:
"""合成播客音频"""
audio_segments = []
# 片头音乐
audio_segments.append(load_intro_music())
# 开场白
for speaker, text in script["intro"].items():
voice = VOICES[speaker] # {"host": "xiaoyun", "expert": "zhichu"}
audio = await tts_service.synthesize(text, voice=voice)
audio_segments.append(audio)
audio_segments.append(silence(duration=0.5)) # 停顿 0.5 秒
# 主体对话
for dialogue in script["dialogues"]:
speaker = dialogue["speaker"]
text = dialogue["text"]
voice = VOICES[speaker]
audio = await tts_service.synthesize(text, voice=voice)
audio_segments.append(audio)
audio_segments.append(silence(duration=0.3))
# 结束语
for speaker, text in script["outro"].items():
voice = VOICES[speaker]
audio = await tts_service.synthesize(text, voice=voice)
audio_segments.append(audio)
# 片尾音乐
audio_segments.append(load_outro_music())
# 合并所有音频
final_audio = merge_with_background_music(audio_segments)
# 上传到七牛云
audio_url = upload_to_qiniu(final_audio, "kb_podcast")
return audio_url
```
**技术评估**
-**可行性**:中等
- LLM 脚本生成:成熟方案
- 多音色 TTS阿里云、Azure 均支持
- 音频后处理:需要 ffmpeg 或 pydub
- ⚠️ **挑战**
- 脚本质量依赖 LLM prompt 优化
- 音频合成时长较长(需要异步处理)
- 音频文件较大,存储成本增加
- 💰 **成本**(以 5000 字知识库为例):
- LLM 脚本生成(输入 5000 字 + 输出 3000 字):约 0.05 元
- TTS 合成(约 3000 字对话):约 0.06 元
- **总成本:约 0.11 元/次**
**音频处理库**
```python
# 新增依赖
ffmpeg-python==0.2.0 # 音频处理
pydub==0.25.1 # 音频编辑
```
---
##### 方案对比
| 特性 | 方案一:基础 TTS | 方案二:播客对话 |
|------|------------------|------------------|
| **实现难度** | 低1-2 天) | 中3-5 天) |
| **音频质量** | 单调朗读 | 自然对话 |
| **用户体验** | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| **成本** | 0.02 元/千字 | 0.11 元/5000 字 |
| **适用场景** | 快速阅读 | 深度学习 |
**推荐方案**
- 🚀 **Phase 2.1**:先实现方案一(基础 TTS快速上线
- 🎯 **Phase 2.2**:再实现方案二(播客对话),提升体验
---
### 4. NotebookLM 式交互
#### 4.1 功能需求
- 🆕 **知识库问答**:基于知识库内容的智能问答
- 🆕 **引用溯源**:回答时显示来源(段落、页码)
- 🆕 **相关内容推荐**:基于用户提问推荐相关知识点
- 🆕 **多轮对话**:支持上下文记忆的连续对话
#### 4.2 技术方案
##### 方案一:基于向量数据库的 RAG推荐
**技术架构**
```
知识库内容
1. 文本分块 (Chunking)
- 按段落或语义分块500-1000 字/块)
- 保留元数据(来源、章节、页码)
2. 向量化 (Embedding)
- 使用阿里云通义千问 Embedding API
- 或使用 OpenAI text-embedding-3-small
3. 存储到向量数据库
- Milvus开源功能强大
- 或 Qdrant轻量易部署
- 或 PostgreSQL + pgvector复用现有数据库
4. 用户提问
5. 向量检索
- 将问题向量化
- 检索 Top-K 相似内容块
6. LLM 生成回答
- 将检索结果作为上下文
- 生成准确回答 + 来源引用
```
**实现示例**
```python
from dashscope import TextEmbedding
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
# 1. 向量化服务
class EmbeddingService:
def embed_text(self, text: str) -> List[float]:
"""将文本转换为向量"""
response = TextEmbedding.call(
model='text-embedding-v3',
input=text
)
return response.output['embeddings'][0]['embedding']
# 2. 向量数据库
class VectorStore:
def __init__(self):
self.client = QdrantClient(host="localhost", port=6333)
def create_collection(self, kb_id: int):
"""为知识库创建向量集合"""
self.client.create_collection(
collection_name=f"kb_{kb_id}",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE)
)
def add_chunks(self, kb_id: int, chunks: List[dict]):
"""添加文本块到向量库"""
points = []
for i, chunk in enumerate(chunks):
embedding = embedding_service.embed_text(chunk['text'])
points.append(PointStruct(
id=i,
vector=embedding,
payload={
"text": chunk['text'],
"source": chunk['source'],
"section": chunk['section']
}
))
self.client.upsert(collection_name=f"kb_{kb_id}", points=points)
def search(self, kb_id: int, query: str, top_k: int = 3):
"""搜索相似内容"""
query_vector = embedding_service.embed_text(query)
results = self.client.search(
collection_name=f"kb_{kb_id}",
query_vector=query_vector,
limit=top_k
)
return results
# 3. RAG 问答
async def answer_question(kb_id: int, question: str, chat_history: List[dict] = None):
"""基于知识库回答问题"""
# 检索相关内容
results = vector_store.search(kb_id, question, top_k=3)
# 构建上下文
context = "\n\n".join([
f"[来源: {r.payload['section']}]\n{r.payload['text']}"
for r in results
])
# 构建 prompt
prompt = f"""
基于以下知识库内容回答用户问题。如果无法从内容中找到答案,请明确告知。
知识库内容:
{context}
用户问题:{question}
请提供准确的回答,并在回答中标注来源章节。
"""
# 调用 LLM
response = await llm_service.call(prompt, chat_history=chat_history)
# 返回回答 + 来源
return {
"answer": response,
"sources": [
{"section": r.payload['section'], "text": r.payload['text'][:200]}
for r in results
]
}
```
**技术评估**
-**可行性**:高
- 向量数据库Qdrant轻量级或 pgvector复用 MySQL
- Embedding阿里云通义千问 Embedding API0.0007 元/千 tokens
- 📊 **优势**
- 回答准确性高(基于实际内容)
- 支持引用溯源
- 检索速度快(毫秒级)
- 💰 **成本**(以 10 万字知识库为例):
- 向量化:约 0.07 元(一次性)
- 每次问答检索:免费(本地向量库)
- LLM 生成:约 0.01 元/次
---
##### 方案二:基于 LLM 长上下文(备选)
**技术方案**
```python
async def answer_with_full_context(kb_content: str, question: str):
"""直接将整个知识库作为上下文"""
prompt = f"""
你是一个知识库助手。请基于以下知识库内容回答用户问题。
知识库内容:
{kb_content}
用户问题:{question}
请提供准确的回答,并标注引用的段落。
"""
response = await llm_service.call(prompt)
return response
```
**技术评估**
-**可行性**:中等
- 通义千问支持 128K tokens 上下文
- 约 10 万字中文
- ⚠️ **局限性**
- 大文本上下文成本高
- 无法精确定位来源
- 不支持多知识库联合查询
- 💰 **成本**
- 每次问答10 万字上下文):约 0.15 元
- **比 RAG 方案贵 10 倍以上**
**推荐方案****方案一RAG** 为主,方案二作为小规模知识库的快速方案。
---
##### 数据库设计
```sql
-- 知识库对话历史表
CREATE TABLE kb_chat_history (
chat_id INT AUTO_INCREMENT PRIMARY KEY,
kb_id INT NOT NULL COMMENT '关联知识库ID',
user_id INT NOT NULL COMMENT '用户ID',
question TEXT NOT NULL COMMENT '用户提问',
answer TEXT NOT NULL COMMENT 'AI回答',
sources JSON COMMENT '回答来源JSON数组',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (kb_id) REFERENCES knowledge_bases(kb_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
INDEX idx_kb_user (kb_id, user_id),
INDEX idx_created_at (created_at)
);
-- 知识库向量块表
CREATE TABLE kb_text_chunks (
chunk_id INT AUTO_INCREMENT PRIMARY KEY,
kb_id INT NOT NULL COMMENT '关联知识库ID',
chunk_text TEXT NOT NULL COMMENT '文本块内容',
chunk_metadata JSON COMMENT '元数据(章节、页码等)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (kb_id) REFERENCES knowledge_bases(kb_id) ON DELETE CASCADE,
INDEX idx_kb_id (kb_id)
);
```
---
### 5. 前端交互升级
#### 5.1 新增页面/组件
```
知识库详情页
├── 📄 内容展示区
│ ├── Markdown 渲染(已有)
│ └── 音频播放器(新增)
│ ├── 播放/暂停
│ ├── 进度条
│ ├── 倍速调节
│ └── 下载音频
├── 💬 智能问答区(新增)
│ ├── 对话输入框
│ ├── 对话历史列表
│ ├── 来源引用卡片
│ └── 相关问题推荐
└── 📊 知识库信息
├── 来源文件列表(新增)
└── 标签、创建时间等(已有)
```
#### 5.2 技术实现
```jsx
// 音频播放器组件
import ReactAudioPlayer from 'react-audio-player';
const KnowledgeAudioPlayer = ({ audioUrl }) => {
return (
<div className="audio-player-container">
<h3>🎧 音频概览</h3>
<ReactAudioPlayer
src={audioUrl}
controls
autoPlay={false}
controlsList="nodownload"
/>
</div>
);
};
// 智能问答组件
const KnowledgeChatbot = ({ kbId }) => {
const [messages, setMessages] = useState([]);
const [input, setInput] = useState('');
const [loading, setLoading] = useState(false);
const handleAsk = async () => {
setLoading(true);
const response = await apiClient.post(`/knowledge-bases/${kbId}/ask`, {
question: input,
chat_history: messages
});
setMessages([
...messages,
{ role: 'user', content: input },
{
role: 'assistant',
content: response.data.answer,
sources: response.data.sources
}
]);
setInput('');
setLoading(false);
};
return (
<div className="chatbot-container">
<div className="chat-history">
{messages.map((msg, idx) => (
<div key={idx} className={`message ${msg.role}`}>
<div className="message-content">{msg.content}</div>
{msg.sources && (
<div className="message-sources">
<h4>📚 来源</h4>
{msg.sources.map((src, i) => (
<div key={i} className="source-card">
<strong>{src.section}</strong>
<p>{src.text}...</p>
</div>
))}
</div>
)}
</div>
))}
</div>
<div className="chat-input">
<input
value={input}
onChange={(e) => setInput(e.target.value)}
placeholder="向知识库提问..."
onKeyPress={(e) => e.key === 'Enter' && handleAsk()}
/>
<button onClick={handleAsk} disabled={loading}>
{loading ? '思考中...' : '发送'}
</button>
</div>
</div>
);
};
```
---
## Phase 2 技术依赖汇总
### 新增 Python 依赖
```txt
# 文档解析
PyPDF2==3.0.1
pdfplumber==0.10.3
python-docx==1.1.0
# 音频处理
ffmpeg-python==0.2.0
pydub==0.25.1
# 向量数据库(二选一)
qdrant-client==1.7.0 # 推荐:轻量级向量库
# 或
pgvector==0.2.3 # 备选PostgreSQL 扩展
# 阿里云 Embedding可选通义千问已集成
# 无需新增依赖,使用现有 dashscope
```
### 新增前端依赖
```json
{
"react-audio-player": "^0.17.0",
"react-markdown": "^9.0.0" // 已有
}
```
### 基础设施
- **向量数据库**QdrantDocker 部署)
```bash
docker run -p 6333:6333 qdrant/qdrant
```
- **音频处理**FFmpeg系统依赖
```bash
apt-get install ffmpeg # Ubuntu
brew install ffmpeg # macOS
```
---
## 成本预估Phase 2
### 开发成本
| 模块 | 工作量(人天) | 说明 |
|------|---------------|------|
| 文件上传与解析 | 3-5 天 | PDF、Word、音频解析 |
| 提示词升级 | 2-3 天 | 附加提示词、结构化输出 |
| 基础 TTS | 2-3 天 | 文字转语音 |
| 播客对话(可选) | 5-7 天 | LLM 脚本生成 + 多音色合成 |
| RAG 问答系统 | 5-7 天 | 向量化、检索、对话 |
| 前端交互升级 | 3-5 天 | 音频播放器、聊天界面 |
| **总计** | **20-30 天** | 约 1-1.5 个月 |
### 运营成本(月)
| 项目 | 预估用量 | 单价 | 月成本 |
|------|---------|------|--------|
| **阿里云 TTS** | 100 万字 | 0.02 元/千字 | 20 元 |
| **LLM 脚本生成** | 50 次5000 字/次) | 0.05 元/次 | 2.5 元 |
| **Embedding 向量化** | 100 万字 | 0.0007 元/千 tokens | 0.7 元 |
| **LLM 问答** | 1000 次 | 0.01 元/次 | 10 元 |
| **七牛云存储(音频)** | 10 GB | 0.148 元/GB/天 | 44 元 |
| **Qdrant 服务器** | 1 核 2G | - | 0 元(自建) |
| **总计** | - | - | **约 77 元/月** |
*注:基于中小规模使用场景(月活 100-500 用户)*
---
## 技术风险与缓解措施
### 风险 1向量数据库性能
- **风险**:大规模知识库检索延迟
- **缓解**
- 使用 Qdrant 的分片和副本
- 限制单次检索 Top-K 数量
- 增加缓存层Redis
### 风险 2播客生成质量
- **风险**LLM 生成的对话脚本不自然
- **缓解**
- 提供多个脚本模版供用户选择
- 支持用户编辑脚本后再合成
- 引入少样本学习Few-shot优化 prompt
### 风险 3文件解析准确性
- **风险**PDF、Word 解析失败或乱码
- **缓解**
- 提供预览功能,让用户确认提取结果
- 支持手动文本粘贴作为备选
- 增加 OCR 处理扫描件 PDF
### 风险 4成本控制
- **风险**TTS 和 LLM 调用费用超预算
- **缓解**
- 设置单用户每日调用限额
- 音频生成采用队列异步处理
- 提供缓存机制避免重复生成
---
## 实施建议
### Phase 2.1基础版2-3 周)
**优先级高**
1. 文件上传与解析PDF、Word、TXT
2. 基础 TTS 音频生成
3. 提示词附加功能
### Phase 2.2进阶版3-4 周)
🎯 **优先级中**
1. RAG 问答系统(向量检索)
2. 播客式对话生成
3. 前端聊天界面
### Phase 2.3优化版2-3 周)
🔧 **优先级低**
1. 音频后处理(背景音乐、片头片尾)
2. 多轮对话记忆
3. 相关问题推荐
---
## 总结
Phase 2 升级将把 iMeeting 知识库系统从"被动阅读"升级为"主动交互",核心亮点包括:
1.**多源输入**:会议 + 文件 + 音视频
2. 🎙️ **音频播客**:类 NotebookLM 的对话式音频
3. 💬 **智能问答**:基于 RAG 的精准问答
4. 📊 **结构化输出**:自动生成多级章节
**技术可行性**:高(基于成熟技术栈)
**成本可控性**:高(月运营成本 < 100 元)
**开发周期**1-1.5 个月(20-30 人天)
建议采用**分阶段迭代**方式,先上线基础版(文件上传 + 基础 TTS),快速验证用户需求,再逐步完善高级功能(播客对话 + RAG 问答)。