前言

在人工智能快速发展的今天,如何将大语言模型与本地文件系统相结合,创造出真正实用的智能助手,成为了一个重要的研究方向。本文将介绍一个名为FileAgent的创新项目,它基于Spring Alibaba AI框架,实现了与通义千问大模型的深度集成,为用户提供了一个功能强大的智能文件管理助手。

**🎉 项目已开源!**  
GitHub/Gitee 仓库地址:**https://gitee.com/mobuhan/file-management-knowledge-base.git**

欢迎 Star ⭐、Fork 和贡献代码!

## 项目概述

FileAgent是一个基于Spring Boot和Spring Alibaba AI构建的智能文件管理助手,它具备以下核心特性:

- **智能对话**:集成通义千问大模型,支持自然语言交互
- **流式响应**:实时显示AI回复,提升用户体验
- **文件操作Skills**:提供7种文件操作技能,包括磁盘查看、文件列表、大小获取、读写编辑等
- **知识库功能**:支持多种文档格式的上传和检索,实现RAG(检索增强生成)
- **多模态支持**:支持图片、PDF、Word等文件的直接上传和分析
- **会话管理**:完整的聊天历史记录和会话管理功能

## 技术架构

### 后端技术栈

- **Spring Boot 3.2.5**:作为基础框架
- **Spring Alibaba AI 1.0.0-M6.1**:集成阿里云通义千问大模型
- **Spring WebFlux**:实现流式响应
- **Apache POI & PDFBox**:处理Office文档和PDF文件
- **Lombok**:简化Java代码

### 前端技术

- **原生HTML/CSS/JavaScript**:轻量级前端界面
- **Server-Sent Events (SSE)**:实现流式数据传输

## 核心功能详解

### 1. 智能文件操作技能系统

FileAgent采用创新的Skills架构,将文件操作封装为独立的技能模块:

```java
// 文件操作技能接口
public interface FileSkill {
    String getName();
    String getDescription();
    String execute(String... args);
}
```

系统内置7种核心技能:
- `@list_disk` - 查看系统磁盘信息
- `@list_files <路径>` - 列出目录内容
- `@get_file_size <路径>` - 获取文件大小
- `@read_file <路径> [行数]` - 读取文件内容
- `@create_file <路径> [内容]` - 创建新文件
- `@edit_file <路径> <新内容>` - 编辑文件
- `@delete_file <路径>` - 删除文件或目录

### 2. RAG知识库系统

FileAgent实现了完整的RAG(检索增强生成)功能,支持多种文档格式:

- **支持的格式**:TXT、DOC、DOCX、PDF、PPT、PPTX、XLS、XLSX
- **文本分块**:自动将文档分割为500字符的片段,带100字符重叠
- **关键词搜索**:基于关键词匹配的相关性检索
- **持久化存储**:知识库数据持久化到本地文件系统

### 3. 多模态文件处理

系统支持直接上传图片和文档进行分析:

```java
private UserMessage buildMultimodalMessage(String text, List<String> filePaths, List<String> fileNames) {
    // 处理Data URL格式的文件
    // 图片作为Media对象发送
    // 文档提取文本后嵌入消息
}
```

### 4. 流式对话体验

通过Spring WebFlux实现真正的流式响应:

```java
@PostMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(@RequestBody ChatRequest request) {
    // 返回Flux<String>实现流式传输
}
```

## 系统架构设计

### 分层架构

```
┌─────────────────┐
│   Controller层   │  ← REST API接口
├─────────────────┤
│   Service层     │  ← 业务逻辑处理
├─────────────────┤
│   Skill层       │  ← 文件操作技能
├─────────────────┤
│   Model层       │  ← 数据模型
└─────────────────┘
```

### 核心组件

1. **ChatController**:处理聊天请求,支持流式和非流式响应
2. **KnowledgeBaseController**:管理知识库上传和检索
3. **ChatService**:核心聊天逻辑,集成AI模型和工具调用
4. **KnowledgeBaseService**:文档解析、分块和检索
5. **SkillManager**:技能注册和执行管理

## 关键技术实现

### 1. 工具调用机制

FileAgent使用特殊的标记语法实现AI对文件操作的自主调用:

```java
private static final Pattern TOOL_CALL_PATTERN = Pattern.compile("\\[TOOL_CALL:([^\\]]+)\\]");

// AI回复示例:"让我帮你查看D盘的内容 [TOOL_CALL:listFiles|D:/]"
```

### 2. 会话管理

每个聊天会话都有独立的ID和历史记录:

```java
private final Map<String, List<Message>> sessionHistory = new ConcurrentHashMap<>();
```

### 3. 安全限制

通过配置允许的操作路径来保障系统安全:

```yaml
file-agent:
  allowed-base-paths:
    - D:/workspace
    - C:/temp
    - ./data
```

## 部署和使用

### 环境要求

- JDK 17+
- Maven 3.6+
- 通义千问API密钥

### 快速启动

1. **克隆项目**:
```bash
git clone https://gitee.com/mobuhan/file-management-knowledge-base.git
cd fileAgent
```

2. **配置API密钥**:

在 `src/main/resources/application.yml` 中修改:

