本文目录导读:

在PHP项目中实现用户自定义审批AI是一个复杂的系统工程,需要结合规则引擎、工作流和机器学习,以下是一个分步骤的实践方案:
整体架构设计
用户界面 (自定义审批规则) → API层 → 规则引擎 → AI推理 → 审批决策
↓
工作流引擎 → 执行审批动作
核心组件实现
1 自定义规则系统
// 规则定义类
class ApprovalRule {
public $id;
public $name;
public $conditions = []; // 条件组
public $actions = []; // 动作
public $priority = 0; // 优先级
public $status = 'active';
}
// 条件类
class RuleCondition {
public $field; // 字段名
public $operator; // 运算符 (eq, gt, lt, contains, in等)
public $value; // 值
public $logic; // and/or
}
2 规则引擎实现
class RuleEngine {
private $rules = [];
private $aiService;
public function __construct(AIService $aiService) {
$this->aiService = $aiService;
}
public function evaluate($data, $context = []) {
$matchedRules = [];
// 1. 获取所有匹配的硬规则
foreach ($this->rules as $rule) {
if ($this->matchRule($rule, $data)) {
$matchedRules[] = $rule;
}
}
// 2. 如果有AI增强,让AI评估规则优先级
if (!empty($matchedRules)) {
$matchedRules = $this->aiService->rankRules($matchedRules, $data, $context);
}
// 3. 返回最高优先级的动作
return $this->getHighestPriorityAction($matchedRules);
}
private function matchRule($rule, $data) {
foreach ($rule->conditions as $condition) {
$result = $this->evaluateCondition($condition, $data);
if ($condition->logic === 'and' && !$result) {
return false;
}
if ($condition->logic === 'or' && $result) {
// 继续评估
}
}
return true;
}
}
3 用户自定义规则界面
// 控制器
class ApprovalRuleController {
public function createRule(Request $request) {
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'conditions' => 'required|array',
'actions' => 'required|array',
'ai_boost' => 'boolean'
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 400);
}
$rule = new ApprovalRule();
$rule->name = $request->name;
$rule->conditions = $this->parseConditions($request->conditions);
$rule->actions = $this->parseActions($request->actions);
$rule->ai_boost = $request->ai_boost ?? false;
$rule->save();
return response()->json(['rule' => $rule], 201);
}
}
4 AI推理服务
class AIService {
private $model;
private $trainingData = [];
public function __construct() {
// 加载预训练模型或初始化
$this->loadModel();
}
// AI增强的规则排序
public function rankRules($rules, $data, $context) {
// 1. 提取特征
$features = $this->extractFeatures($data, $context);
// 2. 使用AI模型预测每个规则的适用性分数
$scores = [];
foreach ($rules as $rule) {
$scores[$rule->id] = $this->predict($rule, $features);
}
// 3. 按分数排序
usort($rules, function($a, $b) use ($scores) {
return $scores[$b->id] <=> $scores[$a->id];
});
return $rules;
}
// 智能建议新规则
public function suggestRules($historicalData) {
// 使用聚类或频繁项集挖掘发现常见模式
$patterns = $this->mineFrequentPatterns($historicalData);
return array_map(function($pattern) {
return $this->patternToRule($pattern);
}, $patterns);
}
private function loadModel() {
// 加载PHP-ML或其他ML库的模型
// 或者调用外部AI API
}
private function predict($rule, $features) {
// 使用训练好的模型进行预测
// 返回0-1之间的分数
return 0.85; // 示例
}
}
工作流与审批集成
class ApprovalWorkflow {
private $ruleEngine;
private $workflowEngine;
public function process($entity, $action) {
// 1. 构建审批上下文
$context = $this->buildContext($entity, $action);
// 2. 评估规则
$decision = $this->ruleEngine->evaluate($entity->toArray(), $context);
// 3. 根据决策执行流程
switch ($decision->action) {
case 'auto_approve':
$this->autoApprove($entity);
break;
case 'auto_reject':
$this->autoReject($entity);
break;
case 'route_to':
$this->routeToApprover($entity, $decision->approver);
break;
case 'escalate':
$this->escalate($entity);
break;
}
}
}
数据库设计
-- 规则表
CREATE TABLE approval_rules (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
type ENUM('hard_rule', 'ai_suggested', 'user_defined'),
conditions JSON,
actions JSON,
priority INT DEFAULT 0,
ai_boost BOOLEAN DEFAULT FALSE,
created_by INT,
status ENUM('active', 'inactive', 'draft'),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 规则评估历史
CREATE TABLE rule_evaluation_history (
id INT PRIMARY KEY AUTO_INCREMENT,
rule_id INT,
entity_type VARCHAR(100),
entity_id INT,
context JSON,
decision JSON,
ai_score DECIMAL(5,2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (rule_id) REFERENCES approval_rules(id)
);
-- 训练数据表
CREATE TABLE training_data (
id INT PRIMARY KEY AUTO_INCREMENT,
features JSON,
label ENUM('approved', 'rejected', 'escalated'),
actual_result ENUM('approved', 'rejected', 'escalated'),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
AI模型训练与持续学习
class AITrainer {
private $ml;
public function __construct() {
// 使用php-ml库或调用外部API
$this->ml = new Phpml\Classification\SVC();
}
public function train(array $samples, array $labels) {
// 训练模型
$this->ml->train($samples, $labels);
// 保存模型
$this->saveModel();
}
public function retrainWithFeedback() {
// 获取用户反馈数据
$feedback = $this->getUserFeedback();
// 混合训练
$this->train($feedback['samples'], $feedback['labels']);
}
private function getUserFeedback() {
// 从数据库中获取用户对AI建议的反馈
return TrainingData::where('feedback', '!=', null)
->pluck('features', 'label');
}
}
前端实现示例(Vue.js)
<template>
<div class="rule-builder">
<div class="rule-header">
<input v-model="rule.name" placeholder="规则名称">
<label>
<input type="checkbox" v-model="rule.ai_boost">
启用AI增强
</label>
</div>
<div class="conditions-builder">
<div v-for="(group, index) in rule.conditions" :key="index">
<select v-model="group.logic">
<option value="and">且</option>
<option value="or">或</option>
</select>
<select v-model="group.field">
<option value="amount">金额</option>
<option value="department">部门</option>
<option value="project_type">项目类型</option>
</select>
<select v-model="group.operator">
<option value="eq">等于</option>
<option value="gt">大于</option>
<option value="lt">小于</option>
</select>
<input v-model="group.value" placeholder="值">
<button @click="removeCondition(index)">×</button>
</div>
<button @click="addCondition">+ 添加条件</button>
</div>
<div class="actions">
<select v-model="rule.action">
<option value="auto_approve">自动批准</option>
<option value="auto_reject">自动拒绝</option>
<option value="route_to">转交审批</option>
</select>
<div v-if="rule.action === 'route_to'">
<input v-model="rule.approver" placeholder="审批人ID或角色">
</div>
</div>
<div class="ai-suggestions" v-if="showAiSuggestions">
<h3>AI建议的规则</h3>
<div v-for="suggestion in aiSuggestions" :key="suggestion.id">
<p>{{ suggestion.description }}</p>
<button @click="applySuggestion(suggestion)">应用</button>
</div>
</div>
<button @click="saveRule">保存规则</button>
</div>
</template>
部署与优化建议
1 性能优化
- 使用Redis缓存常用规则评估结果
- 规则索引和预编译
- 批量评估多条记录
- 异步AI推理
2 可扩展性
- 支持插件系统扩展规则类型
- 微服务架构分离规则引擎和AI服务
- API版本控制
3 监控与日志
- 记录每次规则评估和AI决策
- A/B测试不同AI模型
- 用户反馈收集机制
高级功能
// 时间序列预测
class TimeAwareAI extends AIService {
public function predictForTimePeriod($rule, $features, $timeContext) {
// 考虑时间因素(月底审批量大、节假日等)
$timeFeatures = $this->extractTimeFeatures($timeContext);
return $this->predict($rule, array_merge($features, $timeFeatures));
}
}
// 多层级审批
class MultiLevelApproval {
public function determineApprovalChain($amount, $department) {
// 动态决定审批层级
$chain = [];
if ($amount > 100000) {
$chain[] = 'CTO';
$chain[] = 'CEO';
} elseif ($amount > 50000) {
$chain[] = 'DepartmentHead';
$chain[] = 'VP';
}
return $chain;
}
}
这个方案提供了从基础规则引擎到AI增强的完整实现,你可以根据项目复杂度选择实现全部或部分功能,对于中小型项目,可以先实现规则引擎部分,然后逐步集成AI能力。