AI Code Helper
一个基于 Spring Boot 和 LangChain4j 的智能编程助手应用,专注于联网搜索和敏感词检测功能的实践项目。
项目简介
AI Code Helper 是一个用于学习和实践 AI 应用开发的项目,主要演示如何集成联网搜索功能和实现敏感词检测机制。该项目集成了阿里云通义千问大语言模型,通过 LangChain4j 框架提供智能对话服务。
核心功能
🔍 联网搜索功能
- 实时信息获取:集成联网搜索能力,获取最新信息
- 搜索结果整合:将搜索到的信息与 AI 回答相结合
- 来源标注:明确标注信息来源,确保信息可靠性
🛡️ 敏感词检测功能
- 实时输入检测:在用户输入时实时检测敏感词汇
- 安全防护机制:阻止包含敏感词的不当内容
- 可配置词库:支持自定义敏感词列表
- 大小写不敏感:确保检测的全面性
💬 智能对话
- 编程学习指导:提供编程学习和求职面试相关建议
- 系统提示词:通过外部文件配置 AI 行为
- 安全对话:在安全检测通过后提供智能回复
技术栈
- Java 21:使用最新的 Java LTS 版本
- Spring Boot 3.5.6:现代化的 Java 企业级框架
- LangChain4j 1.1.0:Java 版本的 LangChain 框架,支持联网搜索
- 通义千问 (Qwen):阿里云大语言模型
- MCP (Model Context Protocol):支持联网搜索的协议
- Maven:项目构建和依赖管理
- Lombok:简化 Java 代码编写
项目结构
src/
├── main/
│ ├── java/com/atguigu/aicodehelper/
│ │ ├── ai/ # AI 相关服务
│ │ │ ├── AiCodeHelper.java # 核心 AI 服务实现
│ │ │ ├── AiCodeHelperService.java # AI 服务接口(支持联网搜索)
│ │ │ └── AiCodeHelperServiceFactory.java
│ │ ├── guardrail/ # 敏感词检测模块
│ │ │ └── SafeInputGuardrail.java # 输入安全检查实现
│ │ ├── mcp/ # 联网搜索配置
│ │ │ └── McpConfig.java # MCP 协议配置
│ │ └── AiCodeHelperApplication.java # 应用启动类
│ └── resources/
│ ├── application.yml # 应用配置
│ ├── application-local.yml # 本地环境配置(包含 API Key)
│ ├── system-prompt.txt # 系统提示词(支持联网搜索说明)
│ ├── static/ # 静态资源
│ └── templates/ # 模板文件
└── test/ # 测试代码
├── AiCodeHelperApplicationTests.java
└── AiCodeHelperServiceTests.java快速开始
环境要求
- Java 21 或更高版本
- Maven 3.6 或更高版本
- 阿里云通义千问 API Key
安装步骤
- 克隆项目
git clone
cd ai-code-helper- 配置 API Key
编辑 src/main/resources/application-local.yml 文件,将 api-key 替换为你的通义千问 API Key:
langchain4j:
community:
dashscope:
chat-model:
model-name: qwen-max
api-key: your-api-key-here- 运行应用
# 使用 Maven 运行
./mvnw spring-boot:run
# 或者先编译再运行
./mvnw clean package
java -jar target/ai-code-helper-0.0.1-SNAPSHOT.jar- 访问应用
应用启动后,默认运行在 http://localhost:8080
配置说明
应用配置
- 应用名称:ai-code-helper
- 默认环境:local
- AI 模型:qwen-max(通义千问最大模型)
安全配置
项目内置了输入安全检查机制,会过滤包含敏感词的输入:
- 检测词汇:kill, evil
- 检测方式:不区分大小写的单词匹配
核心功能实现
🔍 联网搜索功能
项目通过 LangChain4j 的 MCP (Model Context Protocol) 支持联网搜索:
// MCP 配置类
@Configuration
public class McpConfig {
// 配置联网搜索相关设置
}系统提示词中明确要求 AI 在需要时进行联网搜索:
5. 如果是联网搜索的内容请指明出处,并明确告诉用户是联网搜索的结果🛡️ 敏感词检测功能
实现了 InputGuardrail 接口的安全检查机制:
public class SafeInputGuardrail implements InputGuardrail {
// 敏感词词库
private static final Set sensitiveWords = Set.of("kill", "evil");
@Override
public InputGuardrailResult validate(UserMessage userMessage) {
String inputText = userMessage.singleText().toLowerCase();
String[] words = inputText.split("\\W+");
for (String word : words) {
if (sensitiveWords.contains(word)) {
return fatal("Sensitive word detected: " + word);
}
}
return success();
}
}💬 AI 服务接口
@InputGuardrails({SafeInputGuardrail.class})
public interface AiCodeHelperService {
@SystemMessage(fromResource = "system-prompt.txt")
String chat(String message);
}🔧 核心服务实现
@Service
public class AiCodeHelper {
@Resource
private ChatModel qwenChatModel;
// 基础对话方法(会经过敏感词检测)
public String chat(String message);
// 直接对话方法(绕过检测)
public String chatWithMessage(UserMessage userMessage);
}开发指南
🔧 敏感词检测开发
添加新的敏感词
在 SafeInputGuardrail.java 中修改 sensitiveWords 集合:
private static final Set sensitiveWords = Set.of("kill", "evil", "newSensitiveWord");自定义检测逻辑
可以扩展检测逻辑,比如:
- 添加正则表达式检测
- 集成外部敏感词库
- 添加上下文相关的检测
@Override
public InputGuardrailResult validate(UserMessage userMessage) {
String inputText = userMessage.singleText().toLowerCase();
// 基础敏感词检测
if (containsSensitiveWords(inputText)) {
return fatal("Sensitive content detected");
}
// 可以添加更多检测逻辑
// 如:长度检测、特殊字符检测等
return success();
}🌐 联网搜索开发
配置 MCP 搜索
在 McpConfig.java 中配置搜索相关设置:
@Configuration
public class McpConfig {
@Bean
public McpClient mcpClient() {
// 配置 MCP 客户端
return McpClient.builder()
.searchEnabled(true)
.build();
}
}自定义系统提示词
编辑 src/main/resources/system-prompt.txt 文件来修改 AI 助手的联网搜索行为:
你是编程领域的小助手,帮助用户解答编程学习和求职面试相关的问题,并给出建议。重点关注 4 个方向:
1. 规划清晰的编程学习路线
2. 提供项目学习建议
3. 给出程序员求职全流程指南(比如简历优化、投递技巧)
4. 分享高频面试题和面试技巧
5. 如果是联网搜索的内容请指明出处,并明确告诉用户是联网搜索的结果
请用简洁易懂的语言回答,助力用户高效学习与求职。🚀 添加新的 AI 服务
- 在
ai包下创建新的服务类 - 使用
@Service注解标记 - 注入
ChatModel进行 AI 对话 - 可选择性地添加
@InputGuardrails注解
测试
运行测试:
# 运行所有测试
./mvnw test
# 运行特定测试类
./mvnw test -Dtest=AiCodeHelperServiceTests构建和部署
构建应用
# 清理并构建
./mvnw clean package
# 跳过测试构建
./mvnw clean package -DskipTestsDocker 部署(可选)
FROM openjdk:21-jdk-slim
COPY target/ai-code-helper-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]贡献指南
- Fork 项目
- 创建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
学习重点
🎯 项目学习目标
这个项目主要用来学习和实践以下两个核心功能:
- 联网搜索功能
- 学习如何集成 MCP (Model Context Protocol) - 理解 LangChain4j 的联网搜索机制 - 实践 AI 与实时信息的结合
- 敏感词检测功能
- 学习实现 InputGuardrail 接口 - 理解输入验证和内容安全机制 - 实践文本处理和过滤逻辑
📚 技术学习点
- LangChain4j 框架:学习 Java 版本的 LangChain 使用
- Spring Boot 集成:学习如何将 AI 服务集成到 Spring 应用中
- 安全编程:学习输入验证和安全防护的最佳实践
- MCP 协议:学习模型上下文协议的使用
更新日志
v0.0.1-SNAPSHOT
- 初始版本发布
- 集成通义千问大语言模型
- 实现联网搜索功能(通过 MCP 协议)
- 实现敏感词检测功能(通过 InputGuardrail)
- 支持编程学习和求职指导
- 添加系统提示词配置
注意:使用前请确保已获得有效的通义千问 API Key,并妥善保管您的 API 密钥。
