企业级Java项目和大模型结合场景(智能客服系统:电商、金融、政务、企业)
企业级Java项目与大模型(AI)的结合正在改变传统企业应用的开发模式,主要应用场景包括:
- 智能客服系统:基于大模型的对话能力构建企业级客服解决方案
电商平台:处理商品咨询、订单查询、退换货等问题
金融服务:解答开户流程、理财产品、贷款审批等问题
政务服务:提供政策解读、办事指南、预约服务等
企业服务:解决产品使用、技术支持、账户管理等需求
框架
模型
电商平台智能客服系统
知识库处理
knowledge-base/
├── products/ # 商品知识
│ ├── electronics/ # 电子产品类
│ ├── clothing/ # 服装类
│ └── groceries/ # 食品类
├── orders/ # 订单相关
│ ├── payment.md # 支付问题
│ ├── shipping.md # 物流问题
│ └── returns.md # 退换货政策
└── policies/ # 平台政策├── privacy.md # 隐私政策└── terms.md # 服务条款
@Component
public class KnowledgeProcessor{private final EmbeddingModel embeddingModel;private final VectorStore vectorStore;private final TextSplitter textSplitter;public void processDocument(Path filePath,String category)throws IOException{//1.读取文档内容String content = Files.readString(filePath);//2.文档分块List<TextSegment> segments = textSplitter.split(Document.from(content,metadata(filePath,category)));//3.生成嵌入向量List<Embedding> embeddings = embeddingModel.embedAll(segments).content();//4.存储到向量数据库vectorStore.addAll(embeddings,segments);}private Map<String,String> metadata(Path filePath, String category) {Map<String, String> metadata = new HashMap<>();metadata.put("source", filePath.getFileName().toString());metadata.put("category", category);metadata.put("timestamp", Instant.now().toString());return metadata;}
}
业务代码
@RestController
@RequestMapping("/api/ai-chat")
public class ChatController {private final AiChatService chatService;@PostMappingpublic ResponseEntity<ChatResponse> chat(@RequestBody ChatRequest request,@RequestHeader("X-User-Id") String userId){request.setUserId(userId);ChatResponse response = chatService.handleMessage(request);return ResponseEntity.ok(response);}@PostMapping("/knowledge")public ResponseEntity<String> uploadKnowledge(@RequestParam("file") MultipartFile file,@RequestParam(value = "category", required = false) String category) {chatService.addKnowledge(file, category);return ResponseEntity.ok("知识库更新中...");}
}
@Service
public class AiChatService{private final ChatLanguageModel chatModel;private final OrderService orderService;private final ProductService productService;private final VectorStore vectorStore;@Autowiredprivate AiChatService(@Qualifier("deepSeekChatModel") ChatLanguageModel chatModel,OrderService orderService,ProductService productService,VectorStore vectorStore){this.chatModel = chatModel;this.orderService = orderService;this.productService = productService;this.vectorStore = vectorStore;}public ChatResponse handleMessage(ChatRequest request){//意图识别Intent intent = detectIntent(request.getMessage());//根据意图处理switch(intent.getType()) {case PRODUCT_QUERY:return handleProductQuery(intent, request);case ORDER_QUERY:return handleOrderQuery(intent, request);case RETURN_EXCHANGE:return handleReturnRequest(intent, request);default:return handleGeneralQuery(request);}}private Intent detectIntent(String message){//使用大模型进行意图识别String prompt = """请分析以下用户问题的意图,从以下类型中选择:- PRODUCT_QUERY: 商品相关问题- ORDER_QUERY: 订单相关问题- RETURN_EXCHANGE: 退换货问题- GENERAL: 其他问题用户问题: %s只需返回意图类型:""".formatted(message);String intentStr = chatModel.generate(prompt).trim();return new Intent(IntentType.valueOf(intentStr))}//-------------------根据意图处理具体的问题------------------private ChatResponse handleProductQuery(Intent intent,ChatRequest request){//提取商品ID或名称String productPrompt = """从以下用户问题中提取商品ID或名称:问题: %s返回格式: {"id":"","name":""}""".formatted(request.getMessage());JsonNode productInfo = parseJson(chatModel.generate(productPrompt));// 查询商品服务Product product = null;if (productInfo.has("id") && !productInfo.get("id").asText().isEmpty()) {product = productService.getProductById(productInfo.get("id").asText());} else if (productInfo.has("name")) {product = productService.searchProduct(productInfo.get("name").asText());}// 构建响应if (product != null) {String response = """商品信息:名称: %s价格: %.2f库存: %d规格: %s""".formatted(product.getName(),product.getPrice(),product.getStock(),product.getSpecifications());return new ChatResponse(response, List.of("购买链接", "类似商品", "用户评价"));} else {return new ChatResponse("未找到相关商品信息", Collections.emptyList());}}private ChatResponse handleOrderQuery(Intent intent, ChatRequest request) {// 提取订单号String orderPrompt = """从以下用户问题中提取订单号:问题: %s只需返回订单号:""".formatted(request.getMessage());String orderId = chatModel.generate(orderPrompt).trim();// 查询订单服务Order order = orderService.getOrderDetails(orderId, request.getUserId());if (order != null) {String response = """订单状态: %s商品: %s x%d总金额: %.2f物流: %s""".formatted(order.getStatus(),order.getProductName(),order.getQuantity(),order.getTotalAmount(),order.getShippingInfo());return new ChatResponse(response, List.of("退货申请", "物流详情", "联系客服"));} else {return new ChatResponse("未找到相关订单信息", Collections.emptyList());}}}
测试用例
@Test
public void testProductQuery(){ChatRequest request = new ChatRequest();request.setMessage("iPhone 13有货吗?多少钱?");request.setUserId("test_user_1");ChatResponse response = chatService.handleMessage(request);assertNotNull(response.getResponse());assertTrue(response.getResponse().contains("iPhone 13"));assertTrue(response.getResponse().contains("价格"));assertFalse(response.getResponse().contains("未找到"));
}@Test
public void testOrderQuery() {// 先创建测试订单Order testOrder = createTestOrder("test_user_1");ChatRequest request = new ChatRequest();request.setMessage("我的订单" + testOrder.getId() + "到哪了?");request.setUserId("test_user_1");ChatResponse response = chatService.handleMessage(request);assertNotNull(response.getResponse());assertTrue(response.getResponse().contains(testOrder.getId()));assertTrue(response.getResponse().contains("物流"));
}
金融平台智能客服系统
知识库目录结构
financial-knowledge/
├── account-opening/
│ ├── personal.md--------个人开户文档
│ ├── corporate.md
│ └── foreigner.md
├── wealth-management/
│ ├── fixed-income.md
│ ├── equity.md
│ ├── structured-products.md------理财产品文档
│ └── risk-disclosure.md
├── loans/
│ ├── mortgage.md
│ ├── personal-loan.md
│ └── business-loan.md
└── regulations/├── aml.md└── kyc.md
---
category: 账户开立
subcategory: 个人账户
effective_date: 2023-10-01
risk_level: R1
---# 个人银行账户开立指南## 所需材料
### 基本材料
- 中国大陆居民身份证原件
- 实名认证手机号(需本人使用超过6个月)### 补充材料(视情况)
- 居住证明(水电费账单等)
- 收入证明(工资流水/纳税证明)## 办理流程
1. **线上预约**:通过手机银行APP预约办理时段
2. **网点办理**:携带材料到指定网点
3. **面签确认**:签署开户协议
4. **账户激活**:初始密码函将通过EMS寄送## 费用标准
- 借记卡工本费:¥10
- 首年账户管理费:免收
- 网银U盾:¥30(可选)## 注意事项
- 每人同类型账户限开3个
- 境外转账需单独申请权限
---
category: 理财产品
subcategory: 结构性存款
risk_level: R3
yield_range: 1.5%-4.2%
min_amount: ¥50000
---# 结构性存款产品说明## 产品特点
- **保本浮动收益**:本金保障,收益挂钩标的资产表现
- **期限灵活**:7天至1年期可选
- **标的资产**:SHIBOR利率/黄金价格/股指## 风险揭示
- 市场风险:标的资产波动影响最终收益
- 流动性风险:期限内不可提前赎回
- 汇率风险:外币产品受汇率波动影响## 适合客户
- 风险承受能力:平衡型(R3)及以上
- 投资目标:稳健增值
- 投资经验:需有6个月以上理财产品购买经验## 购买流程
1. 风险测评(需达到R3)
2. 产品说明书阅读确认
3. 资金划转(支持活期账户直接购买)
/**基于知识库的理财知识问答
*/
@Service
public class WealthManagementService{private final VectorStore vectorStore;private final ChatLanguageModel chatModel;private static final String PROMPT_TEMPLATE = """你是一名专业的理财顾问,请根据以下知识库内容和用户问题,用专业但易懂的语言回答问题。如果涉及收益率,必须注明"历史业绩不代表未来表现"。相关知识:%s用户问题:%s回答要求:- 包含产品风险等级(R1-R5)- 注明起购金额- 列出类似产品比较(如适用)""";public String answerQuextion(String question,String customerRiskTolerance){//1.向量检索List<TextSegment> relevantDocs = vectorStore.findRelevant(question,3);//2.风险适配过滤List<TextSegment> filteredDocs = filterByRiskLevel(relevantDocs,customerRiskTolerance);//3.构建PromptString context = filteredDocs.stream().map(TextSegment::text).collect(Collectors.joining("\n\n"));String prompt = PROMPT_TEMPLATE.formatted(context, question);//4.调用模型return chatModel.generate(prompt);}private List<TextSegment> filterByRiskLevel(List<TextSegment> segments,String riskTolerance){return segments.stream().filter(seg -> seg.metadata().get("risk_level").compareTo(riskTolerance) <= 0).collect(Collectors.toList());}
}
后端
financial-ai-service/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── finance/
│ │ │ ├── ai/
│ │ │ │ ├── controller/
│ │ │ │ ├── service/
│ │ │ │ └── rag/
│ │ │ ├── client/ # 外部服务调用
│ │ │ ├── config/ # 安全/模型配置
│ │ │ └── model/ # 数据实体
│ │ └── resources/
│ │ ├── knowledge/ # 知识库文档
│ │ └── application.yml
└── test/└── java/└── com/└── finance/└── ai/├── service/└── controller/
在这里插入代码片
@Service
@RequiredArgsConsturator
public class AccountService{private final AccountClient accountClient;//远程调用其他服务模块public String getAccountOpengingGuide(AccountType accountType){AccountOpeningRequirements requirements = accountClient.getRequirements(accountType);return """开户所需材料:1. 身份证明:%s2. 地址证明:%s3. 其他材料:%s流程时效:%d个工作日""".formatted(requirements.getIdDocuments(),requirements.getAddressProofs(),requirements.getAdditionalDocuments(),requirements.getProcessingDays());}}
@FeignClient(name = "account-service", url = "${service.account.url}")
public interface AccountClient {@GetMapping("/api/account/open/requirements")AccountOpeningRequirements getRequirements(@RequestParam("accountType") AccountType accountType);@PostMapping("/api/account/open/check")VerificationResult checkDocuments(@RequestBody DocumentCheckRequest request);
}
政务服务平台智能客服系统
业务需求梳理
政策解读:法律法规、地方政策、惠民措施等自动解析与问答
办事指南:2000+项政务服务事项的办理条件、材料清单、流程说明
预约服务:对接政务预约系统,实现线上预约、改约、取消
进度查询:办件状态实时跟踪与推送
智能分派:复杂问题自动转人工客服并分配至对应部门
知识库
policy-knowledge/
├── GA/ # 公安部门
│ ├── 户籍管理/
│ │ ├── 户口迁移.md
│ │ └── 新生儿落户.md-----------新生儿落户办理指南
│ └── 出入境/
│ ├── 护照办理.md
│ └── 港澳通行证.md
├── RS/ # 人社部门
│ ├── 社保/
│ │ ├── 养老保险.md
│ │ └── 医疗保险.md
│ └── 就业/
│ ├── 失业登记.md
│ └── 创业补贴.md
└── common/ # 通用政策├── 税收优惠.md└── 疫情防控.md
---
title: 新生儿落户办理指南
department: GA
category: 户籍管理
effective_date: 2025-01-01
source: 《XX市户籍管理条例》(XX政发[2024]15号)
---# 办理条件
1. 新生儿出生后一个月内
2. 父母至少一方为本市户籍
...# 所需材料
- 出生医学证明原件及复印件
- 父母户口簿、身份证
...
/**政策文档服务
*/
@Service
public class PolicyService{private final VectorStore policyVectorStore;private final ChatLanguageModel chatModel;private static final String PROMPT_TEMPLATE = """你是一名专业的政务政策解读助手,请根据以下政策条款和用户问题,用简明易懂的语言回答。回答必须符合以下要求:1. 标明政策出处(文件名+文号)2. 解释专业术语3. 提供办理指引(如适用)相关政策:%s用户问题:%s""";public PolicyResponse answerQuestion(String question,String department){//1.向量检索(按部门过滤)List<TextSegment> relevantDocs = policyVectorStore.findRelevant(quesion,3,MetadataFilter.departmentEq(department));//2.构建PromptString context = relevantDocs.stream().map(seg -> seg.text() + "\n出处:" + seg.metadata().get("source")).collect(Collectors.joining("\n\n"));String prompt = PROMPT_TEMPLATE.formatted(context, question);// 3. 调用模型String answer = chatModel.generate(prompt);return new PolicyResponse(answer,relevantDocs.stream().map(seg -> seg.metadata().get("source")).collect(Collectors.toList()));}
}
gov-ai-service/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── gov/
│ │ │ ├── ai/
│ │ │ │ ├── controller/
│ │ │ │ ├── service/
│ │ │ │ └── rag/
│ │ │ ├── client/ # 政务系统对接
│ │ │ ├── config/ # 安全/模型配置
│ │ │ └── model/ # 数据实体
│ │ └── resources/
│ │ ├── knowledge/ # 政策知识库
│ │ └── application.yml
└── test/└── java/└── com/└── gov/└── ai/├── service/└── controller/
企业服务平台智能客服系统
产品使用支持:软件操作指南、功能说明、最佳实践
技术问题排查:错误代码解析、系统兼容性、性能优化
账户管理:注册/登录问题、权限配置、安全设置
计费咨询:套餐说明、发票开具、续费升级
API支持:接口文档查询、调试指导、SDK使用
知识库
enterprise-knowledge/
├── product/
│ ├── user-guide/ # 用户指南
│ ├── release-notes/ # 版本发布说明
│ └── faq/ # 常见问题
├── tech-support/
│ ├── error-codes/ # 错误代码解析
│ ├── troubleshooting/ # 故障排查指南
│ └── best-practices/ # 最佳实践
├── account/
│ ├── onboarding/ # 新手指南
│ ├── security/ # 安全设置
│ └── billing/ # 计费说明
└── api/├── rest/ # REST API文档├── sdk/ # SDK使用指南└── webhook/ # Webhook配置
---
title: "文件上传失败处理"
type: TECH_SUPPORT
product: "企业文件服务"
version: ["v2.1+"]
keywords: ["HTTP 413", "文件大小限制", "上传超时"]
---# 常见错误场景
## 错误码 413
- **原因**:请求实体超过服务器限制
- **解决方案**:1. 检查当前套餐的文件大小限制2. 使用分片上传API3. 联系销售升级套餐## 错误码 504
- **原因**:上传超时
- **解决方案**:1. 减小单个文件大小2. 优化网络连接3. 设置合理的超时参数# 相关API
- [分片上传API](/api/v2/uploads)
- [套餐查询API](/api/v2/plan)
// TechSupportService.java
@Service
@RequiredArgsConstructor
public class TechSupportService {private final VectorStore vectorStore;private final ChatLanguageModel chatModel;private final ErrorCodeRepository errorCodeRepo;public TechSupportResponse diagnoseIssue(String errorMessage, String stackTrace) {// 1. 错误码识别Optional<ErrorCode> errorCode = extractErrorCode(errorMessage);// 2. 知识库检索List<TextSegment> solutions = vectorStore.findRelevant(errorMessage + " " + stackTrace, 3,MetadataFilter.typeEq("TECH_SUPPORT"));// 3. 构建PromptString prompt = buildDiagnosisPrompt(errorMessage, stackTrace, solutions);// 4. 调用模型String diagnosis = chatModel.generate(prompt);return new TechSupportResponse(diagnosis,solutions.stream().map(TextSegment::text).collect(Collectors.toList()),errorCode.map(ErrorCode::getReferenceUrl).orElse(null));}private String buildDiagnosisPrompt(String error, String stack, List<TextSegment> solutions) {return """你是一名资深技术支持工程师,请根据以下错误信息和解决方案,给出诊断建议:错误信息:%s调用堆栈:%s已知解决方案:%s回答要求:1. 分析最可能的根本原因2. 提供分步解决步骤3. 如问题复杂建议联系支持团队""".formatted(error,stack,solutions.stream().map(TextSegment::text).collect(Collectors.joining("\n- ")));}
}
// ApiSupportService.java
@Service
public class ApiSupportService {private final ApiDocRepository apiDocRepo;private final ChatLanguageModel chatModel;public ApiSupportResponse answerApiQuestion(String query, String apiVersion) {// 1. 检索API文档List<ApiDocumentation> relevantDocs = apiDocRepo.findByContentContainingAndVersion(query, apiVersion);// 2. 生成代码示例String codeExample = generateCodeExample(query, relevantDocs);// 3. 构建响应return new ApiSupportResponse(generateExplanation(query, relevantDocs),codeExample,relevantDocs.stream().map(ApiDocumentation::getEndpoint).collect(Collectors.toList()));}private String generateCodeExample(String query, List<ApiDocumentation> docs) {String prompt = """根据以下API文档,为问题"%s"生成%s代码示例:文档内容:%s要求:1. 包含必要的认证头2. 处理错误情况3. 添加注释说明""".formatted(query,docs.get(0).getLanguage(),docs.stream().map(ApiDocumentation::getContent).collect(Collectors.joining("\n\n")));return chatModel.generate(prompt);}
}