# xb-ollamachat **Repository Path**: pythonxueba/xb-ollamachat ## Basic Information - **Project Name**: xb-ollamachat - **Description**: 一个现代化的 Ollama Web UI,支持多服务器、模型管理、流式对话和分享功能 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-08 - **Last Updated**: 2026-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ollama Web UI 一个现代化的 Ollama Web UI,支持自动发现可用的 Ollama 服务器、模型管理和流式对话。 ## 功能特性 ### 🌐 服务器自动收集 - **网页爬取**:使用 Playwright 真实浏览器爬取 Shodan,发现可用的 Ollama 服务器 - **定时验证**:每小时自动验证服务器可用性,移除不可用服务器 - **模型检测**:自动检测每个服务器的模型列表和变化 - **本地扫描**:自动检测本地所有网络接口的 IPv4 地址 - **手动添加**:支持手动添加自定义服务器 - **无需 API Key**:通过真实浏览器爬取,不需要 Shodan API Key ### 💬 智能聊天界面 - **流式响应**:基于 SSE 的实时流式输出,打字机效果 - **多模型支持**:显示所有已安装的模型,可随意切换 - **消息管理**:支持复制消息、清空对话历史 - **快速切换**:点击服务器直接进入聊天界面 - **自定义端口**:支持非标准端口(如 3306) ### 🎨 现代化设计 - **玻璃态 UI**:采用玻璃拟态设计风格 - **渐变背景**:深色渐变背景配合紫色主题 - **响应式布局**:完美适配各种屏幕尺寸 - **流畅动画**:平滑的过渡和交互效果 ### 🔧 模型管理 - **模型安装**:支持直接在界面中安装新模型 - **进度显示**:实时显示安装进度和状态 - **列表刷新**:安装完成后自动刷新模型列表 ## 快速开始 ### 安装依赖 ```bash pnpm install ``` ### 安装 Playwright 浏览器 ```bash npx playwright install chromium ``` ### 配置测试服务器(可选) 在 `src/app/api/ips/route.ts` 文件中可以配置测试服务器: ```typescript const TEST_SERVERS = [ '107.20.129.20:3306', // 示例测试服务器(包含5个模型) // 添加更多测试服务器... ]; ``` ### 启动开发服务器 ```bash pnpm dev ``` 应用将在 `http://localhost:5000` 启动。 ## 使用说明 ### 自动收集机制 系统会自动执行以下操作: 1. **初始化时**:首次启动时自动爬取 Shodan 并收集服务器 2. **定时任务**:每小时自动验证所有已收集的服务器 3. **自动清理**:自动移除不可用的服务器 4. **模型检测**:检查每个服务器的模型列表是否有变化 ### 1. 查看服务器列表 1. 访问应用首页,系统会自动显示已收集的可用服务器 2. 每个服务器卡片显示: - 服务器地址(支持自定义端口) - 在线状态(仅显示可用服务器) - 可用模型数量 - 模型列表预览(前3个) 3. 顶部统计面板显示: - 可用服务器总数 - 总模型数 - 上次更新时间(分钟前) ### 2. 添加服务器 1. 点击右上角的"添加服务器"按钮 2. 输入服务器地址(例如:107.20.129.20:3306) 3. 点击"添加"按钮 4. 系统会自动验证服务器并获取模型列表 ### 3. 刷新服务器列表 - 点击右上角的"刷新"按钮 - 系统会立即重新爬取 Shodan 和验证所有服务器 - 刷新过程中按钮显示"刷新中..." ### 4. 开始对话 1. 在服务器列表中点击任意服务器卡片 2. 进入聊天界面后,从左侧边栏选择一个模型(显示所有已安装的模型) 3. 在输入框中输入消息 4. 点击"发送"按钮或按 Enter 键 5. AI 助手会以流式方式逐字输出回复 ### 5. 安装模型 1. 进入聊天界面 2. 点击左侧边栏的"安装模型"按钮 3. 输入模型名称(例如:llama2, codellama, mistral) 4. 点击"安装"按钮 5. 系统会显示实时安装进度 6. 安装完成后自动刷新模型列表 ### 6. 聊天功能 - **复制消息**:点击 AI 回复右上角的复制图标 - **清空对话**:点击左侧边栏的"清空"按钮 - **切换模型**:随时可以从左侧边栏切换不同的模型 - **返回列表**:点击左上角的"返回服务器列表"按钮 ## API 接口 ### 获取服务器列表 ``` GET /api/ips ``` 响应示例: ```json { "success": true, "data": { "servers": [ { "host": "107.20.129.20:3306", "models": [ { "name": "codellama:13b", "size": 7365960935, "modified_at": "2023-11-04T14:56:49.277302595-07:00" }, { "name": "llama3:latest", "size": 3825819519, "modified_at": "2023-12-07T09:32:18.757212583-08:00" } ], "modelCount": 5 } ], "total": 1, "lastUpdated": 1767851378970, "timeSinceUpdate": 0 } } ``` ### 手动添加服务器 ``` POST /api/ips/add Content-Type: application/json { "host": "107.20.129.20:3306" } ``` ### 获取模型列表 ``` GET /api/models?host=107.20.129.20:3306 ``` ### 发送聊天消息 ``` POST /api/chat Content-Type: application/json { "messages": [ { "role": "user", "content": "Hello" } ], "model": "llama3:latest", "host": "107.20.129.20:3306" } ``` 返回 SSE 流式响应。 ### 安装模型 ``` POST /api/models/install Content-Type: application/json { "modelName": "llama2", "host": "107.20.129.20:3306" } ``` 返回 SSE 流式响应,包含安装进度。 ## 技术实现 ### 后端技术栈 - **真实浏览器爬取**:使用 Playwright 爬取 Shodan 搜索页面 - **定时任务**:使用 Node.js setInterval 实现每小时验证 - **缓存机制**:内存缓存服务器列表,减少重复请求 - **并发验证**:使用 Promise.allSettled 并发检查所有服务器 - **自动清理**:仅返回可用的服务器,不可用的自动过滤 ### 前端技术栈 - **前端框架**:Next.js 16 (App Router) - **UI 组件**:React 19 + Tailwind CSS 4 - **类型安全**:TypeScript 5 - **样式方案**:Tailwind CSS 4(原生支持) ### 定时任务机制 ```typescript // 每小时执行一次验证 setInterval(() => { collectServers(); }, 60 * 60 * 1000); // 1 小时 ``` ### 真实浏览器爬取 ```typescript // 使用 Playwright 爬取 Shodan 搜索页面 const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://www.shodan.io/search?query=port:11434+product:"Ollama"'); // 提取所有 IP 地址 const ips = await page.$$eval('a[href*="/host/"]', elements => elements.map(el => el.getAttribute('href')) ); await browser.close(); ``` ## 注意事项 1. **端口配置**: - 默认 Ollama 运行在 11434 端口 - 支持自定义端口(如测试服务器使用 3306) 2. **网络访问**: - 网页爬取需要网络连接 - 如果无法访问 Shodan,系统会继续使用已缓存的服务器 3. **超时设置**: - 服务器检测超时时间为 5 秒 - 服务器添加验证超时时间为 10 秒 - 超时或失败的服务器会被自动过滤 4. **定时验证**: - 默认每小时验证一次 - 可以在代码中调整验证间隔 5. **缓存机制**: - 服务器列表缓存在内存中 - 重启服务后会重新收集 6. **模型安装**: - 需要服务器有足够的磁盘空间 - 大模型下载可能需要较长时间 - 安装过程中不要关闭页面 ## 本地开发 Ollama 如果你本地想测试,需要先安装并启动 Ollama: ```bash # macOS brew install ollama ollama serve # 下载一个模型 ollama pull llama2 # 运行 ollama run llama2 ``` ## 测试服务器 系统预置了一个测试服务器: - **地址**:107.20.129.20:3306 - **模型**:codellama:13b, llama3:latest, llama2:latest, openchat:7b, deepseek-r1:latest - **状态**:已验证可用 ## 许可证 MIT License