Home / RAG ํ•ต์‹ฌ ๊ฐœ๋… / ๐ŸŽฏ Knowledge Bases
Module

๐ŸŽฏ Knowledge Bases

๋งค๋‹ˆ์ง€๋“œ RAG โ€” KB 3์ข…, ๊ตฌ์ถ•ยท๋™๊ธฐํ™”, Retrieve API, Gateway ์ปค๋„ฅํ„ฐ

โฑ 40๋ถ„ 38 / 189

Bedrock Knowledge Bases

๊ด€๋ฆฌํ˜• RAG ยท ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ ยท OpenSearch Serverless

ํŒŒ์ดํ”„๋ผ์ธ ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ˜•์œผ๋กœ

RAG ํŒŒ์ดํ”„๋ผ์ธ์˜ ํŒŒ์‹ฑยท์ฒญํ‚นยท์ž„๋ฒ ๋”ฉยท์ธ๋ฑ์‹ฑยท๊ฒ€์ƒ‰์„ ๊ด€๋ฆฌํ˜•์œผ๋กœ

์™œ Knowledge Bases์ธ๊ฐ€

DIY์˜ ๋ฌด๊ฒŒ ยท ๊ด€๋ฆฌํ˜• RAG ยท Knowledge Base 3์ข…

PART 1 ยท ์™œ Knowledge Bases์ธ๊ฐ€

Knowledge Bases

RAG ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ „ ๋‹จ๊ณ„๋ฅผ ๋Œ€์‹  ๋Œ๋ฆฌ๋Š” Bedrock์˜ ๊ด€๋ฆฌํ˜• RAG

Bedrock Knowledge Bases

๋ฌธ์„œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ํŒŒ์‹ฑ โ†’ ์ฒญํ‚น โ†’ ์ž„๋ฒ ๋”ฉ โ†’ ์ธ๋ฑ์‹ฑ โ†’ ๊ฒ€์ƒ‰๊นŒ์ง€ ๊ด€๋ฆฌํ˜•์œผ๋กœ

  • ๋™๊ธฐํ™” ํ•œ ์ค„ โ€” start_ingestion_job
  • ๊ฒ€์ƒ‰ API 2์ข… โ€” Retrieve ยท RetrieveAndGenerate
  • Knowledge Base 3์ข… โ€” Managed ยท Vector Store ยท Structured
  • ๊ฐœ๋ฐœ์ž ๋ชซ โ€” ํŒŒ์‹ฑยท์ฒญํ‚นยท์ž„๋ฒ ๋”ฉยท๋ฒกํ„ฐ ์Šคํ† ์–ด
takeaway

RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ์—์„œ ์ง์ ‘ ๋งŒ๋“ค๋˜ ๊ฒƒ๋“ค์ด ์ „๋ถ€ ์„œ๋น„์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค โ€” ๋‚จ๋Š” ๊ฒฐ์ •์€ ๋ฐ์ดํ„ฐ์™€ ์ „๋žต๋ฟ์ž…๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Knowledge Bases์ธ๊ฐ€

Knowledge Base ์ฒ˜๋ฆฌ ํ๋ฆ„

DIY ํŒŒ์ดํ”„๋ผ์ธ์ด ํ•˜๋˜ ํŒŒ์‹ฑยท์ฒญํ‚นยท์ž„๋ฒ ๋”ฉยท๊ฒ€์ƒ‰ โ€” ์ธ์ œ์ŠคํŠธ ์žก ํ•˜๋‚˜์™€ API ํ˜ธ์ถœ ํ•˜๋‚˜๋กœ





"ํ™˜๋ถˆ ๊ทœ์ •์ด
์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?"

๊ฐ™์€ ์งˆ๋ฌธ โ€”
๋‹ต์€ ์‚ฌ๋‚ด ๋ฌธ์„œ์—๋งŒ


โ†’

Knowledge Base โ€” RAG ์—ฌ์„ฏ ๋‹จ๊ณ„๋ฅผ ๋Œ€์‹  ๋Œ๋ฆฌ๋Š” ๊ด€๋ฆฌํ˜• ๊ตฌ๊ฐ„

์˜คํ”„๋ผ์ธ โ€” start_ingestion_job ์žก ํ•˜๋‚˜๋กœ ์ž๋™
โ‘  ์ธ์ œ์ŠคํŠธโ†’โ‘ก ์ฒญํ‚นโ†’โ‘ข ์ž„๋ฒ ๋”ฉยท์ €์žฅ


์˜จ๋ผ์ธ โ€” RetrieveAndGenerate ํ˜ธ์ถœ ํ•˜๋‚˜๋กœ ์ž๋™
โ‘ฃ ๊ฒ€์ƒ‰โ†’โ‘ค ์ฆ๊ฐ•โ†’โ‘ฅ ์ƒ์„ฑยท Retrieve๋Š” โ‘ฃ๋งŒ โ€” ์ฒญํฌ+score

๊ฐœ๋ฐœ์ž ๋ชซ์€ ์ฒญํ‚น ๋“ฑ ๋„ค ๊ฐ€์ง€ ์ „๋žต ์„ ํƒ๋ฟ

โ†’

"์˜ˆ์•ฝ๊ธˆ์€ ์ด์šฉ์ผ 3์ผ ์ „๊นŒ์ง€ ์ทจ์†Œํ•˜๋ฉด ์ „์•ก ํ™˜๋ถˆ๋ฉ๋‹ˆ๋‹ค"
citations โ€”
restaurant-policy.pdf ์ธ์šฉ ์ฒจ๋ถ€




RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ์˜ ์—ฌ์„ฏ ๋‹จ๊ณ„ ๊ทธ๋Œ€๋กœ โ€” Knowledge Base๊ฐ€ โ‘ ~โ‘ข์€ ์žก ํ•˜๋‚˜, โ‘ฃ~โ‘ฅ์€ ํ˜ธ์ถœ ํ•˜๋‚˜๋กœ ๋Œ€์‹  ๋Œ๋ฆฝ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์‚ฌ๋ผ์ง€๊ณ  ๊ฒฐ์ •๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค


takeaway

