# 병렬 계산과 분산 시스템에서의 SVD

특이값 분해(SVD)는 대규모 데이터 처리와 차원 축소 등에 널리 사용되는 중요한 알고리즘이다. 그러나 행렬의 크기가 커질수록 계산 비용이 급격히 증가하기 때문에, 병렬 계산 및 분산 시스템에서의 효율적인 SVD 구현이 필수적이다. 이 장에서는 병렬 계산과 분산 시스템에서의 SVD 구현에 대해 상세히 다룬다.

#### 병렬 계산의 필요성

SVD는 $ \mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^\top $로 표현되며, 여기서 $ \mathbf{A} $는 $ m \times n $ 크기의 행렬이다. 만약 $ m $과 $ n $이 매우 큰 경우, SVD를 계산하기 위한 직접적인 방법은 매우 비효율적일 수 있다. 따라서 대규모 데이터나 고차원 행렬에 대해 SVD를 실행하려면 병렬 계산 기법이 필요하다.

**병렬 계산에서의 주요 과제**

병렬 계산을 활용한 SVD 구현에서 고려해야 할 주요 과제는 다음과 같다:

* **데이터 분할**: 행렬 $ \mathbf{A} $를 병렬로 처리할 수 있도록 적절히 분할하는 방법.
* **작업 분배**: 각 프로세서에 할당할 계산 작업의 분배 방식.
* **동기화 문제**: 병렬 계산 중 각 프로세서 간의 데이터 동기화 및 통신 비용 최소화.
* **병렬 효율성**: 병렬화로 인해 증가하는 계산량과 데이터 전송량을 최적화하는 문제.

#### 행렬 분할 기법

병렬 SVD를 위해서는 입력 행렬 $ \mathbf{A} $를 여러 하위 행렬로 분할하여 각각을 병렬로 처리할 수 있어야 한다. 주로 사용되는 행렬 분할 기법은 다음과 같다:

**블록 분할 (Block Partitioning)**

행렬 $ \mathbf{A} $를 블록 단위로 분할하여, 각 블록을 독립적인 프로세서에서 처리하는 방법이다. 예를 들어, $ \mathbf{A} $를 $ p \times q $ 블록으로 나누면, 각 블록은 $ m/p \times n/q $ 크기의 행렬로 나뉜다.

* **장점**: 간단한 구조로 병렬 계산이 가능하다.
* **단점**: 블록 경계에서의 데이터 통신 비용이 발생할 수 있다.

**행 및 열 분할 (Row and Column Partitioning)**

행렬 $ \mathbf{A} $를 행 방향 또는 열 방향으로 분할하여, 각 분할된 부분을 병렬로 처리하는 방법이다.

* **행 분할**: $ \mathbf{A} $의 각 행을 분할하여, 각 프로세서가 $ 1 \times n $ 크기의 행 벡터를 처리.
* **열 분할**: $ \mathbf{A} $의 각 열을 분할하여, 각 프로세서가 $ m \times 1 $ 크기의 열 벡터를 처리.
* **장점**: 특정 차원에 특화된 최적화가 가능하다.
* **단점**: 데이터의 불균형이 발생할 수 있다.

#### 병렬 SVD 알고리즘

병렬 SVD 알고리즘은 주로 다음과 같은 방식으로 구현된다.

**1. 반복적인 분산 알고리즘 (Iterative Distributed Algorithms)**

분산 시스템에서 자주 사용되는 방법으로, 각 프로세서가 부분적인 계산을 수행하고, 반복적으로 결과를 조정하여 최종 SVD를 얻는다. 대표적인 알고리즘으로는 다음과 같은 것들이 있다:

* **Lanczos 알고리즘**: 대형 대칭 행렬에 대한 특이값을 반복적으로 계산하여, SVD의 근사치를 얻는 알고리즘.
* **Power Iteration**: 행렬의 최대 특이값을 반복적으로 계산하여, 주성분을 추출하는 데 사용되는 알고리즘.

이러한 알고리즘은 전체 행렬에 대한 분산된 접근을 통해 계산량을 분산시킨다.

**2. 맵리듀스(MapReduce) 기반 SVD**

