Back to Portfolio
520 Lượt xem
Team Project • Backend

KTMP Nexus - Enterprise Communication & AI Knowledge Platform

Microservices ecosystem với 7+ dịch vụ độc lập giao tiếp qua gRPC/NATS, Spring Boot + LangChain4j RAG search và pgvector.

Công nghệ:Node.jsExpressTypeScriptJava Spring BootPostgreSQL (pgvector)NATSRedisLangChain4jDocker

💬 KTMP Nexus - Enterprise Communication & AI Knowledge Platform

🏢 Overview

KTMP Nexus is an enterprise-grade communications & RAG Knowledge platform built with Node.js, Java Spring Boot, LangChain4j, NATS JetStream, gRPC, and pgvector on PostgreSQL.

KTMP Nexus Enterprise UI
KTMP Nexus Enterprise UI


📸 Giao diện Thực tế Hệ thống (Real Production Interface)

  • Giao diện Truyền thông Doanh nghiệp (Enterprise Collaboration Chat): Hỗ trợ tạo kênh nhóm (Channels), nhắn tin cá nhân (Direct Messages), quản trị Workspace, truyền tải hình ảnh/tệp tin và tích hợp AI ASSISTANT ngay tại thanh công cụ soạn thảo.

✨ Key Technical Achievements

  • 7+ Microservices Architecture via gRPC & NATS: Architected an enterprise ecosystem of 7+ decoupled microservices communicating via gRPC and NATS JetStream; published shared npm/mvn packages to enforce unified Zod schemas and global error handling.
  • Enterprise RAG Search with LangChain4j & pgvector: Built the AI Knowledge service using Java Spring Boot, LangChain4j, local ONNX embeddings (multilingual-e5-base), and pgvector on PostgreSQL for secure internal RAG search without data leakage.
  • API Gateway & Core Messaging Engine: Implemented an API Gateway for proxy routing, JWT authentication, and IP rate limiting; authored the Identity Service (RBAC) and core Messaging Engine supporting channels, threads, and @mentions.

💻 Code Highlight (Spring Boot LangChain4j RAG Search)

Đoạn Mã
@Service
public class EnterpriseRagService {

    @Autowired
    private EmbeddingModel embeddingModel;
    
    @Autowired
    private PgVectorEmbeddingStore vectorStore;

    public List<TextSegment> searchInternalKnowledge(String userQuery, int maxResults) {
        Embedding queryEmbedding = embeddingModel.embed(userQuery).content();
        EmbeddingSearchRequest searchRequest = EmbeddingSearchRequest.builder()
                .queryEmbedding(queryEmbedding)
                .maxResults(maxResults)
                .minScore(0.82)
                .build();
                
        return vectorStore.search(searchRequest).matches().stream()
                .map(EmbeddingMatch::embedded)
                .collect(Collectors.toList());
    }
}