Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,5 @@ Desktop.ini

# Linux auto files
*~
/moqui_logs/log/error.log
/moqui_logs/log/moqui.log
108 changes: 108 additions & 0 deletions HIVEMIND_AI_MIGRATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# HiveMind AI服务迁移说明

## 迁移概述
**日期**: 2024-11-14
**目的**: 重构HiveMind AI服务以使用统一的moqui-mcp服务架构

## 重构完成内容

### 1. 服务重构
- ✅ **HiveMindAIServices.xml** 完全重构
- ✅ 原有直接调用智谱AI API的逻辑已移除
- ✅ 新服务通过统一MCP服务层 `mcp.ai.generate#Text` 调用AI功能

### 2. 核心变更

#### 思维导图生成服务 (`generate#MindMapFromText`)
- **之前**: 直接调用智谱AI API
- **现在**: 通过 `mcp.ai.config.get#ModuleAiConfig` 获取配置,通过 `mcp.ai.generate#Text` 生成内容
- **配置来源**: 统一从 moqui-mcp 模块获取 hivemind 专用配置
- **演示模式**: 保持HiveMind风格的演示生成逻辑

#### 文本分析服务 (`analyze#TextWithAI`)
- **之前**: `analyze#TextWithZhipuAI` 直接调用智谱AI
- **现在**: `analyze#TextWithAI` 通过统一MCP服务调用
- **提示词优化**: 增加项目管理和知识管理专业视角分析

### 3. 架构优势

#### 统一配置管理
- AI配置集中在 moqui-mcp 模块管理
- 支持多AI提供商自动切换
- 配置变更无需修改HiveMind代码

#### 兼容性保证
- 服务接口完全保持向后兼容
- 前端调用方式无需变更
- 演示模式继续支持离线使用

#### 专业化增强
- HiveMind专用提示词模板
- 项目管理和知识管理双重视角分析
- 更符合团队协作场景的输出格式

### 4. 技术实现

#### 配置获取流程
```groovy
// 通过统一MCP服务获取HiveMind AI配置
def configResult = ec.service.sync().name("mcp.ai.config.get#ModuleAiConfig")
.parameter("module", "hivemind")
.parameter("configType", "text")
.call()
```

#### AI服务调用流程
```groovy
// 调用统一的MCP文本生成服务
def mcpResult = ec.service.sync().name("mcp.ai.generate#Text")
.parameter("prompt", prompt)
.parameter("module", "hivemind")
.parameter("aiProvider", aiConfig.provider)
.parameter("temperature", 0.7)
.parameter("maxTokens", 2000)
.call()
```

### 5. 文件变更记录

#### 备份文件
- `HiveMindAIServices.xml.bak` - 原有服务备份

#### 新建文件
- `HiveMindAIServices.xml` - 重构后的统一MCP服务版本

#### 配置来源
- AI配置现在统一来自 `/runtime/component/moqui-mcp/MoquiConf.xml`
- HiveMind专用配置项:
- `hivemind.ai.provider`: AI提供商配置
- `hivemind.ai.timeout.seconds`: 超时配置
- `hivemind.ai.system.prompt`: 系统提示词

## 测试验证

### 功能验证
- ✅ 思维导图生成服务正常工作
- ✅ 文本分析服务正常工作
- ✅ 演示模式正常工作
- ✅ 配置获取正常工作

### 兼容性验证
- ✅ 前端调用接口保持不变
- ✅ 服务响应格式保持不变
- ✅ 错误处理机制保持不变

## 后续工作
- [ ] 监控新服务运行状态
- [ ] 根据使用情况优化提示词
- [ ] 考虑添加更多HiveMind专用AI功能

## 回滚方案
如需回滚到旧版本:
```bash
cd /Users/demo/Workspace/moqui/runtime/component/HiveMind/service
mv HiveMindAIServices.xml HiveMindAIServices.mcp.xml
mv HiveMindAIServices.xml.bak HiveMindAIServices.xml
```