대규모 데이터 처리를 위한 분산 프레임워크인 맵리듀스를 활용하여 SVD를 구현할 수 있다. 이 방법은 대규모 데이터셋을 다루기 위해 다음과 같은 단계를 거친다:

* **맵 단계**: 행렬 $ \mathbf{A} $를 여러 조각으로 분할하여, 각 조각에 대해 특이값 근사치를 계산.
* **리듀스 단계**: 맵 단계에서 계산된 결과를 모아 전체 특이값을 재구성.

맵리듀스 기반 SVD는 대규모 분산 환경에서 효율적인 특이값 계산을 가능하게 하며, 특히 빅데이터 환경에서 많이 사용된다.

**3. 분산 메모리 환경에서의 SVD**

분산 메모리 시스템에서 SVD를 구현하기 위해서는 각 프로세서가 독립적으로 메모리를 관리하며, 통신을 통해 데이터를 교환해야 한다. 이러한 환경에서는 데이터 전송 및 통신 비용을 줄이는 것이 중요하다. 다음과 같은 기법이 사용된다:

* **MPI (Message Passing Interface)**: 분산 메모리 시스템에서 데이터 통신을 효율적으로 처리하기 위한 표준 인터페이스.
* **Spark 기반 SVD**: Apache Spark를 활용한 분산 처리 환경에서의 SVD 구현. RDD(Resilient Distributed Dataset) 구조를 활용하여 대규모 데이터를 분산 처리.

#### 병렬 SVD 구현의 최적화

병렬 SVD를 구현할 때는 성능을 극대화하기 위해 다음과 같은 최적화 전략을 고려해야 한다.

**데이터 로드 밸런싱**

각 프로세서에 할당되는 데이터의 크기와 계산량을 균등하게 분배하여, 특정 프로세서에 과도한 부하가 걸리지 않도록 한다. 이를 위해 데이터의 특성과 계산의 복잡도를 고려한 로드 밸런싱 알고리즘이 필요하다.

**통신 비용 최소화**

병렬 및 분산 환경에서 프로세서 간의 통신은 병목 현상을 유발할 수 있다. 통신 비용을 최소화하기 위해 다음과 같은 전략을 사용할 수 있다:

* **데이터 압축**: 전송하는 데이터의 양을 줄이기 위해 데이터를 압축하여 전송.
* **로컬 연산 우선**: 가능한 한 많은 계산을 로컬에서 수행하여, 통신을 줄이고 병렬 성능을 높인다.

**캐싱 및 메모리 최적화**

분산 시스템에서의 SVD 구현은 메모리 사용의 효율성도 중요하다. 캐싱을 통해 자주 사용되는 데이터를 메모리에 유지하여, 불필요한 데이터 로드를 줄이고 성능을 높일 수 있다. 또한, 메모리 사용량을 최소화하기 위해 데이터의 효율적인 메모리 배치 및 관리 기법을 적용할 수 있다.

#### 실시간 데이터에서의 병렬 SVD

실시간 데이터 처리 환경에서 SVD를 수행하기 위해서는 새로운 데이터가 지속적으로 입력되는 상황에서도 효율적으로 SVD를 계산할 수 있는 방법이 필요하다. 이러한 환경에서는 다음과 같은 접근법이 사용될 수 있다.

**점진적 업데이트 (Incremental Updates)**

실시간 데이터 환경에서 SVD를 수행할 때, 기존 데이터에 새로운 데이터가 추가될 경우 전체 SVD를 다시 계산하는 것은 비효율적이다. 따라서, 새로운 데이터가 추가될 때 기존 SVD를 기반으로 점진적으로 업데이트하는 방법이 필요하다. 이는 다음과 같은 단계로 이루어진다:

* **기존 특이값 분해 유지**: 기존 데이터에 대한 SVD $ \mathbf{A} = \mathbf{U} \mathbf{\Sigma} \mathbf{V}^\top $가 이미 계산되어 있는 상태를 유지한다.
* **신규 데이터에 대한 부분적 계산**: 새로운 데이터 행렬 $ \mathbf{\Delta A} $가 추가되면, $ \mathbf{\Delta A} $에 대한 부분 SVD를 계산한다.
* **결합 및 조정**: 기존 SVD와 새로운 SVD를 결합하여 전체 행렬에 대한 새로운 SVD를 얻는다. 이 과정에서는 연속적인 직교화 및 재대각화를 수행하여 특이값을 갱신한다.

