- 지식 기반 만들기
- 지식 관리
- 지식 기반에서 연결된 애플리케이션 보기
- 지식 문서 유지 관리
- API를 통한 지식 기반 유지
- 지식 기반 API 활용의 장점
- 사용 방법
- API 요청 예제
- 텍스트로 문서 만들기
- 파일에서 문서 만들기
- 파일에서 문서 만들기
- 빈 지식 기반 만들기
- 지식 기반 목록 가져오기
- 지식 기반 삭제
- 텍스트로 문서 업데이트
- 파일로 문서 업데이트
- 문서 삽입 상태 가져오기(진행률)
- 문서 삭제
- 지식 기반의 문서 목록 가져오기
- 문서에 청크 추가
- 문서에서 청크 가져오기
- 문서에서 청크 삭제
- 문서의 청크 업데이트
- 지식 기반에서 청크 검색
- 지식 기반에 메타데이터 필드 추가
- 지식 기반의 메타데이터 필드 업데이트
- 지식 기반에서 메타데이터 필드 삭제
- 지식 기반에서 기본 제공 필드 활성화/비활성화
- 단일 문서의 메타데이터 수정(할당)
- 데이터 세트의 메타데이터 목록
- 오류 메시지
- 메타데이터
- 애플리케이션 내 지식 기반 통합
Dify의 지식 기능은 RAG 파이프라인의 각 단계를 시각화하여 애플리케이션 개발자가 개인 또는 팀 지식을 쉽게 관리할 수 있는 사용자 친화적인 UI를 제공합니다. 또한 AI 애플리케이션과의 원활한 통합을 지원합니다.
개발자는 회사 내부 문서, FAQ, 표준 작업 가이드를 업로드한 다음, 대규모 언어 모델(LLM)에서 쿼리할 수 있는 구조화된 데이터로 처리할 수 있습니다.
AI 모델에 내장된 정적인 사전 학습 데이터 세트와 비교했을 때, 지식 기반의 콘텐츠는 실시간으로 업데이트될 수 있으므로 LLM은 항상 최신 정보에 액세스할 수 있고 오래되거나 누락된 데이터로 인해 발생하는 문제를 방지하는 데 도움이 됩니다.
LLM은 사용자 질의를 수신하면 먼저 키워드를 사용하여 지식 베이스 내에서 검색합니다. 지식 베이스는 이러한 키워드를 기반으로 관련성이 높은 순위의 콘텐츠 청크를 반환하며, 이를 통해 LLM은 더욱 정확한 답변을 생성하는 데 중요한 맥락을 확보하게 됩니다.
이러한 접근 방식은 LLM이 사전 훈련된 지식에만 의존하지 않도록 보장합니다. 대신, 실시간 문서와 데이터베이스를 활용하여 답변의 정확성과 관련성을 모두 향상시킬 수 있습니다.
주요 장점
• 실시간 업데이트 : 지식 기반은 언제든지 업데이트할 수 있으므로 모델에 항상 최신 정보가 유지됩니다.
• 정확성 : LLM은 관련 문서를 검색하여 실제 정보를 바탕으로 답변을 도출하고 환각을 최소화할 수 있습니다.
• 유연성 : 개발자는 특정 요구 사항에 맞게 지식 기반 콘텐츠를 사용자 정의하고 필요에 따라 지식 범위를 정의할 수 있습니다.
다음과 같은 텍스트 콘텐츠만 준비하면 됩니다.
- 긴 텍스트 콘텐츠(TXT, Markdown, DOCX, HTML, JSONL 또는 PDF 파일)
- 구조화된 데이터(CSV, Excel 등)
- 온라인 데이터 소스(웹 페이지, Notion 등)
지식베이스 에 파일을 업로드하기만 하면 데이터 처리가 자동으로 이루어집니다.
팀에 이미 독립적인 지식 기반이 있는 경우 “외부 지식 기반에 연결” 기능을 사용하여 Dify와의 연결을 설정할 수 있습니다.

사용 사례
기존 지식 기반과 제품 문서를 기반으로 AI 고객 지원 도우미를 만들려면 해당 파일을 Dify의 지식 기반에 업로드한 다음 대화형 애플리케이션을 설정하기만 하면 됩니다.전통적으로 원시 텍스트 학습에서 완전히 개발된 AI 고객 지원 챗봇으로 전환하는 데는 몇 주가 걸릴 수 있으며, 효과적으로 유지 관리하고 반복하는 것도 어렵습니다.Dify에서는 전체 프로세스가 단 3분 만에 완료되며, 그 후 즉시 사용자 피드백을 수집할 수 있습니다.
지식 기반 및 문서
Dify에서 지식 베이스는 여러 문서의 모음이며, 각 문서에는 여러 개의 콘텐츠 청크가 포함될 수 있습니다. 전체 지식 베이스를 애플리케이션에 통합하여 업로드된 파일이나 다른 소스에서 동기화된 데이터를 활용하여 검색 컨텍스트로 활용할 수 있습니다.팀에 Dify 플랫폼과 별개의 독립적인 외부 지식이 이미 있는 경우, 외부 지식 베이스 기능을 사용하여 연결할 수 있습니다. 이렇게 하면 모든 콘텐츠를 Dify에 다시 업로드할 필요가 없습니다. AI 앱은 팀의 기존 지식에서 실시간으로 정보에 직접 액세스하고 처리할 수 있습니다.
지식 기반 만들기 #
지식 기반을 생성하기 위해 문서를 업로드하는 단계:
- 지식 기반을 만들고 로컬 문서 파일이나 온라인 데이터를 가져옵니다.
텍스트 데이터 가져오기 #
지식 기반을 만들고 로컬 문서 파일이나 온라인 데이터를 가져옵니다.
- 청킹 모드를 선택하고 분할 결과를 미리 확인하세요. 이 단계에서는 긴 텍스트를 여러 개의 작은 청크로 나누는 콘텐츠 전처리 및 구조화가 진행됩니다.
Dify의 메인 네비게이션 바에서 ‘지식’을 클릭하세요. 이 페이지에서 기존 지식 베이스를 확인할 수 있습니다. ‘지식 만들기’를 클릭하면 설정 마법사가 시작됩니다. 이 지식 베이스는 다음 두 가지 온라인 데이터 가져오기를 지원합니다.Dify 상단 탐색 모음에서 ‘지식’을 클릭한 다음 ‘지식 만들기’를 선택하세요 . 지식에 문서를 업로드하거나 온라인 데이터를 가져올 수 있습니다.
로컬 파일 업로드 #
업로드할 파일을 드래그 앤 드롭하거나 선택하세요. 일괄 업로드 에 허용되는 파일 수는 구독 플랜 에 따라 다릅니다 .문서 업로드 제한 사항:
- 단일 문서의 업로드 크기 제한은 15MB입니다.
- SaaS 버전에 대한 다양한 구독 플랜은 일괄 업로드 수, 총 문서 업로드 및 벡터 저장을 제한합니다.

온라인 데이터 소스에서 가져오기 #
지식을 생성할 때 온라인 소스에서 데이터를 가져올 수 있습니다. 이 지식은 다음 두 가지 유형의 온라인 데이터를 지원합니다.
1.1 Notion에서 데이터 가져오기 #
Notion에서 데이터를 가져오는 방법을 알아보세요
Dify 데이터 세트는 Notion에서 데이터를 가져오고 동기화를 설정하여 Notion의 데이터 업데이트가 자동으로 Dify에 동기화되도록 지원합니다.
권한 확인 #
- 데이터 세트를 생성하고 데이터 소스를 선택할 때 Notion 콘텐츠에서 동기화 – 지금 바인딩을 클릭 하고 메시지에 따라 권한 검증을 완료합니다.
- 또는 설정 — 데이터 소스 — 데이터 소스 추가 로 이동하여 Notion 소스 바인딩을 클릭 하고 권한 확인을 완료할 수 있습니다.

Notion 데이터 가져오기 #
권한 검증을 완료한 후 데이터 세트 생성 페이지로 이동하여 Notion 콘텐츠에서 동기화를 클릭 하고 가져와야 하는 권한 있는 페이지를 선택합니다.

청킹 및 청소 #
다음으로, 지식 베이스의 청킹 모드 와 인덱싱 방법을 선택하고 저장한 후 자동 처리될 때까지 기다리세요. Dify는 표준 Notion 페이지 가져오기를 지원할 뿐만 아니라 데이터베이스 유형 페이지의 페이지 속성을 통합하고 저장할 수도 있습니다.참고: 이미지와 파일은 가져올 수 없으며, 표의 데이터는 텍스트로 변환됩니다.

Notion 데이터 동기화 #
Notion 콘텐츠가 업데이트된 경우, 지식 베이스 문서 목록에서 해당 페이지의 ‘ 동기화’ 버튼을 클릭하여 변경 사항을 동기화할 수 있습니다. 동기화에는 임베딩 프로세스가 포함되며, 이 과정에서 임베딩 모델의 토큰이 사용됩니다.

커뮤니티 에디션 Notion 통합 구성 방법 #
Notion은 내부 통합 과 공개 통합 , 두 가지 통합 옵션을 제공합니다 . 두 방법의 차이점에 대한 자세한 내용은 Notion 공식 문서 를 참조하세요 .
1. 내부 통합 사용 #
먼저, 통합 설정 페이지 ‘ 통합 만들기’ 에서 통합을 생성합니다 . 기본적으로 모든 통합은 내부 통합으로 시작하며, 내부 통합은 선택한 작업 공간과 연결되므로 통합을 생성하려면 작업 공간 소유자여야 합니다.구체적인 단계:새 통합 버튼을 클릭하세요 . 유형은 기본적으로 내부 (Internal)이며 수정할 수 없습니다. 연결된 스페이스를 선택하고 통합 이름을 입력한 후 로고를 업로드하고 제출(Submit)을 클릭하면 통합이 성공적으로 생성됩니다.

통합을 만든 후에는 기능 탭에서 필요에 따라 설정을 업데이트하고 비밀 아래에 있는 표시 버튼을 클릭하여 비밀을 복사할 수 있습니다.

복사 후 Dify 소스 코드로 돌아가 .env 파일에서 관련 환경 변수를 설정하세요. 환경 변수는 다음과 같습니다.복사AI에게 물어보세요
NOTION_INTEGRATION_TYPE = internal or NOTION_INTEGRATION_TYPE = public
NOTION_INTERNAL_SECRET=you-internal-secret
공공 통합 사용 #
내부 통합을 공개 통합으로 업그레이드해야 합니다. 통합의 배포 페이지로 이동하여 통합을 공개로 전환하세요. 공개 설정으로 전환할 때는 아래 조직 정보 양식에 회사명, 웹사이트, 리디렉션 URL 등 추가 정보를 입력한 후 ‘ 제출’ 버튼을 클릭하세요.

통합 설정 페이지에서 통합을 성공적으로 공개하면 키 탭에서 통합 키에 액세스할 수 있습니다.

