-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path3_aws_bedrock_llm.py
More file actions
55 lines (44 loc) · 3.55 KB
/
Copy path3_aws_bedrock_llm.py
File metadata and controls
55 lines (44 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import json
import time
class AWSBedrockLLM:
"""
[Senior 면접용 딥다이브: AWS Bedrock & 프롬프트 엔지니어링]
Q1. "B2C 서비스에 LLM을 붙일 때 토큰 지연 시간(Latency) 이슈는 어떻게 해결하나요?"
A1: "LLM이 전체 문장을 다 만들 때까지 기다리면(Blocking) 사용자 경험(UX)이 매우 나빠집니다.
따라서 Bedrock의 'invoke_model_with_response_stream' API를 사용하여,
LLM이 토큰을 하나씩 생성할 때마다 서버-센트이벤트(SSE)나 웹소켓으로 클라이언트에게 스트리밍(Streaming)해주는 아키텍처를 반드시 구축해야 합니다."
Q2. "프롬프트 인젝션(Prompt Injection) 공격이나 유해 콘텐츠는 어떻게 방어하나요?"
A2: "단순히 프롬프트에 '나쁜 말 하지마'라고 적는 것으로는 부족합니다.
실무에서는 AWS Bedrock의 'Guardrails for Amazon Bedrock' 기능을 활성화하여
PII(개인정보) 필터링, 유해 단어 필터링, 할루시네이션(환각) 억제를 인프라 단에서 강제합니다.
또한, 프롬프트 작성 시 시스템 프롬프트와 유저 입력을 명확히 분리하고(XML 태그 활용),
RAG 컨텍스트를 주입할 때 '이 XML 태그 안의 내용만 참고해'라고 엄격히 통제합니다."
"""
def __init__(self):
pass
def invoke_model_with_rag(self, user_question: str, retrieved_context: str) -> str:
print("\n[AWS Bedrock] Boto3 클라이언트를 통해 LLM 런타임에 접속합니다.")
# [실무 팁] Claude 3 등 최신 모델들은 XML 태그 인지 능력이 매우 뛰어납니다.
# RAG 데이터를 주입할 때는 반드시 XML 태그 안에 넣어 인젝션 공격을 방지합니다.
system_prompt = """
당신은 우리 회사의 사내 규정을 안내하는 친절한 엔터프라이즈 AI 어시스턴트입니다.
반드시 사용자가 질문한 내용에 대해, 아래 <context> 태그 안에 제공된 사내 데이터만 바탕으로 답변하세요.
만약 <context>에 내용이 없다면 "사내 규정에서 해당 내용을 찾을 수 없습니다" 라고 안전하게 답변하세요.
자신의 생각을 덧붙이거나 환각(Hallucination)을 일으키지 마세요.
"""
prompt = f"""
{system_prompt}
<context>
{retrieved_context}
</context>
질문: {user_question}
"""
print("[AWS Bedrock] 조립된 프롬프트(Prompt)를 Anthropic Claude 3 Sonnet 모델로 전송합니다...")
print("[AWS Bedrock] Guardrails(가드레일) 검증 통과 완료. Streaming 모드로 응답을 수신합니다...")
time.sleep(2)
if "법인카드" in user_question or "야근" in user_question or "택시" in user_question:
return "안녕하세요! 사내 규정에 따르면, 법인카드 식대 지원은 1인당 1식 15,000원이며, 밤 10시 이후 야근 시 택시비는 월 최대 30만 원까지 지원됩니다. 사용 후 반드시 경비 시스템에 영수증을 첨부해 주세요."
elif "휴가" in user_question or "연차" in user_question:
return "연차 관련 규정 안내해 드립니다. 기본 연차는 연 15일이며, 미사용분은 내년 3월까지 이월 가능합니다. 반차는 0.5일로 차감됩니다."
else:
return "제공된 사내 데이터에서는 관련 내용을 찾을 수 없습니다."