|
3 | 3 | ## 1. Introduction |
4 | 4 |
|
5 | 5 | ### 1.1 Who are the intended users? |
6 | | -1. Our customers are the HR. |
7 | | -2. Our users are the candidates who apply jobs. |
| 6 | +* Our customers are HR personnel. |
| 7 | +* Our users are candidates who apply for jobs. |
8 | 8 |
|
9 | 9 | ### 1.2 What is the main functionality? |
10 | 10 |
|
11 | | -1. Filter resume with qualified by the job requirements or other requirements. |
12 | | -2. Have a simple talk with the candidates and score them. |
13 | | -3. Show the score board to HR. |
| 11 | +* Filter resumes to identify those qualified by job requirements or other criteria. |
| 12 | +* Conduct simple automated conversations with candidates and score them. |
| 13 | +* Show the scoreboard to HR personnel. |
14 | 14 |
|
15 | | -### 1.3 Describe some scenarios how your app will function? |
| 15 | +### 1.3 Describe some scenarios of how your app will function. |
16 | 16 |
|
17 | | -1. we pretend a IT company career website |
18 | | -2. Candidates upload the resumes to website |
19 | | -3. backend use LLM to filter it with the requirement of the target job |
20 | | -4. after filtering, we let the AI ask candidates for some basic information about their resumes or the related technology (May combine some tech doc from vector database). For example, ask question about how they understand the technology in the requirements or talk something about the project/experience in their resume. |
21 | | -5. AI score them |
22 | | -6. HR can see the scores list at the console page. |
| 17 | +* We simulate an IT company's career website. |
| 18 | +* Candidates upload their resumes to the website. |
| 19 | +* The backend uses an LLM to filter resumes against the requirements of the target job. |
| 20 | +* After filtering, the AI asks candidates for basic information about their resumes or related technologies (this may involve combining tech documents from a vector database). For example, it might ask questions about their understanding of the technologies listed in the job requirements or discuss projects/experiences detailed in their resume. |
| 21 | +* The AI scores the candidates. |
| 22 | +* HR personnel can see the list of scores on a console page. |
23 | 23 |
|
24 | 24 | ### 1.4 How will you integrate GenAI meaningfully? |
25 | 25 |
|
26 | | -1. AI filter resume with job requirements |
27 | | -2. AI score candidates by resume, chat history |
| 26 | +* AI filters resumes based on job requirements. |
| 27 | +* AI scores candidates based on their resumes and chat history. |
28 | 28 |
|
29 | | -## 2. Architecture UML diagram |
| 29 | +## 2. System Description |
30 | 30 |
|
31 | | - |
| 31 | +This system is designed with a layered architecture, consisting of the following layers: |
32 | 32 |
|
33 | | -## 3. Backlog |
| 33 | +* **UI Layer** |
| 34 | + * Tech: React |
| 35 | + * Components: Candidate Portal, HR Dashboard |
| 36 | +* **Application Services Layer** |
| 37 | + * Tech: Spring Boot |
| 38 | + * Components: API Gateway, Job Management Service, Candidate Application Service, Candidate Assessment Service, LangChain GenAI Service |
| 39 | +* **Data Storage Layer** |
| 40 | + * Tech: PostgreSQL + pgvector |
| 41 | + * Details: PostgreSQL serves as the relational database for structured data, while pgvector provides vector database capabilities for RAG. |
| 42 | +* **External Services Layer** |
| 43 | + * Details: OpenAI API for LLM capabilities (specific model TBD). |
34 | 44 |
|
35 | | -1. As a HR, I want to add a new job requirement, so that candidates can apply for it. |
36 | | -2. As a HR, I want to close a job requirement, so that candidates can no longer apply for it. |
37 | | -3. As a candidate, I want to upload my resume, so that I can apply for a job. |
38 | | -4. As a HR, I want the AI to filter resumes, so that I can find qualified candidates. |
39 | | -5. As a HR, I want the AI to generate some questions to ask candidates, so that I can better understand their qualifications. |
40 | | -6. As a candidate, I want to answer AI's questions about my resume or projects, so that I can better present my strengths. |
41 | | -7. As a HR, I want the AI to score candidates based on their resumes and chat history, so that I can find the best candidates. |
42 | | -8. As a HR, I want to view a ranked list of candidate scores, so that I can quickly identify the best candidates. |
| 45 | +### 2.1 Server: Spring Boot REST API |
43 | 46 |
|
44 | | -## 4. commit template |
| 47 | +The backend is implemented using **Spring Boot**, exposing RESTful APIs to support both candidate and HR operations. It handles business logic, including: |
| 48 | + |
| 49 | +* Job posting and management (via `Job Management Service`). |
| 50 | +* Candidate application processing (via `Candidate Application Service`). |
| 51 | +* Resume filtering, interview generation, and scoring (via `Candidate Assessment Service`). |
| 52 | +* Integration with external services, such as OpenAI, for GenAI tasks (via `LangChain GenAI Service`). |
| 53 | + |
| 54 | +The `API Gateway` serves as the single entry point, routing requests from UI clients to the appropriate services. |
| 55 | + |
| 56 | +### 2.2 Client: React Frontend |
| 57 | + |
| 58 | +The system has two main user interfaces developed in **React**: |
| 59 | + |
| 60 | +* **Candidate Portal**: Allows candidates to upload resumes and complete AI-based interviews. |
| 61 | +* **HR Dashboard**: Enables HR users to post jobs, view filtered resumes, see generated interview questions, and review ranked candidate lists. |
| 62 | + |
| 63 | +All frontend components communicate with the backend via REST APIs. |
| 64 | + |
| 65 | +### 2.3 GenAI Service: Python, LangChain Microservice |
| 66 | + |
| 67 | +A separate microservice is developed in **Python**, using **LangChain** to orchestrate LLM tasks. This `LangChain GenAI Service` is responsible for: |
| 68 | + |
| 69 | +* Filtering resumes against job requirements and scoring them. |
| 70 | +* Generating interview questions based on job requirements, candidate resumes, and documents in the vector database. |
| 71 | +* Analyzing chat history and scoring candidates against job requirements. |
| 72 | + |
| 73 | +It communicates with the main Spring Boot backend (Application Services Layer) and uses the **OpenAI API** for underlying LLM capabilities. |
| 74 | + |
| 75 | +### 2.4 Database: PostgreSQL with pgvector |
| 76 | + |
| 77 | +The system utilizes a **PostgreSQL** database extended with the **pgvector** extension to support semantic search and vector-based operations. It stores: |
| 78 | + |
| 79 | +* User data (candidates, HR personnel) |
| 80 | +* Job postings and requirements |
| 81 | +* Candidate resumes and applications |
| 82 | +* Assessment scores and chat histories |
| 83 | +* Vector embeddings for technical documents (for RAG) |
| 84 | + |
| 85 | +This design allows the system to store structured HR data alongside high-dimensional AI data used for generating questions, scoring, and analysis. |
| 86 | + |
| 87 | +## 3. UML Diagrams |
| 88 | + |
| 89 | +### 3.1 Top-Level Architecture Diagram |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | +### 3.2 Use Case Diagram |
| 94 | + |
| 95 | + |
| 96 | + |
| 97 | +### 3.3 Analysis Object Model |
| 98 | + |
| 99 | + |
| 100 | + |
| 101 | +## 4. Backlog |
| 102 | + |
| 103 | +1. As an HR user, I want to add a new job requirement so that candidates can apply for it. |
| 104 | +2. As an HR user, I want to close a job requirement so that candidates can no longer apply for it. |
| 105 | +3. As a candidate, I want to upload my resume so that I can apply for a job. |
| 106 | +4. As an HR user, I want the AI to filter resumes so that I can find qualified candidates. |
| 107 | +5. As an HR user, I want the AI to generate questions to ask candidates so that I can better understand their qualifications. |
| 108 | +6. As a candidate, I want to answer the AI's questions about my resume or projects so that I can better present my strengths. |
| 109 | +7. As an HR user, I want the AI to score candidates based on their resumes and chat history so that I can find the best candidates. |
| 110 | +8. As an HR user, I want to view a ranked list of candidate scores so that I can quickly identify the best candidates. |
| 111 | + |
| 112 | +## 5. Branch Name Template |
| 113 | + |
| 114 | +``` |
| 115 | +week<digit>-<task> |
| 116 | +``` |
| 117 | + |
| 118 | +## 6. Commit Template |
45 | 119 |
|
46 | 120 | ``` |
47 | 121 | <type>[optional scope]: <description> |
|
51 | 125 | [optional footer(s)] |
52 | 126 | ``` |
53 | 127 |
|
54 | | -e.g. |
| 128 | +For example: |
55 | 129 | ```bash |
56 | 130 | git commit -m "feat: add a new feature" \ |
57 | 131 | -m "add a new feature to the project" \ |
58 | | --m "closes: #1234" \ |
| 132 | +-m "closes: #1234" |
59 | 133 | ``` |
60 | 134 |
|
61 | | -type: |
62 | | -- feat: A new feature |
63 | | -- fix: A bug fix |
64 | | -- docs: Documentation only changes |
65 | | -- ci: Changes to our CI configuration files and scripts |
66 | | -- test: Adding missing tests or correcting existing tests |
67 | | -- refactor: Refactor code but not change business logic, e.g. change variable names, structures, code style |
68 | | -- perf: Optimizing performance by improving code logic |
| 135 | +**Commit Types:** |
| 136 | + |
| 137 | +* **feat**: A new feature |
| 138 | +* **fix**: A bug fix |
| 139 | +* **docs**: Documentation only changes |
| 140 | +* **ci**: Changes to CI configuration files and scripts |
| 141 | +* **test**: Adding missing tests or correcting existing tests |
| 142 | +* **refactor**: Refactoring code without changing business logic (e.g., changing variable names, structures, code style) |
| 143 | +* **perf**: Optimizing performance by improving code logic |
0 commit comments