AWS Bedrock Knowledge Base를 활용한 AI-enabled Slackbot 만들기

발행: (2026년 1월 20일 오전 07:35 GMT+9)
10 min read
원문: Dev.to

I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have it, I’ll translate it into Korean while preserving the original formatting, markdown, and any code blocks or URLs.

Source:

지금까지 가장 낮은 마찰과 높은 ROI를 제공한 대형 언어 모델(LLM) 활용 사례 중 하나는 내부 AI 어시스턴트입니다

AI가 반드시 고객용 챗봇이나 완전 자율 에이전트만을 의미할 필요는 없습니다. 사용자가 다음과 같은 질문을 할 수 있는 간단한 인터페이스만으로도 강력한 도구가 될 수 있습니다:

  • “이 서비스를 어떻게 배포하나요?”
  • “이 알림에 대한 온콜 런북은 어디에 있나요?”
  • “디자인 문서의 최신 다이어그램은 어디에 있나요?”

이 질문들에 대한 답은 이미 존재합니다—Confluence 페이지, Google Docs, GitHub README, Slack 스레드 등에 흩어져 있죠. 문제는 생성이 아니라 검색입니다.

LLM은 기본적으로 추론과 요약에 뛰어나지만, 조직의 내부 지식과는 완전히 분리돼 있습니다. 프롬프트에 정보를 채워 넣는 것이 조금은 도움이 되지만, 파인튜닝은 매우 제한적인 경우에만 효과적입니다. 지식 베이스가 주간 단위로 바뀌거나 정확성이 중요한 상황에서는 어느 쪽도 확장되지 못합니다.

검색‑증강 생성(RAG)이 메우는 공백

RAG는 확률적 언어 모델과 결정적인 내부 지식 사이의 간극을 메워 줍니다. LLM에게 추측을 요구하는 대신 다음 과정을 거칩니다:

  1. 검색을 통해 관련 문서를 먼저 찾아냅니다.
  2. 모델에 질문하여 그 문맥에 기반한 답변을 종합하도록 합니다.

그 결과, 무모하게 답변하지 않으면서도 똑똑해 보이는 어시스턴트를 만들 수 있으며, 무엇보다도 지속적인 재학습 없이 최신 정보를 유지할 수 있습니다.

이미 AWS를 사용하고 있다면, Amazon Bedrock Knowledge Bases를 통해 RAG를 손쉽게 생성·배포·기존 인프라에 통합할 수 있습니다. 이번 포스트에서는 AWS Bedrock Knowledge Base를 활용하고 이를 Slack 봇에 연결해 실제 내부 AI‑지원 어시스턴트 사례를 구현하는 과정을 단계별로 살펴보겠습니다.

Bedrock Knowledge Base diagram

Source:

AWS Bedrock 지식 베이스 설정

  1. AWS 콘솔 열기 → Amazon Bedrock → BuildKnowledge Bases.

  2. 작성 시점 기준으로 Bedrock은 비정형 데이터를 다음 방식으로 인덱싱을 지원합니다:

    • 커스텀 벡터 스토어,
    • Kendra GenAI 서비스, 또는
    • 구조화된 데이터(예: 데이터베이스, 테이블)를 이용한 의미 검색.

    대부분의 내부 데이터가 비정형(Confluence 문서, markdown 파일 등)이라면 “Create knowledge base with vector store.” 를 선택합니다.

  3. 데이터 소스 옵션(현재 5개로 제한): Confluence, Salesforce, SharePoint, S3 웹 크롤러 등.
    이번 데모에서는 Confluence 를 사용합니다.
    Confluence 자격 증명은 공식 가이드에서 설명한 대로 AWS Secrets Manager에 저장합니다.

  4. 파싱 및 청킹 구성

    • AWS 기본 파서 또는 파서로 사용할 기반 모델(예: Claude) 중 하나를 선택합니다.
    • 벡터 데이터베이스에 대한 청킹 전략을 선택합니다.

    Bedrock은 문서를 자동으로 청크로 나누고, 임베딩을 생성하며, OpenSearch Serverless에 벡터를 저장합니다.

    빠른 데모를 위해 기본값을 유지하고 Amazon Titan 임베딩을 사용합니다.

  5. 데이터 소스 동기화
    벡터 스토어가 생성된 후 수동으로 동기화를 트리거합니다.
    이후에 다른 소스(SharePoint PDF, 오픈소스 라이브러리 문서, 내부 S3 파일 등)를 추가할 수 있습니다.