๊ฐ™์€ ์งˆ๋ฌธ, ๊ฐ™์€ ๋ฌธ์„œ, ๊ฐ™์€ ๋‹ต โ€” ๋‹ค๋ฅธ ๊ฒƒ์€ ๋ˆ„๊ฐ€ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋Œ๋ฆฌ๋Š”๊ฐ€๋ฟ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ๊ฐ€ ๋ชจ๋“ˆ ๋๊นŒ์ง€ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Knowledge Bases์ธ๊ฐ€

DIY์—์„œ Knowledge Bases๋กœ

์ง์ ‘ ๋งŒ๋“  ํŒŒ์ดํ”„๋ผ์ธ ๊ฐ ๋‹จ๊ณ„์˜ ๊ด€๋ฆฌํ˜• ๋Œ€์‘

์ง์ ‘ ๊ตฌ์ถ• Knowledge Bases
ํŒŒ์‹ฑ pypdf ๋“ฑ ์ง์ ‘ ๊ตฌํ˜„ ์ „๋žต ์„ ํƒ๋งŒ โ€” ์ž๋™ ์ˆ˜ํ–‰
๋ฒกํ„ฐ ์Šคํ† ์–ด ํ”„๋กœ๋น„์ €๋‹ยท์šด์˜ ์ง์ ‘ ์ž๋™ ํ”„๋กœ๋น„์ €๋‹
๋™๊ธฐํ™” Lambda + EventBridge ๊ตฌ์ถ• start_ingestion_job ํ•œ ์ค„
๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ ๋กœ์ง ์ง์ ‘ ๊ตฌํ˜„ Retrieve API ํ˜ธ์ถœ
์šด์˜ ๋ชจ๋‹ˆํ„ฐ๋ง + ์Šค์ผ€์ผ๋ง ์„œ๋ฒ„๋ฆฌ์Šค โ€” ์šด์˜ ๋ถˆํ•„์š”
takeaway

๊ฐœ๋ฐœ์ž๊ฐ€ ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๋„ค ๊ฐ€์ง€ ์ „๋žต(ํŒŒ์‹ฑยท์ฒญํ‚นยท์ž„๋ฒ ๋”ฉยท๋ฒกํ„ฐ ์Šคํ† ์–ด)๋ฟ โ€” ์‹คํ–‰๊ณผ ์šด์˜์€ Knowledge Base๊ฐ€ ๋งก์Šต๋‹ˆ๋‹ค.

PART 1 ยท ์™œ Knowledge Bases์ธ๊ฐ€

Knowledge Bases 3์ข…

์›Œํฌ๋กœ๋“œ์— ๋งž๋Š” Knowledge Base ์œ ํ˜• ์„ ํƒ โ€” ์…‹ ๋‹ค Knowledge Bases, ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ด€๋ฆฌ ๋ฒ”์œ„

Vector Store Knowledge Base

BYO ๋ฒกํ„ฐ ์Šคํ† ์–ด

  • OpenSearch/Aurora/Pinecone ์„ ํƒ
  • ์ปค์Šคํ…€ ์ฒญํ‚น/ํŒŒ์‹ฑ ์ „๋žต
  • ๊ธฐ์กด ๋ฒกํ„ฐ ์Šคํ† ์–ด ํ™œ์šฉ

์–ธ์ œ โ€” ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ

Structured Data Store

SQL ์ฟผ๋ฆฌ

  • Redshift ์—ฐ๊ฒฐ
  • Text-to-SQL ์ž๋™ ์ƒ์„ฑ
  • ์ •ํ˜• ๋ฐ์ดํ„ฐ ๋ถ„์„

์–ธ์ œ โ€” ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค ์งˆ์˜

takeaway

์ด๋ฆ„ ์ฃผ์˜ โ€” Knowledge Bases๋Š” ์„œ๋น„์Šค ์ „์ฒด(๊ด€๋ฆฌํ˜• RAG)์˜ ์ด๋ฆ„์ด๊ณ , ๊ทธ์ค‘ ๋ฒกํ„ฐ ์Šคํ† ์–ด๊นŒ์ง€ ํ†ต์งธ๋กœ ๋งก๊ธฐ๋Š” ์œ ํ˜•์˜ ์ด๋ฆ„์ด "Managed Knowledge Base"์ž…๋‹ˆ๋‹ค. Vector Store Knowledge Base๋„ ํŒŒ์ดํ”„๋ผ์ธ์€ ๊ด€๋ฆฌํ˜•์ด๊ณ , ๋ฒกํ„ฐ ์Šคํ† ์–ด๋งŒ ์ง์ ‘ ๊ณ ๋ฆ…๋‹ˆ๋‹ค.

๊ตฌ์ถ•๊ณผ ์šด์˜

๋ฐ์ดํ„ฐ ์†Œ์Šค ยท ๋„ค ๊ฐ€์ง€ ๊ฒฐ์ • ยท ์ธ์ œ์ŠคํŠธ ์šด์˜

PART 2 ยท ๊ตฌ์ถ•๊ณผ ์šด์˜

๋ฐ์ดํ„ฐ ์†Œ์Šค 6์ข…

๋ฌธ์„œ๊ฐ€ ์–ด๋””์— ์žˆ๋“  ์—ฐ๊ฒฐํ•˜๋Š” ์ˆœ๊ฐ„ ์ง€์‹์ด ๋˜๋Š” ์†Œ์Šค๋“ค โ€” Vector Store ๊ธฐ์ค€ 6์ข…, Managed๋Š” 7์ข…(Google DriveยทOneDrive ํฌํ•จ)

S3

๊ธฐ๋ณธ ์†Œ์Šค โ€” ๋ฒ„ํ‚ทยท์ ‘๋‘์‚ฌ๋กœ ๋ฒ”์œ„ ์ง€์ •

  • inclusionPrefixes๋กœ ๋Œ€์ƒ ๋ฌธ์„œ ํ•œ์ •
  • ์ฆ๋ถ„ ๋™๊ธฐํ™” โ€” ๋ณ€๊ฒฝ๋ถ„๋งŒ ์žฌ์ฒ˜๋ฆฌ

์›น ํฌ๋กค๋Ÿฌ

