OpenOKR:基于AI的企业级目标管理系统 | 开源实战项目
OpenOKR是一款基于DeepSeek-V3 AI引擎的企业级目标管理系统,采用Python+Flask技术栈开发。系统通过自然语言交互、智能进度分析和多层级目标联动(公司-部门-个人),解决传统OKR工具操作复杂、数据割裂等问题。核心功能包括:AI驱动的自然语言查询(5秒生成分析报告)、自动识别滞后目标、三层目标智能同步、实时状态跟踪等。技术架构采用MVC分层设计,集成Flask-SQLAlc
项目简介:一个集成DeepSeek-V3 AI引擎的企业级OKR管理系统,支持自然语言查询、智能进度分析和多层级目标管理。
技术标签: Python 3.8+ Flask 3.0.0 DeepSeek-V3 AI驱动 企业级应用 ORM RESTful API
一、项目背景与价值
1.1 为什么要开发这个系统?
在现代企业管理中,OKR(Objectives and Key Results,目标与关键成果) 已成为主流的目标管理方法。然而,传统OKR工具存在以下痛点:
- ❌ 学习成本高:复杂的操作流程,员工上手困难
- ❌ 数据孤岛:目标、项目、人员状态分散管理
- ❌ 缺乏智能分析:需要人工统计分析,效率低下
- ❌ 层级对齐难:公司、部门、个人目标难以有效联动
OpenOKR 应运而生,通过AI技术和现代化架构解决这些问题!
1.2 项目核心价值
| 价值点 | 说明 |
|---|---|
| 🤖 AI驱动决策 | 自然语言查询,5秒生成团队分析报告 |
| 🏗️ 灵活层级体系 | 公司→部门→个人,三层目标自动同步 |
| 📊 智能进度分析 | 自动识别滞后目标,提供改进建议 |
| 🔗 项目目标映射 | 多对多关联,清晰展示资源投入 |
| 👥 实时状态跟踪 | 团队成员位置、任务、进度一目了然 |
| 🔒 企业级安全 | 完善的权限控制与数据加密 |
二、系统架构与技术栈
2.1 整体架构
采用经典的 MVC分层架构 + Blueprint模块化设计:
┌─────────────────────────────────────────────────────┐
│ 前端层 (Frontend) │
│ HTML5 + CSS3 + JavaScript (响应式设计) │
└─────────────────────────────────────────────────────┘
↓↑ HTTP/JSON
┌─────────────────────────────────────────────────────┐
│ 路由层 (Routes/Blueprint) │
│ auth | objectives | projects | status | query(AI) │
└─────────────────────────────────────────────────────┘
↓↑
┌─────────────────────────────────────────────────────┐
│ 业务逻辑层 (Services) │
│ AI Service (DeepSeek-V3集成) │
└─────────────────────────────────────────────────────┘
↓↑
┌─────────────────────────────────────────────────────┐
│ 数据模型层 (Models/ORM) │
│ User | Objective | KeyResult | Project | Status │
└─────────────────────────────────────────────────────┘
↓↑
┌─────────────────────────────────────────────────────┐
│ 数据持久层 (SQLite/PostgreSQL/MySQL) │
└─────────────────────────────────────────────────────┘
2.2 核心技术栈
后端技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| Flask | 3.0.0 | 轻量级Web框架 |
| Flask-SQLAlchemy | 3.1.1 | ORM数据库映射 |
| Flask-Login | 0.6.3 | 用户认证与会话管理 |
| Werkzeug | 3.0.1 | 密码加密工具 |
| requests | 2.31.0 | AI API调用 |
| SQLite/PostgreSQL | - | 灵活的数据库选择 |
AI技术栈
- DeepSeek-V3:业界领先的大语言模型
- OpenAI Compatible API:标准化接口,易于切换GPT-4/Claude等其他模型
- Temperature 0.7:平衡创造性与准确性
- Max Tokens 1000:快速响应
前端技术栈
- 原生JavaScript:无框架依赖,轻量高效
- Fetch API:异步请求处理
- 国际化支持:i18n.js多语言切换
- 响应式布局:Flexbox/Grid自适应
三、核心功能亮点
3.1 AI智能查询 ⭐⭐⭐⭐⭐
这是本项目的最大亮点!
功能演示
场景1:自然语言查询
用户提问:"我们团队有哪些项目进度滞后?"
AI回答:
## 📊 团队项目进度分析
### ⚠️ 滞后项目
1. **移动端适配项目** (进度: 35%)
- 预期进度: 60%
- 负责人: 张三
- 建议: 增加前端资源投入
2. **API接口优化** (进度: 50%)
- 预期进度: 75%
- 负责人: 李四
- 建议: 排查性能瓶颈
### 💡 改进建议
- 组织技术评审会议
- 考虑调整deadline
场景2:进度自动分析
# 一键生成分析报告
POST /api/query/analyze-progress
{
"objective_id": 123
}
# 返回结构化Markdown报告
- 总体进度评估
- 风险项识别
- 具体改进建议
场景3:团队状态总结
# 主管查看团队实时状态
GET /api/query/team-summary
# 自动生成报告
- 在岗人员: 15人
- 远程办公: 3人
- 主要任务分布
- 需要关注的事项
技术实现
核心服务代码(app/services/ai_service.py):
class AIService:
def __init__(self):
self.api_url = "https://lygt-api.aifoundrys.com:7443/v1/chat/completions"
self.api_key = os.getenv('DEEPSEEK_API_KEY')
self.model = "DeepSeek-V3"
def query(self, user_query, context_data):
"""自然语言查询"""
messages = [
{
"role": "system",
"content": "你是企业OKR管理助手,分析目标和项目数据..."
},
{
"role": "user",
"content": f"{user_query}\n\n上下文数据:\n{context_data}"
}
]
response = requests.post(
self.api_url,
headers={"Authorization": f"Bearer {self.api_key}"},
json={
"model": self.model,
"messages": messages,
"temperature": 0.7,
"max_tokens": 1000
},
timeout=30
)
return response.json()['choices'][0]['message']['content']
3.2 多层级目标体系 ⭐⭐⭐⭐
三层目标联动
公司目标 (Company Level)
↓ 一键同步
部门目标 (Department Level)
↓ 一键同步
个人目标 (Individual Level)
自动进度计算
关键代码逻辑:
class Objective(db.Model):
def calculate_progress(self):
"""智能进度计算"""
# 1. 部门目标:根据所有子目标平均
if self.level == 'department':
children = self.children.filter_by(status='active').all()
if children:
total = sum(child.progress for child in children)
self.progress = round(total / len(children), 2)
return self.progress
# 2. 个人目标:根据关键成果平均
key_results = self.key_results.all()
if key_results:
total = sum(kr.progress for kr in key_results)
self.progress = round(total / len(key_results), 2)
return self.progress
return self.progress
目标同步功能
主管可以一键将部门目标同步给所有下属:
POST /api/objectives/sync
{
"objective_id": 10,
"subordinate_ids": [5, 6, 7, 8]
}
# 系统自动创建个人级目标,关联到部门目标
3.3 项目-目标多对多映射 ⭐⭐⭐
功能价值
在实际工作中,一个项目可能支撑多个目标,一个目标可能由多个项目共同完成。
数据模型设计
# 项目-目标关联表
class ProjectObjectiveLink(db.Model):
id = db.Column(db.Integer, primary_key=True)
project_id = db.Column(db.Integer, db.ForeignKey('projects.id'))
objective_id = db.Column(db.Integer, db.ForeignKey('objectives.id'))
contribution_weight = db.Column(db.Float, default=1.0) # 贡献权重
# 使用示例
POST /api/projects/link
{
"project_id": 5,
"objective_id": 10,
"weight": 0.8 // 该项目对目标的贡献度为80%
}
可视化效果
项目A (移动端开发)
├─ 支撑目标1 (提升用户体验) - 权重 60%
└─ 支撑目标2 (扩大市场份额) - 权重 40%
目标1 (提升用户体验)
├─ 由项目A支撑 - 权重 60%
├─ 由项目B支撑 - 权重 30%
└─ 由项目C支撑 - 权重 10%
3.4 实时人员状态管理 ⭐⭐⭐
状态类型
class StatusUpdate(db.Model):
work_status = db.Column(db.String(20)) # on_site/remote/leave/out
location = db.Column(db.String(100)) # 工作位置
current_task = db.Column(db.Text) # 当前任务
objective_id = db.Column(db.Integer) # 关联目标
主管视图
主管可以实时查看团队成员状态:
GET /api/status/team
# 返回示例
{
"team_members": [
{
"name": "张三",
"status": "on_site",
"location": "总部-研发中心",
"current_task": "完成用户登录模块",
"objective": "Q1个人OKR - 完成核心功能开发"
},
{
"name": "李四",
"status": "remote",
"location": "居家办公",
"current_task": "API性能优化",
"objective": "Q1个人OKR - 提升系统性能"
}
]
}
四、数据库设计精华
4.1 核心表结构
users - 用户表
CREATE TABLE users (
id INTEGER PRIMARY KEY,
username VARCHAR(80) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL, -- admin/manager/employee
manager_id INTEGER, -- 自引用外键
FOREIGN KEY (manager_id) REFERENCES users(id)
);
objectives - 目标表
CREATE TABLE objectives (
id INTEGER PRIMARY KEY,
title VARCHAR(200) NOT NULL,
level VARCHAR(20) NOT NULL, -- company/department/individual
type VARCHAR(20) NOT NULL, -- operational/strategic/development
parent_id INTEGER, -- 层级关系
owner_id INTEGER NOT NULL,
progress FLOAT DEFAULT 0,
FOREIGN KEY (parent_id) REFERENCES objectives(id),
FOREIGN KEY (owner_id) REFERENCES users(id)
);
key_results - 关键成果表
CREATE TABLE key_results (
id INTEGER PRIMARY KEY,
objective_id INTEGER NOT NULL,
title VARCHAR(200) NOT NULL,
target_value FLOAT NOT NULL,
current_value FLOAT DEFAULT 0,
unit VARCHAR(50),
progress FLOAT DEFAULT 0, -- 自动计算
FOREIGN KEY (objective_id) REFERENCES objectives(id)
);
4.2 索引优化策略
-- 6个关键索引,大幅提升查询性能
CREATE INDEX idx_objectives_owner ON objectives(owner_id);
CREATE INDEX idx_objectives_parent ON objectives(parent_id);
CREATE INDEX idx_key_results_objective ON key_results(objective_id);
CREATE INDEX idx_projects_owner ON projects(owner_id);
CREATE INDEX idx_status_updates_user ON status_updates(user_id);
CREATE INDEX idx_users_manager ON users(manager_id);
五、权限控制设计
5.1 三级角色体系
| 角色 | 权限范围 | 典型操作 |
|---|---|---|
| Admin | 全系统管理 | 用户CRUD、系统配置、数据初始化 |
| Manager | 团队管理 | 创建部门目标、查看团队数据、AI查询 |
| Employee | 个人管理 | 创建个人OKR、更新进度、创建项目 |
5.2 装饰器实现
# app/utils/decorators.py
def admin_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if current_user.role != 'admin':
return jsonify({'error': '需要管理员权限'}), 403
return f(*args, **kwargs)
return decorated_function
def manager_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if current_user.role not in ['admin', 'manager']:
return jsonify({'error': '需要主管权限'}), 403
return f(*args, **kwargs)
return decorated_function
# 使用示例
@bp.route('/api/status/team')
@login_required
@manager_required
def get_team_status():
# 仅主管和管理员可访问
pass
六、RESTful API设计
6.1 API端点一览
认证模块
POST /auth/login- 用户登录POST /auth/logout- 用户登出GET /auth/me- 获取当前用户信息
目标管理
GET /api/objectives- 获取目标列表POST /api/objectives- 创建目标PUT /api/objectives/<id>- 更新目标DELETE /api/objectives/<id>- 删除目标POST /api/objectives/sync- 同步目标到下属POST /api/objectives/<id>/key_results- 添加关键成果
AI查询
POST /api/query- 自然语言查询POST /api/query/analyze-progress- 进度分析GET /api/query/team-summary- 团队总结
6.2 统一响应格式
// 成功响应
{
"success": true,
"data": { ... },
"message": "操作成功"
}
// 错误响应
{
"success": false,
"error": "目标不存在",
"code": "OBJECTIVE_NOT_FOUND"
}
七、部署指南
7.1 快速开始(开发环境)
# 1. 克隆项目
git clone https://github.com/yourusername/OpenOKR.git
cd OpenOKR
# 2. 安装依赖
pip install -r requirements.txt
# 3. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入 DEEPSEEK_API_KEY
# 4. 初始化管理员
python init_admin.py
# 5. 启动服务
python run.py
# 6. 访问系统
http://localhost:5000
7.2 生产环境部署
架构图
Internet → Nginx (反向代理 + SSL)
→ Gunicorn (WSGI服务器)
→ Flask App (多实例)
→ PostgreSQL (生产数据库)
Nginx配置
server {
listen 80;
server_name your-domain.com;
location /static {
alias /path/to/OpenOKR/app/static;
expires 30d;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Gunicorn启动
gunicorn -w 4 -b 127.0.0.1:5000 run:app \
--access-logfile logs/access.log \
--error-logfile logs/error.log
八、安全实践
8.1 密码安全
- ✅ Werkzeug SHA256哈希加密
- ✅ 不存储明文密码
- ✅ 支持密码强度验证
from werkzeug.security import generate_password_hash, check_password_hash
# 设置密码
user.password_hash = generate_password_hash(password)
# 验证密码
check_password_hash(user.password_hash, password)
8.2 SQL注入防护
- ✅ SQLAlchemy ORM自动转义
- ✅ 参数化查询
- ✅ 避免直接拼接SQL
8.3 环境变量隔离
# .env 文件
SECRET_KEY=your-super-secret-key-32-chars-min
DATABASE_URL=sqlite:///okr.db
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxx
# .gitignore 排除敏感文件
.env
*.db
instance/
九、性能优化策略
9.1 数据库优化
- ✅ 6个关键索引
- ✅ 懒加载(lazy=‘dynamic’)
- ✅ 连接池管理
- ✅ 避免N+1查询
9.2 缓存策略(推荐实现)
# 1. AI查询缓存(相同问题15分钟内返回缓存)
# 2. 用户会话缓存(Redis)
# 3. 静态资源缓存(CDN + 浏览器缓存)
# 4. 数据库查询缓存(Flask-Caching)
9.3 前端优化
- ✅ Gzip压缩
- ✅ 图片懒加载
- ✅ 异步加载非关键资源
- ✅ CDN加速
十、项目亮点总结
10.1 技术亮点
- AI集成:业界领先的DeepSeek-V3,OpenAI兼容接口
- 模块化设计:Flask Blueprint,职责清晰,易于扩展
- ORM抽象:SQLAlchemy完全屏蔽SQL,易于切换数据库
- RESTful API:标准化设计,前后端分离友好
- 权限控制:装饰器模式,灵活的角色权限管理
- 安全实践:密码加密、SQL注入防护、CORS配置
10.2 业务亮点
- 自然语言查询:降低使用门槛,提升效率
- 多层级目标:公司→部门→个人,自动同步联动
- 智能分析:自动识别风险,提供改进建议
- 项目映射:清晰展示资源投入与目标关系
- 实时状态:团队协作透明化
10.3 适用场景
- ✅ 中小型企业(10-500人)
- ✅ 需要目标对齐管理
- ✅ 希望AI辅助决策
- ✅ 重视数据安全
- ✅ 需要快速部署
十一、未来扩展方向
11.1 功能扩展
- 通知系统(邮件/短信/站内通知)
- 报表导出(PDF/Excel)
- 数据可视化(ECharts图表)
- 移动端APP(React Native)
- 集成第三方(钉钉/企业微信)
11.2 技术升级
- 前端框架(Vue.js/React)
- 实时通信(WebSocket)
- 微服务化(服务拆分)
- 消息队列(Celery + Redis)
- 全文搜索(Elasticsearch)
11.3 AI增强
- 智能推荐(目标/项目推荐)
- 异常检测(自动识别异常进度)
- 预测分析(目标完成率预测)
- 语音交互(语音查询)
十二、项目文件结构
OpenOKR/
├── app/
│ ├── __init__.py # 应用工厂
│ ├── models/ # 数据模型
│ │ ├── user.py
│ │ ├── objective.py
│ │ ├── project.py
│ │ └── status.py
│ ├── routes/ # 路由控制
│ │ ├── auth.py
│ │ ├── objectives.py
│ │ ├── projects.py
│ │ ├── status.py
│ │ ├── query.py # AI查询
│ │ └── admin.py
│ ├── services/ # 业务服务
│ │ └── ai_service.py # AI服务
│ ├── utils/ # 工具函数
│ │ └── decorators.py
│ ├── templates/ # 前端模板
│ │ ├── login.html
│ │ ├── employee_dashboard.html
│ │ ├── manager_dashboard.html
│ │ └── admin_dashboard.html
│ └── static/ # 静态资源
│ ├── css/
│ ├── js/
│ └── images/
├── database/
│ └── schema.sql
├── config.py # 配置管理
├── run.py # 启动入口
├── requirements.txt # 依赖清单
├── init_admin.py # 管理员初始化
├── .env.example # 环境变量示例
└── README.md
十三、快速体验
默认账户
| 角色 | 用户名 | 密码 | 说明 |
|---|---|---|---|
| 管理员 | admin | admin123 | 全系统权限 |
| 主管 | manager1 | manager123 | 团队管理权限 |
| 员工 | employee1 | employee123 | 个人OKR管理 |
体验流程
- 管理员登录 → 创建用户 → 初始化组织架构
- 主管登录 → 创建部门目标 → 同步到下属
- 员工登录 → 创建个人OKR → 添加关键成果 → 更新进度
- AI查询 → 输入"团队进度如何?" → 查看分析报告
十四、常见问题
Q1: 如何切换AI模型?
修改.env文件:
# 使用DeepSeek-V3
DEEPSEEK_MODEL=DeepSeek-V3
# 切换到GPT-4(需替换API地址和密钥)
DEEPSEEK_API_URL=https://api.openai.com/v1/chat/completions
DEEPSEEK_API_KEY=sk-xxxxxxx
DEEPSEEK_MODEL=gpt-4
Q2: 如何切换到PostgreSQL?
修改.env文件:
DATABASE_URL=postgresql://username:password@localhost:5432/okr_db
Q3: AI查询不工作?
检查步骤:
- 确认
.env中DEEPSEEK_API_KEY已设置 - 测试API连接:
curl https://lygt-api.aifoundrys.com:7443 - 检查网络防火墙
- 查看应用日志
十五、总结
OpenOKR是一个架构清晰、功能完善、技术先进的企业级OKR管理系统,具有以下优势:
✅ AI驱动:DeepSeek-V3自然语言交互,智能分析决策
✅ 模块化:Flask Blueprint设计,易于维护扩展
✅ 安全可靠:完善的权限控制与数据加密
✅ 灵活部署:支持SQLite/PostgreSQL,容器化部署
✅ 开箱即用:详细文档,快速上手
无论你是:
- 🎓 学习Flask开发:本项目是绝佳的实战案例
- 🏢 企业OKR管理:可直接部署使用
- 🤖 AI技术应用:学习AI集成的最佳实践
- 🛠️ 二次开发:模块化设计便于定制
都能从本项目中获得价值!
附录:完整API列表
认证相关
POST /auth/login- 用户登录POST /auth/logout- 用户登出POST /auth/register- 用户注册GET /auth/me- 获取当前用户信息
目标管理
GET /api/objectives- 获取目标列表POST /api/objectives- 创建目标GET /api/objectives/<id>- 获取目标详情PUT /api/objectives/<id>- 更新目标DELETE /api/objectives/<id>- 删除目标POST /api/objectives/sync- 同步目标到下属POST /api/objectives/<id>/key_results- 添加关键成果PUT /api/objectives/key_results/<id>- 更新关键成果
项目管理
GET /api/projects- 获取项目列表POST /api/projects- 创建项目GET /api/projects/<id>- 获取项目详情PUT /api/projects/<id>- 更新项目DELETE /api/projects/<id>- 删除项目POST /api/projects/link- 关联项目到目标
状态管理
POST /api/status- 更新工作状态GET /api/status/me- 获取我的状态历史GET /api/status/me/latest- 获取最新状态GET /api/status/team- 获取团队状态
AI查询
POST /api/query- 自然语言查询POST /api/query/analyze-progress- 分析目标进度GET /api/query/team-summary- 团队状态总结
管理员
GET /api/admin/users- 获取所有用户GET /api/admin/users/<id>- 获取用户详情PUT /api/admin/users/<id>- 更新用户DELETE /api/admin/users/<id>- 删除用户GET /api/admin/stats- 获取系统统计
关于作者
如果这个项目OPENOKR对你有帮助,欢迎:
- ⭐ Star本项目
- 🍴 Fork进行二次开发
- 🐛 提交Issue反馈问题
- 💡 提交PR贡献代码
让我们一起打造更好的OKR管理工具!
关键词:OKR管理系统, Flask项目实战, AI集成, DeepSeek-V3, Python Web开发, 企业级应用, 权限管理, RESTful API, SQLAlchemy, 目标管理
技术栈:Python 3.8+ | Flask 3.0 | SQLAlchemy | DeepSeek-V3 | JavaScript | HTML5/CSS3
© 2025 OpenOKR Project. All Rights Reserved.
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)