Slack 봇 설정

  1. Slack 관리 콘솔에서 Slack 앱 만들기.
  2. Socket Mode 활성화.
  3. 최소 OAuth 범위 추가:
    • chat:write
    • app_mentions:read
    • channels:history
  4. Basic Information 페이지에서 Bot Token 가져오기.

봇 구현 (Python + Slack Bolt)

Slack Bolt SDK를 사용하여 다음을 수행하는 봇을 구축합니다:

  • Slack 이벤트(멘션, 슬래시 명령 등) 파싱
  • Bedrock 지식 베이스 조회
  • 응답 생성

Slack bot flow diagram

Pseudocode

def handler(event, context):
    # 1️⃣ Extract the user message from the Slack event
    text = extract_slack_message(event)

    # 2️⃣ Retrieve relevant chunks from the Knowledge Base
    retrieval = bedrock.retrieve(
        knowledgeBaseId=KB_ID,
        query=text,
        retrievalConfiguration={
            "vectorSearchConfiguration": {"numberOfResults": 5}
        },
    )

    # 3️⃣ Build the prompt that combines the user query with retrieved context
    prompt = build_prompt(
        user_question=text,
        retrieved_chunks=retrieval["results"]
    )

    # 4️⃣ Invoke the LLM (e.g., Claude Sonnet) via Bedrock Runtime
    response = bedrock_runtime.invoke_model(
        modelId="arn:aws:bedrock:us-east-1:...:inference-profile/us.anthropic.claude-sonnet-4-5-20250929-v1:0",
        body=prompt,
    )

    # 5️⃣ Post the answer back to Slack
    post_to_slack(response)

성능 튜닝

LLM은 비결정적이기 때문에 명확한 시스템 프롬프트로 안내해야 합니다. RAG가 “내부” 지식을 제공하고, 프롬프트 엔지니어링이 관련성과 안전성을 향상시킵니다.

프롬프트 템플릿

You are an internal engineering assistant.

Answer the question using ONLY the provided context.
If the answer is not in the context, say you do not know.

{{retrieved_chunks}}

Question: {{user_question}}

  • 모델의 토큰 제한(예: Claude Sonnet의 경우 4 KB) 내에서 컨텍스트 크기를 유지하세요.
  • 보다 결정적인 출력을 위해 temperature=0을 실험해 보세요.
  • 지연 시간과 관련성 사이의 트레이드‑오프에 따라 numberOfResults와 청크 크기를 조정하세요.

요약

  1. 벡터 스토어(OpenSearch Serverless)로 백업된 Bedrock Knowledge Base를 생성합니다.
  2. 내부 데이터 소스(Confluence, SharePoint, S3 등)를 연결하고 Bedrock이 파싱, 청크화, 임베딩을 처리하도록 합니다.
  3. Slack 봇을 구축하여 관련 청크를 검색하고, 간결한 시스템 프롬프트와 함께 LLM에 전달한 뒤, 사용자에게 답변을 반환합니다.
  4. 프롬프트와 검색 설정을 반복적으로 조정하여 정확도, 지연 시간, 비용을 최적화합니다.

추가 참고 사항

  • 전체 화면 모드 진입
  • 전체 화면 모드 종료

우리가 조정할 수 있는 또 다른 요소는 내부 지식을 어떻게 임베드하고 저장하느냐입니다. AWS는 지식 베이스를 위한 콘텐츠 청킹이 어떻게 작동하는지에 대한 훌륭한 가이드를 제공합니다. 핵심 요점은 데이터 구조에 따라 다른 청킹 방식이 더 나은 성능을 발휘한다는 것입니다. 예를 들어, 많은 Confluence 문서는 제목과 본문으로 구성된 자연스러운 계층 구조를 가지고 있으므로, 계층적 청킹을 사용하면 정보를 더 잘 연결하고 검색 성능을 향상시킬 수 있습니다.

Source:

마무리

AI‑지원 Slackbot은 내부 지식에 대한 첫 번째 입구가 빠르게 되고 있습니다. Amazon Bedrock Knowledge Bases를 사용하면 대부분의 경우 벡터 데이터베이스를 운영하고 유지 관리할 필요 없이 RAG를 쉽게 구축할 수 있습니다.

ChatGPT와 Claude와 같은 강력한 LLM을 활용하면 Slack bot을 만드는 것이 그 어느 때보다 쉬워졌습니다. 작업 중인 모델과 솔루션을 비교하고 싶다면, AWS 팀이 제공한 다소 오래되었지만 여전히 작동하는 예제(GitHub)를 따라해 볼 수 있습니다.

Back to Blog

관련 글

더 보기 »