๊ณต๊ฐœ ์›น์‚ฌ์ดํŠธ๋ฅผ ํฌ๋กค๋งํ•ด ์ธ์ œ์ŠคํŠธ

  • ์‹œ๋“œ URL๊ณผ ๋ฒ”์œ„ ์„ค์ •
  • ๊ณต๊ฐœ ๋ฌธ์„œยท๋„์›€๋ง ์‚ฌ์ดํŠธ์— ์ ํ•ฉ

SaaS ์ปค๋„ฅํ„ฐ ยท Custom

Confluence ยท Salesforce ยท SharePoint + ์ปค์Šคํ…€

  • ์‚ฌ๋‚ด ์œ„ํ‚คยทCRM ๋ฌธ์„œ๋ฅผ ๊ทธ๋Œ€๋กœ ์—ฐ๊ฒฐ
  • Managed๋Š” Google DriveยทOneDrive ์ถ”๊ฐ€ (Salesforce ๋Œ€์‹ )
  • Custom์€ API๋กœ ์ง์ ‘ ์ธ์ œ์ŠคํŠธ
takeaway

์†Œ์Šค๊ฐ€ ์–ด๋””๋“  ์ดํ›„ ํŒŒ์ดํ”„๋ผ์ธ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค โ€” ์†Œ์Šค ์—ฐ๊ฒฐ์ด ๊ณง ์ง€์‹ ์—ฐ๊ฒฐ์ž…๋‹ˆ๋‹ค.

PART 2 ยท ๊ตฌ์ถ•๊ณผ ์šด์˜

Knowledge Base ์ƒ์„ฑ๊ณผ ๋™๊ธฐํ™”

S3 ์—ฐ๊ฒฐ ํ›„ ๋™๊ธฐํ™” ํ•œ ์ค„ โ€” ํŒŒ์‹ฑ๋ถ€ํ„ฐ ์ธ๋ฑ์‹ฑ๊นŒ์ง€ ์ž๋™

ํ•ต์‹ฌ ํฌ์ธํŠธ

create_data_source
S3 ๋ฒ„ํ‚ท ์—ฐ๊ฒฐ โ€” inclusionPrefixes๋กœ ๋Œ€์ƒ ๋ฌธ์„œ ๋ฒ”์œ„ ์ง€์ •
start_ingestion_job
๋™๊ธฐํ™” ํ•œ ์ค„ โ€” ํŒŒ์‹ฑ โ†’ ์ฒญํ‚น โ†’ ์ž„๋ฒ ๋”ฉ โ†’ ์ธ๋ฑ์‹ฑ ์ž๋™ ์ˆ˜ํ–‰
์ฆ๋ถ„ ์ฒ˜๋ฆฌ
๋ณ€๊ฒฝ๋œ ๋ฌธ์„œ๋งŒ ์žฌ์ฒ˜๋ฆฌ โ€” ์ „์ฒด ์žฌ์ธ๋ฑ์‹ฑ์ด ์•„๋‹˜
bedrock-agent
๊ตฌ์ถ•์€ bedrock-agent, ๊ฒ€์ƒ‰์€ bedrock-agent-runtime ํด๋ผ์ด์–ธํŠธ

์ฝ”๋“œ

python
import boto3
bedrock_agent = boto3.client("bedrock-agent", region_name="us-east-1")

# ๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ฐ๊ฒฐ โ€” S3 ๋ฒ„ํ‚ท๊ณผ ์ ‘๋‘์‚ฌ๋งŒ ์ง€์ •
response = bedrock_agent.create_data_source(
    knowledgeBaseId="SUPPORT-KB-001",
    name="support-docs",
    dataSourceConfiguration={"type": "S3", "s3Configuration": {
        "bucketArn": "arn:aws:s3:::support-docs-bucket",
        # restaurant-policy.pdf๋Š” policy/ ์•„๋ž˜ โ€” rag ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ๋ฌธ์„œ
        "inclusionPrefixes": ["policy/", "faq/"],
    }},
)

# ๋™๊ธฐํ™” ์‹œ์ž‘ โ€” ํŒŒ์‹ฑ, ์ฒญํ‚น, ์ž„๋ฒ ๋”ฉ, ์ธ๋ฑ์‹ฑ์„ ์ž๋™ ์ˆ˜ํ–‰
bedrock_agent.start_ingestion_job(
    knowledgeBaseId="SUPPORT-KB-001",
    dataSourceId=response["dataSource"]["dataSourceId"])
PART 2 ยท ๊ตฌ์ถ•๊ณผ ์šด์˜

๊ฐœ๋ฐœ์ž์˜ ๋„ค ๊ฐ€์ง€ ๊ฒฐ์ •

RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ์—์„œ ๋ฐฐ์šด ํŒ๋‹จ์ด ์—ฌ๊ธฐ์„œ๋Š” ์ฝ˜์†”์˜ ์„ ํƒ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค โ€” ์ „๋ถ€ ์ƒ์„ฑ ์‹œ์ ์˜ ๊ฒฐ์ •

ํŒŒ์‹ฑ

๋ฌธ์„œ โ†’ ํ…์ŠคํŠธ

  • ๊ธฐ๋ณธ ํŒŒ์„œ โ€” ํ…์ŠคํŠธ ์ค‘์‹ฌ ๋ฌธ์„œ
  • ํŒŒ์šด๋ฐ์ด์…˜ ๋ชจ๋ธ ํŒŒ์„œ โ€” ํ‘œยท์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋ธ์ด ํ•ด์„
  • Data Automation โ€” ๋Œ€๊ทœ๋ชจ ๋น„์ •ํ˜•

์ฒญํ‚น

ํ…์ŠคํŠธ โ†’ ๊ฒ€์ƒ‰ ๋‹จ์œ„

  • ๊ณ ์ • ํฌ๊ธฐ + ์˜ค๋ฒ„๋žฉ โ€” ๊ธฐ๋ณธ๊ฐ’
  • ๊ณ„์ธต์ (Parent+Child) โ€” ๊ธด ์•ฝ๊ด€ยท๋งค๋‰ด์–ผ
  • ์‹œ๋งจํ‹ฑ โ€” FAQยท๋Œ€ํ™”ํ˜• ๋ฌธ์„œ