Dify 소스 코드로 돌아가서 .env 파일에서 관련 환경 변수를 설정하세요. 환경 변수는 다음과 같습니다.복사AI에게 물어보세요
NOTION_INTEGRATION_TYPE=public
NOTION_CLIENT_SECRET=your-client-secret
NOTION_CLIENT_ID=your-client-id
구성 후 데이터 세트에서 Notion 데이터 가져오기 및 동기화 기능을 작동할 수 있습니다.
1.2 웹사이트에서 동기화 #
웹사이트에서 데이터를 동기화하는 방법을 알아보세요
지식 기반이 온라인 데이터를 사용하도록 설정된 경우, 나중에 로컬 문서를 추가하거나 로컬 파일 기반 모드로 전환할 수 없습니다. 이를 통해 단일 지식 기반에 여러 데이터 소스가 혼합되는 것을 방지하여 관리 복잡성을 방지할 수 있습니다.
지식 기반은 Jina Reader 및 Firecrawl 과 같은 타사 도구를 사용하여 공개 웹 페이지에서 콘텐츠를 크롤링하고 , 이를 Markdown 콘텐츠로 구문 분석하고, 이를 지식 기반으로 가져오는 것을 지원합니다.
Firecrawl 과 Jina Reader는 모두 웹 페이지를 LLM이 인식하기 쉬운 깔끔한 Markdown 형식 텍스트로 변환할 수 있는 오픈 소스 웹 파싱 도구로, 사용하기 쉬운 API 서비스를 제공합니다.다음 섹션에서는 Firecrawl과 Jina Reader의 사용 방법을 각각 소개합니다.
파이어크롤 #
1. Firecrawl API 자격 증명 구성 #
오른쪽 상단 모서리에 있는 아바타를 클릭한 다음, DataSource 페이지로 이동하여 Firecrawl 옆에 있는 구성 버튼을 클릭합니다 .

Firecrawl 웹사이트 에 로그인하여 등록을 완료하고 API 키를 받은 다음 Dify에 입력하여 저장합니다.

2. 대상 웹페이지 스크래핑 #
지식 기반 생성 페이지에서 웹사이트에서 동기화를 선택하고 공급자로 Firecrawl을 선택한 다음 크롤링할 대상 URL을 입력합니다.구성 옵션에는 하위 페이지 크롤링 여부, 페이지 크롤링 제한, 페이지 스크래핑 최대 깊이, 제외된 경로, 경로만 포함, 콘텐츠 추출 범위 등이 있습니다. 구성을 완료한 후 ‘ 실행’을 클릭하면 파싱된 페이지를 미리 볼 수 있습니다.

3. 가져오기 결과 검토 #
웹페이지에서 구문 분석된 텍스트를 가져온 후 지식 기반 문서에 저장됩니다. 가져오기 결과를 확인하고 ‘URL 추가’를 클릭하여 새 웹페이지 가져오기를 계속하세요.
지나 리더 #
1. Jina Reader 자격 증명 구성 #
오른쪽 상단 모서리에 있는 아바타를 클릭한 다음, DataSource 페이지로 이동하여 Jina Reader 옆에 있는 구성 버튼을 클릭합니다 .

Jina Reader 웹사이트 에 로그인하여 등록을 완료하고 API 키를 받은 다음, 키를 입력하고 저장합니다.
2. Jina Reader를 사용하여 웹 콘텐츠 크롤링 #
지식 기반 생성 페이지에서 웹사이트에서 동기화를 선택하고 , 공급자로 Jina Reader를 선택한 다음, 크롤링할 대상 URL을 입력합니다.

구성 옵션에는 하위 페이지 크롤링 여부, 크롤링할 최대 페이지 수, 크롤링에 사이트맵 사용 여부가 포함됩니다. 구성을 완료한 후 ‘실행’ 버튼을 클릭하면 크롤링할 페이지 링크를 미리 볼 수 있습니다.

웹 페이지에서 파싱된 텍스트를 지식 베이스로 가져온 후, 문서 섹션에서 가져온 결과를 검토할 수 있습니다. 웹 페이지를 더 추가하려면 오른쪽의 ‘URL 추가’ 버튼을 클릭하여 새 페이지 가져오기를 계속하세요.

크롤링이 완료되면 웹 페이지의 콘텐츠가 지식 기반에 통합됩니다.
나중에 데이터 추가 #
아직 문서나 기타 콘텐츠를 준비하지 않았다면 먼저 빈 지식 베이스를 만드세요. 그러면 준비가 되면 언제든지 로컬 파일을 업로드하거나 온라인 데이터를 가져올 수 있습니다.
청크 모드를 선택하세요 #
청킹 모드를 선택하고 분할 결과를 미리 확인하세요. 이 단계에서는 긴 텍스트를 여러 개의 작은 청크로 나누는 콘텐츠 전처리 및 구조화가 진행됩니다.
- 색인 방법과 검색 설정을 구성합니다. 지식 기반은 사용자 질의를 수신하면 미리 설정된 검색 방법에 따라 기존 문서를 검색하고 관련성이 높은 콘텐츠 청크를 추출합니다.
지식 기반에 콘텐츠를 업로드한 후 다음 단계는 청킹(chunking) 및 데이터 정리입니다. 이 단계에는 긴 텍스트를 여러 개의 작은 청크로 나누는 콘텐츠 전처리 및 구조화가 포함됩니다.
청킹 및 클리닝 전략이란 무엇인가요?
LLM이 지식 기반 질의에 정확하게 답변할 수 있는지는 시스템이 관련 콘텐츠 청크를 얼마나 효과적으로 검색하는지에 달려 있습니다. AI 애플리케이션이 정확하고 포괄적인 답변을 생성하는 데 있어 관련성이 높은 청크는 매우 중요합니다.예를 들어 AI 고객 챗봇 시나리오에서 LLM에게 도구 매뉴얼의 핵심 내용으로 안내하는 것만으로도 사용자 질문에 신속하게 답변할 수 있으며, 전체 문서를 반복적으로 분석할 필요가 없습니다. 이러한 접근 방식은 분석 단계에서 토큰을 절약하는 동시에 AI가 생성한 답변의 전반적인 품질을 향상시킵니다.
청크 모드 #
지식 기반은 일반 모드 와 부모-자식 모드 , 두 가지 청킹 모드를 지원합니다 . 지식 기반을 처음 생성하는 경우 부모-자식 모드를 선택하는 것이 좋습니다.
참고 : 기존의 “자동 청킹 및 정리” 모드가 “일반” 모드 로 자동 업데이트되었습니다 . 별도의 변경은 필요하지 않으며, 기본 설정을 계속 사용하실 수 있습니다.청크 모드를 선택하고 지식 기반을 생성한 후에는 나중에 변경할 수 없습니다. 지식 기반에 새로 추가되는 모든 문서는 동일한 청킹 전략을 따릅니다.

일반 모드 #
콘텐츠는 독립적인 청크로 나뉩니다. 사용자가 질의를 제출하면 시스템은 청크와 질의 키워드 간의 관련성을 자동으로 계산합니다. 이후 상위 순위의 청크를 검색하여 LLM으로 전송하여 답변을 처리합니다.이 모드에서는 다양한 문서 형식이나 특정 시나리오 요구 사항에 따라 텍스트 청킹 규칙을 수동으로 정의해야 합니다. 자세한 내용은 다음 구성 옵션을 참조하세요.
- 청크 식별자 , 기본값은 이며
\n
, 이는 텍스트가 문단 단위로 분할됨을 의미합니다. 정규식을 사용하여 청크 분할 규칙을 사용자 지정할 수 있습니다 . 시스템은 지정된 구분 기호를 감지할 때마다 자동으로 청크 분할을 실행합니다. 예를 들어, 는 텍스트를 문장 단위로 분할함을 의미합니다. - 최대 청크 길이: 청크당 허용되는 최대 텍스트 문자 수를 지정합니다. 이 제한을 초과하면 시스템이 자동으로 청크를 적용합니다. 기본값은 500개 토큰이며, 최대 청크 길이는 4000개 토큰입니다.
- 청크 길이 겹침 : 데이터가 청크로 분할될 때 청크 간에 일정량의 겹침이 발생합니다. 이러한 겹침은 정보 보존 및 분석 정확도를 높이고 검색 효과를 높이는 데 도움이 될 수 있습니다. 청크 길이 토큰의 10~25%로 설정하는 것이 좋습니다.
텍스트 전처리 규칙 . 텍스트 전처리 규칙은 지식 기반에서 관련 없는 콘텐츠를 필터링하는 데 도움이 됩니다. 다음 옵션을 사용할 수 있습니다.
- 연속된 공백, 줄바꿈 문자, 탭을 바꿉니다.
- 모든 URL과 이메일 주소를 제거하세요
구성이 완료되면 “청크 미리보기” 를 클릭하여 청크 분할 결과를 확인하세요. 각 청크의 문자 수를 확인할 수 있습니다. 청크 분할 규칙을 수정한 경우, 버튼을 다시 클릭하면 최근에 생성된 텍스트 청크를 확인할 수 있습니다.여러 문서를 대량으로 업로드하는 경우, 상단에 있는 문서 제목을 클릭하여 다른 문서에 대한 청크 결과를 검토하여 문서를 전환할 수 있습니다.

청킹 규칙을 설정한 후 다음 단계는 인덱싱 방법을 지정하는 것입니다. 일반 모드는 고품질 인덱싱 방법 과 경제적인 인덱싱 방법을 지원합니다 . 자세한 내용은 인덱싱 방법 설정을 참조하세요 .
부모-자식 모드 #
일반 모드 와 비교했을 때 , 부모-자식 모드는 정확한 검색과 포괄적인 컨텍스트의 균형을 이루는 2계층 데이터 구조를 사용하여 정확한 매칭과 더 풍부한 컨텍스트 정보를 결합합니다.이 모드에서 부모 청크(예: 문단)는 맥락을 제공하는 더 큰 텍스트 단위로 기능하는 반면, 자식 청크(예: 문장)는 정확한 검색에 중점을 둡니다. 시스템은 먼저 자식 청크를 검색하여 관련성을 확인한 다음, 해당 부모 청크를 가져와 전체 맥락을 제공합니다. 이를 통해 최종 응답의 정확성과 완전한 배경 정보를 보장합니다. 구분 기호와 최대 청크 길이를 설정하여 부모 청크와 자식 청크를 분할하는 방식을 사용자 지정할 수 있습니다.예를 들어, AI 기반 고객 챗봇 사례에서 사용자 질의를 지원 문서의 특정 문장에 매핑할 수 있습니다. 그러면 해당 문장이 포함된 단락이나 장이 LLM에 제공되어 전체적인 맥락을 반영하여 답변이 더욱 정확해집니다.기본적인 메커니즘은 다음과 같습니다.
- 자식 청크를 사용한 쿼리 매칭:
- 종종 한 문단 내의 한 문장처럼 간결한, 짧고 집중적인 정보가 사용자의 질의와 일치하는 데 사용됩니다.
- 이러한 자식 청크를 통해 정확하고 관련성 있는 초기 검색이 가능합니다.
- 부모 청크를 통한 문맥적 풍부화:
- 그런 다음 일치하는 자식 청크를 포함하는 단락, 섹션 또는 전체 문서와 같은 더 크고 포괄적인 섹션을 검색합니다.
- 이러한 상위 청크는 언어 모델(LLM)에 대한 포괄적인 컨텍스트를 제공합니다.

