CarrotAI 是一款前沿的AI代理应用程序,通过服务器发送事件(SSE)和可流式传输的HTTP提供实时聊天,并内置了模型控制协议(MCP)集成。它支持同时连接多个SSE MCP服务器,并提供了英文、中文和日语的用户界面。
dynamic_color实现的动态Material 3主题。请确保已安装。uv
# 克隆仓库
git clone https://github.com/Xingsandesu/CarrotAI.git && cd CarrotAI
# 处理环境变量
mv backend/.env.example backend/.env && mv .env.example .env
# 编辑环境变量
vim .env
vim backend/.env
# 临时启动PostgreSQL
docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d postgres
# 后端设置
uv run backend/scripts/startup.py --user --email <email> --username <name> --password <password>
# 停止PostgreSQL
docker-compose -f docker-compose.yml -f docker-compose.override.yml down
# 处理配置
vim config/
# 运行后端
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 # 开发模式
python main.py prod # 生产模式,使用Gunicorn
cd ..
flutter pub get
flutter gen-l10n
flutter run
flutter build web --wasm
lib/core/config/app_config.dart以设置API端点和主题默认值。.env和backend/app/core/config.py以设置数据库和MCP服务器。后端使用位于backend/config/的JSON文件来定义模型、MCP服务器和自定义适配器。以下是默认文件夹结构:
backend/config/
├── model_configs.json # LLM模型定义和元数据
├── mcp_servers.json # SSE MCP服务器端点和环境设置
└── app/ # 自定义适配器定义
└── duckduckgo-search.json
定义CarrotAI可用的LLM模型。每个条目包括:
id(字符串):唯一模型标识符。icon(字符串):用于显示的图标名称。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"] }
}
}
]
指定SSE模型控制协议(MCP)端点。格式:
url(字符串):SSE端点URL。env(对象):适配器的环境变量。示例:
{
"serviceA": {
"url": "http://localhost:10000/sse",
"env": {
"API_KEY": "your_api_key"
}
}
}
app/*.json)将自定义MCP适配器放置在backend/config/app/下。每个文件定义:
id(字符串):适配器标识符。icon(字符串):表情符号或图标名称。mcpServer(对象):与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
backend/config/下的JSON文件以添加或更新模型和端点。后端(.env)
| 键 | 描述 | 默认值 |
|---|---|---|
| DATABASE_URL | PostgreSQL连接URL | 必需 |
| BACKEND_CORS_ORIGINS | 允许的CORS源(逗号分隔) | [] |
| MCP_SERVERS | JSON格式的SSE MCP服务器端点列表 | 必需 |
| SECRET_KEY | JWT密钥 | 必需 |
前端(lib/core/config/app_config.dart)
static String get baseUrl => "http://127.0.0.1:8000";
访问交互式的Swagger UI:
http://127.0.0.1:8000/docs
.env中的BACKEND_CORS_ORIGINS配置允许的CORS源。.env中定义SECRET_KEY;确保没有密钥提交到源代码控制。gunicorn.conf.py中配置;访问和错误日志在logs/中。debugPrint。--wasm构建Web工件以优化交付。所有显著变更记录在CHANGELOG.md中。
欢迎贡献!请打开带有建议的Pull Request。
本项目根据CarrotAI开源许可证授权。详情见LICENSE文件。 </中文翻译>