**重构完成**: ✅ HiveMind AI服务已成功迁移到统一MCP架构
2 changes: 1 addition & 1 deletion MoquiConf.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<screen location="component://webroot/screen/webroot.xml">
<subscreens-item name="hmstatic" menu-include="false" location="component://HiveMind/screen/hmstatic.xml"/>
</screen>
<screen location="component://webroot/screen/webroot/apps.xml">
<screen location="component://webroot/screen/webroot/qapps.xml">
<subscreens-item name="hm" menu-title="HiveMind PM" menu-index="7"
location="component://HiveMind/screen/HiveMindRoot.xml"/>
<subscreens-item name="hmadmin" menu-title="HiveMind Admin" menu-index="8"
Expand Down
1 change: 1 addition & 0 deletions component.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
<depends-on name="moqui-fop" version="1.1.3"/>
<depends-on name="SimpleScreens" version="2.2.0"/>
</component>

22 changes: 11 additions & 11 deletions data/HiveMindAaaSetupData.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,19 @@ along with this software (see the LICENSE.md file). If not, see
authzTypeEnumId="AUTHZT_ALWAYS" authzActionEnumId="AUTHZA_ALL"/>

<!-- authz/permission for HIVE_MIND_ADMIN users -->
<moqui.security.UserGroup userGroupId="HIVE_MIND_ADMIN" description="HiveMind Administrators"/>
<moqui.security.UserGroup userGroupId="HIVE_MIND_ADMIN" description="项目管理员权限"/>
<moqui.security.ArtifactAuthz artifactAuthzId="HIVE_MIND_PM_HMAD" userGroupId="HIVE_MIND_ADMIN" artifactGroupId="HIVE_MIND"
authzTypeEnumId="AUTHZT_ALWAYS" authzActionEnumId="AUTHZA_ALL"/>
<moqui.security.ArtifactAuthz artifactAuthzId="HIVE_MIND_ADM_HMAD" userGroupId="HIVE_MIND_ADMIN" artifactGroupId="HIVE_MIND_ADMIN"
authzTypeEnumId="AUTHZT_ALWAYS" authzActionEnumId="AUTHZA_ALL"/>

<!-- authz for HM app user group (HIVE_MIND_USERS) -->
<moqui.security.UserGroup userGroupId="HIVE_MIND_USERS" description="HiveMind PM Users"/>
<moqui.security.UserGroup userGroupId="HIVE_MIND_USERS" description="项目执行权限"/>
<moqui.security.ArtifactAuthz artifactAuthzId="HIVE_MIND_USERS_HM" userGroupId="HIVE_MIND_USERS" artifactGroupId="HIVE_MIND"
authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_ALL"/>

<!-- authz for HM app view only user group (HIVE_MIND_VIEW) -->
<moqui.security.UserGroup userGroupId="HIVE_MIND_VIEW" description="HiveMind PM Viewers"/>
<moqui.security.UserGroup userGroupId="HIVE_MIND_VIEW" description="项目查看权限"/>
<moqui.security.ArtifactAuthz artifactAuthzId="HIVE_MIND_VIEW_HM" userGroupId="HIVE_MIND_VIEW" artifactGroupId="HIVE_MIND"
authzTypeEnumId="AUTHZT_ALLOW" authzActionEnumId="AUTHZA_VIEW"/>

Expand All @@ -71,25 +71,25 @@ along with this software (see the LICENSE.md file). If not, see
<moqui.basic.Enumeration description="Programming" enumId="WktpProgramming" enumTypeId="WorkType"/>
<moqui.basic.Enumeration description="Testing" enumId="WktpTesting" enumTypeId="WorkType"/>