이 모드에서는 다양한 문서 형식이나 특정 시나리오 요구 사항에 따라 부모 청크와 자식 청크 모두에 대해 별도의 청킹 규칙을 수동으로 구성해야 합니다.부모 청크부모 청크 설정은 다음과 같은 옵션을 제공합니다.
- 단락: 이 모드는 구분 기호와 최대 청크 길이를 기준으로 텍스트를 여러 단락으로 분할하고, 분할된 텍스트를 검색을 위한 상위 청크로 사용합니다. 각 단락은 상위 청크로 처리되며, 텍스트 양이 많고 내용이 명확하며 단락이 비교적 독립적인 문서에 적합합니다. 다음 설정이 지원됩니다.
- 청크 구분 기호 : 기본값은 이며 , 텍스트를 문단 단위로 분할합니다. 정규식을
\n
사용하여 청크 분할 규칙을 사용자 지정할 수 있습니다 . 지정된 구분 기호가 나타날 때마다 시스템이 자동으로 텍스트를 청크합니다. - 최대 청크 길이: 청크당 허용되는 최대 텍스트 문자 수를 지정합니다. 이 제한을 초과하면 시스템이 자동으로 청크를 적용합니다. 기본값은 500개 토큰이며, 최대 청크 길이는 4000개 토큰입니다.
- 청크 구분 기호 : 기본값은 이며 , 텍스트를 문단 단위로 분할합니다. 정규식을
- 전체 문서: 텍스트를 단락으로 나누는 대신, 전체 문서를 부모 청크로 사용하여 직접 검색합니다. 성능상의 이유로 텍스트의 처음 10,000개 토큰만 보존됩니다. 이 설정은 단락이 서로 연관되어 전체 문서 검색이 필요한 소규모 문서에 적합합니다.

어린이 덩어리자식 청크는 구분 기호 규칙에 따라 부모 청크를 분할하여 생성됩니다. 자식 청크는 쿼리 키워드와 가장 관련성이 높고 직접적인 정보를 식별하고 매칭하는 데 사용됩니다. 기본 자식 청킹 규칙을 사용할 경우, 일반적으로 다음과 같은 분할 결과가 발생합니다.
- 부모 청크가 문단인 경우, 자식 청크는 각 문단 내의 개별 문장에 해당합니다.
- 부모 청크가 전체 문서인 경우, 자식 청크는 문서 내의 개별 문장에 해당합니다.
다음 청크 설정을 구성할 수 있습니다.
- 청크 구분 기호 : 기본값은 이며, 텍스트를 문장 단위로 청크합니다. 정규식을 사용하여 청크 규칙을 사용자 지정할 수 있습니다 . 지정된 구분 기호가 나타날 때마다 시스템이 자동으로 텍스트를 청크합니다.
- 최대 청크 길이: 청크당 허용되는 최대 텍스트 문자 수를 지정합니다. 이 제한을 초과하면 시스템이 자동으로 청크를 적용합니다. 기본값은 200개 토큰이며, 최대 청크 길이는 4000개 토큰입니다.
텍스트 전처리 규칙을 사용하여 지식 기반에서 관련 없는 콘텐츠를 필터링할 수도 있습니다 .
- 연속된 공백, 줄바꿈 문자, 탭을 바꿉니다.
- 모든 URL과 이메일 주소를 제거하세요
구성을 완료한 후 “청크 미리보기” 를 클릭하여 결과를 확인하세요. 상위 청크의 총 문자 수를 확인할 수 있습니다.구성이 완료되면 “청크 미리보기” 를 클릭하여 청크 분할 결과를 확인하세요. 상위 청크의 총 문자 수를 확인할 수 있습니다. 파란색으로 강조 표시된 문자는 하위 청크를 나타내며, 현재 하위 청크의 문자 수도 참조용으로 표시됩니다.청킹 규칙을 수정한 경우 버튼을 다시 클릭하면 최근에 생성된 텍스트 청크를 볼 수 있습니다.여러 문서를 대량으로 업로드하는 경우, 상단에 있는 문서 제목을 클릭하여 다른 문서에 대한 청크 결과를 검토하여 문서를 전환할 수 있습니다.

정확한 콘텐츠 검색을 보장하기 위해 부모-자식 청크 모드는 고품질 인덱싱 만 지원합니다 .
두 모드의 차이점은 무엇인가요? #
두 모드의 차이점은 콘텐츠 청크의 구조에 있습니다. 일반 모드는 여러 개의 독립적인 콘텐츠 청크를 생성하는 반면, 부모-자식 모드는 두 계층의 청킹 방식을 사용합니다. 즉, 하나의 부모 청크(예: 전체 문서 또는 단락)가 여러 개의 자식 청크(예: 문장)를 포함합니다.다양한 청킹(chunking) 방식이 LLM이 지식 기반을 얼마나 효과적으로 검색할 수 있는지에 영향을 미칩니다. 동일한 문서에 부모-자식 검색(Parent-child Retrieval)을 적용하면 높은 정확도를 유지하면서도 더욱 포괄적인 맥락을 제공하므로 기존의 단일 계층 방식보다 훨씬 효과적입니다.

#
인덱싱 방법과 검색 설정을 선택하세요 #
색인 방법과 검색 설정을 구성합니다. 지식 기반은 사용자 질의를 수신하면 미리 설정된 검색 방법에 따라 기존 문서를 검색하고 관련성이 높은 콘텐츠 청크를 추출합니다.
- 청크 임베딩이 완료될 때까지 기다리세요.
- 완료되면 지식 기반을 애플리케이션에 연결하고 사용을 시작하세요. 그런 다음 지식 기반을 애플리케이션에 통합하여 지식 기반 Q&A를 지원하는 LLM을 구축할 수 있습니다. 지식 기반을 추가로 수정하고 관리하려면 지식 기반 및 문서 유지 관리를 참조하세요 .
청킹 모드를 선택한 후 다음 단계는 구조화된 콘텐츠에 대한 인덱싱 방법을 정의하는 것입니다.
인덱싱 방법 설정 #
검색 엔진이 효율적인 인덱싱 알고리즘을 사용하여 사용자 질의와 가장 관련성이 높은 검색 결과를 찾는 것과 마찬가지로, 선택한 인덱싱 방법은 LLM의 검색 효율성과 지식 기반 콘텐츠에 대한 응답의 정확성에 직접적인 영향을 미칩니다.지식 기반은 고품질 및 경제적 이라는 두 가지 인덱싱 방법을 제공하며 , 각 방법은 서로 다른 검색 설정 옵션을 갖습니다.
참고 : 원래 Q&A 모드(커뮤니티 에디션에서만 사용 가능)는 이제 고품질 색인 방법에 따른 선택적 기능입니다.
- 고품질
- 경제적이다
고품질 모드에서 임베딩 모델은 텍스트 청크를 수치 벡터로 변환하여 대량의 텍스트 정보를 효율적으로 압축하고 저장할 수 있도록 합니다. 이를 통해 사용자 쿼리와 텍스트 간의 더욱 정확한 매칭이 가능합니다.텍스트 청크가 벡터화되어 데이터베이스에 저장되면, 사용자 질의와 일치하는 청크를 가져오는 효과적인 검색 방법이 필요합니다. 고품질 인덱싱 방법은 벡터 검색, 전체 텍스트 검색, 그리고 하이브리드 검색의 세 가지 검색 설정을 제공합니다. 검색 설정에 대한 자세한 내용은 “검색 설정”을 참조하십시오 .고품질 모드를 선택한 후에 는 지식 베이스 색인 방식을 나중에 경제 모드로 다운그레이드할 수 없습니다. 전환해야 하는 경우, 새 지식 베이스를 생성하고 원하는 색인 방식을 선택하는 것이 좋습니다.
Q&A 모드 활성화(선택 사항, 커뮤니티 에디션만 해당) #
이 모드를 활성화하면 시스템은 업로드된 텍스트를 분할하고 각 세그먼트의 내용을 요약한 후 자동으로 Q&A 쌍을 생성합니다.일반적인 Q to P 전략(사용자 질문을 텍스트 문단과 매칭)과 비교했을 때, Q&A 모드는 Q to Q 전략(질문을 질문과 매칭)을 사용합니다.이러한 접근 방식은 FAQ 문서의 텍스트가 완전한 문법 구조를 갖춘 자연어로 작성되는 경우가 많기 때문에 특히 효과적입니다 .
Q to Q 전략은 질문과 답변의 매칭을 더욱 명확하게 만들어 주고, 질문이 빈번하거나 매우 유사한 시나리오를 더 잘 지원합니다.
사용자가 질문을 하면 시스템은 가장 유사한 질문을 식별하고 해당 질문을 답변으로 반환합니다. 이 방식은 사용자의 질의와 직접 일치하여 사용자가 필요한 정확한 정보를 찾을 수 있도록 하므로 더욱 정확합니다.
검색 설정 설정 #
지식 기반은 사용자 질의를 수신하면, 미리 설정된 검색 방법에 따라 기존 문서를 검색하고 관련성이 높은 콘텐츠 청크를 추출합니다. 이러한 콘텐츠 청크는 LLM에 필수적인 맥락 정보를 제공하여 궁극적으로 답변의 정확성과 신뢰성에 영향을 미칩니다.일반적인 검색 방법은 다음과 같습니다.
- 벡터 유사성에 기반한 의미 검색 – 텍스트 덩어리와 쿼리를 벡터로 변환하고 유사도 점수를 통해 매칭합니다.
- 역색인(표준 검색 엔진 기법)을 이용한 키워드 매칭. 두 방법 모두 Dify 지식 베이스에서 지원됩니다.
Dify 지식 기반에서는 두 가지 검색 방법 모두 지원됩니다. 사용 가능한 구체적인 검색 옵션은 선택한 인덱싱 방법에 따라 달라집니다.
- 고품질
- 경제적이다
고품질고품질 인덱싱 방법 에서 Dify는 벡터 검색, 전체 텍스트 검색, 하이브리드 검색의 세 가지 검색 설정을 제공합니다 .벡터 검색정의 : 사용자의 질문을 벡터화하여 쿼리 벡터를 생성한 다음, 지식 기반의 해당 텍스트 벡터와 비교하여 가장 가까운 청크를 찾습니다.
벡터 검색 설정:Rerank 모델 : 기본적으로 비활성화되어 있습니다. 활성화하면 타사 Rerank 모델이 벡터 검색에서 반환된 텍스트 청크를 정렬하여 결과를 최적화합니다. 이를 통해 LLM이 더욱 정확한 정보에 접근하고 출력 품질을 개선하는 데 도움이 됩니다. 이 옵션을 활성화하기 전에 설정 → 모델 공급자 로 이동하여 Rerank 모델의 API 키를 설정하세요.
이 기능을 활성화하면 Rerank 모델의 토큰이 소모됩니다. 자세한 내용은 관련 모델의 가격 페이지를 참조하세요.
TopK : 사용자 질의와 가장 유사하다고 판단되는 텍스트 청크를 얼마나 많이 검색할지 결정합니다. 또한 선택한 모델의 컨텍스트 창에 따라 청크 수를 자동으로 조정합니다. 기본값은 3 이며 , 숫자가 높을수록 더 많은 텍스트 청크를 검색합니다.점수 임계값 : 청크를 검색하는 데 필요한 최소 유사도 점수를 설정합니다. 이 점수를 초과하는 청크만 검색됩니다. 기본값은 0.5 입니다 . 임계값이 높을수록 더 높은 유사도가 요구되므로 검색되는 청크 수가 줄어듭니다.
TopK 및 Score 구성은 Rerank 단계에서만 유효합니다. 따라서 이러한 설정을 적용하려면 Rerank 모델을 추가하고 활성화해야 합니다.
전체 텍스트 검색정의: 문서의 모든 용어를 인덱싱하여 사용자가 용어를 쿼리하고 해당 용어가 포함된 텍스트 조각을 반환할 수 있도록 합니다.Rerank 모델 : 기본적으로 비활성화되어 있습니다. 활성화하면 타사 Rerank 모델이 전체 텍스트 검색에서 반환된 텍스트 청크를 정렬하여 결과를 최적화합니다. 이를 통해 LLM이 더욱 정확한 정보에 접근하고 출력 품질을 향상시킬 수 있습니다. 이 옵션을 활성화하기 전에 설정 → 모델 공급자 로 이동하여 Rerank 모델의 API 키를 설정하세요.
이 기능을 활성화하면 Rerank 모델의 토큰이 소모됩니다. 자세한 내용은 관련 모델의 가격 페이지를 참조하세요.
TopK : 사용자 질의와 가장 유사하다고 판단되는 텍스트 청크를 얼마나 많이 검색할지 결정합니다. 또한 선택한 모델의 컨텍스트 창에 따라 청크 수를 자동으로 조정합니다. 기본값은 3 이며 , 숫자가 높을수록 더 많은 텍스트 청크를 검색합니다.점수 임계값 : 청크를 검색하는 데 필요한 최소 유사도 점수를 설정합니다. 이 점수를 초과하는 청크만 검색됩니다. 기본값은 0.5 입니다 . 임계값이 높을수록 더 높은 유사도가 요구되므로 검색되는 청크 수가 줄어듭니다.
TopK 및 Score 구성은 Rerank 단계에서만 유효합니다. 따라서 이러한 설정을 적용하려면 Rerank 모델을 추가하고 활성화해야 합니다.
하이브리드 검색정의 : 이 프로세스는 전체 텍스트 검색과 벡터 검색을 결합하여 두 가지를 동시에 수행합니다. 여기에는 사용자 질의를 기반으로 두 검색 결과에서 가장 일치하는 결과를 선택하는 재정렬 단계가 포함됩니다.이 모드에서는 Rerank 모델 API를 구성하거나 검색을 위해 Rerank 모델을 활성화하지 않고도 “가중치 설정”을 지정할 수 있습니다 .
- 가중치 설정 이 기능을 사용하면 의미적 우선순위와 키워드 우선순위에 대한 가중치를 사용자 지정할 수 있습니다. 키워드 검색은 지식 기반 내에서 전체 텍스트 검색을 수행하는 것을 의미하며, 의미적 검색은 지식 기반 내에서 벡터 검색을 수행합니다.
- 의미론적 값 1: 의미론적 검색 모드만 활성화합니다. 임베딩 모델을 활용하면 질의어의 정확한 용어가 지식 베이스에 나타나지 않더라도 벡터 거리를 계산하여 더 깊이 있는 검색을 수행할 수 있으며, 이를 통해 관련 콘텐츠를 반환합니다. 또한, 다국어 콘텐츠를 처리할 때 의미론적 검색은 여러 언어의 의미를 포착하여 더욱 정확한 교차 언어 검색 결과를 제공할 수 있습니다.
- 키워드 값 1: 키워드 검색 모드만 활성화합니다. 지식 베이스의 입력 텍스트와 전체 일치를 수행하며, 사용자가 정확한 정보나 용어를 알고 있는 경우에 적합합니다. 이 방식은 컴퓨팅 리소스를 덜 소모하며 대규모 문서 지식 베이스 내에서 빠른 검색에 이상적입니다.
- 맞춤 키워드 및 시맨틱 가중치 설정 시맨틱 검색 또는 키워드 검색만 활성화하는 것 외에도, 유연한 맞춤 가중치 설정을 제공합니다. 두 가지 검색 방법의 가중치를 지속적으로 조정하여 비즈니스 상황에 맞는 최적의 가중치 비율을 찾을 수 있습니다.
“가중치 설정 “ 및 “모델 재순위” 설정은 다음 옵션을 지원합니다.TopK : 사용자 질의와 가장 유사하다고 판단되는 텍스트 청크를 얼마나 많이 검색할지 결정합니다. 또한 선택한 모델의 컨텍스트 창에 따라 청크 수를 자동으로 조정합니다. 기본값은 3 이며 , 숫자가 높을수록 더 많은 텍스트 청크를 검색합니다.점수 임계값 : 청크를 검색하는 데 필요한 최소 유사도 점수를 설정합니다. 이 점수를 초과하는 청크만 검색됩니다. 기본값은 0.5 입니다 . 임계값이 높을수록 더 높은 유사도가 요구되므로 검색되는 청크 수가 줄어듭니다.

