# langchat-slides
**Repository Path**: langchat/langchat-slides
## Basic Information
- **Project Name**: langchat-slides
- **Description**: LangChat Slides 是一款基于生成式 AI 的智能幻灯片生成工具
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: https://slide.langchat.cn
- **GVP Project**: No
## Statistics
- **Stars**: 31
- **Forks**: 10
- **Created**: 2025-12-30
- **Last Updated**: 2026-02-09
## Categories & Tags
**Categories**: ai
**Tags**: None
## README
# LangChat Slides - 新一代 AI 幻灯片生成器
**LangChat Slides** 是一款基于生成式 AI 的智能幻灯片生成工具,由 LangChat 团队开发。

[](LICENSE)
[](https://github.com/LangChat/langchat-slides)
[](https://github.com/LangChat/langchat-slides)
[官网](https://www.langchat.cn) · [在线预览](https://slides.langchat.cn) · [文档](docs) · [GitHub](https://github.com/LangChat/langchat-slides) · [报告问题](mailto:langchat@outlook.com)
**[English README](README.md)** | **[🇨🇳 中文文档](README_CN.md)**
---
## 📖 关于 LangChat Pro
**LangChat Pro** 是一个企业级 AIGC(AI 生成内容)平台,基于 Spring Boot 3 + LangChain4j + Vue3 + VueFlow 开发的全栈 AI 应用系统。
**LangChat Slides** 是 LangChat Pro 的旗舰产品之一,利用 LangChat 的强大模型能力与 `@antv/infographic` 的可视化引擎,用户只需输入自然语言描述,即可实时生成结构清晰、设计精美的信息图幻灯片。
### 💎 关于 LangChat Pro 商业版
**LangChat Pro** 是基于 Java 生态构建的**企业级 AIGC 应用开发平台商业版**,为企业提供完整的 AI 大模型集成解决方案。基于 Spring Boot 3 和 Vue 3 构建,支持快速构建智能知识库、多模态 AI 应用和智能工作流,助力企业实现 AI 驱动的数字化转型。
**产品官网**: http://langchat.cn/
**开源版地址**: https://github.com/tycoding/langchat (基础功能体验)
**商业版咨询**: 添加微信 **LangchainChat** (备注:公司名称 + [具体咨询内容])

---
## 🎯 产品功能

### 🎨 核心能力
- **🤖 AI 驱动生成**:通过自然语言描述即时生成专业幻灯片
- **⚡ 实时流式生成**:所见即所得,AI 思考的同时幻灯片即刻渲染
- **🎯 智能布局**:基于声明式可视化语法,自动适配最佳排版,告别繁琐的 PPT 拖拽
- **💬 对话式编辑**:通过与 AI 对话进行优化——"把标题改成红色"或"增加一个时间轴"
- **📄 多页支持**:生成多张幻灯片,支持缩略图导航
- **🎨 丰富模板**:30+ 内置信息图模板(时间轴、图表、列表等)
- **🌐 主题定制**:支持浅色/深色模式,多种配色方案
- **📤 便捷导出**:一键导出为 PDF、PNG、SVG、JPG、WebP 或 PPT
### 🎨 视觉体验
- **现代 UI**:基于 Shadcn UI 和 Tailwind CSS 构建,界面简洁、精致、极致体验
- **响应式布局**:完美适配不同屏幕尺寸
- **实时预览**:输入或调整时即时反馈
- **代码编辑器**:直接查看和编辑幻灯片语法,实时渲染
### 🧠 AI 智能化
- **智能理解**:将自然语言解读为合适的布局
- **流式响应**:AI 思考和生成时实时更新内容
- **Markdown 兼容**:自动处理带 markdown 代码块的 AI 响应
- **多模型支持**:兼容 OpenAI GPT-4、GPT-3.5 等模型
### 🛠️ 高级功能
- **替换/追加模式**:选择替换或追加新幻灯片
- **自定义幻灯片**:使用信息图语法手动创建幻灯片
- **幻灯片管理**:添加空白幻灯片、清空所有幻灯片、切换页面
- **缩放控制**:画布缩放范围从 50% 到 250%
- **快捷键支持**:高效的工作流程
- **国际化支持**:内置中文和英文语言选项
---
## 🏗️ 项目架构
### 整体架构
```
┌─────────────────────────────────────────────────────────────┐
│ LangChat Slides │
│ (Vue 3 + TypeScript) │
├─────────────────────────────────────────────────────────────┤
│ UI 层 │
│ ├── App.vue (主容器) │
│ ├── 布局组件 │
│ │ ├── Header (导航与设置) │
│ │ └── ResizablePanel (分屏视图) │
│ │ ├── 左侧面板 (输入与代码) │
│ │ │ ├── ControlBar (主题与页码控制) │
│ │ │ ├── PromptInput (聊天输入) │
│ │ │ ├── ExampleGenerator (快速模板) │
│ │ │ └── CodeEditor (语法编辑器) │
│ │ └── 右侧面板 (预览与导航) │
│ │ ├── SlidesContainer │
│ │ │ ├── SlideThumbnail (页面导航) │
│ │ │ └── SlidesCanvas │
│ │ │ ├── SlidesHeader (工具栏) │
│ │ │ └── SlidePreview (画布) │
│ │ └── SlideWelcome (空状态) │
│ └── 对话框组件 │
│ ├── SettingsDialog (API 配置) │
│ └── CustomSlideDialog (手动输入) │
├─────────────────────────────────────────────────────────────┤
│ 业务逻辑层 │
│ ├── useSlideGenerator (幻灯片生成逻辑) │
│ │ ├── 流式响应处理 │
│ │ ├── Markdown 清理 │
│ │ └── 多页生成 │
│ └── useI18n (国际化) │
├─────────────────────────────────────────────────────────────┤
│ 状态管理 (Pinia Store) │
│ └── useAppStore │
│ ├── 幻灯片状态 (slides[], currentIndex) │
│ ├── 主题状态 (dark/light, palette, sketch) │
│ ├── API 配置 (apiKey, baseUrl, model) │
│ ├── UI 状态 (isStreaming, canvasScale) │
│ └── 导出状态 (exportRequest) │
├─────────────────────────────────────────────────────────────┤
│ 集成层 │
│ ├── useAI (OpenAI API 集成) │
│ │ ├── 流式聊天 (实时) │
│ │ └── 错误处理 │
│ └── @antv/infographic (可视化引擎) │
│ ├── 幻灯片渲染 │
│ ├── 主题应用 │
│ └── 导出 (PNG/SVG/PDF) │
├─────────────────────────────────────────────────────────────┤
│ 工具层 │
│ ├── slide-utils.ts (模板管理) │
│ └── utils.ts (辅助函数) │
└─────────────────────────────────────────────────────────────┘
```
### 数据流
```
用户输入 (提示词)
↓
┌─────────────────────────────────────────┐
│ 1. 输入处理 │
│ - 捕获提示词 │
│ - 选择主题和页码 │
│ - 配置 AI 模型 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 2. AI 请求 (流式) │
│ - 发送到 OpenAI API │
│ - 实时接收数据块 │
│ - 清理 markdown 代码块 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 3. 内容解析 │
│ - 提取信息图语法 │
│ - 验证结构 │
│ - 创建幻灯片对象 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 4. 状态更新 (Pinia) │
│ - 更新幻灯片数组 │
│ - 设置当前幻灯片索引 │
│ - 触发响应式更新 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 5. 实时渲染 │
│ - 更新 CodeEditor (左侧) │
│ - 更新 SlidePreview (右侧) │
│ - 检查语法完整性 │
│ - 使用 @antv/infographic 渲染│
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 6. 用户交互 │
│ - 在 CodeEditor 中手动编辑 │
│ - 点击缩略图导航 │
│ - 调整主题/设置 │
│ - 触发重新渲染 │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 7. 导出 (可选) │
│ - 画布转图片 (html2canvas) │
│ - 图片转 PDF (jspdf) │
│ - 下载文件 │
└─────────────────────────────────────────┘
```
---
## 📁 目录结构
```
langchat-slides/
├── docs/ # 文档目录
│ ├── infographic-api.md # 信息图 API 参考
│ ├── PPT_EXPORT_GUIDE.md # 导出指南
│ ├── PRODUCT.md # 产品文档
│ ├── REQUIREMENTS.md # 需求与实施方案
│ ├── slides.gif # 演示 GIF
│ └── workflows.jpg # 工作流图
│
├── public/ # 静态资源
│ └── favicon.ico # 网站图标
│
├── src/
│ ├── api/ # API 集成层
│ │ └── ai.ts # OpenAI API 封装(支持流式)
│ │
│ ├── assets/ # 静态资源
│ │ └── prompts/ # AI 系统提示词
│ │ ├── prompt.md # 英文提示词模板
│ │ └── prompt.zh-CN.md # 中文提示词模板
│ │
│ ├── components/ # Vue 组件
│ │ ├── chat/ # 聊天相关组件(已弃用)
│ │ │ ├── ChatContainer.vue
│ │ │ ├── ChatInput.vue
│ │ │ ├── ChatMessage.vue
│ │ │ └── ChatOverlay.vue
│ │ │
│ │ ├── layout/ # 布局组件
│ │ │ ├── CustomSlideDialog.vue # 手动幻灯片输入
│ │ │ ├── Header.vue # 顶部导航
│ │ │ ├── SettingsDialog.vue # API 设置
│ │ │ └── index.ts
│ │ │
│ │ ├── panel/ # 左侧面板组件
│ │ │ ├── CodeEditor.vue # 语法代码编辑器
│ │ │ ├── ControlBar.vue # 主题与页码控制
│ │ │ ├── PromptInput.vue # 聊天输入
│ │ │ └── index.ts
│ │ │
│ │ ├── slides/ # 幻灯片渲染组件
│ │ │ ├── SlidePreview.vue # 主预览画布
│ │ │ ├── SlidesCanvas.vue # 画布容器
│ │ │ ├── SlidesContainer.vue # 幻灯片列表与缩略图
│ │ │ ├── SlidesHeader.vue # 工具栏(缩放、导出等)
│ │ │ ├── SlidesWelcome.vue # 空状态
│ │ │ ├── SlideThumbnail.vue # 页面缩略图
│ │ │ └── SlideControlPanel.vue
│ │ │
│ │ ├── ui/ # Shadcn UI 组件
│ │ │ ├── avatar/
│ │ │ ├── button/
│ │ │ ├── card/
│ │ │ ├── dialog/
│ │ │ ├── dropdown-menu/
│ │ │ ├── input/
│ │ │ ├── label/
│ │ │ ├── navigation-menu/
│ │ │ ├── resizable/
│ │ │ ├── scroll-area/
│ │ │ ├── select/
│ │ │ ├── switch/
│ │ │ ├── textarea/
│ │ │ └── tooltip/
│ │ │
│ │ └── ExampleGenerator.vue # 示例模板选择器
│ │
│ ├── composables/ # Vue 组合式函数
│ │ ├── useI18n.ts # 国际化 Hook
│ │ └── useSlideGenerator.ts # 幻灯片生成逻辑
│ │
│ ├── examples/ # 示例模板
│ │ ├── ExampleGenerator.vue # 示例选择器组件
│ │ └── examples.ts # 示例数据(16 个模板)
│ │
│ ├── lib/ # 工具函数
│ │ ├── slide-utils.ts # 信息图模板与工具
│ │ └── utils.ts # 通用工具
│ │
│ ├── locales/ # 国际化翻译
│ │ ├── en.json # 英文翻译
│ │ └── zh.json # 中文翻译
│ │
│ ├── stores/ # Pinia 状态管理
│ │ └── useAppStore.ts # 主应用状态
│ │
│ ├── types/ # TypeScript 类型定义
│ │ └── index.ts # 共享类型
│ │
│ ├── App.vue # 根组件
│ ├── env.d.ts # 环境变量类型
│ ├── main.ts # 应用入口
│ └── style.css # 全局样式
│
├── components.json # Shadcn UI 配置
├── Dockerfile # Docker 构建配置
├── docker-compose.yml # Docker Compose 配置
├── index.html # HTML 入口
├── LICENSE # Apache 2.0 许可证
├── package.json # 依赖与脚本
├── pnpm-lock.yaml # 锁文件
├── README.md # 英文文档
├── README_CN.md # 本文件(中文文档)
├── tsconfig.app.json # TypeScript 配置(应用)
├── tsconfig.json # TypeScript 配置(基础)
├── tsconfig.node.json # TypeScript 配置(Node)
├── vite.config.d.ts # Vite 类型
└── vite.config.mts # Vite 构建配置
```
---
## 🛠️ 技术栈
### 前端框架
- **Vue 3**:渐进式 JavaScript 框架,使用组合式 API
- **TypeScript**:类型安全的开发体验
- **Vite 7**:下一代前端构建工具
### UI 与样式
- **Tailwind CSS v4**:实用优先的 CSS 框架,快速 UI 开发
- **Shadcn Vue**:美观、可访问、可定制的 UI 组件
- **Lucide Vue Next**:现代图标库
### 状态管理
- **Pinia**:直观、类型安全、灵活的 Vue 状态管理
### 可视化引擎
- **@antv/infographic**:强大的信息图可视化库
- 30+ 内置信息图模板
- 实时渲染和编辑
- 导出为 PNG、SVG、PDF
- 支持主题和配色方案
### AI 集成
- **OpenAI API**:前端直接集成
- 流式响应(服务器推送事件)
- 支持 GPT-4、GPT-3.5-turbo
- 可自定义模型选择
- Markdown 代码块处理
### 导出功能
- **html2canvas**:将 DOM 转换为画布
- **jspdf**:从图片生成 PDF
- **PptxGenJS**:生成 PowerPoint 文件
### 开发工具
- **ESLint**:代码质量和风格检查
- **TypeScript 严格模式**:增强类型安全
- **pnpm**:快速、节省磁盘空间的包管理器
---
## 🚀 快速开始
### 环境要求
- Node.js >= 20.x
- pnpm >= 8.x
- OpenAI API Key(或兼容的 API)
### 本地开发
1. **克隆仓库**
```bash
git clone https://github.com/LangChat/langchat-slides.git
cd langchat-slides
```
2. **安装依赖**
```bash
pnpm install
```
3. **配置环境变量**
```bash
cp .env.example .env
# 编辑 .env 文件,添加你的 OpenAI API Key
```
4. **启动开发服务器**
```bash
pnpm dev
```
访问 `http://localhost:5173`
5. **构建生产版本**
```bash
pnpm build
```
### Docker 部署
#### 使用 Docker Compose(推荐)
```bash
# 克隆并配置
git clone https://github.com/LangChat/langchat-slides.git
cd langchat-slides
cp .env.example .env
# 使用你的 API Key 编辑 .env
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
```
#### 直接使用 Docker
```bash
# 构建镜像
docker build -t langchat-slides .
# 运行容器
docker run -d \
--name langchat-slides \
-p 5173:5173 \
-e VITE_OPENAI_API_KEY=your-api-key \
langchat-slides
```
---
## 🌐 环境变量配置
在项目根目录创建 `.env` 文件:
```env
# OpenAI 配置
VITE_OPENAI_API_KEY=sk-your-api-key-here
VITE_OPENAI_BASE_URL=https://api.openai.com/v1
VITE_OPENAI_MODEL=gpt-4o
# 应用配置
VITE_DEFAULT_LOCALE=zh
VITE_APP_THEME=auto
```
---
## 📖 使用指南
### 创建幻灯片
1. **描述你的需求**:用自然语言输入幻灯片需求
- 示例:"创建一个展示 1950 年到 2024 年 AI 发展历史的时间轴"
- 示例:"为科技初创公司生成一个 SWOT 分析"
2. **选择模板**:从 30+ 信息图模板中选择(时间轴、图表、列表等)
3. **设置页码**:指定要生成多少页(1-10)
4. **实时生成**:看着 AI 实时生成并渲染幻灯片
5. **手动编辑**:在代码编辑器中直接编辑信息图语法
6. **导出**:点击导出按钮下载为 PDF、PNG、SVG、JPG、WebP 或 PPT
### 高级功能
**对话式编辑**
- "把主题颜色改成蓝色"
- "增加更多关于机器学习的细节"
- "把时间轴改成横向"
**手动幻灯片**
- 点击"自定义幻灯片"手动输入信息图语法
- 支持所有 @antv/infographic 模板
**幻灯片管理**
- 点击"+"添加空白幻灯片
- 点击缩略图在页面间导航
- 使用工具栏清空所有幻灯片或切换替换/追加模式
---
## 🎯 适用场景
- **📊 商务演示**:为会议和报告快速生成幻灯片
- **📚 教育培训**:将复杂概念转化为可视化时间轴和层级图
- **📈 数据可视化**:以吸引人的信息图格式展示结构化数据
- **🎨 创意设计**:快速原型制作和想法可视化
- **📝 文档制作**:创建可视化的文档和指南
- **💼 市场营销**:生成宣传材料和演示文稿
---
## 🤝 贡献指南
我们欢迎贡献!请随时提交 Pull Request。
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
---
## 📝 许可证
本项目采用 Apache License 2.0 许可证 - 详情请参见 [LICENSE](LICENSE) 文件。
---
## 📧 联系我们
- **官网**:https://www.langchat.cn
- **邮箱**:langchat@outlook.com
- **团队**:LangChat Team
---
## 🙏 致谢
- [OpenAI](https://openai.com/) - 提供强大的 AI 模型
- [AntV](https://antv.vision/) - 信息图可视化引擎
- [Vue.js](https://vuejs.org/) - 渐进式 JavaScript 框架
- [Shadcn](https://ui.shadcn.com/) - 精美的 UI 组件
- [Tailwind CSS](https://tailwindcss.com/) - 实用优先的样式框架
- [Vercel](https://vercel.com/) - 部署平台
---
**由 LangChat Team 用 ❤️ 开发**