胡萝卜AI
AI Agent with Multi-Server Streaming & Multi-Language Support
Flutter Frontend + FastAPI Backend
🚀 Experience online now | SaaS Client download
🇨🇳 阅读中文文档
______________________________________________________________________
🥕 引言
CarrotAI是一款尖端的AI代理应用程序,通过服务器发送事件(SSE)和内置模型控制协议(MCP)集成的可流式HTTP提供实时流式聊天。它支持与多个SSE MCP服务器的并发连接,并提供英语、中文和日语的用户界面。
🚀 特性
- AI 代理:由SSE和MCP适配器支持的实时聊天,提供无缝的对话体验。
- 多服务器支持:同时连接并调用多个SSE MCP服务器以聚合智能响应。
- 多语言:英语完全本地化,中文 (中文),以及日本語 (日语)。
- 深度思维模式:复杂或多步骤查询的高级分析。
- 认证:使用JWT令牌保护登录/注册流程。
- 响应式用户界面:适用于移动、桌面和网络平台的自适应设计。
- 主题定制:亮/暗模式、自定义种子颜色和动态材质3主题化
dynamic_color. - 文件上传:在对话中附加和解析文件,以获得更丰富的上下文。
🤖 支持的模型API
- 深度求索:具有强大推理能力的高级语言模型
🛠️ 技术栈
前端
- 框架:颤振
- 状态管理:提供商
- 用户界面:材料设计3
- 本地化:扑动发电机-110n
- 支持主题:动态_颜色
后端
- 框架:FastAPI
- 流媒体:服务器发送事件(SSE)
- 人工智能集成:DeepSeek LLM、MCP(模型控制协议)
- 数据库:PostgreSQL+SQLAlchemy
- 认证:JSON Web令牌
- 迁移:Alembic
- 部署:乌维科恩和古尼科恩
📋 先决条件
- Flutter SDK ^3.7.2
- Python>=3.12
- PostgreSQL
⚡ 快速开始
请确保已安装。 紫外线
# Clone repository
git clone https://github.com/Xingsandesu/CarrotAI.git && cd CarrotAI
# Deal with environment variables
mv backend/.env.example backend/.env && mv .env.example .env
# Edit environment variables
vim .env
vim backend/.env
# Temporarily start PostgreSQL
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d postgres
# Backend setup
uv run backend/scripts/startup.py --user --email --username --password
# Stop PostgreSQL
docker-compose -f docker-compose.yml -f docker-compose.override.yml down
# Deal with Config
vim config/
# Run Backend
docker compose up -d
🔧 安装
后端设置
- 导航到后端目录:
cd backend- 创建并激活虚拟环境:
uv sync- 复制示例环境文件:
cp .env.example .env- 应用数据库迁移:
uv run scripts/init_db.py && uv run scripts/init_config.py- 运行服务器:
python main.py # Development mode
python main.py prod # Production mode with Gunicorn前端设置
- 返回到项目根目录:
cd ..- 获取Flutter依赖项:
flutter pub get- 生成本地化文件:
flutter gen-l10n- 启动应用程序:
flutter run- 为web构建:
flutter build web --wasm🌐 配置
- 前端:编辑
lib/core/config/app_config.dart用于API端点和主题化默认值。 - 后端:配置
.env和backend/app/core/config.py用于数据库和MCP服务器。
后端配置文件
后端使用位于以下位置的JSON文件 backend/config/ 定义模型、MCP服务器和自定义适配器。以下是默认文件夹结构:
backend/config/
├── model_configs.json # LLM model definitions and metadata
├── mcp_servers.json # SSE MCP server endpoints and env settings
└── app/ # Custom adapter definitions
└── duckduckgo-search.jsonmodel_configs.json
定义CarrotAI的可用LLM模型。每个条目包括:
id(string):唯一的模型标识符。icon(string):用于显示的图标名称。translations(对象):本地化名称和描述(zh,en,ja).exclusiveRules(对象):功能的切换和排除规则。
例子:
[
{
"id": "deepseek",
"icon": "smart_toy_outlined",
"translations": {
"zh": { "name": "DeepSeek", "description": "专注于深度思考和复杂推理的满血模型" },
"en": { "name": "DeepSeek", "description": "Powerful Chinese large model focused on deep thinking and complex reasoning" },
"ja": { "name": "DeepSeek", "description": "深い思考と複雑な推論に特化した強力な中国語大規模モデル" }
},
"exclusiveRules": {
"deepThinking": { "enabled": true, "excludes": ["mcpServices"] },
"mcpServices": { "enabled": true, "excludes": ["deepThinking"] }
}
}
]mcpservers.json
指定SSE模型控制协议(MCP)端点。格式:
- 关键字:服务名称。
url(字符串):SSE端点URL。env(object):适配器的环境变量。
例子:
{
"serviceA": {
"url": "http://localhost:10000/sse",
"env": {
"API_KEY": "your_api_key"
}
}
}自定义适配器(app/*.json)
将自定义MCP适配器放入 backend/config/app/每个文件定义:
id(string):适配器标识符。icon(字符串):表情符号或图标名称。mcpServer(object):结构与中的条目相同mcp_servers.json.translations(对象):本地化UI元数据。
示例(duckduckgo-search.json):
{
"id": "duckduckgo-search",
"icon": "🔍",
"mcpServer": {
"url": "http://localhost:10000/duckduckgo-search",
"env": {}
},
"transportType": "sse",
"translations": {
"en": { "name": "DuckDuckGo Search", "type": "Search Tool", "description": "Use DuckDuckGo search engine for secure and private web searches" },
"zh": { "name": "DuckDuckGo搜索", "type": "搜索工具", "description": "使用DuckDuckGo搜索引擎进行安全、私密的网络搜索" },
"ja": { "name": "DuckDuckGo検索", "type": "検索ツール", "description": "DuckDuckGo検索エンジンを使用して安全でプライベートなウェブ検索を行います" }
}
}用法
- 初始化默认配置:
uv run scripts/init_config.py- 修改JSON文件
backend/config/添加或更新模型和端点。 - 重新启动后端服务器以应用更改。
🔧 环境变量
后端(.env)
| 关键字 | 描述 | 默认值 |
|---|---|---|
| DATABASE_URL | PostgreSQL连接URL | *必需的* |
| BACKEND_CORS_ORIGINS | 允许的CORS源(逗号分隔) | \[\] |
| MCP_SERVERS | SSE MCP服务器端点的JSON列表 | *必需的* |
| SECRET_KEY | JWT密钥 | *必需的* |
前端(lib/core/config/app_config.dart)
static String get baseUrl => "http://127.0.0.1:8000";💡 用法
- 启动后端和前端,如快速入门所示。
- 在浏览器或移动模拟器中打开应用程序。
- 注册或登录以获取JWT令牌。
- 使用深度思维模式或默认聊天模式与AI代理进行交互。
- 在MCP服务器之间切换或在“设置”下添加新端点。
🔗 api参考
访问交互式Swagger UI:
http://127.0.0.1:8000/docs🛣️ 路线图
- \[x\] SSE多服务器支持
- \[x\] Multi-language (EN, 中文,日本语)
- \[x\] Docker编写设置
- \[x\] 流式HTTP支持
- \[\]本地Stdio多服务器支持
- \[\]本地OCR支持
- \[\]支持更多格式的上传界面
- \[\]前端自定义提示
- \[\]更多型号支持
- \[\]更多语言支持
🛡️ 安全
- 认证:所有后端端点均采用JWT保护;安全地存储在加密存储器中的令牌。
- 数据保护:在生产中使用HTTPS;通过配置允许的CORS源
BACKEND_CORS_ORIGINS在……里面.env. - 秘密管理:定义
SECRET_KEY在……里面.env;确保没有秘密被提交给源头控制。
🔍 监控和记录
- 服务器日志:已配置
gunicorn.conf.py;访问和错误日志logs/. - 应用程序日志:使用Loguru进行结构化日志记录;前端禁用
debugPrint在释放模式下。
🚀 性能与优化
- 缓存:前端缓存静态资产;后端为PostgreSQL使用异步连接池。
- 捆绑尺寸:使用构建的Web工件
--wasm以优化交付。
🗂️ 更新日志
所有显著变化均记录在 更改日志.md.
📱 截图
🤝 贡献
欢迎投稿!请打开一个包含您的建议的Pull Request。
📄 许可证
该项目根据CarrotAI开源许可证获得许可。请参阅 许可证 文件以获取详细信息。