์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ

ํ…์ŠคํŠธ โ†’ ๋ฒกํ„ฐ

  • Titan Embed v2 โ€” 1,024์ฐจ์›
  • ๊ฒ€์ƒ‰๋„ ๊ฐ™์€ ๋ชจ๋ธ์„ ์“ฐ๋ฏ€๋กœ ์ƒ์„ฑ ํ›„ ๊ต์ฒด๋Š” ๊ณง ์ „์ฒด ์žฌ์ธ๋ฑ์‹ฑ

๋ฒกํ„ฐ ์Šคํ† ์–ด (์ธ๋ฑ์‹ฑ)

๋ฒกํ„ฐ ์ €์žฅ ยท ์ธ๋ฑ์Šค

  • Managed Knowledge Base โ€” ์ž๋™ ํ”„๋กœ๋น„์ €๋‹
  • Vector Store Knowledge Base โ€” OpenSearchยทAurora ๋“ฑ ์ง์ ‘ ์„ ํƒ
takeaway

ํŒ๋‹จ ๊ธฐ์ค€์€ RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ ๊ทธ๋Œ€๋กœ โ€” ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๊ฐ€ ์ „๋žต์„ ๊ฒฐ์ •ํ•˜๊ณ , ํŠนํžˆ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์€ ๋˜๋Œ๋ฆฌ๊ธฐ ๋น„์‹ผ ๊ฒฐ์ •์ด๋‹ˆ ์ฒ˜์Œ์— ์‹ ์ค‘ํžˆ ๊ณ ๋ฆ…๋‹ˆ๋‹ค.

PART 2 ยท ๊ตฌ์ถ•๊ณผ ์šด์˜

์ธ์ œ์ŠคํŠธ ์šด์˜ โ€” ์ƒํƒœยท์‹คํŒจยท์ƒํ•œ

๋™๊ธฐํ™”๋Š” ํ•œ ์ค„ โ€” ์ƒํ•œ๊ณผ ์‹คํŒจ๋ฅผ ์•„๋Š” ๋ฐ์„œ ์‹œ์ž‘ํ•˜๋Š” ์šด์˜

ํŒŒ์ผ 50MB ์ƒํ•œ
์ดˆ๊ณผ ๋ฌธ์„œ๋Š” failureReasons์— ๊ธฐ๋ก๋˜๊ณ  ์Šคํ‚ต โ€” ํฐ ๋ฌธ์„œ๋Š” ๋ถ„ํ• ยท์••์ถ• ํ›„ ์—…๋กœ๋“œ
๋™์‹œ ์ธ์ œ์ŠคํŠธ ์žก 50/Knowledge Base
๋ฐ์ดํ„ฐ ์†Œ์Šค๋Š” Knowledge Base๋‹น ์ตœ๋Œ€ 200๊ฐœ โ€” ๋‘˜ ๋‹ค Managed Knowledge Base ์ „์šฉ ์ฟผํ„ฐ, ์†Œ์Šค๋ณ„ ์žก์ด ๋ณ‘๋ ฌ๋กœ ๋•๋‹ˆ๋‹ค.
์ง์ ‘ ์ธ์ œ์ŠคํŠธ
IngestKnowledgeBaseDocuments๋กœ S3 ์—†์ด ์ตœ๋Œ€ 25๋ฌธ์„œ ์ธ๋ผ์ธ ์ฃผ์ž… (์ฝ˜์†”์€ 10)
์›์‹œ ๋ฐ์ดํ„ฐ 10TB/Knowledge Base
Managed Knowledge Base ๊ธฐ์ค€ โ€” ์ฟผ๋ฆฌ ์ž…๋ ฅ 10,000์ž ยท Retrieve 300ํšŒ/๋ถ„
takeaway

์ธ์ œ์ŠคํŠธ ์žก์˜ ์‹คํŒจ ๋ฌธ์„œ ๋ชฉ๋ก(failureReasons)์„ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์ด ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ๋””๋ฒ„๊น…์˜ ์ฒซ ๋‹จ์ถ”์ž…๋‹ˆ๋‹ค โ€” "์•ˆ ๋‚˜์˜ค๋Š” ๋ฌธ์„œ"์˜ ์ ˆ๋ฐ˜์€ ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ API

Retrieve ยท RetrieveAndGenerate ยท ์—์ด์ „ํŠธ ์—ฐ๊ฒฐ

PART 3 ยท ๊ฒ€์ƒ‰ API

Retrieve vs RetrieveAndGenerate

๊ฒ€์ƒ‰๋งŒ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ๊ฐ€, ๋‹ต๋ณ€๊นŒ์ง€ ๋งก๊ธธ ๊ฒƒ์ธ๊ฐ€ โ€” Knowledge Base์˜ ๋‘ ๊ฐ€์ง€ ๊ฒ€์ƒ‰ API

Retrieve

๊ฒ€์ƒ‰๋งŒ โ€” ํ”„๋กฌํ”„ํŠธ ์ง์ ‘ ์ œ์–ด

  • ์ฒญํฌ ํ…์ŠคํŠธ + ์ ์ˆ˜ + ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
  • ํ”„๋กฌํ”„ํŠธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ž์œ 
  • ๋ฉ€ํ‹ฐ์Šคํ… RAGยทํ›„์ฒ˜๋ฆฌ์— ์œ ๋ฆฌ
  • ์—์ด์ „ํŠธ ๋„๊ตฌ(@tool) ์—ฐ๋™์— ์ ํ•ฉ

Strands ์—์ด์ „ํŠธ์˜ ๋„๊ตฌ๋กœ ๊ฐ์‹ธ๋Š” Agentic RAG์˜ ํ‘œ์ค€ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

RetrieveAndGenerate

๊ฒ€์ƒ‰ + ์ƒ์„ฑ ํ•œ ๋ฒˆ์—

  • ๋‹ต๋ณ€ + ์ถœ์ฒ˜(citations) ๋ฐ˜ํ™˜
  • ๋ชจ๋ธยทํ”„๋กฌํ”„ํŠธ ์ œ์–ด๋Š” ์ œํ•œ์ 
  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰ ์˜ต์…˜ ์ง€์ • ๊ฐ€๋Šฅ
  • ๋น ๋ฅธ PoCยท๋‹จ์ˆœ Q&A์— ์ ํ•ฉ

