项目简介:一个集成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 技术亮点

  1. AI集成:业界领先的DeepSeek-V3,OpenAI兼容接口
  2. 模块化设计:Flask Blueprint,职责清晰,易于扩展
  3. ORM抽象:SQLAlchemy完全屏蔽SQL,易于切换数据库
  4. RESTful API:标准化设计,前后端分离友好
  5. 权限控制:装饰器模式,灵活的角色权限管理
  6. 安全实践:密码加密、SQL注入防护、CORS配置

10.2 业务亮点

  1. 自然语言查询:降低使用门槛,提升效率
  2. 多层级目标:公司→部门→个人,自动同步联动
  3. 智能分析:自动识别风险,提供改进建议
  4. 项目映射:清晰展示资源投入与目标关系
  5. 实时状态:团队协作透明化

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管理

体验流程

  1. 管理员登录 → 创建用户 → 初始化组织架构
  2. 主管登录 → 创建部门目标 → 同步到下属
  3. 员工登录 → 创建个人OKR → 添加关键成果 → 更新进度
  4. 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查询不工作?

检查步骤:

  1. 确认.envDEEPSEEK_API_KEY已设置
  2. 测试API连接:curl https://lygt-api.aifoundrys.com:7443
  3. 检查网络防火墙
  4. 查看应用日志

十五、总结

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.

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