<mantle.humanres.position.EmplPositionClass title="Quality Analyst" emplPositionClassId="QualityAnalyst"/>
<mantle.humanres.position.EmplPositionClass title="质量分析师" emplPositionClassId="QualityAnalyst"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="QualityAnalyst" workTypeEnumId="WktpTesting"/>
<mantle.humanres.position.EmplPositionClass title="Quality Lead" emplPositionClassId="QualityLead"/>
<mantle.humanres.position.EmplPositionClass title="质量主管" emplPositionClassId="QualityLead"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="QualityLead" workTypeEnumId="WktpTesting"/>

<mantle.humanres.position.EmplPositionClass title="Programmer" emplPositionClassId="Programmer"/>
<mantle.humanres.position.EmplPositionClass title="程序员" emplPositionClassId="Programmer"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="Programmer" workTypeEnumId="WktpProgramming"/>
<mantle.humanres.position.EmplPositionClass title="Programmer Lead" emplPositionClassId="ProgrammerLead"/>
<mantle.humanres.position.EmplPositionClass title="程序员主管" emplPositionClassId="ProgrammerLead"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="ProgrammerLead" workTypeEnumId="WktpProgramming"/>

<mantle.humanres.position.EmplPositionClass title="System Administrator" emplPositionClassId="SysAdmin"/>
<mantle.humanres.position.EmplPositionClass title="系统管理员" emplPositionClassId="SysAdmin"/>

<mantle.humanres.position.EmplPositionClass title="System Architect" emplPositionClassId="SysArchitect"/>
<mantle.humanres.position.EmplPositionClass title="系统架构师" emplPositionClassId="SysArchitect"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="SysArchitect" workTypeEnumId="WktpRequirements"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="SysArchitect" workTypeEnumId="WktpSystemDesign"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="SysArchitect" workTypeEnumId="WktpProgramming"/>
<mantle.humanres.position.EmplPositionClass title="Business Analyst" emplPositionClassId="BusinessAnalyst"/>
<mantle.humanres.position.EmplPositionClass title="业务分析师" emplPositionClassId="BusinessAnalyst"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="BusinessAnalyst" workTypeEnumId="WktpRequirements"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="BusinessAnalyst" workTypeEnumId="WktpSystemDesign"/>
<mantle.humanres.position.EmplPositionClass title="Expert User" emplPositionClassId="ExpertUser"/>
<mantle.humanres.position.EmplPositionClass title="专家用户" emplPositionClassId="ExpertUser"/>
<mantle.humanres.position.EmplPositionClassWorkType emplPositionClassId="ExpertUser" workTypeEnumId="WktpRequirements"/>
</entity-facade-xml>
4 changes: 2 additions & 2 deletions data/HiveMindAabDocumentData.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ along with this software (see the LICENSE.md file). If not, see
-->

<!-- EmailTemplates for Feed-driven Update Notifications -->
<moqui.basic.email.EmailTemplate emailTemplateId="HM_TASK_UPDATE" description="HiveMind Task Update Notification"
<moqui.basic.email.EmailTemplate emailTemplateId="HM_TASK_UPDATE" description="蜂巢任务更新通知"
emailServerId="SYSTEM" bodyScreenLocation="component://HiveMind/screen/TaskUpdateNotification.xml"
webappName="webroot" fromAddress="" ccAddresses="" bccAddresses=""
subject="Task Updated: ${document._id} - ${document.name}" sendPartial="Y"/>
<moqui.basic.email.EmailTemplate emailTemplateId="HM_WIKI_PAGE_UPDATE" description="HiveMind WikiPage Update Notification"
<moqui.basic.email.EmailTemplate emailTemplateId="HM_WIKI_PAGE_UPDATE" description="蜂巢维基页面更新通知"
emailServerId="SYSTEM" bodyScreenLocation="component://HiveMind/screen/WikiPageUpdateNotification.xml"
webappName="webroot" fromAddress="" ccAddresses="" bccAddresses=""
subject="Wiki Page Updated: ${document.wikiSpaceId}/${document.pagePath}" sendPartial="Y"/>
Expand Down
Loading