ํ•œ ๋ฒˆ์˜ ํ˜ธ์ถœ๋กœ ๋‹ต๋ณ€๊ณผ ์ถœ์ฒ˜๊นŒ์ง€ โ€” ๊ฐ€์žฅ ๋นจ๋ฆฌ RAG๋ฅผ ์ฒดํ—˜ํ•˜๋Š” ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

takeaway

๋น ๋ฅธ ์‹œ์ž‘์€ RetrieveAndGenerate, ์—์ด์ „ํŠธ ์—ฐ๋™๊ณผ ํ”„๋กฌํ”„ํŠธ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•˜๋ฉด Retrieve โ€” ์ด ์„ ํƒ์€ Agentic RAG ๋ชจ๋“ˆ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

PART 3 ยท ๊ฒ€์ƒ‰ API

RetrieveAndGenerate โ€” ๋‹ต๋ณ€๊ณผ ์ถœ์ฒ˜ ํ•œ ๋ฒˆ์—

๊ฐ€์žฅ ๋นจ๋ฆฌ RAG๋ฅผ ์ฒดํ—˜ํ•˜๋Š” ๊ฒฝ๋กœ โ€” ๊ฒ€์ƒ‰ยท์ฆ๊ฐ•ยท์ƒ์„ฑ์ด ํ˜ธ์ถœ ํ•˜๋‚˜์—

python
import boto3
rt = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

# ๊ฒ€์ƒ‰ + ์ฆ๊ฐ• + ์ƒ์„ฑ์„ ํ˜ธ์ถœ ํ•˜๋‚˜๋กœ
response = rt.retrieve_and_generate(
    input={"text": "์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?"},  # โ‘  ์ž์—ฐ์–ด ์งˆ๋ฌธ
    retrieveAndGenerateConfiguration={
        "type": "KNOWLEDGE_BASE",
        # โ‘ก Knowledge Base ID + ์ƒ์„ฑ์— ์“ธ ๋ชจ๋ธ
        "knowledgeBaseConfiguration": {
            "knowledgeBaseId": "SUPPORT-KB-001",
            "modelArn": "us.anthropic.claude-sonnet-4-6",
        },
    },
)

print(response["output"]["text"])          # โ‘ข ์ƒ์„ฑ๋œ ๋‹ต๋ณ€
for c in response["citations"]:            # โ‘ฃ ์„ธ๊ทธ๋จผํŠธ๋ณ„ ๊ทผ๊ฑฐ
    for ref in c["retrievedReferences"]:
        print(ref["location"]["s3Location"]["uri"])
  • input.text โ€” ์ž์—ฐ์–ด ์งˆ๋ฌธ. ๊ฒ€์ƒ‰๊ณผ ์ƒ์„ฑ์ด ํ•œ ๋ฒˆ์— ์ˆ˜ํ–‰๋จ
  • knowledgeBaseConfiguration โ€” Knowledge Base ID + ์ƒ์„ฑ์— ์“ธ ๋ชจ๋ธ(modelArn) ์ง€์ •
  • output['text'] โ€” ์ƒ์„ฑ๋œ ๋‹ต๋ณ€ ๋ณธ๋ฌธ
  • citations โ€” ๋‹ต๋ณ€ ์„ธ๊ทธ๋จผํŠธ๋ณ„ ๊ทผ๊ฑฐ. retrievedReferences์— ์›๋ณธ ์œ„์น˜(location)
PART 3 ยท ๊ฒ€์ƒ‰ API

Retrieve ํ˜ธ์ถœ๊ณผ ์‘๋‹ต ๊ตฌ์กฐ

์ฒญํฌ ํ…์ŠคํŠธ ยท ์œ ์‚ฌ๋„ ์ ์ˆ˜ ยท ์›๋ณธ ์œ„์น˜ โ€” ํ”„๋กฌํ”„ํŠธ์— ๋„ฃ์„ ์žฌ๋ฃŒ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›๋Š” ๊ฒ€์ƒ‰ ์ „์šฉ API

ํ•ต์‹ฌ ํฌ์ธํŠธ

retrievalQuery
์ž์—ฐ์–ด ์งˆ๋ฌธ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ โ€” ์ž„๋ฒ ๋”ฉ ๋ณ€ํ™˜์€ Knowledge Base๊ฐ€ ์ˆ˜ํ–‰
score
์ƒ๋Œ€ ๊ด€๋ จ๋„ ์ ์ˆ˜ โ€” ๋™์ผ ์„ค์ • ๋‚ด ๋น„๊ตยท์ž„๊ณ„๊ฐ’ ํ•„ํ„ฐ ๊ธฐ์ค€
location
์›๋ณธ S3 ๋ฌธ์„œ URI โ€” ์ถœ์ฒ˜ ํ‘œ์‹œ(Citation)์˜ ์žฌ๋ฃŒ
๋‹ค์Œ ๋‹จ๊ณ„
์ด ํ˜ธ์ถœ์„ @tool๋กœ ๊ฐ์‹ธ๋ฉด Agentic RAG โ€” ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ ๊ณ„์†

์ฝ”๋“œ

python
import boto3
bedrock_rt = boto3.client("bedrock-agent-runtime", region_name="us-east-1")

# ๊ฒ€์ƒ‰๋งŒ ์ˆ˜ํ–‰ โ€” ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ๊ณผ ์ƒ์„ฑ์€ ์ง์ ‘ ์ œ์–ดํ•œ๋‹ค
response = bedrock_rt.retrieve(
    knowledgeBaseId="SUPPORT-KB-001",
    retrievalQuery={"text": "์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?"},
    retrievalConfiguration={"vectorSearchConfiguration": {"numberOfResults": 3}},
)