지식 관리 #
- 지식 페이지는 팀 소유자, 팀 관리자 및 편집자 권한이 있는 사용자만 접근할 수 있습니다.
Dify 플랫폼 상단의 ‘ 지식 ‘ 버튼을 클릭 하고 관리할 지식을 선택하세요. 왼쪽 사이드바의 ‘설정’으로 이동하여 설정하세요.여기에서 지식 기반의 이름, 설명, 권한, 인덱싱 방법, 내장 모델 및 검색 설정을 수정할 수 있습니다.
- 지식 이름 : 다양한 지식 기반을 구별하는 데 사용됩니다.
- 지식 설명 : 지식 기반의 문서에 표현된 정보를 설명하는 데 사용됩니다.
- 권한 : 지식 기반에 대한 액세스 제어를 세 가지 수준으로 정의합니다.
- “나만” : 지식 기반 소유자의 접근을 제한합니다.
- “모든 팀 구성원” : 팀의 모든 구성원에게 액세스 권한을 부여합니다.
- “일부 팀원” : 특정 팀원에게만 선택적으로 접근할 수 있도록 허용합니다. 적절한 권한이 없는 사용자는 지식 베이스에 접근할 수 없습니다. 팀원에게 접근 권한을 부여할 때(옵션 2 또는 3), 권한이 있는 사용자에게는 지식 베이스 콘텐츠 보기, 편집 및 삭제 권한을 포함한 모든 권한이 부여됩니다.
- 인덱싱 모드 : 자세한 설명은 설명서 를 참조하세요 .
- 임베딩 모델 : 지식 기반의 임베딩 모델을 수정할 수 있습니다. 임베딩 모델을 변경하면 지식 기반의 모든 문서가 다시 임베딩되고, 원래 임베딩은 삭제됩니다.
- 검색 설정 : 자세한 설명은 설명서 를 참조하세요 .
지식 기반에서 연결된 애플리케이션 보기 #
지식 베이스 왼쪽에는 연결된 모든 앱이 표시됩니다. 원형 아이콘 위에 마우스를 올리면 연결된 모든 앱 목록이 표시됩니다. 오른쪽의 바로가기 버튼을 클릭하면 빠르게 탐색할 수 있습니다.웹 인터페이스나 API를 통해 지식 기반 문서를 관리할 수 있습니다.
지식 문서 유지 관리 #
지식 기반에서 문서 관리 #
문서 추가 #
지식 베이스는 문서 모음입니다. 개발자나 운영자가 문서를 업로드하거나 다른 데이터 소스에서 동기화할 수 있습니다. 지식 베이스의 각 문서는 해당 데이터 소스의 파일(예: Notion 문서 또는 온라인 웹페이지)에 해당합니다.기존 지식 기반에 새 문서를 업로드하려면 지식 기반 > 문서 로 이동하여 파일 추가를 클릭합니다 .

문서 비활성화/보관/삭제 #
활성화 : 현재 정상 상태인 문서는 지식 기반에서 편집 및 검색할 수 있습니다. 비활성화된 문서는 다시 활성화할 수 있습니다. 보관된 문서의 경우, 다시 활성화하기 전에 먼저 보관을 해제해야 합니다.비활성화 : 사용 중 문서 색인 생성을 원하지 않으면 문서 오른쪽에 있는 파란색 스위치를 끄세요. 비활성화된 문서도 편집이나 수정은 가능합니다.보관 : 더 이상 사용하지 않지만 삭제하고 싶지 않은 오래된 문서는 보관할 수 있습니다. 보관된 문서는 열람 및 삭제만 가능하며 편집은 불가능합니다. 지식 베이스의 문서 목록 에서 ‘보관’ 버튼을 클릭하거나 문서 세부 정보 페이지에서 문서를 보관할 수 있습니다. 보관은 취소할 수 있습니다.삭제 : ⚠️ 위험한 옵션입니다. 잘못된 문서나 명확하게 모호한 내용의 경우, 문서 오른쪽 메뉴에서 ‘삭제’를 선택하세요. 삭제된 내용은 복구할 수 없으므로 주의해서 진행하세요.
위의 옵션은 모두 여러 문서를 선택한 후 일괄 작업을 지원합니다.

메모:지식 기반에 업데이트나 검색이 잠시 동안 이루어지지 않은 문서가 있는 경우, 최적의 성능을 보장하기 위해 시스템에서는 비활성 문서를 비활성화합니다.
- 샌드박스 사용자의 경우 “비활성 문서 비활성화 기간”은 7일 후 입니다 .
- Professional 및 Team 사용자의 경우 30일 후부터 적용됩니다 . 지식 베이스에서 “활성화” 버튼을 클릭하면 언제든지 이 문서를 되돌리고 계속 사용할 수 있습니다.
지식 기반에서 “활성화” 버튼을 클릭하면 언제든지 비활성화된 문서를 되돌리고 계속 사용할 수 있습니다. 유료 사용자에게는 원클릭 되돌리기 기능이 제공됩니다.

텍스트 청크 관리 #
텍스트 청크 보기 #
지식 베이스에서는 업로드된 각 문서가 텍스트 청크로 저장됩니다. 문서 제목을 클릭하면 세부 정보 페이지에서 청크 목록과 해당 텍스트 콘텐츠를 볼 수 있습니다. 각 페이지는 기본적으로 10개의 청크를 표시하지만, 웹 하단에서 페이지당 표시되는 청크 수를 변경할 수 있습니다.미리보기에서는 각 콘텐츠 청크의 처음 두 줄만 표시됩니다. 청크 내 전체 텍스트를 보려면 “청크 확장” 버튼을 클릭하세요.

필터를 사용하면 활성화된 문서나 비활성화된 문서를 모두 빠르게 볼 수 있습니다.

