Tasks API는 백그라운드 작업(재인덱싱, 엣지 재생성 등)을 관리하기 위한 인터페이스입니다.
const client = new NdxClient({
apiKey: process.env.NEURADEX_API_KEY,
projectId: 'your-project-id',
});
// Tasks API 접근
const tasks = await client.tasks.list();
await client.tasks.run('task-id');
메서드 목록
| 메서드 | 설명 |
|---|
list(options?) | 작업 목록 조회 |
get(taskId) | 특정 작업 조회 |
run(taskId) | 작업 실행 |
cancel(taskId) | 작업 취소 |
registerReindex(input) | 재인덱싱 작업 등록 |
registerEdgeRegeneration(input) | 엣지 재생성 작업 등록 |
작업 타입
| 타입 | 설명 |
|---|
reindex | 지식 재인덱싱 (벡터 재생성) |
edge_regeneration | 지식 간 엣지 재생성 |
knowledge_extraction | 문서에서 지식 추출 |
source_parse | 소스 문서 파싱 |
chunking | 텍스트 청크 분할 |
enrichment_processing | 지식 보강 |
작업 상태
| 상태 | 설명 |
|---|
pending | 실행 대기 중 |
in_progress | 실행 중 |
done | 완료 |
failed | 실패 |
list()
작업 목록을 조회합니다.
파라미터
상태 필터: 'pending' | 'in_progress' | 'done' | 'failed'
반환값
interface ListTasksResponse {
data: BackgroundTask[];
total: number;
page: number;
limit: number;
}
interface BackgroundTask {
id: string;
type: string;
status: 'pending' | 'in_progress' | 'done' | 'failed';
title: string;
progress: number;
result: object | null;
error: string | null;
createdAt: string;
updatedAt: string;
}
사용 예
// 전체 작업 조회
const result = await client.tasks.list();
console.log(`작업 수: ${result.total}`);
// 대기 중인 작업만
const pending = await client.tasks.list({ status: 'pending' });
// 재인덱싱 작업만
const reindexTasks = await client.tasks.list({ type: 'reindex' });
run()
대기 중인 작업을 실행합니다.
파라미터
사용 예
const result = await client.tasks.run('task-id');
if (result.success) {
console.log('작업이 정상적으로 완료되었습니다');
} else {
console.log('작업이 실패했습니다:', result.error);
}
registerReindex()
지식 재인덱싱 작업을 등록합니다. 지식 내용을 변경한 후 벡터 검색 정확도를 향상시키기 위해 사용합니다.
파라미터
사용 예
// 재인덱싱 작업 등록
const task = await client.tasks.registerReindex({
knowledgeId: 'knowledge-id',
title: 'Reindex: 제품 매뉴얼',
});
console.log(`작업 ID: ${task.id}`);
// 작업 실행
await client.tasks.run(task.id);
registerEdgeRegeneration()
지식 간 엣지(관계)를 재생성하는 작업을 등록합니다. 지식을 업데이트한 후 관계 그래프를 갱신하기 위해 사용합니다.
파라미터
사용 예
// 엣지 재생성 작업 등록
const task = await client.tasks.registerEdgeRegeneration({
knowledgeId: 'knowledge-id',
title: 'Edge Regeneration: 제품 매뉴얼',
});
// 작업 실행
await client.tasks.run(task.id);
유스케이스
일괄 업데이트 후 재인덱싱
async function bulkUpdateAndReindex(updates: Array<{id: string, content: string}>) {
const tasks = [];
for (const update of updates) {
// 지식 업데이트
await client.knowledge.update(update.id, {
content: update.content,
});
// 재인덱싱 작업 등록
const task = await client.tasks.registerReindex({
knowledgeId: update.id,
title: `Reindex: ${update.id}`,
});
tasks.push(task);
}
// 모든 작업 실행
for (const task of tasks) {
await client.tasks.run(task.id);
console.log(`완료: ${task.title}`);
}
}
작업 진행 모니터링
async function monitorTask(taskId: string) {
while (true) {
const task = await client.tasks.get(taskId);
console.log(`${task.title}: ${task.status} (${task.progress}%)`);
if (task.status === 'done') {
console.log('작업 완료:', task.result);
break;
}
if (task.status === 'failed') {
console.error('작업 실패:', task.error);
break;
}
// 5초 대기
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
다음 단계