# ์‘๋‹ต โ€” ์ฒญํฌ ํ…์ŠคํŠธ + ์œ ์‚ฌ๋„ ์ ์ˆ˜ + ์›๋ณธ ๋ฌธ์„œ ์œ„์น˜
for r in response["retrievalResults"]:
    print(r["score"])                          # ์ƒ๋Œ€ ๊ด€๋ จ๋„ (๋™์ผ ์„ค์ • ๋‚ด ๋น„๊ต์šฉ)
    print(r["content"]["text"])                # ์ฒญํฌ ์›๋ฌธ
    print(r["location"]["s3Location"]["uri"])  # ์ถœ์ฒ˜ ๋ฌธ์„œ
PART 3 ยท ๊ฒ€์ƒ‰ API

Retrieve ์‘๋‹ต์˜ ์‹ค๋ฌผ

์•ž ์žฅ ์ฝ”๋“œ๊ฐ€ ๋ฐ›๋Š” ๊ฒƒ โ€” ํ•„๋“œ๋ณ„๋กœ ์—ด์–ด๋ณด๋Š” retrievalResults ํ•œ ๊ฑด




์š”์ฒญ
retrieve(knowledgeBaseId="SUPPORT-KB-001", retrievalQuery="์˜ˆ์•ฝ๊ธˆ ํ™˜๋ถˆ ๊ทœ์ •์ด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?", numberOfResults=3)


retrievalResults[0] โ€” 1์œ„ ์ฒญํฌ

content.text
"์˜ˆ์•ฝ๊ธˆ์€ ์ด์šฉ์ผ 3์ผ ์ „๊นŒ์ง€ ์ทจ์†Œํ•˜๋ฉด ์ „์•ก ํ™˜๋ถˆ๋ฉ๋‹ˆ๋‹ค. ์ด์šฉ์ผ 1~2์ผ ์ „ ์ทจ์†Œ๋Š” โ€ฆ" โ€” ํ”„๋กฌํ”„ํŠธ์— ๋„ฃ์„ ๊ทผ๊ฑฐ ์›๋ฌธ


score


0.87
์ƒ๋Œ€ ๊ด€๋ จ๋„ โ€” ๋™์ผ ์„ค์ • ๋‚ด ๋น„๊ตยท์ž„๊ณ„๊ฐ’ ํ•„ํ„ฐ์šฉ (์˜ˆ์‹œ ์ˆ˜์น˜)



location.s3Location.uri
s3://support-docs-bucket/policy/restaurant-policy.pdf
์ถœ์ฒ˜ ํ‘œ์‹œ(Citation)์˜ ์žฌ๋ฃŒ


retrievalResults[1]
score 0.79 ยท "๋‹น์ผ ์ทจ์†Œ์™€ ๋…ธ์‡ผ๋Š” ํ™˜๋ถˆ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€ฆ" โ€” ๊ฐ™์€ ๋ฌธ์„œ์˜ ๋‹ค์Œ ์ฒญํฌ (์˜ˆ์‹œ ์ˆ˜์น˜)



RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ์—์„œ ์ž„๋ฒ ๋”ฉ โ†’ ANN ๊ฒ€์ƒ‰ โ†’ Top-K๋กœ ์ง์ ‘ ์กฐ๋ฆฝํ•˜๋˜ ์„ธ ๊ฐ€์ง€๊ฐ€, ์—ฌ๊ธฐ์„œ๋Š” ์‘๋‹ต JSON์— ์ด๋ฏธ ๋‹ด๊ฒจ ์˜ต๋‹ˆ๋‹ค


takeaway

์ด ์„ธ ํ•„๋“œ๊ฐ€ ๊ณง ์ฆ๊ฐ•์˜ ์žฌ๋ฃŒ์ž…๋‹ˆ๋‹ค โ€” content.text๋Š” ๊ทผ๊ฑฐ, location์€ ์ถœ์ฒ˜, score๋Š” ํ•„ํ„ฐ ๊ธฐ์ค€. ์ด ํ˜ธ์ถœ์„ @tool๋กœ ๊ฐ์‹ธ๋ฉด ๊ทธ๋Œ€๋กœ Agentic RAG์˜ ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ยท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ ยท ๋ฆฌ๋žญ์ปค

PART 4 ยท ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ

๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ

์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ํ›„๋ณด๋ฅผ ์ขํ˜€ ๊ฐ€๋Š” ์ˆœ์„œ โ€” ๋„ค ๋‹จ๊ณ„ ๋ชจ๋‘ ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์กฐ์ ˆ ๊ฐ€๋Šฅ

  1. 1
    ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ

    ์ฐพ์•„๋„ ๋˜๋Š” ๋ฒ”์œ„๋ถ€ํ„ฐ ํ™•์ • โ€” ๋ถ€์„œยท์—ฐ๋„ยทํ…Œ๋„ŒํŠธ ๊ฒฉ๋ฆฌ

  2. 2
    ๊ฒ€์ƒ‰ ํƒ€์ž…

    SEMANTIC ๋˜๋Š” HYBRID๋กœ ์œ ์‚ฌ ํ›„๋ณด ์„ ์ •

  3. 3
    ๋ฆฌ๋žญ์ปค

    ํ›„๋ณด๋ฅผ ์ฟผ๋ฆฌ์™€ ์ •๋ฐ€ ๋น„๊ตํ•˜์—ฌ ์ˆœ์„œ ์žฌ์กฐ์ •

  4. 4
    Top-K ๋ฐ˜ํ™˜

    numberOfResults๋งŒํผ๋งŒ ์ตœ์ข… ๋ฐ˜ํ™˜

takeaway

๋„ค ๋‹จ๊ณ„ ์ „๋ถ€ ์žฌ์ธ๋ฑ์‹ฑ ์—†์ด ์š”์ฒญ ๋‹จ์œ„๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค โ€” ๊ฐ™์€ Knowledge Base์— ์งˆ์˜ ์„ฑ๊ฒฉ๋ณ„๋กœ ๋‹ค๋ฅธ ์กฐ์œจ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PART 4 ยท ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ

๊ฒ€์ƒ‰ ํƒ€์ž… โ€” ์‹œ๋งจํ‹ฑ๊ณผ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ

RAG ํŒŒ์ดํ”„๋ผ์ธ ๋ชจ๋“ˆ์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด Knowledge Base์—์„œ๋Š” ์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ํ•˜๋‚˜

SEMANTIC