**온라인 알고리즘 (Online Algorithms)**

온라인 알고리즘은 데이터가 실시간으로 입력될 때마다 SVD를 지속적으로 업데이트하는 방법이다. 이러한 알고리즘은 일반적으로 데이터의 스트림 처리에 특화되어 있으며, 실시간 애플리케이션에 적합하다.

* **Fast Incremental SVD**: 새로운 데이터의 흐름을 빠르게 처리하기 위해, 기계 학습과 연계하여 SVD를 신속하게 갱신하는 방법이다.
* **Stochastic Gradient Descent (SGD) 기반 SVD**: 확률적 경사 하강법을 활용하여 대규모 데이터의 부분집합에 대해 SVD를 지속적으로 계산한다. 이 방법은 대규모 실시간 데이터 스트림에 적합하다.

#### 병렬 SVD의 성능 평가

병렬 SVD의 성능을 평가하기 위해서는 다양한 성능 지표를 고려해야 한다. 이러한 지표는 다음과 같다:

**계산 시간 (Computation Time)**

병렬 SVD 구현의 성능은 전체 계산 시간을 최소화하는 데 중점을 둔다. 특히, 다음과 같은 요인들이 중요한 평가 요소로 작용한다:

* **속도 향상 (Speedup)**: 병렬 처리에 의해 계산 시간이 얼마나 줄어드는지를 측정하는 지표.
* **확장성 (Scalability)**: 프로세서 수가 증가함에 따라 성능이 얼마나 향상되는지를 평가한다.

**정확도 (Accuracy)**

병렬 계산으로 인해 발생할 수 있는 오차를 최소화하는 것이 중요하다. SVD 결과의 정확도는 다음과 같은 방식으로 평가된다:

* **근사 특이값의 정확도**: 병렬 계산으로 얻은 특이값이 실제 특이값과 얼마나 일치하는지 평가한다.
* **직교성 유지**: 병렬 계산 중 발생할 수 있는 수치적 불안정성을 고려하여, 직교 행렬 $ \mathbf{U} $와 $ \mathbf{V} $의 직교성이 유지되는지를 확인한다.

**통신 비용 (Communication Cost)**

병렬 및 분산 시스템에서의 SVD 구현에서 통신 비용은 중요한 성능 평가 지표이다. 통신 비용은 다음과 같은 요소에 의해 영향을 받는다:

* **프로세서 간 데이터 전송량**: 각 프로세서가 수행해야 하는 통신 작업의 양을 최소화한다.
* **동기화 횟수**: 병렬 계산에서의 동기화 횟수를 줄여 전체 계산 시간을 단축한다.

#### 사례 연구: 대규모 데이터셋에서의 병렬 SVD

실제 대규모 데이터셋에 대해 병렬 SVD를 적용한 사례 연구는 병렬 SVD의 효용성과 한계를 실질적으로 평가할 수 있는 중요한 자료를 제공한다.

**사례 1: 유전자 데이터 분석**

대규모 유전자 데이터 분석에서 SVD는 차원 축소 및 잡음 제거에 효과적으로 사용된다. 이 연구에서는 병렬 SVD를 사용하여 수백만 개의 유전자 데이터를 효율적으로 분석하는 방법을 제안한다.

* **데이터 특성**: 수백만 개의 유전자 발현 데이터가 있으며, 이는 $ m \times n $ 행렬로 표현된다. 여기서 $ m $은 유전자 수, $ n $은 샘플 수이다.
* **병렬 SVD 적용**: 유전자 데이터 행렬을 블록으로 분할하고, 각 블록에 대해 병렬 SVD를 적용한다. 이를 통해 계산 시간을 크게 줄일 수 있었다.
* **결과**: 병렬 SVD를 사용하여 데이터 차원 축소 후 주요 유전자 패턴을 효과적으로 추출하였다.

**사례 2: 추천 시스템에서의 실시간 SVD**

추천 시스템에서 실시간으로 사용자 데이터를 처리하여 추천 품목을 계산하는 데 SVD가 사용된다. 이 사례 연구에서는 대규모 사용자-아이템 행렬에 대해 실시간으로 병렬 SVD를 적용하는 방법을 다룬다.

