TNT-Likely/dominode

★ 0Forks 0GitHub ↗Compare

README

Dominode

一个基于 AI Agent 的任务和知识管理系统,支持 Workflow 编排、自动化执行和智能搜索。

Dominode = Domino + Node,像多米诺骨牌一样,节点串联触发,让工作流自动运转。

技术栈

  • 前端: Next.js 15 + React 19 + Ant Design 5 + TypeScript
  • 后端: NestJS + TypeScript
  • 数据库: PostgreSQL 16 + pgvector (向量搜索)
  • 队列: Redis + BullMQ (后台任务处理)
  • AI: LangChain + OpenAI API

核心功能

  • 📝 任务管理: 创建、跟踪和管理任务,支持优先级、截止日期和状态流转
  • 📚 知识库: 存储笔记、文件、图片和链接,支持 PDF 解析和全文搜索
  • 🔍 智能搜索: 基于向量相似度的语义搜索,快速找到相关内容
  • 🤖 Workflow 编排: 可视化创建 AI Agent 工作流,支持多节点串联执行
  • ⚡ 生产运行: Workflow 支持审批节点,暂停等待人工确认后继续执行
  • 📊 看板视图: Kanban 风格的任务管理界面,拖拽式状态更新

快速启动

方式一:Docker Compose(推荐)

# 1. 克隆仓库
git clone <your-repo-url>
cd dominode

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,填写你的 OPENAI_API_KEY

# 3. 启动所有服务
docker compose up --build

# 4. 访问应用
# Web: http://localhost:3000
# API: http://localhost:3014/v1/healthz

方式二:本地开发

前置要求:

  • Node.js 18+
  • pnpm 9+
  • PostgreSQL 16 (需要 pgvector 扩展)
  • Redis 7+
# 1. 安装依赖
pnpm install

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,配置数据库和 Redis 连接

# 3. 初始化数据库
# 确保 PostgreSQL 已启动,然后 API 会自动创建表和扩展

# 4. 启动开发服务器
pnpm dev

# 或者分别启动
pnpm dev:web   # 前端: http://localhost:3000
pnpm dev:api   # 后端: http://localhost:3014

环境变量说明

变量 说明 默认值
OPENAI_API_KEY OpenAI API 密钥(可选,不配置会使用本地 fallback) -
OPENAI_CHAT_MODEL 对话模型 gpt-4o
OPENAI_EMBEDDING_MODEL 向量模型 text-embedding-3-small
DATABASE_URL PostgreSQL 连接字符串 postgres://postgres:postgres@localhost:5432/dominode
REDIS_URL Redis 连接字符串 redis://localhost:6379
API_PORT API 服务端口 3014
WEB_PORT Web 服务端口 3000
UPLOAD_DIR 文件上传目录 ./uploads
MAX_FILE_MB 最大文件大小(MB) 25

注意: 如果不配置 OPENAI_API_KEY,系统会使用本地 deterministic embedding 和简单摘要,功能受限但可以跑通基本流程。

项目结构

.
├── apps/
│   ├── api/              # NestJS 后端服务
│   │   ├── src/
│   │   │   ├── ai/       # AI 服务封装 (LangChain + OpenAI)
│   │   │   ├── db/       # 数据库连接和查询
│   │   │   ├── item/     # 任务和知识库核心业务
│   │   │   ├── search/   # 向量搜索服务
│   │   │   ├── skill/    # Workflow 技能管理
│   │   │   ├── workflow/ # Workflow 编排和执行引擎
│   │   │   ├── ingestion/# 后台队列处理 (PDF 解析、embedding)
│   │   │   └── storage/  # 文件存储服务
│   │   └── Dockerfile
│   └── web/              # Next.js 前端应用
│       ├── app/          # App Router 页面
│       ├── components/   # React 组件
│       ├── lib/          # API 客户端和工具函数
│       └── Dockerfile
├── docker-compose.yml    # Docker 编排配置
├── .env.example          # 环境变量模板
└── README.md

开发指南

API 模块说明

  • ItemModule: 任务和知识库的增删改查,文件上传处理
  • WorkflowModule: Workflow 的创建、编辑、测试运行和生产运行
  • SkillModule: Workflow 节点技能的管理(Prompt 模板)
  • SearchModule: 基于 pgvector 的语义搜索
  • IngestionModule: 后台队列处理文件解析和向量化
  • AiModule: OpenAI API 调用封装

前端页面

  • / - 首页(任务和知识库列表)
  • /kanban - 看板视图(任务管理)
  • /workflows - Workflow 列表
  • /workflows/[id] - Workflow 编辑器
  • /agents/workflows/[id] - Workflow 运行详情

数据库表

  • chat_items - 任务和知识库条目
  • attachments - 文件附件
  • chunks - 文本块和向量 embedding
  • agent_workflows - Workflow 定义
  • agent_workflow_nodes - Workflow 节点
  • agent_skills - 技能模板
  • agent_workflow_test_runs - Workflow 运行记录
  • agent_workflow_test_run_nodes - 运行节点状态
  • agent_workflow_test_run_artifacts - 运行产物

生产部署

安全建议

  1. 修改默认密码: 生产环境必须修改 PostgreSQL 和 Redis 的默认密码
  2. 配置 CORS: 设置 CORS_ORIGIN 为前端域名,不要使用 *
  3. HTTPS: 使用反向代理(Nginx/Caddy)配置 HTTPS
  4. 环境变量: 使用密钥管理服务(AWS Secrets Manager / HashiCorp Vault)存储敏感信息
  5. 文件上传: 配置 MAX_FILE_MB 限制上传大小,定期清理 uploads/ 目录

Docker 生产部署

# 1. 修改 docker-compose.yml 中的密码
# 2. 配置生产环境变量
# 3. 启动服务
docker compose -f docker-compose.yml up -d

# 4. 查看日志
docker compose logs -f api

常见问题

Q: 启动时报 "NOAUTH Authentication required"
A: Redis 需要密码,在 .env 中配置 REDIS_URL=redis://:password@localhost:6379

Q: Workflow 运行失败,提示 "OPENAI_API_KEY is empty"
A: 配置 .env 中的 OPENAI_API_KEY,或者使用本地 fallback 模式(功能受限)

Q: 端口冲突
A: 修改 .env 中的 POSTGRES_PORT、REDIS_PORT、API_PORT、WEB_PORT

Q: 文件上传失败
A: 检查 UPLOAD_DIR 目录是否有写权限,Docker 环境需要挂载 volume

License

MIT

贡献

欢迎提交 Issue 和 Pull Request!

Issues