๋ฒกํ„ฐ ๊ฒ€์ƒ‰๋งŒ

  • ์˜๋ฏธ ์œ ์‚ฌ๋„๋กœ๋งŒ ํ›„๋ณด ์„ ์ •
  • ๋™์˜์–ดยท๋‹ค๊ตญ์–ดยท์œ ์‚ฌ ํ‘œํ˜„์— ๊ฐ•ํ•จ
  • ๊ณ ์œ ๋ช…์‚ฌยท์ฝ”๋“œยทํ’ˆ๋ฒˆ ๋งค์นญ์— ์•ฝํ•จ

๊ธฐ๋ณธ ๋™์ž‘ โ€” ๋Œ€๋ถ€๋ถ„์˜ ์ž์—ฐ์–ด ์งˆ์˜์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

HYBRID

๋ฒกํ„ฐ + ํ‚ค์›Œ๋“œ ๊ฒฐํ•ฉ

  • ๋ฒกํ„ฐ ๊ฒฐ๊ณผ์™€ ํ‚ค์›Œ๋“œ ๋งค์นญ์„ ํ•จ๊ป˜ ๋ฐ˜์˜
  • "SKU-1042" ๊ฐ™์€ ์ •ํ™• ๋งค์นญ ๋ณด์™„
  • vectorSearchConfiguration์˜ overrideSearchType์œผ๋กœ ์ „ํ™˜

๋ฌธ์„œ์— ์ฝ”๋“œยท๋ชจ๋ธ๋ช…ยท๊ณ ์œ ๋ช…์‚ฌ๊ฐ€ ๋งŽ๋‹ค๋ฉด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค.

takeaway

์žฌ์ธ๋ฑ์‹ฑ ์—†์ด ์š”์ฒญ ๋‹จ์œ„๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค โ€” ๊ฐ™์€ Knowledge Base์— ์งˆ์˜ ์„ฑ๊ฒฉ๋ณ„๋กœ ๋‹ค๋ฅธ ๊ฒ€์ƒ‰ ํƒ€์ž…์„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PART 4 ยท ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ

ํ•„ํ„ฐ์™€ Top-K โ€” ํ›„๋ณด๋ฅผ ๋‹ค์Šค๋ฆฌ๊ธฐ

์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ฐพ๋Š” ์ผ๊ณผ ์ฐพ์•„๋„ ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ์ •ํ•˜๋Š” ์ผ์˜ ์ฐจ์ด

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ
๋ฌธ์„œ์— ๋ถ™์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ ๊ฒ€์ƒ‰ ๋ฒ”์œ„ ์ œํ•œ โ€” ๋ถ€์„œยท์—ฐ๋„ยท๋ฌธ์„œ ์œ ํ˜•๋ณ„ ๊ฒฉ๋ฆฌ
numberOfResults
๋ฐ˜ํ™˜ ์ฒญํฌ ์ˆ˜(Top-K) โ€” ๋งŽ์„์ˆ˜๋ก ์žฌํ˜„์œจโ†‘, ์ปจํ…์ŠคํŠธ ๋น„์šฉโ†‘
score ์ž„๊ณ„๊ฐ’
์‘๋‹ต์˜ score(์ƒ๋Œ€ ๊ด€๋ จ๋„)๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก ํ•„ํ„ฐ โ€” ์ ˆ๋Œ€ ๊ธฐ์ค€๋ณด๋‹ค ๋™์ผ ์„ค์ • ๋‚ด ์ƒ๋Œ€ ๋น„๊ต์šฉ
์š”์ฒญ ์ƒํ•œ
์ฟผ๋ฆฌ ์ž…๋ ฅ 10,000์ž ยท Retrieve ๋ถ„๋‹น 300ํšŒ (Managed Knowledge Base ๊ธฐ์ค€)
takeaway

๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ๋ผ๋ฉด ํ•„ํ„ฐ๊ฐ€ ๊ณง ๋ณด์•ˆ ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค โ€” ์œ ์‚ฌ๋„๋Š” ํ…Œ๋„ŒํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋กœ ๊ฐ•์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PART 4 ยท ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ์กฐ์œจ

๋ฆฌ๋žญ์ปค โ€” ๋งˆ์ง€๋ง‰ ์ˆœ์„œ ์žฌ์กฐ์ •

๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ๋น ๋ฅด๊ฒŒ ์ถ”๋ฆฐ ํ›„๋ณด๋ฅผ ๋ฆฌ๋žญ์ปค๊ฐ€ ๋‹ค์‹œ ์ค„ ์„ธ์šฐ๋Š” 2๋‹จ ๊ตฌ์กฐ

rerankingConfiguration
vectorSearch ๊ฒฐ๊ณผ์— ์žฌ์ˆœ์œ„ ์ ์šฉ โ€” type์€ BEDROCK_RERANKING_MODEL (์œ ์ผ๊ฐ’)
modelArn ยท numberOfRerankedResults
๋ฆฌ๋žญํ‚น์— ์“ธ ๋ชจ๋ธ๊ณผ ์ตœ์ข… ๋ฐ˜ํ™˜ ๊ฐœ์ˆ˜ ์ง€์ •
metadataConfiguration
๋ฆฌ๋žญํ‚น ํŒ๋‹จ์— ํฌํ•จ/์ œ์™ธํ•  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„๋“œ ์„ ํƒ
Managed Knowledge Base
๊ด€๋ฆฌํ˜• ๋ฆฌ๋žญ์ปค๊ฐ€ ๊ธฐ๋ณธ ํฌํ•จ โ€” ๋ณ„๋„ ๊ตฌ์„ฑ ์—†์ด ์ ์šฉ
takeaway

๋„“๊ฒŒ ๋ฝ‘๊ณ (Top-Kโ†‘) ์ •๋ฐ€ํ•˜๊ฒŒ ์ค„์ด๋Š”(๋ฆฌ๋žญ์ปค) ์กฐํ•ฉ์ด ์‹ค๋ฌด ๊ธฐ๋ณธํ˜• โ€” ์›๋ฆฌ๋Š” Advanced RAG ๋ชจ๋“ˆ์—์„œ, Knowledge Base์—์„œ๋Š” ์„ค์ • ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

