AI网络聊天界面
一个极简主义的web UI,用于与多个AI模型提供商(Ollama、OpenAI、Google、OpenRouter和Claude)进行交互,并支持MCP(模型上下文协议)HTTP SSE。
特性
- 🤖 多个AI提供商:支持Ollama、OpenAI、Claude、谷歌和OpenRouter
- 💬 实时流媒体:用于流式响应的服务器发送事件(SSE)
- 🔌 MCP集成:使用JSON-RPC 2.0对模型上下文协议服务器的HTTP SSE支持
- 🛠️ 工具调用:全面支持所有提供商的MCP工具发现和执行
- 🔍 QA代理:使用可配置的后续模型进行数据验证的自动响应验证
- 📊 实时统计:实时查询统计数据,包括到第一个令牌的时间、令牌/秒和总时间
- 📋 活动日志:侧边栏中的逐步活动跟踪,显示连接、思维、流媒体和工具状态
- 🎨 极简主义UI:简洁、深色主题的聊天界面,布局紧凑
- 🐳 Docker化:使用Docker和Docker Compose轻松部署
- 🔄 实时状态:具有可折叠详细信息的实时MCP连接状态监控
- ⌨️ 命令历史:向上/向下箭头可浏览以前的消息
- 📦 可折叠工具:单击工具调用展开/折叠JSON详细信息
- 🧠 思维模型支持:扩展了qwen3-next等推理模型的超时和状态更新
快速开始
使用Docker Compose(推荐)
- 克隆和配置:
cd /home/toor/AI-Web2
cp .env.example .env
# Edit .env and add your API keys- 构建并运行:
docker-compose up --build- 访问用户界面:
- 打开浏览器http://localhost:5005
手动安装
- 安装依赖项:
pip install -r requirements.txt- 设置环境变量:
export OPENAI_API_KEY="your-key-here"
export ANTHROPIC_API_KEY="your-key-here"
export GOOGLE_API_KEY="your-key-here"
export OPENROUTER_API_KEY="your-key-here"
export OLLAMA_BASE_URL="http://localhost:11434"
export MCP_SERVER_URL="http://your-mcp-server"- 运行应用程序:
python app.py配置
环境变量
OPENAI_API_KEY:您的OpenAI API密钥ANTHROPIC_API_KEY:您的Anthropic Claude API密钥GOOGLE_API_KEY:您的Google AI API密钥OPENROUTER_API_KEY:您的OpenRouter API密钥OLLAMA_BASE_URL:Ollama服务器的URL(默认值:http://localhost:11434)OLLAMA_KEEP_ALIVE:模型在内存中加载的时间(默认值:1h,示例:“5m”、“30m”、“1h”、“-1”表示从不卸载)MCP_SERVER_URL:MCP HTTP SSE服务器的URL(旧版,可选)MCP_AUTH_TOKEN:MCP服务器的承载令牌(传统,可选)MCP_SERVERS:多个命名MCP服务器的JSON配置(见下文)SYSTEM_PROMPT:AI助手的自定义系统提示(可选,默认:“你是一个有用的AI助手。”)
QA代理配置
QA_AGENT_ENABLED:启用/禁用QA代理响应验证(默认值:false)QA_AGENT_MODEL:Ollama模型用于后续问题(默认:gpt-oss:最新)QA_AGENT_MAX_RETRIES:如果响应缺少数据,则最大重试次数(默认值:1)
支持的型号
奥拉玛:可配置的型号列表(自动检测可用,但默认禁用)。默认型号包括:
- 骆驼4:最新
- qwen3下一篇:最新(具有扩展推理的思维模型)
- 深寻编码器:33b
- 骆驼3:最新
- 吉玛书3:12b
- 腓3:14b
- qwen3:8b
- 花岗岩4:最新
- llama3.2:最新
开放人工智能 (默认情况下禁用,在代码中取消注释):
- gpt-4o
- gpt-4o-mini
- gpt-4涡轮增压器
- gpt-3.5涡轮增压
克劳德:
- 克洛德·奥布斯-4-5-2251101
- claude-haiku-4-5-20251001
- claude-sonnet-4-5-20250929
谷歌 (默认情况下禁用,在代码中取消注释):
- 双子座-2.0闪光
- 双子座-1.5-pro
- 双子座-1.5-flash
开放路由 (默认情况下禁用,在代码中取消注释):
- 人型/claude-3.5onnet
- openai/gpt-4o
- 谷歌/双子座-2.0-flash-exp
API终点
获取 /
主聊天界面
获取 /api/providers
获取可用的提供商及其模型
获取 /api/mcp/status
检查MCP服务器连接状态
发布 /api/chat
发送聊天消息(流式SSE响应)
请求体:
{
"messages": [{"role": "user", "content": "Hello"}],
"provider": "ollama",
"model": "llama2"
}获取 /api/mcp/tools
获取可用的MCP工具
发布 /api/mcp/call
调用MCP工具
请求体:
{
"tool": "tool_name",
"arguments": {}
}MCP集成
该应用程序支持通过HTTP SSE连接到多个命名的MCP(模型上下文协议)服务器。
单MCP服务器(旧版)
export MCP_SERVER_URL="https://your-mcp-server/mcp/"
export MCP_AUTH_TOKEN="your-bearer-token"多个命名MCP服务器
使用JSON格式配置多个MCP服务器:
export MCP_SERVERS='{"huginn": {"url": "https://huginn.example.com/mcp/", "auth_token": "token1"}, "local": {"url": "http://localhost:8080/mcp/", "auth_token": ""}}'或者在你的 .env 文件:
MCP_SERVERS={"huginn": {"url": "https://huginn.freakshowindustries.net/mcp/", "auth_token": "your-token"}, "local": {"url": "http://localhost:8080/mcp/", "auth_token": ""}}MCP服务器配置格式
每个MCP服务器都需要:
- 名字:服务器的唯一标识符(用作密钥)
- 网址:HTTP SSE端点URL(必须以结尾
/) - auth_token:用于身份验证的可选承载令牌
UI将在标头中显示所有已配置服务器的连接状态。单击MCP状态栏展开并查看每个服务器的详细连接信息。
工具调用
该应用程序会自动从所有配置的MCP服务器中发现工具,并将其提供给AI模型。当模型决定使用工具时:
- 工具调用显示在橙色框中(单击展开详细信息)
- 该工具通过相应的MCP服务器执行
- 结果显示在绿色框中(单击展开详细信息)
- 对话继续,工具结果
备注:一些Olama模型(如DeepSeek)不支持工具调用。应用程序将自动重试,而不使用这些模型的工具。
QA代理
QA代理验证模型响应,并在响应缺乏具体数据时自动请求澄清。这对于确保数据查询实际返回数据而不是解释非常有用。
配置:
QA_AGENT_ENABLED=true
QA_AGENT_MODEL=gpt-oss:latest
QA_AGENT_MAX_RETRIES=1它是如何工作的:
- 主模型响应后,QA Agent分析响应
- 如果响应缺少具体数据(数字、表格、实际值),则会触发后续操作
- 后续使用配置的QA模型请求特定数据
- 附加响应将附加到对话中
UI功能
统计栏
位于输入区域下方,显示实时查询统计信息:
- 状态:当前状态(空闲、思考、流媒体、完成)
- 时间:总运行时间
- TTFT:第一个令牌的时间
- 代币:生成的令牌数量
- 速度:每秒令牌数
活动日志
位于侧边栏中,显示逐步进度:
- 🚀 查询已开始
- 🔌 连接到模型
- 🧠 模型思维/推理
- 📡 流媒体响应
- 🔧 工具调用
- ✅ 工具结果
- 🔍 QA代理操作
- ✓ 完成统计
Docker详细信息
- 端口: 5005
- 基本图像:python:3.11-slim
- 卷装载:安装应用程序代码,以便在开发过程中进行热重新加载
构建Docker镜像
docker build -t ai-web-chat .使用Docker运行
docker run -p 5005:5005 \
-e OPENAI_API_KEY="your-key" \
-e ANTHROPIC_API_KEY="your-key" \
ai-web-chat发展
该应用程序使用Flask,并在开发模式下启用热重新加载。修改代码后,服务器将自动重新启动。
项目结构
AI-Web2/
├── app.py # Flask backend with API endpoints
├── templates/
│ └── index.html # Frontend UI
├── Dockerfile # Docker configuration
├── docker-compose.yml # Docker Compose setup
├── requirements.txt # Python dependencies
├── .env.example # Example environment variables
└── README.md # This file故障排除
Ollama连接问题
如果在本地运行Olama,请使用 host.docker.internal:11434 而不是 localhost:11434 在Docker中运行时。
API密钥错误
确保在您的 .env 文件和文件位于同一目录中 docker-compose.yml.
MCP连接
验证您的MCP服务器是否正在运行,并且可以从Docker容器访问。检查UI标题中的状态指示器。
ROCm GPU问题(Fedora与AMD Radeon 8060S/gfx1151)
如果您在使用ROCm的Fedora上遇到某些大型型号(如deepseek-r1:70b)的GPU挂起问题:
- 安装缺少的libdrm库:
sudo dnf install -y libdrm libdrm-devel- 推理过程中检查GPU温度:
watch -n 1 rocm-smi --showtemp- 将ROCm更新到最新版本:
sudo dnf upgrade rocm-*- 验证GPU架构支持:
rocminfo | grep "Marketing Name"
rocm-smi --showproductname- 已知问题:
- deepseek-r1:70b:导致GPU挂在带有ROCm 6.4.2的gfx1151(Radeon 8060S)上 - 变通方案:使用替代模型,如 gpt-oss:120b, mixtral:8x22b,或 llama4:latest - 根本原因:新的RDNA 3.5架构可能存在ROCm驱动程序兼容性问题
- 检查Ollama日志中的GPU错误:
sudo journalctl -u ollama -f如果GPU挂起持续存在,则模型可能会触发硬件异常。使用较小的量化或替代模型,直到gfx1151的ROCm支持得到改善。
许可证
MIT许可证-可根据需要自由使用和修改。
贡献
欢迎投稿!请随时提交问题或拉取请求。