다양한 청킹 모드는 다양한 텍스트 청킹 미리 보기 방법에 해당합니다.
- 일반 모드
- 부모-자식 모드
- Q&A 모드(커뮤니티 에디션 전용)
일반 모드일반 모드 에서 텍스트 덩어리는 독립적인 블록입니다. 덩어리의 전체 내용을 보려면 전체 화면 아이콘을 클릭하세요.지식 기반의 다른 문서로 빠르게 전환하려면 상단의 문서 제목을 탭하세요.
청크 품질 확인 #
문서 청킹은 지식 기반 애플리케이션의 Q&A 성능에 상당한 영향을 미칩니다. 지식 기반을 애플리케이션에 통합하기 전에 청킹 품질을 수동으로 검토하는 것이 좋습니다.문자 길이, 식별자 또는 자연어 처리 의미 체계를 기반으로 하는 자동화된 청크 방식은 대규모 텍스트 청크의 작업 부하를 크게 줄일 수 있지만, 청크의 품질은 다양한 문서 형식의 텍스트 구조와 의미적 맥락에 따라 달라집니다. 수동 검사 및 수정은 의미 인식에서 기계 청크의 단점을 효과적으로 보완할 수 있습니다.청크 품질을 확인할 때 다음 상황에 주의하세요.
- 너무 짧은 텍스트 덩어리는 의미 손실을 초래합니다.

- 너무 긴 텍스트 청크로 인해 의미적 노이즈가 발생하여 일치 정확도에 영향을 미칩니다.

- 최대 세그먼트 길이 제한을 사용할 때 발생하는 명백한 의미적 잘림으로 인해 강제적인 의미적 잘림이 발생하고 회수 중에 콘텐츠가 누락됩니다.

텍스트 청크 추가 #
지식 기반에 텍스트 청크를 개별적으로 추가할 수 있으며, 청킹 모드에 따라 해당 청크를 추가하는 방법도 달라집니다.
텍스트 청크 추가는 유료 기능입니다. 이 기능을 이용하려면 여기에서 계정을 업그레이드하세요.
- 일반 모드
- 부모-자식 모드
- Q&A 모드(커뮤니티 에디션 전용)
일반 모드청크 목록 페이지에서 청크 추가를 클릭하면 문서에 하나 이상의 사용자 정의 청크를 추가할 수 있습니다.텍스트 청크를 수동으로 추가할 때 주요 콘텐츠와 키워드를 모두 추가할 수 있습니다. 콘텐츠를 입력한 후 하단의 “다른 콘텐츠 추가” 체크박스를 선택하면 더 많은 텍스트 청크를 원활하게 추가할 수 있습니다.
대량으로 청크를 추가하려면 먼저 CSV 형식의 업로드 템플릿을 다운로드하고 템플릿 형식에 따라 Excel에서 모든 청크 내용을 편집한 다음, CSV 파일을 저장하고 업로드해야 합니다.
텍스트 청크 편집 #
- 일반 모드
- 부모-자식 모드
- Q&A 모드(커뮤니티 에디션 전용)
일반 모드추가된 청크 콘텐츠를 직접 편집하거나 수정할 수 있으며, 청크 내의 텍스트 콘텐츠나 키워드를 수정할 수도 있습니다.중복 편집을 방지하기 위해 콘텐츠 청크가 수정된 후에는 “편집됨” 태그가 표시됩니다.
업로드된 문서의 텍스트 청크 수정 #
지식 기반은 문서 세분화 재구성을 지원합니다.더 큰 덩어리
- 각 청크 내에서 더 많은 맥락을 유지하므로 텍스트에 대한 더 폭넓은 이해가 필요한 작업에 이상적입니다.
- 청크의 총 개수를 줄여 처리 시간과 저장 오버헤드를 줄입니다.
더 작은 덩어리
- 더욱 세부적인 정보를 제공하여 추출이나 요약과 같은 작업의 정확도를 향상시킵니다.
- 모델 토큰 한도를 초과할 위험을 줄여 제약 조건이 엄격한 모델의 안전성을 높입니다.
청크 설정 으로 이동하여 설정을 조정한 후 ‘ 저장 및 처리’를 클릭하여 변경 사항을 저장하고 문서를 다시 처리합니다. 처리가 완료되면 청크 목록이 자동으로 업데이트되므로 페이지를 새로 고칠 필요가 없습니다.


API를 통한 지식 기반 유지 #
Dify 지식 베이스는 포괄적인 표준 API 세트를 제공합니다. 개발자는 이러한 API를 사용하여 문서 및 청크 추가, 삭제, 업데이트, 검색과 같은 일상적인 관리 및 유지 관리 작업을 수행할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.
지식 기반 API 활용의 장점 #
지식 기반 유지 관리에 API를 활용하면 데이터 처리 효율성이 크게 향상됩니다. 명령줄 인터페이스를 통해 원활한 데이터 동기화가 가능해져 사용자 인터페이스를 조작하는 대신 자동화된 작업이 가능해집니다.주요 장점은 다음과 같습니다.
- 자동 동기화: 데이터 시스템과 Dify 지식 기반 간의 원활한 통합을 지원하여 효율적인 워크플로 구성을 촉진합니다.
- 종합적 관리: 지식 기반 목록, 문서 열거, 상세 쿼리와 같은 기능을 제공하여 맞춤형 데이터 관리 인터페이스 개발을 용이하게 합니다.
- 유연한 콘텐츠 수집: 일반 텍스트와 파일 업로드 방법을 모두 수용하여 콘텐츠 청크의 추가 및 수정을 위한 일괄 작업을 지원합니다.
- 생산성 향상: 수동 데이터 처리 요구 사항을 최소화하여 Dify 플랫폼에서 전반적인 사용자 경험을 최적화합니다.
사용 방법 #
지식 기반 페이지로 이동하면 왼쪽 탐색 메뉴에서 API 액세스 페이지로 전환할 수 있습니다. 이 페이지에서 Dify에서 제공하는 데이터세트 API 문서를 확인하고 API 키 에서 데이터세트 API 액세스에 필요한 자격 증명을 관리할 수 있습니다 .