OpenSearch Serverless

์ปฌ๋ ‰์…˜ ยท ์ธ๋ฑ์Šค ๋งคํ•‘ ยท kNN ยท ๊ฑฐ๋ฆฌ ๋ฉ”ํŠธ๋ฆญ

PART 5 ยท OpenSearch Serverless

์ปฌ๋ ‰์…˜๊ณผ ์ธ๋ฑ์Šค

Vector Store Knowledge Base(BYO)๊ฐ€ ์†Œ์œ ํ•˜๊ฒŒ ๋˜๋Š” ์ €์žฅ ๊ตฌ์กฐ

์ปฌ๋ ‰์…˜ โ€” VECTORSEARCH ํƒ€์ž…

์„œ๋ฒ„๋ฆฌ์Šค ์šด์˜ ๋‹จ์œ„ โ€” OCU ์ž๋™ ํ™•์žฅ, Knowledge Base๊ฐ€ ์—ฐ๊ฒฐํ•˜๋Š” ๋Œ€์ƒ

์ธ๋ฑ์Šค

๋ฒกํ„ฐ ํ•„๋“œ ์Šคํ‚ค๋งˆ(๋งคํ•‘)๋ฅผ ๊ฐ€์ง„ ์ €์žฅ ๋‹จ์œ„ โ€” Knowledge Base ํ•˜๋‚˜๊ฐ€ ์ธ๋ฑ์Šค ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉ

๋ฌธ์„œ โ€” ์ฒญํฌ๋‹น 1๊ฑด

๋ฒกํ„ฐ + ์›๋ฌธ ํ…์ŠคํŠธ + ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฌธ์„œ๋กœ ๊ธฐ๋ก

PART 5 ยท OpenSearch Serverless

์ธ๋ฑ์Šค ๋งคํ•‘

knn_vector ํ•„๋“œ ์„ ์–ธ โ€” dimension์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์ฐจ์›๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค

json
PUT /kb-refund-index
{
  "settings": { "index.knn": true },
  "mappings": { "properties": {
    "chunk_vector": {
      "type": "knn_vector", "dimension": 1024,
      "method": { "name": "hnsw", "engine": "faiss", "space_type": "l2" }
    },
    "chunk_text": { "type": "text" }, "metadata": { "type": "keyword" }
  } }
}
  • index.knn: true โ€” kNN ๊ฒ€์ƒ‰ ํ™œ์„ฑํ™”
  • dimension โ€” ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ์ฐจ์›๊ณผ ์ผ์น˜ (Titan v2 = 256/512/1024)
  • method โ€” HNSW ๊ทธ๋ž˜ํ”„ ยท faiss ์—”์ง„
  • space_type โ€” ๊ฑฐ๋ฆฌ ๋ฉ”ํŠธ๋ฆญ ์„ ์–ธ (l2 = ์œ ํด๋ฆฌ๋“œ)
PART 5 ยท OpenSearch Serverless

kNN ๊ฒ€์ƒ‰๊ณผ ๊ฑฐ๋ฆฌ ๋ฉ”ํŠธ๋ฆญ

์งˆ์˜ ๋ฒกํ„ฐ์™€ ๊ฐ€๊นŒ์šด k๊ฐœ๋ฅผ ์ฐพ๋Š” ๊ฒ€์ƒ‰ โ€” "๊ฐ€๊น๋‹ค"์˜ ์ •์˜๊ฐ€ space_type

kNN ์งˆ์˜

json
GET /kb-refund-index/_search
{
  "size": 5,
  "query": { "knn": {
    "chunk_vector": {
      "vector": [0.12, -0.48, ...],
      "k": 5
    }
  } }
}

๊ฑฐ๋ฆฌ ๋ฉ”ํŠธ๋ฆญ โ€” space_type

l2
์œ ํด๋ฆฌ๋“œ ๊ฑฐ๋ฆฌ โ€” ์ขŒํ‘œ ๊ณต๊ฐ„์˜ ์ง์„  ๊ฑฐ๋ฆฌ
cosinesimil
์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ โ€” ํฌ๊ธฐ๋ฅผ ๋ฌด์‹œํ•œ ๋ฐฉํ–ฅ ๋น„๊ต
innerproduct
๋‚ด์  โ€” ํฌ๊ธฐ๊นŒ์ง€ ๋ฐ˜์˜ํ•œ ์œ ์‚ฌ๋„
takeaway

space_type์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์˜ ๊ถŒ์žฅ ๋ฉ”ํŠธ๋ฆญ๊ณผ ์ผ์น˜์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค โ€” BYO๋ฅผ ๊ณ ๋ฅด๋ฉด ์ด ์ „๋ถ€๋ฅผ ์ง์ ‘ ์†Œ์œ ํ•˜๊ณ , Managed๋ฅผ ๊ณ ๋ฅด๋ฉด ๋ณด์ด์ง€ ์•Š๋Š” ๋‚ด๋ถ€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์‹ค์Šต โ€” Knowledge Base

โฑ 60๋ถ„

Bedrock Knowledge Base๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋™๊ธฐํ™”ํ•œ ๋’ค, Retrieve๋กœ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค

ํ•™์Šต ๋ชฉํ‘œ

  • S3 ๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ฐ๊ฒฐ๊ณผ Knowledge Base ์ƒ์„ฑ
  • start_ingestion_job์œผ๋กœ ๋™๊ธฐํ™” โ€” ์ธ์ œ์ŠคํŠธ ์ƒํƒœ ํ™•์ธ
  • Retrieve ยท RetrieveAndGenerate๋กœ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ ๋น„๊ต
ํŒŒ์ดํ”„๋ผ์ธ์€ Knowledge Base๊ฐ€ ๋Œ๋ฆฌ๊ณ , ์—ฌ๋Ÿฌ๋ถ„์€ ๋ฐ์ดํ„ฐ์™€ ์ „๋žต๋งŒ ์ •ํ•ฉ๋‹ˆ๋‹ค.

DIY โ†’ Knowledge Base ์ „ํ™˜ ยท ๊ตฌ์ถ•๊ณผ ์šด์˜ ยท Retrieve vs RetrieveAndGenerate