* **데이터 특성**: 수백만 명의 사용자가 수천 개의 제품에 대해 평가한 데이터를 포함하는 대규모 사용자-아이템 행렬.
* **실시간 처리**: 새로운 사용자 평가가 입력될 때마다, 기존 SVD를 기반으로 실시간 업데이트를 수행하여 추천 품목을 계산한다.
* **결과**: 병렬 SVD를 통해 실시간 추천 시스템의 성능이 크게 향상되었으며, 사용자 만족도도 개선되었다.

이 장에서는 병렬 계산과 분산 시스템에서의 SVD 구현 방법을 다루었으며, 효율적인 데이터 분할, 병렬 알고리즘, 그리고 성능 평가 방법을 중점적으로 설명하였다. 이를 통해 병렬 SVD가 대규모 데이터 처리에서 어떻게 응용될 수 있는지에 대한 실질적인 이해를 제공하였다.

#### 분산 시스템에서의 SVD 통합

분산 시스템에서 SVD를 효율적으로 통합하기 위해서는 다양한 컴퓨팅 리소스와 데이터 저장소를 효과적으로 활용하는 방법이 필요하다. 이러한 통합은 다음과 같은 구성 요소를 통해 이루어진다.

**데이터 분산 및 저장**

분산 시스템에서 대규모 데이터는 여러 노드에 걸쳐 저장된다. SVD를 수행하기 위해서는 데이터의 분산 및 저장 방식이 중요하다.

* **HDFS (Hadoop Distributed File System)**: 데이터를 여러 노드에 걸쳐 분산 저장하는 파일 시스템으로, 대규모 데이터셋의 병렬 처리를 지원한다. SVD 계산에 필요한 데이터는 HDFS를 통해 쉽게 접근하고 관리할 수 있다.
* **데이터 파티셔닝**: 데이터셋을 적절히 분할하여 각 노드에 저장함으로써 병렬 처리를 최적화한다. 파티셔닝 전략은 데이터의 특성에 따라 달라질 수 있으며, 균등한 파티셔닝이 성능을 높이는 데 도움이 된다.

**분산 계산 프레임워크**

SVD를 분산 시스템에서 구현하기 위해 여러 계산 프레임워크가 사용될 수 있다. 이들 프레임워크는 대규모 데이터를 병렬로 처리할 수 있는 환경을 제공한다.

* **Apache Spark**: 데이터 병렬 처리를 위해 RDD를 사용하는 분산 컴퓨팅 프레임워크이다. Spark의 MLlib 라이브러리는 SVD를 포함한 여러 선형 대수 알고리즘을 제공한다.
* **MPI (Message Passing Interface)**: 분산 메모리 시스템에서 프로세서 간 통신을 위한 표준 라이브러리로, SVD 계산에서 데이터 교환 및 동기화 작업을 관리한다.
* **Dask**: 파이썬 기반의 병렬 컴퓨팅 라이브러리로, 대규모 데이터에 대한 SVD를 포함한 다양한 계산 작업을 분산 시스템에서 수행할 수 있다.

#### 최적화 기법

분산 시스템에서 SVD를 효율적으로 수행하기 위해 다양한 최적화 기법이 적용될 수 있다.

**데이터 로컬리티 최적화**

분산 환경에서 SVD 계산의 효율성을 높이기 위해 데이터 로컬리티를 고려해야 한다. 데이터 로컬리티는 데이터가 저장된 위치와 계산이 수행되는 위치의 근접성을 의미하며, 이를 최적화하면 통신 비용을 크게 줄일 수 있다.

* **로컬 데이터 처리**: 가능한 경우 데이터가 저장된 노드에서 직접 계산을 수행함으로써 네트워크 트래픽을 줄인다.
* **데이터 이동 최소화**: 계산 중 필요한 데이터의 이동을 최소화하도록 작업을 스케줄링한다. 이를 위해 데이터의 위치 정보를 기반으로 계산 작업을 배치하는 기법이 사용된다.

**하이브리드 병렬화**

분산 시스템에서 SVD를 더욱 효율적으로 수행하기 위해, 작업 병렬화와 데이터 병렬화를 결합한 하이브리드 병렬화 기법이 사용된다.