API 요청 예제 #
텍스트로 문서 만들기 #
이 API는 기존의 지식을 기반으로 하며, 이 지식을 기반으로 텍스트를 통해 새 문서를 만듭니다.
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_text' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "text","text": "text","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}'
응답 예:
{
"document": {
"id": "",
"position": 1,
"data_source_type": "upload_file",
"data_source_info": {
"upload_file_id": ""
},
"dataset_process_rule_id": "",
"name": "text.txt",
"created_from": "api",
"created_by": "",
"created_at": 1695690280,
"tokens": 0,
"indexing_status": "waiting",
"error": null,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"archived": false,
"display_status": "queuing",
"word_count": 0,
"hit_count": 0,
"doc_form": "text_model"
},
"batch": ""
}
파일에서 문서 만들기 #
이 API는 기존 지식을 기반으로 하며 이 지식을 기반으로 파일을 통해 새 문서를 만듭니다.
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create-by-file' \
--header 'Authorization: Bearer {api_key}' \
--form 'data="{"indexing_technique":"high_quality","process_rule":{"rules":{"pre_processing_rules":[{"id":"remove_extra_spaces","enabled":true},{"id":"remove_urls_emails","enabled":true}],"segmentation":{"separator":"###","max_tokens":500}},"mode":"custom"}}";type=text/plain' \
--form 'file=@"/path/to/file"'
{
"document": {
"id": "",
"position": 1,
"data_source_type": "upload_file",
"data_source_info": {
"upload_file_id": ""
},
"dataset_process_rule_id": "",
"name": "Dify.txt",
"created_from": "api",
"created_by": "",
"created_at": 1695308667,
"tokens": 0,
"indexing_status": "waiting",
"error": null,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"archived": false,
"display_status": "queuing",
"word_count": 0,
"hit_count": 0,
"doc_form": "text_model"
},
"batch": ""
}
파일에서 문서 만들기 #
이 API는 기존 지식을 기반으로 하며, 이 지식을 기반으로 하는 파일을 통해 새 문서를 만듭니다.
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/document/create-by-file' \
--header 'Authorization: Bearer {api_key}' \
--form 'data="{"indexing_technique":"high_quality","process_rule":{"rules":{"pre_processing_rules":[{"id":"remove_extra_spaces","enabled":true},{"id":"remove_urls_emails","enabled":true}],"segmentation":{"separator":"###","max_tokens":500}},"mode":"custom"}}";type=text/plain' \
--form 'file=@"/path/to/file"'
응답 예:
{
"document": {
"id": "",
"position": 1,
"data_source_type": "upload_file",
"data_source_info": {
"upload_file_id": ""
},
"dataset_process_rule_id": "",
"name": "Dify.txt",
"created_from": "api",
"created_by": "",
"created_at": 1695308667,
"tokens": 0,
"indexing_status": "waiting",
"error": null,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"archived": false,
"display_status": "queuing",
"word_count": 0,
"hit_count": 0,
"doc_form": "text_model"
},
"batch": ""
}
빈 지식 기반 만들기 #
빈 지식 기반을 만드는 데에만 사용됩니다.
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "name", "permission": "only_me"}'
응답 예:
{
"id": "",
"name": "name",
"description": null,
"provider": "vendor",
"permission": "only_me",
"data_source_type": null,
"indexing_technique": null,
"app_count": 0,
"document_count": 0,
"word_count": 0,
"created_by": "",
"created_at": 1695636173,
"updated_by": "",
"updated_at": 1695636173,
"embedding_model": null,
"embedding_model_provider": null,
"embedding_available": null
}
지식 기반 목록 가져오기 #
요청 예:
curl --location --request GET 'https://api.dify.ai/v1/datasets?page=1&limit=20' \
--header 'Authorization: Bearer {api_key}'
응답 예:
{
"data": [
{
"id": "",
"name": "name",
"description": "desc",
"permission": "only_me",
"data_source_type": "upload_file",
"indexing_technique": "",
"app_count": 2,
"document_count": 10,
"word_count": 1200,
"created_by": "",
"created_at": "",
"updated_by": "",
"updated_at": ""
},
...
],
"has_more": true,
"limit": 20,
"total": 50,
"page": 1
}
지식 기반 삭제 #
요청 예:
curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}' \
--header 'Authorization: Bearer {api_key}'
응답 예:
204 No Content
텍스트로 문서 업데이트 #
이 API는 기존 지식을 기반으로 하며 이 지식을 기반으로 텍스트를 통해 문서를 업데이트합니다.
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/update_by_text' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{"name": "name","text": "text"}'
응답 예:
{
"document": {
"id": "",
"position": 1,
"data_source_type": "upload_file",
"data_source_info": {
"upload_file_id": ""
},
"dataset_process_rule_id": "",
"name": "name.txt",
"created_from": "api",
"created_by": "",
"created_at": 1695308667,
"tokens": 0,
"indexing_status": "waiting",
"error": null,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"archived": false,
"display_status": "queuing",
"word_count": 0,
"hit_count": 0,
"doc_form": "text_model"
},
"batch": ""
}
파일로 문서 업데이트 #
이 API는 기존 지식을 기반으로 하며, 이 지식을 기반으로 하는 파일을 통해 문서를 업데이트합니다.
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/update-by-file' \
--header 'Authorization: Bearer {api_key}' \
--form 'data="{"name":"Dify","indexing_technique":"high_quality","process_rule":{"rules":{"pre_processing_rules":[{"id":"remove_extra_spaces","enabled":true},{"id":"remove_urls_emails","enabled":true}],"segmentation":{"separator":"###","max_tokens":500}},"mode":"custom"}}";type=text/plain' \
--form 'file=@"/path/to/file"'
응답 예:
{
"document": {
"id": "",
"position": 1,
"data_source_type": "upload_file",
"data_source_info": {
"upload_file_id": ""
},
"dataset_process_rule_id": "",
"name": "Dify.txt",
"created_from": "api",
"created_by": "",
"created_at": 1695308667,
"tokens": 0,
"indexing_status": "waiting",
"error": null,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"archived": false,
"display_status": "queuing",
"word_count": 0,
"hit_count": 0,
"doc_form": "text_model"
},
"batch": "20230921150427533684"
}
문서 삽입 상태 가져오기(진행률) #
요청 예:
curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{batch}/indexing-status' \
--header 'Authorization: Bearer {api_key}'
응답 예:
{
"data":[{
"id": "",
"indexing_status": "indexing",
"processing_started_at": 1681623462.0,
"parsing_completed_at": 1681623462.0,
"cleaning_completed_at": 1681623462.0,
"splitting_completed_at": 1681623462.0,
"completed_at": null,
"paused_at": null,
"error": null,
"stopped_at": null,
"completed_segments": 24,
"total_segments": 100
}]
}
문서 삭제 #
요청 예:
curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}' \
--header 'Authorization: Bearer {api_key}'
응답 예:
{
"result": "success"
}
지식 기반의 문서 목록 가져오기 #
요청 예:
curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents' \
--header 'Authorization: Bearer {api_key}'
응답 예:
{
"data": [
{
"id": "",
"position": 1,
"data_source_type": "file_upload",
"data_source_info": null,
"dataset_process_rule_id": null,
"name": "dify",
"created_from": "",
"created_by": "",
"created_at": 1681623639,
"tokens": 0,
"indexing_status": "waiting",
"error": null,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"archived": false
},
],
"has_more": false,
"limit": 20,
"total": 9,
"page": 1
}
문서에 청크 추가 #
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json' \
--data-raw '{"segments": [{"content": "1","answer": "1","keywords": ["a"]}]}'
응답 예:
{
"data": [{
"id": "",
"position": 1,
"document_id": "",
"content": "1",
"answer": "1",
"word_count": 25,
"tokens": 0,
"keywords": [
"a"
],
"index_node_id": "",
"index_node_hash": "",
"hit_count": 0,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"status": "completed",
"created_by": "",
"created_at": 1695312007,
"indexing_at": 1695312007,
"completed_at": 1695312007,
"error": null,
"stopped_at": null
}],
"doc_form": "text_model"
}
문서에서 청크 가져오기 #
요청 예:
curl --location --request GET 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json'
응답 예:
{
"data": [{
"id": "",
"position": 1,
"document_id": "",
"content": "1",
"answer": "1",
"word_count": 25,
"tokens": 0,
"keywords": [
"a"
],
"index_node_id": "",
"index_node_hash": "",
"hit_count": 0,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"status": "completed",
"created_by": "",
"created_at": 1695312007,
"indexing_at": 1695312007,
"completed_at": 1695312007,
"error": null,
"stopped_at": null
}],
"doc_form": "text_model"
}
문서에서 청크 삭제 #
요청 예:
curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json'
응답 예:
{
"result": "success"
}
문서의 청크 업데이트 #
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/segments/{segment_id}' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json'\
--data-raw '{"segment": {"content": "1","answer": "1", "keywords": ["a"], "enabled": false}}'
응답 예:
{
"data": [{
"id": "",
"position": 1,
"document_id": "",
"content": "1",
"answer": "1",
"word_count": 25,
"tokens": 0,
"keywords": [
"a"
],
"index_node_id": "",
"index_node_hash": "",
"hit_count": 0,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"status": "completed",
"created_by": "",
"created_at": 1695312007,
"indexing_at": 1695312007,
"completed_at": 1695312007,
"error": null,
"stopped_at": null
}],
"doc_form": "text_model"
}
지식 기반에서 청크 검색 #
요청 예:
curl --location --request POST 'https://api.dify.ai/v1/datasets/{dataset_id}/retrieve' \
--header 'Authorization: Bearer {api_key}'\
--header 'Content-Type: application/json'\
--data-raw '{
"query": "test",
"retrieval_model": {
"search_method": "keyword_search",
"reranking_enable": false,
"reranking_mode": null,
"reranking_model": {
"reranking_provider_name": "",
"reranking_model_name": ""
},
"weights": null,
"top_k": 1,
"score_threshold_enabled": false,
"score_threshold": null
}
}'
응답 예:
{
"query": {
"content": "test"
},
"records": [
{
"segment": {
"id": "7fa6f24f-8679-48b3-bc9d-bdf28d73f218",
"position": 1,
"document_id": "a8c6c36f-9f5d-4d7a-8472-f5d7b75d71d2",
"content": "Operation guide",
"answer": null,
"word_count": 847,
"tokens": 280,
"keywords": [
"install",
"java",
"base",
"scripts",
"jdk",
"manual",
"internal",
"opens",
"add",
"vmoptions"
],
"index_node_id": "39dd8443-d960-45a8-bb46-7275ad7fbc8e",
"index_node_hash": "0189157697b3c6a418ccf8264a09699f25858975578f3467c76d6bfc94df1d73",
"hit_count": 0,
"enabled": true,
"disabled_at": null,
"disabled_by": null,
"status": "completed",
"created_by": "dbcb1ab5-90c8-41a7-8b78-73b235eb6f6f",
"created_at": 1728734540,
"indexing_at": 1728734552,
"completed_at": 1728734584,
"error": null,
"stopped_at": null,
"document": {
"id": "a8c6c36f-9f5d-4d7a-8472-f5d7b75d71d2",
"data_source_type": "upload_file",
"name": "readme.txt",
"doc_type": null
}
},
"score": 3.730463140527718e-05,
"tsne_position": null
}
]
}
지식 기반에 메타데이터 필드 추가 #
요청 예:
curl --location 'https://api.dify.ai/v1/datasets/{dataset_id}/metadata' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {api_key}' \
--data '{
"type":"string",
"name":"test"
}'
응답 예:
{
"id": "9f63c91b-d60e-4142-bb0c-c81a54dc2db5",
"type": "string",
"name": "test"
}
지식 기반의 메타데이터 필드 업데이트 #
요청 예:
curl --location --request PATCH 'https://api.dify.ai/v1/datasets/{dataset_id}/metadata/{metadata_id}' \
--header 'Authorization: Bearer {api_key}' \
--header 'Content-Type: application/json'\
--data-raw '{"name": "test"}'
응답 예:
{
"id": "abc",
"type": "string",
"name": "test",
}
지식 기반에서 메타데이터 필드 삭제 #
요청 예:
curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/metadata/{metadata_id}' \
--header 'Authorization: Bearer {api_key}'
응답 예:
200 success
지식 기반에서 기본 제공 필드 활성화/비활성화 #
요청 예:
curl --location --request DELETE 'https://api.dify.ai/v1/datasets/{dataset_id}/metadata/built-in/{action}' \
--header 'Authorization: Bearer {api_key}'
응답 예:
200 success
단일 문서의 메타데이터 수정(할당) #
요청 예:
curl --location 'https://api.dify.ai/v1/datasets/{dataset_id}/documents/metadata' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {api_key}'
--data '{
"operation_data":[
{
"document_id": "3e928bc4-65ea-4201-87c8-cbcc5871f525",
"metadata_list": [
{
"id": "1887f5ec-966f-4c93-8c99-5ad386022f46",
"value": "dify",
"name": "test"
}
]
}
]
}'
응답 예:
200 success
데이터 세트의 메타데이터 목록 #
요청 예:
curl --location 'https://api.dify.ai/v1/datasets/{dataset_id}/metadata' \
--header 'Authorization: Bearer {api_key}'
응답 예:
{
"doc_metadata": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"type": "string",
"name": "title",
"use_count": 42
},
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"type": "number",
"name": "price",
"use_count": 28
},
{
"id": "7ba7b810-9dad-11d1-80b4-00c04fd430c9",
"type": "time",
"name": "created_at",
"use_count": 35
}
],
"built_in_field_enabled": true
}
오류 메시지 #
응답 예:
{
"code": "no_file_uploaded",
"message": "Please upload your file.",
"status": 400
}
암호 | 상태 | 메시지 |
---|---|---|
파일 업로드 안됨 | 400 | 파일을 업로드해 주세요. |
너무 많은 파일 | 400 | 파일은 하나만 허용됩니다. |
파일이 너무 큽니다 | 413 | 파일 크기가 초과되었습니다. |
지원되지 않는 파일 유형 | 415 | 허용되지 않는 파일 형식입니다. 지원되는 형식: txt, markdown, md, pdf, html, html, xlsx, docx, csv |
고품질 데이터세트 전용 | 400 | 현재 작업에서는 ‘고품질’ 데이터 세트만 지원합니다. |
데이터 세트가 초기화되지 않음 | 400 | 데이터세트가 아직 초기화 또는 인덱싱 중입니다. 잠시만 기다려 주세요. |
변경 불가능한 보관된 문서 | 403 | 보관된 문서는 편집할 수 없습니다. |
데이터 세트 이름 중복 | 409 | 데이터 세트 이름이 이미 존재합니다. 데이터 세트 이름을 수정하세요. |
무효한 작업 | 400 | 잘못된 작업입니다. |
문서가 이미 완료됨 | 400 | 문서가 처리되었습니다. 페이지를 새로 고치거나 문서 세부정보로 이동하세요. |
문서 인덱싱 | 400 | 문서가 처리 중이므로 편집할 수 없습니다. |
잘못된 메타데이터 | 400 | 메타데이터 내용이 잘못되었습니다. 확인 및 검증해 주세요. |
메타데이터 #
페이지 복사
메타데이터란 무엇인가요? #
개요 #
메타데이터는 데이터를 설명하는 정보, 즉 “데이터에 대한 데이터”입니다. 책에 목차가 있어 구조를 이해하는 데 도움이 되는 것처럼, 메타데이터는 데이터의 내용, 출처, 목적 등에 대한 맥락을 제공하여 지식 기반에서 정보를 더 쉽게 찾고 관리할 수 있도록 도와줍니다.이 가이드는 메타데이터를 이해하고 지식 기반을 효과적으로 관리하는 데 도움을 주는 것을 목표로 합니다.
핵심 개념 #
- 필드: 메타데이터 필드의 레이블(예: “작성자”, “언어”)입니다.
- 값: 메타데이터 필드에 저장된 정보(예: “Jack”, “English”)
- 값 개수: 중복을 포함하여 메타데이터 필드에 포함된 값의 개수입니다(예: “3”).
- 값 유형: 필드에 포함될 수 있는 값의 유형입니다.
- Dify는 세 가지 값 유형을 지원합니다.
- 문자열: 텍스트 기반 정보용
- 숫자: 숫자형 데이터의 경우
- 시간: 날짜/타임스탬프용
- Dify는 세 가지 값 유형을 지원합니다.
메타데이터를 어떻게 관리하나요? #
지식 기반에서 메타데이터 필드 관리 #
지식 기반에서 메타데이터 필드를 만들고, 수정하고, 삭제할 수 있습니다.
여기에서 메타데이터 필드를 변경하면 해당 지식 기반 전체에 영향을 미칩니다.
메타데이터 패널 시작하기 #
메타데이터 패널에 액세스메타데이터 패널에 액세스하려면 지식 기반 페이지 로 이동하여 메타데이터를 클릭하세요 .기본 제공 메타데이터 대 사용자 지정 메타데이터
내장된 메타데이터 | 사용자 정의 메타데이터 | |
---|---|---|
위치 | 메타데이터 패널의 하단 섹션 | 메타데이터 패널의 상단 섹션 |
활성화 | 기본적으로 비활성화되어 있습니다. 수동 활성화가 필요합니다. | 필요에 따라 추가하세요 |
세대 | 시스템은 자동으로 필드 값을 추출하고 생성합니다. | 사용자 정의 및 수동 추가 |
편집 중 | 필드와 값은 생성된 후에는 수정할 수 없습니다. | 필드와 값을 편집하거나 삭제할 수 있습니다. |
범위 | 활성화 시 모든 기존 문서와 새 문서에 적용됩니다. | 메타데이터 목록에 저장됨; 문서에 대한 수동 할당이 필요함 |
전지 | 시스템 정의 필드는 다음과 같습니다.문서 이름(문자열)업로더(문자열)업로드_날짜(시간)마지막 업데이트 날짜(시간)소스(문자열) | 기본 필드가 없습니다. 모든 필드는 수동으로 생성해야 합니다. |
값 유형 | 문자열: 텍스트 값의 경우숫자: 숫자 값의 경우시간: 날짜 및 타임스탬프 | 문자열: 텍스트 값의 경우숫자: 숫자 값의 경우시간: 날짜 및 타임스탬프 |
새 메타데이터 필드 만들기 #
새로운 메타데이터 필드를 생성하려면:
- +메타데이터 추가를 클릭하여 새 메타데이터 대화 상자 를 엽니다 .
- 값 유형을 선택하세요.
- 필드의 이름을 지정합니다.
명명 규칙: 소문자, 숫자, 밑줄만 사용하세요.
- 변경 사항을 적용하려면 ‘저장’을 클릭하세요 .
메타데이터 필드 편집 #
메타데이터 필드를 편집하려면:
- 필드 옆에 있는 편집 아이콘을 클릭하면 이름 바꾸기 대화 상자가 열립니다.
- 이름 필드 에 새 이름을 입력합니다 .
참고: 필드 이름만 수정할 수 있고 값 유형은 수정할 수 없습니다.
- 변경 사항을 적용하려면 ‘저장’을 클릭하세요 .
참고: 필드 변경 사항은 지식 기반의 모든 관련 문서에 업데이트됩니다.
메타데이터 필드 삭제 #
메타데이터 필드를 삭제하려면 해당 필드 옆에 있는 삭제 아이콘을 클릭하여 삭제합니다.
참고: 필드를 삭제하면 해당 필드와 해당 필드의 모든 값이 지식 기반의 모든 문서에서 삭제됩니다.
메타데이터 편집 #
메타데이터 편집기에서 메타데이터 대량 편집 #
지식 기반에서 메타데이터를 대량으로 편집할 수 있습니다.메타데이터 편집기에 액세스메타데이터 편집기에 액세스하려면:
- 지식 기반에서 왼쪽에 있는 확인란을 사용하여 문서를 선택하세요.
- 하단 작업 표시줄에서 메타데이터를 클릭하여 메타데이터 편집기를 엽니다.
대량 메타데이터 추가대량으로 메타데이터를 추가하려면:
- 편집기에서 +메타데이터 추가를 클릭하면 다음을 수행할 수 있습니다.
- 드롭다운이나 검색창에서 기존 필드를 추가합니다.
- +새 메타데이터를 통해 새로운 필드를 만듭니다 .새로운 필드는 자동으로 지식 기반에 추가됩니다.
- 관리를 통해 메타데이터 패널에 접근하여 메타데이터 필드를 관리합니다 .
- (선택 사항) 새 필드에 대한 값을 입력합니다.
날짜 선택기는 시간 유형 필드를 위한 것입니다.
- 변경 사항을 적용하려면 ‘저장’을 클릭하세요 .
대량 업데이트 메타데이터대량으로 메타데이터를 업데이트하려면:
- 편집기에서:
- 값 추가: 필드 상자에 직접 입력하세요.
- 값 재설정: 마우스를 올려 놓았을 때 나타나는 파란색 점을 클릭하세요.
- 값 삭제: 필드를 지우거나 다중 값 카드를 삭제합니다.
- 필드 삭제: 삭제 아이콘을 클릭합니다(필드는 취소선이 그어져 회색으로 표시됩니다).참고: 이렇게 하면 해당 문서에서만 필드가 삭제되고, 지식 기반에서는 삭제되지 않습니다.
- 변경 사항을 적용하려면 ‘저장’을 클릭하세요 .
업데이트 범위 설정변경 사항을 제어하려면 모든 문서에 적용을 사용하세요 .
- 선택 안 함(기본값) : 해당 필드가 이미 있는 문서만 업데이트합니다.
- 선택됨 : 선택한 모든 문서에서 필드를 추가하거나 업데이트합니다.
문서 세부 정보 페이지에서 메타데이터 편집 #
단일 문서의 메타데이터는 해당 세부 정보 페이지에서 편집할 수 있습니다.메타데이터 편집 모드에 액세스단일 문서의 메타데이터를 편집하려면:문서 세부 정보 페이지에서 레이블 지정 시작을 클릭하여 편집을 시작합니다.메타데이터 추가단일 문서의 메타데이터 필드와 값을 추가하려면:
- +메타데이터 추가를 클릭하세요 .
- +새 메타데이터를 통해 새로운 필드를 만듭니다 .
새로운 필드는 자동으로 지식 기반에 추가됩니다.
- 드롭다운이나 검색창에서 기존 필드를 추가합니다.
- 관리를 통해 메타데이터 패널에 액세스합니다 .
- (선택 사항) 새 필드에 대한 값을 입력합니다.
- 변경 사항을 적용하려면 ‘저장’을 클릭하세요 .
메타데이터 편집단일 문서의 메타데이터 필드와 값을 업데이트하려면:
- 오른쪽 상단의 ‘편집’을 클릭하여 편집을 시작하세요.
- 메타데이터 편집:
- 값 업데이트: 값 필드에 직접 입력하거나 삭제합니다.
- 필드 삭제: 삭제 아이콘을 클릭하세요.
- 변경 사항을 적용하려면 ‘저장’을 클릭하세요 .
#
자주 묻는 질문 #
- 메타데이터로 무엇을 할 수 있나요?
- 스마트 필터링으로 더 빠르게 정보를 찾으세요.
- 민감한 콘텐츠에 대한 액세스를 제어합니다.
- 데이터를 더 효과적으로 구성하세요.
- 메타데이터 규칙에 따라 워크플로를 자동화합니다.
- 필드와 값: 차이점은 무엇인가요?
정의 | 형질 | 예시 | |
---|---|---|---|
메타데이터 패널의 메타데이터 필드 | 문서 속성을 설명하는 시스템 정의 속성 | 지식 기반의 모든 문서에서 접근 가능한 글로벌 필드 | 저자, 유형, 날짜 등 |
문서 세부 정보 페이지의 메타데이터 값 | 개별 문서 요구 사항에 따라 태그가 지정된 사용자 정의 메타데이터 | 문서 내용 및 컨텍스트에 따라 할당된 고유한 메타데이터 값 | 문서 A의 “작성자” 필드는 “Mary” 값으로 설정되고, 문서 B에서는 “John” 값으로 설정됩니다. |
- 다양한 삭제 옵션은 어떻게 작동하나요?
행동 | 단계 | 영향 | 결과 |
---|---|---|---|
메타데이터 패널에서 필드 삭제 | 메타데이터 패널에서 필드 옆에 있는 삭제 아이콘을 클릭합니다. | 글로벌 – 모든 문서에 영향을 미칩니다. | 필드와 모든 값이 지식 기반에서 영구적으로 삭제됨 |
메타데이터 편집기에서 필드 삭제 | 메타데이터 편집기에서 필드 옆에 있는 삭제 아이콘을 클릭합니다. | 선택된 문서만 | 선택한 문서에서 필드가 삭제되었습니다. 지식 기반에는 그대로 남아 있습니다. |
문서 세부 정보 페이지에서 필드 삭제 | 편집 모드에서 필드 옆에 있는 삭제 아이콘을 클릭하세요. | 현재 문서만 | 현재 문서에서 필드가 삭제되었습니다. 지식 기반에는 그대로 남아 있습니다. |
애플리케이션 내 지식 기반 통합 #
지식 기반과 통합된 애플리케이션 만들기 #
“지식 기반” 은 LLM을 통해 사용자 질문에 대한 정확한 답변을 제공하는 외부 정보 소스로 활용될 수 있습니다. Dify에서는 기존 지식 기반을 모든 유형의 애플리케이션 과 연결할 수 있습니다.채팅 도우미를 예로 들면, 그 과정은 다음과 같습니다.
- 지식 으로 이동 – 지식 생성 – 파일 업로드
- Studio 로 이동 – 애플리케이션 만들기 – 챗봇 선택
- 컨텍스트를 입력하고 추가를 클릭한 후 생성된 지식 기반 중 하나를 선택합니다.
- 지식 기반에서 문서 검색을 세분화하려면 메타데이터 필터링을 사용하세요 .
- 컨텍스트 설정 – 검색 설정 에서 검색 설정을 구성합니다.
- 기능 추가 에서 인용 및 귀속 활성화
- 디버그 및 미리보기 에서 디버깅을 위한 지식 기반과 관련된 사용자 질문을 입력합니다.
- 디버깅 후, 게시 버튼을 클릭하면 여러분의 지식을 바탕으로 AI 애플리케이션을 만들 수 있습니다!
지식 연결 및 검색 모드 설정 #
여러 지식 기반을 활용하는 애플리케이션에서는 검색된 콘텐츠의 정확도를 높이기 위해 검색 모드를 구성하는 것이 필수적입니다. 지식 기반 검색 모드를 설정하려면 컨텍스트 – 검색 설정 – 순위 재지정 설정 으로 이동하세요 .
검색 설정 #
검색기는 애플리케이션에 연결된 모든 지식 베이스를 검색하여 사용자 질문과 관련된 텍스트 콘텐츠를 찾습니다. 검색 결과는 통합됩니다. 다중 경로 검색 모드의 기술 흐름도는 다음과 같습니다.이 방법은 “Context” 에 연결된 모든 지식 기반을 동시에 쿼리하여 여러 지식 기반에서 관련 텍스트 덩어리를 찾고, 사용자 질문과 일치하는 모든 콘텐츠를 수집한 후, 궁극적으로 Rerank 전략을 적용하여 사용자에게 가장 적합한 콘텐츠를 식별합니다. 이 검색 방식은 여러 지식 기반을 동시에 활용하여 더욱 포괄적이고 정확한 결과를 제공합니다.
예를 들어, 세 개의 지식 베이스 K1, K2, K3가 있는 애플리케이션 A에서 사용자가 질문을 보내면 관련 콘텐츠 여러 개가 검색되어 이 지식 베이스에서 결합됩니다. 가장 관련성 높은 콘텐츠를 식별하기 위해 Rerank 전략을 사용하여 사용자 질의와 가장 관련성이 높은 콘텐츠를 찾아 결과의 정확도와 신뢰성을 높입니다.실제 Q&A 시나리오에서는 각 지식 베이스의 콘텐츠 출처와 검색 방법이 다를 수 있습니다. 검색에서 반환된 혼합 콘텐츠를 관리하기 위해 Rerank 전략은 정교한 정렬 메커니즘 역할을 합니다. 이 전략은 후보 콘텐츠가 사용자 질문과 잘 일치하도록 보장하고, 여러 지식 베이스에서 결과 순위를 최적화하여 가장 적합한 콘텐츠를 식별함으로써 답변 품질과 전반적인 사용자 경험을 향상시킵니다.Rerank 사용과 관련된 비용과 비즈니스 요구 사항을 고려하여 다중 경로 검색 모드는 두 가지 Rerank 설정을 제공합니다.가중 점수이 설정은 내부 채점 메커니즘을 사용하며 외부 Rerank 모델을 필요로 하지 않으므로 추가 처리 비용이 발생하지 않습니다 . 의미론 또는 키워드에 대한 가중치 비율 슬라이더를 조정하여 가장 적합한 콘텐츠 매칭 전략을 선택할 수 있습니다.
- 의미적 값 1 이 모드는 의미적 검색만 활성화합니다. 임베딩 모델을 활용하면 질의어의 정확한 단어가 지식 베이스에 나타나지 않더라도 관련 콘텐츠를 반환하기 위해 벡터 거리를 계산하므로 검색 심도를 향상시킬 수 있습니다. 또한, 다국어 콘텐츠를 처리할 때 의미적 검색은 여러 언어의 의미를 포착하여 더욱 정확한 교차 언어 검색 결과를 제공합니다.
- 키워드 값 1 이 모드는 키워드 검색만 활성화합니다. 사용자 입력 텍스트를 지식 베이스의 전체 텍스트와 대조하므로 사용자가 정확한 정보나 용어를 알고 있는 경우에 적합합니다. 이 방법은 리소스 효율성이 뛰어나 대규모 문서 저장소에서 정보를 빠르게 검색하는 데 적합합니다.
- 맞춤 키워드 및 의미론적 가중치 설정 의미론적 또는 키워드 검색 모드만 활성화하는 것 외에도, 유연한 맞춤 가중치 점수를 제공합니다. 두 모드의 가중치를 지속적으로 조정하여 비즈니스 상황에 가장 적합한 가중치 비율을 결정할 수 있습니다.
재순위 모델Rerank 모델은 사용자의 질문과 제공된 각 후보 문서 간의 관련성 점수를 계산하는 외부 채점 시스템으로, 의미 순위의 결과를 개선하고 관련성을 기준으로 높은 순서에서 낮은 순서로 정렬된 문서 목록을 반환합니다.이 방법은 약간의 추가 비용이 발생하지만 의미적 쿼리와 키워드 일치를 결합한 콘텐츠나 다국어로 반환된 콘텐츠와 같은 복잡한 지식 기반 콘텐츠를 처리하는 데 더 적합합니다.
Dify는 현재 여러 Rerank 모델을 지원합니다. 외부 Rerank 모델을 사용하려면 API 키를 제공해야 합니다. “모델 제공자” 페이지에 Rerank 모델(예: Cohere, Jina AI 등)의 API 키를 입력하세요.조정 가능한 매개변수
- TopK : 사용자 질의와 가장 유사하다고 판단되는 텍스트 청크를 얼마나 많이 검색할지 결정합니다. 또한 선택한 모델의 컨텍스트 창에 따라 청크 수를 자동으로 조정합니다. 기본값은 3 이며 , 숫자가 높을수록 더 많은 텍스트 청크를 검색합니다.
- 점수 임계값 : 청크를 검색하는 데 필요한 최소 유사도 점수를 설정합니다. 이 점수를 초과하는 청크만 검색됩니다. 기본값은 0.5 입니다 . 임계값이 높을수록 더 높은 유사도가 요구되므로 검색되는 청크 수가 줄어듭니다.
메타데이터 필터링 #
챗플로우/워크플로우 #
지식 검색 노드를 사용하면 메타데이터 필드를 사용하여 문서를 필터링할 수 있습니다.
단계 #
- 필터 모드 선택:
- 비활성화(기본값): 메타데이터 필터링이 없습니다.
- 자동: 지식 검색 노드 의 쿼리 변수에서 필터가 자동으로 구성됩니다 .
- 수동: 필터를 수동으로 구성합니다.
- 수동 모드의 경우 다음 단계를 따르세요.
- 조건을 클릭하여 구성 패널을 엽니다.
- +조건 추가를 클릭하세요 .
- 드롭다운 목록에서 선택한 지식 기반 내의 메타데이터 필드를 선택합니다.
- 특정 분야를 찾으려면 검색창을 사용하세요.
- 더 많은 필드를 추가하려면 +조건 추가를 클릭하세요 .
- 필터 조건
필드 유형 | 연산자 | 설명 및 예 |
---|---|---|
문자 | ~이다 | 정확히 일치해야 합니다. 예: is "Published" “게시됨”으로 정확하게 표시된 문서만 반환합니다. |
아니다 | 정확히 일치하는 항목을 제외합니다. 예: is not "Draft" “초안”으로 표시된 문서를 제외한 모든 문서를 반환합니다. | |
비어있다 | 필드에 값이 없는 문서를 반환합니다. | |
비어 있지 않습니다 | 필드에 값이 있는 문서를 반환합니다. | |
포함하다 | 부분 텍스트와 일치합니다. 예: contains "Report" “월간 보고서”, “연간 보고서” 등을 반환합니다. | |
포함하지 않음 | 지정된 텍스트가 포함된 문서를 제외합니다. 예: not contains "Draft" 필드에 “임시보관”이 없는 문서를 반환합니다. | |
~로 시작하다 | 시작 부분에 있는 텍스트와 일치합니다. 예: starts with "Doc" “Doc1”, “Document” 등을 반환합니다. | |
~로 끝납니다 | 끝에 있는 텍스트와 일치합니다. 예: ends with "2024" “Report 2024”, “Summary 2024” 등을 반환합니다. | |
숫자 | = | 정확한 숫자 일치. 예: = 10 정확히 10으로 표시된 문서를 반환합니다. |
≠ | 특정 숫자를 제외합니다. 예: ≠ 5 5로 표시된 문서를 제외한 모든 문서를 반환합니다. | |
> | 보다 큼. 예: > 100 100보다 큰 값을 가진 문서를 반환합니다. | |
< | 미만. 예: < 50 값이 50 미만인 문서를 반환합니다. | |
≥ | 크거나 같음. 예: ≥ 20 값이 20 이상인 문서를 반환합니다. | |
≤ | 작거나 같음. 예: ≤ 200 값이 200 이하인 문서를 반환합니다. | |
비어있다 | 필드에 값이 지정되지 않았습니다. 예를 들어, is empty 이 필드에 번호가 지정되지 않은 모든 문서를 반환합니다. | |
비어 있지 않습니다 | 필드에 값이 할당되어 있습니다. 예를 들어, is not empty 이 필드에 번호가 할당된 모든 문서를 반환합니다. | |
날짜 | ~이다 | 정확한 날짜 일치. 예: is "2024-01-01" 2024년 1월 1일자 문서를 반환합니다. |
~ 전에 | 해당 날짜 이전. 예: before "2024-01-01" 2024년 1월 1일 이전 날짜의 문서를 반환합니다. | |
~ 후에 | 날짜 이후. 예: after "2024-01-01" 2024년 1월 1일 이후의 문서를 반환합니다. | |
비어있다 | 날짜 값이 없는 문서를 반환합니다. | |
비어 있지 않습니다 | 날짜 값을 포함하는 문서를 반환합니다. |
- 필터 값 추가:
- 변수: 기존 Chatflow/Workflow 변수에서 선택합니다.

