ERNIE-4.5-0.3B-PT实战教程:用Chainlit构建带历史记录的AI会议纪要工具
本文面向有一定Python基础但希望快速上手AI应用开发的读者,无需深度学习背景,跟着步骤就能搭建一个实用的会议纪要生成工具。
1. 项目介绍与价值
你是不是经常参加各种会议,结束后还要花大量时间整理会议纪要?或者作为团队负责人,需要快速回顾多个会议的关键信息?传统的手工记录方式效率低下,还容易遗漏重要内容。
今天我们要用ERNIE-4.5-0.3B-PT模型和Chainlit框架,构建一个智能会议纪要工具。这个工具不仅能实时生成结构化的会议记录,还能保存完整的对话历史,让你随时回顾之前的会议内容。
这个工具能帮你解决什么问题?
- 自动将零散的会议讨论整理成结构化纪要
- 保存所有会议历史,方便后续查阅和追溯
- 支持中英文会议内容处理
- 无需复杂部署,几分钟就能上手使用
2. 环境准备与模型部署
2.1 检查模型服务状态
首先确保你的ERNIE-4.5-0.3B-PT模型已经通过vLLM成功部署。打开终端,运行以下命令检查服务状态:
cat /root/workspace/llm.log如果看到类似下面的输出,说明模型部署成功:
INFO 07-15 14:30:22 vllm.engine.llm_engine: Model loaded in 45.2s INFO 07-15 14:30:23 vllm.entrypoints.api_server: API server started on http://0.0.0.0:80002.2 安装必要的Python包
创建一个新的Python环境(推荐),然后安装所需依赖:
pip install chainlit openai requests python-dotenv这里我们使用Chainlit作为前端界面,通过OpenAI兼容的API方式调用vLLM部署的模型。
3. 构建会议纪要应用
3.1 创建应用主文件
新建一个名为meeting_assistant.py的文件,开始编写我们的核心代码:
import chainlit as cl import requests import json from typing import List, Dict # 配置模型API地址(根据你的实际部署地址修改) MODEL_API_URL = "http://localhost:8000/v1/completions" class MeetingHistory: """会议历史管理类""" def __init__(self): self.sessions = {} def add_session(self, session_id: str, topic: str): """添加新的会议会话""" self.sessions[session_id] = { 'topic': topic, 'messages': [], 'summary': '' } def add_message(self, session_id: str, role: str, content: str): """添加会议消息""" if session_id in self.sessions: self.sessions[session_id]['messages'].append({ 'role': role, 'content': content, 'timestamp': datetime.now().isoformat() }) def generate_summary(self, session_id: str) -> str: """生成会议纪要""" if session_id not in self.sessions: return "会话不存在" messages = self.sessions[session_id]['messages'] # 这里会调用模型生成摘要 return self._call_model_for_summary(messages)3.2 实现模型调用功能
在同一个文件中继续添加模型调用逻辑:
def _call_model_for_summary(self, messages: List[Dict]) -> str: """调用ERNIE模型生成会议摘要""" # 构建会议对话上下文 conversation = "\n".join([ f"{msg['role']}: {msg['content']}" for msg in messages ]) prompt = f"""请将以下会议对话整理成结构化的会议纪要,包括: 1. 会议主题和主要讨论点 2. 关键决策和行动项 3. 负责人和截止时间(如果有) 4. 待讨论事项 会议对话: {conversation} 会议纪要:""" # 调用vLLM API payload = { "model": "ernie-4.5-0.3b-pt", "prompt": prompt, "max_tokens": 1024, "temperature": 0.3, "stop": ["\n\n"] } try: response = requests.post(MODEL_API_URL, json=payload) response.raise_for_status() result = response.json() return result['choices'][0]['text'].strip() except Exception as e: return f"生成摘要时出错: {str(e)}" # 初始化会议历史管理器 meeting_history = MeetingHistory()3.3 实现Chainlit前端界面
现在添加用户界面相关的代码:
@cl.on_chat_start async def start_chat(): """聊天开始时初始化会议会话""" session_id = cl.user_session.get('id') topic = await cl.AskUserMessage( content="请输入本次会议的主题:", timeout=60 ).send() if topic: meeting_history.add_session(session_id, topic['output']) await cl.Message( content=f"会议主题已设置为: {topic['output']}\n\n现在可以开始会议讨论了,我会自动记录并生成纪要。" ).send() @cl.on_message async def handle_message(message: cl.Message): """处理用户消息""" session_id = cl.user_session.get('id') user_input = message.content # 保存用户消息 meeting_history.add_message(session_id, '用户', user_input) # 生成实时响应 response = await generate_meeting_response(session_id, user_input) # 保存AI响应 meeting_history.add_message(session_id, '助理', response) await cl.Message(content=response).send() async def generate_meeting_response(session_id: str, user_input: str) -> str: """生成会议相关的智能响应""" # 这里可以添加更多的对话逻辑 if "总结" in user_input or "纪要" in user_input: summary = meeting_history.generate_summary(session_id) return f"本次会议纪要:\n\n{summary}" else: return "已记录您的发言。继续讨论还是需要生成会议纪要?"4. 运行和测试应用
4.1 启动应用
在终端中运行以下命令启动应用:
chainlit run meeting_assistant.py -w这会启动Chainlit服务,通常在http://localhost:8000可以访问。
4.2 测试会议纪要功能
打开浏览器访问应用地址,按照以下步骤测试:
- 设置会议主题:输入本次会议的主题,比如"季度产品规划会议"
- 开始讨论:输入会议讨论内容,例如:
- "我们今天主要讨论下一季度的产品路线图"
- "建议优先开发移动端功能,预计需要3周时间"
- "张三负责前端开发,李四负责后端API"
- 生成纪要:输入"生成会议纪要"来获取结构化摘要
你会看到模型自动将零散的讨论整理成规范的会议纪要格式,包括讨论要点、行动项、负责人等信息。
5. 进阶功能与优化建议
5.1 添加会议历史查看功能
可以扩展功能,让用户查看之前的会议记录:
@cl.on_message async def handle_history_request(message: cl.Message): """处理历史会议查询""" if "历史会议" in message.content: sessions = meeting_history.get_all_sessions() response = "历史会议记录:\n\n" for session_id, data in sessions.items(): response += f"- {data['topic']} ({len(data['messages'])}条消息)\n" await cl.Message(content=response).send()5.2 优化提示词工程
为了获得更好的会议纪要效果,可以优化提示词:
def create_optimized_prompt(conversation: str, topic: str) -> str: return f"""你是一个专业的会议纪要助手。请将以下关于'{topic}'的会议讨论整理成结构化纪要。 会议讨论内容: {conversation} 请按照以下格式组织会议纪要: # 会议主题:{topic} ## 主要讨论点 - 点1 - 点2 ## 决策与行动项 - [ ] 任务1 - 负责人:XXX - 截止时间:YYYY-MM-DD - [ ] 任务2 - 负责人:XXX - 截止时间:YYYY-MM-DD ## 待决议题 - 议题1 - 议题2 请确保纪要简洁、准确、 actionable。"""5.3 添加导出功能
还可以添加导出会议纪要的功能:
@cl.on_message async def handle_export_request(message: cl.Message): """处理导出请求""" if "导出" in message.content: session_id = cl.user_session.get('id') summary = meeting_history.generate_summary(session_id) # 提供下载链接 export_content = f"会议纪要导出\n\n{summary}" await cl.Message( content="会议纪要已生成,点击下载:", elements=[cl.File(name="meeting_summary.txt", content=export_content, display="inline")] ).send()6. 常见问题解决
问题1:模型响应慢或超时
- 检查vLLM服务是否正常运行的
llm.log - 调整
max_tokens参数减少生成长度
问题2:生成的纪要不够准确
- 优化提示词,提供更明确的格式要求
- 调整temperature参数(0.3-0.7之间尝试)
问题3:Chainlit界面无法访问
- 检查端口是否被占用
lsof -i :8000 - 尝试指定其他端口
chainlit run app.py -p 8001
问题4:历史记录丢失
- 实现持久化存储,如保存到文件或数据库
- 定期备份会议数据
7. 总结与下一步建议
通过这个教程,你已经成功构建了一个功能完整的AI会议纪要工具。这个工具不仅能够实时记录会议内容,还能智能生成结构化的纪要,大大提高了会议效率。
你已经掌握的核心技能:
- 使用vLLM部署和调用ERNIE大模型
- 用Chainlit快速构建AI应用前端
- 实现对话历史管理和会议纪要生成
- 优化提示词获得更好的生成效果
下一步可以尝试的扩展:
- 添加多语言支持,让工具能处理英文会议
- 集成日历API,自动关联日程安排
- 添加语音识别功能,直接转录语音会议
- 实现团队协作功能,共享会议纪要
记得在实际使用中根据你们的会议特点调整提示词和功能,让工具更贴合你们的实际需求。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。