* **작업 병렬화**: SVD 계산의 각 단계(예: 행렬 곱셈, 직교화)를 독립적으로 병렬화하여 여러 노드에서 동시에 처리할 수 있도록 한다.
* **데이터 병렬화**: 큰 행렬을 작은 블록으로 나누어, 각 블록을 병렬로 처리한다. 이때, 작업 병렬화와 데이터 병렬화의 균형을 맞추는 것이 중요하다.

**실패 복구 메커니즘**

분산 시스템에서는 노드 실패나 네트워크 오류가 발생할 수 있기 때문에, SVD 계산이 중단되지 않도록 적절한 실패 복구 메커니즘이 필요하다.

* **체크포인트 저장**: 계산 진행 중간에 중요한 중간 결과를 체크포인트로 저장하여, 실패 발생 시 재시작할 수 있도록 한다.
* **중복 계산**: 중요한 계산 작업을 여러 노드에서 동시에 수행하여, 하나의 노드가 실패하더라도 다른 노드의 결과를 사용할 수 있도록 한다.

#### 실제 환경에서의 분산 SVD 구현 사례

**빅데이터 분석에서의 SVD**

대규모 텍스트 데이터 분석에서 SVD는 문서와 용어의 차원 축소에 사용된다. 분산 시스템을 활용하여 수십억 개의 문서를 분석하는 데 SVD를 적용한 사례를 살펴보자.

* **데이터 특성**: 수십억 개의 문서와 수백만 개의 용어를 포함하는 대규모 텍스트 데이터셋.
* **분산 SVD 적용**: 텍스트 데이터셋을 여러 노드에 분산 저장하고, 각 노드에서 병렬로 SVD를 수행하여 주요 문서 패턴을 추출.
* **결과**: 분산 SVD를 통해 텍스트 데이터의 차원 축소를 효율적으로 수행하였으며, 이를 기반으로 효과적인 검색 및 추천 시스템을 구축하였다.

**금융 데이터 분석에서의 SVD**

금융 거래 데이터를 분석하여 이상 거래를 감지하기 위해 SVD를 활용한 사례도 있다. 이 사례에서는 분산 시스템을 사용하여 대규모 거래 데이터를 실시간으로 분석하는 방법을 제안한다.

* **데이터 특성**: 수십억 건의 거래 기록을 포함하는 금융 데이터셋.
* **분산 SVD 적용**: 거래 데이터를 여러 노드에 분산 저장하고, 실시간으로 SVD를 수행하여 이상 거래 패턴을 추출.
* **결과**: 분산 SVD를 통해 이상 거래를 신속하게 탐지할 수 있었으며, 이를 통해 금융 사기를 예방하는 데 기여하였다.

이와 같이, 분산 시스템에서의 SVD 구현은 대규모 데이터셋을 효율적으로 처리하는 데 중요한 역할을 하며, 다양한 분야에서 그 활용 가능성이 점점 확대되고 있다.

이 장의 내용을 통해, 분산 시스템에서 SVD를 효과적으로 구현하고 최적화하는 방법을 다루었다. 실제 사례를 통해 이러한 기법들이 어떻게 적용될 수 있는지를 살펴보았다.

#### 분산 시스템에서의 SVD 성능 최적화 사례

분산 시스템에서 SVD를 수행할 때 성능 최적화는 매우 중요한 요소이다. 특히, 대규모 데이터셋을 처리할 때는 작은 최적화가 전체 성능에 큰 영향을 미칠 수 있다. 아래에서는 SVD 성능 최적화를 위한 실제 사례들을 통해 최적화 기법이 어떻게 적용될 수 있는지 살펴본다.

**사례 1: 추천 시스템에서의 대규모 행렬 분해**

한 글로벌 전자 상거래 회사는 추천 시스템을 개선하기 위해 SVD를 사용하여 사용자-아이템 행렬을 분해했다. 이 회사는 수억 개의 사용자와 수백만 개의 제품을 처리해야 했으며, 이를 위해 다음과 같은 최적화 기법을 적용했다.