```yaml
spring:
  ai:
    dashscope:
      api-key: your-dashscope-api-key-here
```

或者设置环境变量:
```bash
export DASHSCOPE_API_KEY=your-api-key-here
```

获取API Key:访问 https://dashscope.console.aliyun.com/

3. **运行项目**:
```bash
mvn spring-boot:run
```

4. **访问应用**:http://localhost:8080

### 使用示例

```
用户: 帮我看看有哪些磁盘
AI: [调用listDisk技能] 系统共有C盘(500GB)、D盘(1TB)两个磁盘

用户: 列出D:/workspace文件夹
AI: [调用listFiles技能] D:/workspace包含以下文件...

用户: 读取D:/test.txt的内容
AI: [调用readFile技能] 文件内容如下...
```

## 创新亮点

### 1. Skills架构设计

将文件操作抽象为可插拔的技能模块,便于扩展和维护。

### 2. 混合检索策略

结合关键词匹配和语义理解,提高检索准确性。

### 3. 多模态融合

无缝整合文本、图片、文档等多种媒体类型的处理能力。

### 4. 持久化存储

所有会话数据和知识库都持久化到本地,重启不丢失。

## 应用场景

1. **开发辅助**:快速浏览代码结构、查找文件内容
2. **文档管理**:智能检索和分析各类办公文档
3. **学习助手**:基于个人知识库的个性化问答
4. **运维支持**:监控系统文件和目录状态

## 项目结构

```
fileAgent/
├── src/main/java/com/example/fileagent/
│   ├── controller/          # Controller层 - REST API
│   │   ├── ChatController.java
│   │   └── KnowledgeBaseController.java
│   ├── service/             # Service层 - 业务逻辑
│   │   ├── ChatService.java
│   │   ├── KnowledgeBaseService.java
│   │   ├── ChatHistoryService.java
│   │   └── FileAttachmentService.java
│   ├── skill/               # Skills - 文件操作实现
│   │   ├── FileTools.java
│   │   ├── SkillManager.java
│   │   ├── ListDiskSkill.java
│   │   ├── ListFilesSkill.java
│   │   ├── GetFileSizeSkill.java
│   │   ├── ReadFileSkill.java
│   │   ├── CreateFileSkill.java
│   │   ├── EditFileSkill.java
│   │   └── DeleteFileSkill.java
│   ├── model/               # 数据模型
│   └── FileAgentApplication.java
├── src/main/resources/
│   ├── static/
│   │   └── index.html       # 聊天界面
│   └── application.yml      # 配置文件
└── pom.xml
```

## API接口说明

### 聊天接口

- **POST /api/chat** - 非流式聊天
- **POST /api/chat/stream** - 流式聊天(SSE)
- **GET /api/chat/sessions** - 获取会话列表
- **GET /api/chat/session/{sessionId}** - 获取会话历史
- **DELETE /api/chat/session/{sessionId}** - 删除会话

### 知识库接口

- **POST /api/kb/upload** - 上传文件到知识库
- **GET /api/kb/files?sessionId=xxx** - 获取已上传文件列表
- **GET /api/kb/search?sessionId=xxx&query=xxx** - 搜索知识库
- **DELETE /api/kb/session/{sessionId}** - 清空会话知识库
- **DELETE /api/kb/all** - 清空所有知识库

## 未来展望

1. **向量数据库集成**:引入专业的向量存储提升检索效果
2. **更多文件格式**:支持更多专业文档格式
3. **权限管理**:细粒度的文件访问控制
4. **插件系统**:开放第三方技能开发接口
5. **多语言支持**:国际化界面和文档

## 常见问题

### Q: 如何获取通义千问API密钥?

A: 访问阿里云DashScope控制台 https://dashscope.console.aliyun.com/ 注册并创建API密钥。

### Q: 支持哪些操作系统?

A: 理论上支持所有支持JDK 17+的操作系统,已在Windows上测试通过。

### Q: 文件操作是否安全?

A: 系统通过`allowed-base-paths`配置限制可操作的路径范围,建议在配置文件中明确指定允许的路径。

### Q: 知识库数据保存在哪里?

A: 默认保存在 `D:/chat/kb/` 目录下,包括原始文件、分块数据和元数据。

## 总结

FileAgent展示了如何将大语言模型与传统文件系统有机结合,创造出一个既智能又实用的文件管理助手。通过创新的Skills架构和完善的RAG系统,它不仅能够理解用户的自然语言指令,还能准确执行各种文件操作,为用户提供了全新的交互体验。

该项目的源代码完全开源,欢迎感兴趣的开发者参与贡献和改进。

---

## 相关链接

- **Gitee仓库**: https://gitee.com/mobuhan/file-management-knowledge-base.git
- **通义千问官网**: https://tongyi.aliyun.com/
- **Spring Alibaba AI**: https://github.com/alibaba/spring-ai-alibaba

## 作者简介

本文作者是一名专注于AI应用开发的软件工程师,致力于探索大语言模型在实际业务场景中的创新应用。

## 版权声明

本文为原创技术文章,转载请注明出处。项目代码遵循开源协议,欢迎学习和使用。

---

**如果觉得这个项目对你有帮助,欢迎给个 Star ⭐ 支持一下!**
 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