> Discover all available pages from the documentation index: https://mastra.zisheng.pro/ko/llms.txt # 문서 청킹 및 임베딩 처리하기 전에 콘텐츠에서 MDocument 인스턴스를 만듭니다. 다양한 형식으로 초기화할 수 있습니다. ```ts const docFromText = MDocument.fromText('Your plain text content...') const docFromHTML = MDocument.fromHTML('Your HTML content...') const docFromMarkdown = MDocument.fromMarkdown('# Your Markdown content...') const docFromJSON = MDocument.fromJSON(`{ "key": "value" }`) ``` ## 문서 처리 `chunk`를 사용하여 문서를 관리하기 쉬운 조각으로 나누세요. Mastra는 다양한 문서 유형에 최적화된 여러 청킹 전략을 지원합니다. - `recursive`: 콘텐츠 구조에 따른 스마트 분할 - `character`: 단순 문자 기반 분할 - `token`: 토큰 인식 분할 - `markdown`: 마크다운 인식 분할 - `semantic-markdown`: 관련 헤더 패밀리를 기반으로 한 마크다운 분할 - `html`: HTML 구조 인식 분할 - `json`: JSON 구조 인식 분할 - `latex`: LaTeX 구조 인식 분할 - `sentence`: 문장 인식 분할 :::참고 각 전략은 청킹 접근 방식에 최적화된 다양한 매개변수를 허용합니다. ::: 다음은 사용 방법의 예입니다.`recursive` strategy: ```ts const chunks = await doc.chunk({ strategy: 'recursive', maxSize: 512, overlap: 50, separators: ['\n'], extract: { metadata: true, // Optionally extract metadata }, }) ``` 문장 구조를 유지하는 것이 중요한 텍스트의 경우 다음은`sentence` strategy: ```ts const chunks = await doc.chunk({ strategy: 'sentence', maxSize: 450, minSize: 50, overlap: 0, sentenceEnders: ['.'], }) ``` 섹션 간의 의미 관계를 유지하는 것이 중요한 마크다운 문서의 경우 다음은 사용 방법에 대한 예입니다.`semantic-markdown` strategy: ```ts const chunks = await doc.chunk({ strategy: 'semantic-markdown', joinThreshold: 500, modelName: 'gpt-3.5-turbo', }) ``` :::참고 메타데이터 추출은 LLM 호출을 사용할 수 있으므로 API 키가 설정되어 있는지 확인하세요. ::: 우리는 청크 전략에 대해 더 자세히 설명합니다.[`chunk()` reference documentation](https://mastra.zisheng.pro/ko/reference/rag/chunk). ## 임베딩 생성 선호하는 공급자를 사용하여 청크를 임베딩으로 변환합니다. Mastra는 Model 라우터를 통해 Model 임베딩을 지원합니다. ### Model 라우터 사용 가장 간단한 방법은 Mastra의 Model 라우터를 사용하는 것입니다.`provider/model` strings: ```ts import { ModelRouterEmbeddingModel } from '@mastra/core/llm' import { embedMany } from 'ai' const { embeddings } = await embedMany({ model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'), values: chunks.map(chunk => chunk.text), }) ``` Mastra는 OpenAI 및 Google 임베딩 Model을 지원합니다. 지원되는 임베딩 Model의 전체 목록은 다음을 참조하세요.[embeddings reference](https://mastra.zisheng.pro/ko/reference/rag/embeddings). Model 라우터는 환경 변수에서 API 키 감지를 자동으로 처리합니다. 임베딩 함수는 텍스트의 의미론적 의미를 나타내는 숫자 배열인 벡터를 반환하며, 벡터 데이터베이스에서 유사성 검색이 가능합니다. ### 포함 차원 구성 임베딩 Model은 일반적으로 고정된 차원 수(예: OpenAI의 `text-embedding-3-small`은 1536)로 벡터를 출력합니다. 일부 Model은 이 차원 수를 줄이는 기능을 지원하며, 이를 통해 다음과 같은 이점을 얻을 수 있습니다. - 벡터 데이터베이스의 저장 요구 사항 감소 - 유사성 검색을 위한 계산 비용 절감 지원되는 Model은 다음과 같습니다. OpenAI(텍스트 임베딩-3 Model): ```ts import { ModelRouterEmbeddingModel } from '@mastra/core/llm' const { embeddings } = await embedMany({ model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'), options: { dimensions: 256, // Only supported in text-embedding-3 and later }, values: chunks.map(chunk => chunk.text), }) ``` Google(텍스트 삽입-001): ```ts const { embeddings } = await embedMany({ model: google('gemini-embedding-001', { outputDimensionality: 256, // Truncates excessive values from the end }), values: chunks.map(chunk => chunk.text), }) ``` :::중요\[벡터 데이터베이스 호환성] 임베딩을 저장할 때 임베딩 Model의 출력 크기와 일치하도록 벡터 데이터베이스 인덱스를 구성해야 합니다. 크기가 일치하지 않으면 오류가 발생하거나 데이터가 손상될 수 있습니다. ::: ## 예: 파이프라인 완료 다음은 두 공급자를 모두 사용한 문서 처리 및 삽입 생성을 보여주는 예입니다. ```ts import { embedMany } from 'ai' import { MDocument } from '@mastra/rag' // Initialize document const doc = MDocument.fromText(` Climate change poses significant challenges to global agriculture. Rising temperatures and changing precipitation patterns affect crop yields. `) // Create chunks const chunks = await doc.chunk({ strategy: 'recursive', maxSize: 256, overlap: 50, }) // Generate embeddings with OpenAI import { ModelRouterEmbeddingModel } from '@mastra/core/llm' const { embeddings } = await embedMany({ model: new ModelRouterEmbeddingModel('openai/text-embedding-3-small'), values: chunks.map(chunk => chunk.text), }) // OR // Generate embeddings with Cohere const { embeddings } = await embedMany({ model: 'cohere/embed-english-v3.0', values: chunks.map(chunk => chunk.text), }) // Store embeddings in your vector database await vectorStore.upsert({ indexName: 'embeddings', vectors: embeddings, }) ``` 다양한 청킹 전략 및 임베딩 구성에 대한 추가 예는 다음을 참조하세요. - [청크 참조](https://mastra.zisheng.pro/ko/reference/rag/chunk) - [임베딩 참조](https://mastra.zisheng.pro/ko/reference/rag/embeddings) 벡터 데이터베이스 및 임베딩에 대한 자세한 내용은 다음을 참조하세요. - [벡터 데이터베이스](https://mastra.zisheng.pro/ko/guides/rag/vector-databases) - [API 참조 포함](https://mastra.zisheng.pro/ko/reference/rag/embeddings)