- 🔌 开箱即用 - Spring Boot Starter,零配置快速集成
- 🌐 多提供商统一管理 - 支持OpenAI、DeepSeek、SiliconFlow、Doubao等主流AI服务
- 📝 统一API接口 - 无需学习各厂商差异化API,统一的编程接口
- ⚡ 同步/异步调用 - 支持传统同步调用和流式响应
- 🔄 SPI扩展机制 - 基于Java SPI,支持第三方提供商无缝扩展
- 🎨 智能配置 - 完整的IDE配置提示支持,配置零出错
- ⏱️ 灵活超时控制 - 全局和提供商级别的超时配置
- 🔧 自动装配 - 基于条件的智能自动配置
- 📊 配置验证 - 启动时配置检查和连接测试
- 🏷️ 模型管理 - 支持获取各提供商的可用模型列表
| 提供商 | 状态 | 主要模型 | 特色功能 |
|---|---|---|---|
| 🤖 OpenAI | ✅ 已实现 | GPT-4, GPT-3.5-turbo, GPT-4o | 业界标杆,功能完善 |
| 🧠 DeepSeek | ✅ 已实现 | deepseek-chat, deepseek-coder | 推理能力强,代码生成 |
| 🌊 SiliconFlow | ✅ 已实现 | Qwen2.5, GLM-4, Llama-3 | 开源模型云服务 |
| 🎪 Doubao(豆包) | ✅ 已实现 | doubao-seed-1.6, doubao-pro | 字节跳动多模态模型 |
| 🐻 百度文心一言 | 🚧 开发中 | ERNIE系列 | - |
| 🌟 阿里通义千问 | 🚧 开发中 | Qwen系列 | - |
| 🔮 腾讯混元 | 🚧 开发中 | Hunyuan | - |
💡 扩展提示:框架基于SPI机制设计,您可以轻松扩展任何AI提供商
在项目的 pom.xml 中添加依赖:
<dependency>
<groupId>com.chow.easy</groupId>
<artifactId>easy-ai-framework-starter</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>在 application.yml 中配置AI提供商:
bcl:
ai-framework:
# 是否启用框架(默认true)
enabled: true
# 默认使用的提供商
default-provider: openai
# 全局超时配置(毫秒)
timeout: 30000
read-timeout: 300000
# 多提供商配置
providers:
# OpenAI配置
openai:
api-key: sk-your-openai-api-key
api-url: https://api.openai.com/v1 # 可选
default-model: gpt-3.5-turbo
parameters:
temperature: 0.7
max_tokens: 2000
# DeepSeek配置
deepseek:
api-key: sk-your-deepseek-api-key
default-model: deepseek-chat
parameters:
temperature: 1.0
max_tokens: 4096
# SiliconFlow配置
siliconflow:
api-key: sk-your-siliconflow-api-key
default-model: Qwen/Qwen2.5-7B-Instruct
parameters:
temperature: 0.7
max_tokens: 4096@RestController
public class ChatController {
@Autowired
private AiServiceFactory serviceFactory;
// 或者使用工具类
@Autowired
private AiServiceUtil aiServiceUtil;
@PostMapping("/chat")
public String chat(@RequestParam String message) {
// 使用默认提供商
return aiServiceUtil.chat(message);
// 或者指定提供商
// return aiServiceUtil.chat("openai", message);
}
}@Service
public class AiService {
@Autowired
private AiServiceFactory serviceFactory;
public void demonstrateAdvancedUsage() {
// 获取特定提供商的服务
AiService openaiService = serviceFactory.getService("openai");
// 1. 简单对话
String response = openaiService.chat("你好,请介绍一下你自己");
// 2. 多轮对话
List<AiMessage> messages = Arrays.asList(
new AiMessage("user", "我正在学习Java编程"),
new AiMessage("assistant", "很好!Java是一门强大的编程语言。"),
new AiMessage("user", "能给我一个简单的例子吗?")
);
String multiResponse = openaiService.chat(messages);
// 3. 流式对话
openaiService.chatStream("请解释什么是机器学习", content -> {
System.out.print(content); // 实时输出
});
// 4. 检查服务状态
boolean available = openaiService.isAvailable();
// 5. 获取支持的模型
List<String> models = serviceFactory.getSupportedModels("openai");
}
}| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
bcl.ai-framework.enabled |
Boolean | true |
是否启用AI框架 |
bcl.ai-framework.default-provider |
String | "openai" |
默认使用的提供商 |
bcl.ai-framework.timeout |
Integer | 30000 |
全局请求超时时间(毫秒) |
bcl.ai-framework.read-timeout |
Integer | 300000 |
流式读取超时时间(毫秒) |
bcl.ai-framework.providers |
Map | - | 各提供商的详细配置 |
每个提供商支持以下配置:
| 配置项 | 类型 | 必填 | 说明 |
|---|---|---|---|
api-key |
String | ✅ | API密钥 |
api-url |
String | ❌ | API基础URL(使用默认值) |
default-model |
String | ❌ | 默认使用的模型 |
parameters |
Map | ❌ | 提供商特定的参数配置 |
parameters:
temperature: 0.7 # 创造性控制 (0.0-2.0)
max_tokens: 2000 # 最大输出长度
top_p: 1.0 # 核心采样参数
frequency_penalty: 0.0 # 频率惩罚
presence_penalty: 0.0 # 存在惩罚
stop: ["Human:", "AI:"] # 停止词列表AI服务工厂,用于创建和管理AI服务实例:
public interface AiServiceFactory {
// 获取默认AI服务
AiService getDefaultService();
// 获取指定提供商的AI服务
AiService getService(String providerName);
// 检查提供商是否已配置
boolean isProviderConfigured(String providerName);
// 获取已配置的提供商
Set<String> getConfiguredProviders();
// 获取可用的SPI提供商
Set<String> getAvailableSpiProviders();
// 获取支持的模型列表
List<String> getSupportedModels(String providerName);
// 缓存管理
void clearCache();
void clearCache(String providerName);
}统一的AI服务接口:
public interface AiService {
// 简单对话
String chat(String prompt);
// 多轮对话
String chat(List<AiMessage> messages);
// 流式对话
void chatStream(String prompt, Consumer<String> callback);
void chatStream(List<AiMessage> messages, Consumer<String> callback);
// 获取提供商名称
String getProviderName();
// 检查服务可用性
boolean isAvailable();
}便捷工具类:
public class AiServiceUtil {
// 使用默认提供商对话
String chat(String prompt);
// 使用指定提供商对话
String chat(String providerName, String prompt);
String chat(String providerName, List<AiMessage> messages);
// 流式对话
void chatStream(String prompt, Consumer<String> callback);
void chatStream(String providerName, String prompt, Consumer<String> callback);
}框架基于Java SPI机制,支持第三方扩展。以下是完整的扩展步骤:
public class CustomAiServiceProvider implements AiServiceProvider {
@Override
public String getProviderName() {
return "custom-ai";
}
@Override
public boolean supports(String providerName) {
return "custom-ai".equalsIgnoreCase(providerName);
}
@Override
public AiService createAiService(
BclAiFrameworkProperties.ProviderConfig config,
int timeout,
int readTimeout) {
return new CustomAiService(config, timeout, readTimeout);
}
@Override
public int getPriority() {
return 50; // 优先级,数值越小越高
}
@Override
public String getDescription() {
return "Custom AI Provider - 自定义AI服务提供商";
}
@Override
public List<String> getSupportedModels() {
return Arrays.asList("custom-model-v1", "custom-model-v2");
}
}public class CustomAiService extends BaseAiServiceImpl {
public CustomAiService(BclAiFrameworkProperties.ProviderConfig config,
int timeout, int readTimeout) {
super(config, timeout, readTimeout);
}
@Override
public String getProviderName() {
return "custom-ai";
}
@Override
protected Map<String, Object> buildRequestBody(List<AiMessage> messages, boolean stream) {
// 构建请求体
return requestBody;
}
@Override
protected String parseResponse(String responseBody) {
// 解析响应
return parsedContent;
}
@Override
protected void parseStreamResponse(String line, Consumer<String> callback) {
// 解析流式响应
callback.accept(content);
}
@Override
protected String getApiEndpoint() {
return config.getApiUrl() + "/chat/completions";
}
}在 src/main/resources/META-INF/services/com.chow.easy.ai.framework.spi.AiServiceProvider 文件中添加:
com.example.provider.CustomAiServiceProvider
bcl:
ai-framework:
providers:
custom-ai:
api-key: your-custom-api-key
api-url: https://api.custom-ai.com
default-model: custom-model-v1📖 详细指南:查看 SPI-GUIDE.md 获取完整的扩展开发指南
- 📘 OpenAI 使用指南 - GPT系列模型完整配置
- 📗 DeepSeek 使用指南 - 推理和代码生成专家
- 📙 Doubao 使用指南 - 字节跳动多模态模型
# 生产环境推荐配置
bcl:
ai-framework:
timeout: 60000 # 适当增加超时
read-timeout: 180000 # 流式响应超时
providers:
openai:
parameters:
temperature: 0.3 # 降低随机性
max_tokens: 1000 # 控制输出长度# 使用环境变量保护API密钥
bcl:
ai-framework:
providers:
openai:
api-key: ${OPENAI_API_KEY}
deepseek:
api-key: ${DEEPSEEK_API_KEY}# 启用详细日志
logging:
level:
com.chow.easy.ai.framework: DEBUGA: 检查 application.yml 中是否正确配置了 api-key,确保不为空。
A: 修改 default-provider 配置,或在代码中使用 serviceFactory.getService("provider-name")。
A: 支持,在 api-url 中配置代理地址即可。
A: 启用DEBUG日志级别,查看详细的请求响应信息。
- 多提供商配置管理
- SPI扩展机制
- OpenAI、DeepSeek、SiliconFlow、Doubao提供商实现
- 同步和流式API调用
- 自动装配和条件注入
- 完整的配置验证
- 百度文心一言API实现
- 阿里通义千问API实现
- 腾讯混元API实现
- Spring Boot 3.x 支持
- 多模态(图片、语音)支持
- 负载均衡和故障转移
- 请求缓存机制
- 调用统计和监控
- 异步批量处理
我们欢迎任何形式的贡献!
- 🍴 Fork 项目
- 🌿 创建 特性分支 (
git checkout -b feature/AmazingFeature) - 💍 提交 更改 (
git commit -m 'Add some AmazingFeature') - 📤 推送 分支 (
git push origin feature/AmazingFeature) - 🎉 创建 Pull Request
本项目基于 MIT 许可证开源 - 查看 LICENSE 文件了解详情。
感谢所有贡献者的辛勤工作,以及以下开源项目的支持:
- Spring Boot - 应用框架
- OkHttp - HTTP客户端
- Jackson - JSON处理
🌟 如果这个项目对您有帮助,请给我们一个Star! 🌟