langchain4j-testing-strategies은(는) 무엇을 하나요?
LangChain4j 애플리케이션을 위한 단위 테스트, 통합 테스트 및 모의 AI 패턴을 제공합니다. 모의 LLM 응답 생성, 검색 체인 테스트, RAG 워크플로우 검증, Java AI 서비스를 위한 Testcontainers 기반 통합 테스트를 구현합니다. AI 서비스 단위 테스트, LangChain4j 컴포넌트 통합 테스트, AI 모델 모의, LLM 기반 Java 애플리케이션 테스트 시 사용하세요.
개요
이 스킬은 LangChain4j 라이브러리를 사용하는 Java 애플리케이션을 위한 포괄적인 테스트 전략을 제공합니다. 주요 기능은 다음과 같습니다:
- 모의 LLM 응답: 다양한 시나리오에 대한 모의 응답을 생성합니다.
- 통합 테스트: Testcontainers를 사용하여 LLM, 임베딩 저장소 등 실제 인프라와의 통합 테스트를 수행합니다.
- RAG 워크플로우 검증: 검색 증강 생성 파이프라인의 정확성과 관련성을 검증합니다.
- 비동기 및 스트리밍 테스트: 비동기 AI 서비스와 스트리밍 응답을 테스트합니다.
사용법
1. 종속성 추가
pom.xml에 다음 종속성을 추가하세요:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
<version>0.35.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers</artifactId>
<version>1.19.3</version>
<scope>test</scope>
</dependency>
2. 기본 단위 테스트
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.output.Response;
public class AIServiceTest {
@Test
void testMockResponse() {
// 모의 모델 생성
ChatLanguageModel mockModel = mock(ChatLanguageModel.class);
when(mockModel.generate(anyString()))
.thenReturn(Response.from("모의 응답입니다."));
String result = mockModel.generate("안녕하세요?");
assertEquals("모의 응답입니다.", result);
}
@Test
void testRAGWorkflow() {
// RAG 워크플로우 테스트
ContentRetriever retriever = mock(ContentRetriever.class);
when(retriever.retrieve(anyString()))
.thenReturn(List.of(new Document("관련 문서 내용")));
// 검증 로직
assertTrue(retriever.retrieve("쿼리").size() > 0);
}
}
3. Testcontainers를 사용한 통합 테스트
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
@Testcontainers
public class LLMIntegrationTest {
@Container
static GenericContainer<?> ollama = new GenericContainer<>("ollama/ollama:latest")
.withExposedPorts(11434);
@Test
void testWithOllama() {
String host = ollama.getHost();
Integer port = ollama.getMappedPort(11434);
// Ollama LLM과의 통합 테스트
}
}
4. 콘텐츠 검증
public class ContentValidator {
public boolean checkRelevance(String response, String context) {
// 응답이 주어진 컨텍스트와 관련이 있는지 확인
return response.contains(context);
}
public boolean checkHallucination(String response, List<String> facts) {
// 응답에 환각(헛소리)이 포함되어 있는지 확인
return facts.stream().anyMatch(response::contains);
}
}
플랫폼 지원
- Cursor: AI 기반 코드 에디터에서 사용 가능
- Claude Code: Claude Code 워크플로우에 통합 가능
- Codex: OpenAI Codex 기반 도구에서 사용 가능
- 기타 AI 에이전트: LangChain4j를 지원하는 모든 플랫폼
참고 사항
- 이 스킬은 Java 17 이상을 권장합니다.
- Testcontainers 사용 시 Docker가 필요합니다.
- 모의 객체 생성을 위해 Mockito를 사용할 수 있습니다.