- 상수: 구체적인 값을 입력하세요.

필터 값은 대소문자를 구분하며 정확한 일치를 요구합니다. 예: 필터 starts with "App"
또는 필터 contains "App"
는 “Apple”과 일치하지만 “apple” 또는 “APPLE”과는 일치하지 않습니다.
- 논리 연산자 설정:
AND
: 모든 조건과 일치OR
: 모든 조건과 일치
- 설정을 저장하려면 패널 바깥쪽을 클릭하세요.
챗봇 #
지식 (왼쪽 하단) 아래에서 메타데이터 필터링에 액세스하세요 . 구성 단계는 Chatflow/Workflow 와 동일합니다 .
지식 기반에서 연결된 애플리케이션 보기 #
지식 베이스 왼쪽에는 연결된 모든 앱이 표시됩니다. 원형 아이콘 위에 마우스를 올리면 연결된 모든 앱 목록이 표시됩니다. 오른쪽의 바로가기 버튼을 클릭하면 빠르게 탐색할 수 있습니다.
자주 묻는 질문 #
- 멀티 리콜 모드에서 Rerank 설정을 어떻게 선택해야 합니까?
사용자가 정확한 정보나 용어를 알고 있다면 키워드 검색을 사용하여 정확한 검색 결과를 얻을 수 있습니다. 이 경우, 가중치 설정에서 “키워드”를 1로 설정하세요.지식 기반에 정확한 용어가 포함되어 있지 않거나 언어 간 쿼리가 포함된 경우 가중치 설정에서 “의미론적”을 1로 설정하는 것이 좋습니다.실제 사용자 쿼리에 익숙하고 의미론과 키워드의 비율을 조정하려는 경우 가중치 설정 에서 비율을 수동으로 조정할 수 있습니다 .지식 기반이 복잡하고 간단한 의미적 또는 키워드 일치만으로는 충분하지 않은 경우(그리고 매우 정확한 답변이 필요하고 더 많은 비용을 지불할 의향이 있는 경우) 콘텐츠 검색을 위해 재순위 모델을 사용하는 것을 고려하세요.
- “가중치 점수”를 찾는 데 문제가 발생하거나 Rerank 모델을 구성해야 하는 경우 어떻게 해야 합니까?
지식 기반 검색 방법이 다중 경로 검색에 영향을 미치는 방식은 다음과 같습니다.
- 여러 지식베이스를 참조할 때 “가중치 점수”를 조정할 수 없고 오류 메시지가 나타나면 어떻게 해야 합니까?
이 문제는 여러 참조된 지식 베이스에 사용된 임베딩 모델이 일치하지 않아 발생하며, 검색 콘텐츠 충돌을 방지하기 위해 이 알림이 표시됩니다. “모델 공급자”에서 Rerank 모델을 설정하고 활성화하거나 지식 베이스의 검색 설정을 통합하는 것이 좋습니다.
- 다중 리콜 모드에서 “가중치 점수” 옵션을 찾을 수 없고, 재순위 모델만 보이는 이유는 무엇입니까?
지식 기반이 “경제적” 색인 모드를 사용하고 있는지 확인해 주세요. 만약 그렇다면 “고품질” 색인 모드로 전환해 주세요.