linkwe-ai 是 LinkWeChat 项目中的 AI 助手功能模块,虽然项目描述中标注"该项目没有用到",但实际上该模块实现了基于阿里云大模型的 AI 对话功能。该模块集成了阿里云通义千问(DashScope)服务,提供了单次对话、多轮对话和流式对话等 AI 交互能力。
linkwe-ai/
├── src/main/java/com/linkwechat/coal/
│ ├── LinkweAiApplication.java # 应用程序入口
│ ├── config/
│ │ └── Constant.java # 常量配置类
│ ├── datasource/
│ │ ├── AiDataSourceConfig.java # AI 数据源配置
│ │ └── QwDataSourceConfig.java # 企微数据源配置
│ ├── exception/
│ │ └── SystemHandlerException.java # 系统异常处理
│ ├── filter/
│ │ └── HttpServletRequestWrapperFilter.java # 请求过滤器
│ └── modules/
│ ├── ai/
│ │ ├── controller/
│ │ │ ├── AliAiController.java # 阿里云 AI 控制器
│ │ │ ├── FileController.java # 文件处理控制器
│ │ │ └── ZmAiController.java # 智能AI控制器
│ │ ├── domain/dto/
│ │ │ ├── AliAiTextDto.java # AI 文本交互 DTO
│ │ │ └── RequestIdDto.java # 请求 ID DTO
│ │ ├── mapper/
│ │ │ ├── SysUserMapper1.java # 用户 Mapper1
│ │ │ └── SysUserMapper2.java # 用户 Mapper2
│ │ ├── service/impl/
│ │ │ └── FtpStorageService.java # FTP 存储服务
│ │ └── utils/
│ │ ├── AliAiUtils.java # 阿里 AI 工具类
│ │ ├── FileUtils.java # 文件工具类
│ │ ├── SSEHelper.java # SSE (Server-Sent Events) 辅助类
│ │ └── WordUtils.java # Word 文档处理工具
│ └── qw/mapper/
│ └── SysUserMapper1.java # 企微用户 Mapper
├── src/main/resources/
│ ├── application.properties # 应用配置
│ └── spy.properties # P6Spy 监控配置
├── bin/ # 构建输出目录
├── pom.xml # Maven 配置文件
└── CLAUDE.md # 本文档
单次对话 (/aliAi/single)
多轮对话 (/aliAi/multiwheel)
流式对话 (/aliAi/stream)
/zmAi/chat)
Word 文档解析
FTP 文件存储
模块配置了两个数据源:
# 应用名称
spring.application.name=linkwe-ai
# FTP 服务器配置
ftp.server=ftp.example.com
ftp.port=21
ftp.username=your_username
ftp.password=your_password
ftp.base-dir=/path/to/base/directory
public class Constant {
// 阿里云 API Key (注意:生产环境应从配置中心或环境变量获取)
public static String KEY = "sk-1f095e5103dd4567a9afec6b17ec0187";
// 支持的模型
public static String DEEPSEEK_R1 = "deepseek-r1";
public static String QWEN_PLUS = "qwen-plus";
public static String QWQ_32B = "qwq-32b";
// 文件上传路径
public static final String FILE_UPLOAD_PATH = "path/to/upload/directory";
}
/aliAi/singleRequest Body:
{
"content": "用户输入的问题",
"filePath": "Word文档路径(可选)"
}
Response:
{
"code": 200,
"msg": "success",
"data": {
"output": {
"choices": [{
"message": {
"reasoning_content": "AI的思考过程",
"content": "AI的最终回答"
}
}]
}
}
}
/aliAi/multiwheel/aliAi/streamtext/event-stream/zmAi/chatRequest Body:
{
"content": "聊天内容",
"filePath": "文件路径(可选)"
}
Response: SseEmitter 对象,支持流式输出
配置修改
Constant.java 中的 API Keyapplication.properties 中的 FTP 连接信息启动步骤
# 构建项目
mvn clean install
# 启动应用
mvn spring-boot:run
API Key 安全
异常处理
SystemException 处理业务异常资源清理
Constant.java 中添加模型常量AliAiUtils.java 中实现调用方法WordUtils.java 支持更多文件格式FileController.java 中添加新的处理接口pom.xmlFROM openjdk:8-jre-alpine
COPY target/lw-ai.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
API Key 安全
性能优化
监控告警
A: 在调用 AliAiUtils 的方法时传入不同的 model 参数,支持的模型见 Constant.java。
A: 检查文档格式是否为 .docx,确保文档没有损坏,查看 WordUtils.java 的错误日志。
A: 检查网络连接,查看 SSE 连接状态,参考 SSEHelper.java 的错误处理逻辑。
A: 参考 ZmAiController.java 中的 LOCAL 模式实现,添加新的配置和调用逻辑。
如有问题或建议,请联系项目维护团队或提交 Issue。