* **데이터 로컬리티 최적화**: 사용자-아이템 행렬을 사용자의 지역 기반으로 분할하여, 동일한 지역의 데이터가 동일한 노드에서 처리되도록 하였다. 이를 통해 네트워크 트래픽을 최소화하고 계산 속도를 높였다.
* **캐싱 기법**: 자주 접근되는 데이터, 특히 고빈도 사용자의 데이터를 캐시하여 메모리 접근 시간을 줄였다. 이로 인해 반복적인 계산이 필요한 상황에서 성능이 크게 향상되었다.
* **하이브리드 병렬화 적용**: 사용자와 아이템에 대한 병렬 처리를 결합하여, 데이터 병렬화와 작업 병렬화를 동시에 활용하였다. 이를 통해 병렬 처리의 효율성을 극대화하였다.

결과적으로, 이 최적화 기법들을 적용한 후 SVD 계산 속도가 50% 이상 개선되었으며, 추천 품질도 상당히 향상되었다.

**사례 2: 실시간 영상 처리 시스템에서의 SVD**

한 보안 회사는 실시간 영상 처리 시스템에서 대규모 영상 데이터를 분석하기 위해 SVD를 사용하였다. 이 시스템은 분산 환경에서 실시간으로 영상을 처리해야 했으며, 대규모 데이터를 처리하기 위한 여러 최적화 기법이 적용되었다.

* **데이터 스트리밍 최적화**: 영상을 스트리밍 방식으로 처리하여, 새로운 영상이 입력될 때마다 기존 SVD 결과를 기반으로 신속하게 업데이트하였다. 이를 통해 실시간 성능을 유지할 수 있었다.
* **GPU 가속**: SVD 계산의 병렬 처리를 위해 GPU를 활용하여, CPU에서 병렬로 처리하는 것보다 더 빠르게 계산을 수행하였다. GPU의 병렬 계산 능력을 활용하여 대규모 영상 데이터의 SVD를 효율적으로 처리하였다.
* **실패 복구 메커니즘**: 실시간 시스템에서는 노드의 장애가 전체 시스템에 영향을 줄 수 있기 때문에, 중요한 중간 결과를 주기적으로 저장하는 체크포인트 시스템을 도입하여, 노드 장애 발생 시 신속하게 복구할 수 있도록 하였다.

이러한 최적화 기법들은 실시간으로 처리되는 대규모 영상 데이터에서 SVD 계산의 성능을 크게 향상시켰으며, 영상 분석의 정확도와 속도 모두에서 우수한 결과를 나타내었다.

#### 향후 전망: 분산 시스템에서의 SVD 발전 방향

분산 시스템에서 SVD의 성능을 극대화하기 위한 연구는 계속되고 있다. 특히, 빅데이터와 인공지능의 발전에 따라, 더 효율적이고 확장 가능한 SVD 구현이 필요하게 되었다. 향후 연구 방향은 다음과 같은 요소들을 포함할 수 있다.

**동적 로드 밸런싱**

분산 시스템에서의 동적 로드 밸런싱은 각 노드의 실시간 부하를 고려하여 작업을 할당하는 방법이다. 이는 시스템 성능을 극대화하고, 각 노드의 자원을 최대한 활용하는 데 중요한 역할을 할 수 있다.

**지능형 캐싱 및 데이터 예측**

기계 학습 알고리즘을 활용하여 데이터 접근 패턴을 예측하고, 필요한 데이터를 사전에 캐시에 저장하는 방법도 고려될 수 있다. 이를 통해 SVD 계산의 초기 지연 시간을 줄일 수 있다.

**하드웨어 가속의 확장**

GPU, TPU 등 특수 하드웨어를 활용한 SVD 가속 연구는 계속해서 발전하고 있다. 특히, 분산 환경에서의 하드웨어 가속은 SVD 계산의 병목 현상을 줄이는 데 중요한 역할을 할 것이다.

이러한 발전은 분산 시스템에서 SVD의 효율성과 적용 범위를 더욱 넓혀줄 것이며, 다양한 산업 분야에서 실질적인 혜택을 제공할 것이다.

이로써 분산 시스템에서의 SVD에 대한 논의는 마무리되며, 이 장에서 다룬 최적화 기법과 사례들은 대규모 데이터 처리에 있어 SVD의 강력한 도구로서의 가능성을 보여준다.

(끝)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://booiljung.gitbook.io/booil-jung/docs/_9990/__-will-delete/2001-svd/chapter-07/073.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
