KT AIVLE SCHOOL
RAG - 외부 VectorDB와 LLM 연결하기
- -
layout: single
title: "jupyter notebook 변환하기!"
categories: coding
tag: [python, blog, jekyll]
toc: true
author_profile: false
RAG
Retrieval Augmented Generation
1.환경준비
(1) 라이브러리 Import
import pandas as pd
import numpy as np
import os
import openai
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, Document
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
(2) OpenAI API Key 확인
https://platform.openai.com/api-keys
위 링크에서 자신의 API Key 생성 - gpt-3.5-turbo로 준비하기
API.key 파일을 만들고 거기에 API key 저장하기
with open("API.key") as f:
os.environ['OPENAI_API_KEY'] = f.readlines()[0]
openai.api_key = os.getenv('OPENAI_API_KEY')
print(openai.api_key[:10])
sk-proj-Gt
또는 직접 입력
# os.environ['OPENAI_API_KEY'] = '여러분의 OpenAI API키'
# openai.api_key = os.getenv('OPENAI_API_KEY')
2.Vector DB
(1) Chroma DB 구성
DB 경로 지정
없으면, 새로 폴더를 만들며 DB 생성
있으면, 기존 DB 연결
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
import shutil
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002")
folder = "./data" # 경로 지정 -> 크로마 함수에서 폴더 만들어 줄것임
if os.path.exists(folder):
shutil.rmtree(folder)
database = Chroma(persist_directory=folder, # 경로 지정(현 위치에서 db 폴더 생성)
embedding_function = embeddings # 임베딩 벡터로 만들 모델 지정
)
- DB 삭제는, 파이썬을 닫고 폴더를 삭제하면 됩니다.
(2) INSERT
두가지 방법
(1) 단순 텍스트 입력 : 각 단위 텍스트를 리스트 형태로 입력 .add_texts()
(2) 텍스트와 메타데이터 입력 : 각 단위 텍스트와 메타정보를 함께 입력 .add_documents()
1) .add_texts()
텍스트를 직접 추가
input_list = ['test 데이터 입력1', 'test 데이터 입력2']
# 입력. 입력시 인덱스 저장(조회시 사용)
ind = database.add_texts(input_list)
ind # 저장한 데이터 인덱스 출력
['7dffeac2-5eba-475d-8790-cdb076ca0461', '85b0eb20-4385-40cb-9cfb-a6141c10e0d7']
database.get(ind) # 해당 인덱스의 데이터 출력
{'ids': ['7dffeac2-5eba-475d-8790-cdb076ca0461', '85b0eb20-4385-40cb-9cfb-a6141c10e0d7'], 'embeddings': None, 'metadatas': [None, None], 'documents': ['test 데이터 입력1', 'test 데이터 입력2'], 'uris': None, 'data': None}
2) .add_documents()
from langchain.schema import HumanMessage, SystemMessage, Document
input_list2 = ['오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다.', '어제 주가는 큰 폭으로 상승했습니다.']
metadata = [{'category':'test'}, {'category':'test'}]
doc2 = [Document(page_content = input_list2[i], metadata = metadata[i]) for i in range(2)]
doc2
[Document(page_content='오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다.', metadata={'category': 'test'}), Document(page_content='어제 주가는 큰 폭으로 상승했습니다.', metadata={'category': 'test'})]
ind2 = database.add_documents(doc2)
database.get(ind2)
{'ids': ['3cda1de7-ed1e-4df0-a5b2-b1952883254b', 'ae4465ec-c946-44f2-83f4-6216353a3a64'], 'embeddings': None, 'metadatas': [{'category': 'test'}, {'category': 'test'}], 'documents': ['오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다.', '어제 주가는 큰 폭으로 상승했습니다.'], 'uris': None, 'data': None}
(2) 조회
1) 전체 조회
database.get()
{'ids': ['3cda1de7-ed1e-4df0-a5b2-b1952883254b', '7dffeac2-5eba-475d-8790-cdb076ca0461', '85b0eb20-4385-40cb-9cfb-a6141c10e0d7', 'ae4465ec-c946-44f2-83f4-6216353a3a64'], 'embeddings': None, 'metadatas': [{'category': 'test'}, None, None, {'category': 'test'}], 'documents': ['오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다.', 'test 데이터 입력1', 'test 데이터 입력2', '어제 주가는 큰 폭으로 상승했습니다.'], 'uris': None, 'data': None}
2) 조건조회
일반적인 조건 조회를 지원하지 않음.
그래서 전체를 다 불러와서
dataframe으로 변환 후 조건 조회
data = database.get()
data = pd.DataFrame(data)
data.head()
ids | embeddings | metadatas | documents | uris | data | |
---|---|---|---|---|---|---|
0 | 3cda1de7-ed1e-4df0-a5b2-b1952883254b | None | {'category': 'test'} | 오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다. | None | None |
1 | 7dffeac2-5eba-475d-8790-cdb076ca0461 | None | None | test 데이터 입력1 | None | None |
2 | 85b0eb20-4385-40cb-9cfb-a6141c10e0d7 | None | None | test 데이터 입력2 | None | None |
3 | ae4465ec-c946-44f2-83f4-6216353a3a64 | None | {'category': 'test'} | 어제 주가는 큰 폭으로 상승했습니다. | None | None |
data.loc[data['metadatas'] == {'category': 'test'}]
ids | embeddings | metadatas | documents | uris | data | |
---|---|---|---|---|---|---|
0 | 3cda1de7-ed1e-4df0-a5b2-b1952883254b | None | {'category': 'test'} | 오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다. | None | None |
3 | ae4465ec-c946-44f2-83f4-6216353a3a64 | None | {'category': 'test'} | 어제 주가는 큰 폭으로 상승했습니다. | None | None |
3) 유사 문서 조회
# 문서 조회1
query = "오늘 낮 기온은?" # 질문할 문장
k = 3 # 유사도 상위 k 개 문서 가져오기.
result = database.similarity_search(query, k = k) #← 데이터베이스에서 유사도가 높은 문서를 가져옴
print(result)
print('-'*50)
for doc in result:
print(f"문서 내용: {doc.page_content}") # 문서 내용 표시
[Document(page_content='오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다.', metadata={'category': 'test'}), Document(page_content='어제 주가는 큰 폭으로 상승했습니다.', metadata={'category': 'test'}), Document(page_content='test 데이터 입력1')] -------------------------------------------------- 문서 내용: 오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다. 문서 내용: 어제 주가는 큰 폭으로 상승했습니다. 문서 내용: test 데이터 입력1
# 문서 조회2 : 유사도 점수도 함께 조회
query = "오늘 낮 기온은?" # 질문할 문장
k = 3 # 유사도 상위 k 개 문서 가져오기.
result = database.similarity_search_with_score(query, k = k) #← 데이터베이스에서 유사도가 높은 문서를 가져옴
print(result)
print('-'*50)
for doc in result:
print(f"유사도 점수 : {round(doc[1], 5)}, 문서 내용: {doc[0].page_content}") # 문서 내용 표시
[(Document(page_content='오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다.', metadata={'category': 'test'}), 0.22557718985895395), (Document(page_content='어제 주가는 큰 폭으로 상승했습니다.', metadata={'category': 'test'}), 0.38111759959777386), (Document(page_content='test 데이터 입력1'), 0.4948085810123292)] -------------------------------------------------- 유사도 점수 : 0.22558, 문서 내용: 오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다. 유사도 점수 : 0.38112, 문서 내용: 어제 주가는 큰 폭으로 상승했습니다. 유사도 점수 : 0.49481, 문서 내용: test 데이터 입력1
(3) 삭제
- 문서의 id 값으로 삭제합니다.
data
ids | embeddings | metadatas | documents | uris | data | |
---|---|---|---|---|---|---|
0 | 3cda1de7-ed1e-4df0-a5b2-b1952883254b | None | {'category': 'test'} | 오늘 날씨는 매우 맑음. 낮 기온은 30도 입니다. | None | None |
1 | 7dffeac2-5eba-475d-8790-cdb076ca0461 | None | None | test 데이터 입력1 | None | None |
2 | 85b0eb20-4385-40cb-9cfb-a6141c10e0d7 | None | None | test 데이터 입력2 | None | None |
3 | ae4465ec-c946-44f2-83f4-6216353a3a64 | None | {'category': 'test'} | 어제 주가는 큰 폭으로 상승했습니다. | None | None |
ids = data['ids'][0]
ids
'3cda1de7-ed1e-4df0-a5b2-b1952883254b'
database.delete(ids = ids)
data = database.get()
data = pd.DataFrame(data)
data.head()
ids | embeddings | metadatas | documents | uris | data | |
---|---|---|---|---|---|---|
0 | 7dffeac2-5eba-475d-8790-cdb076ca0461 | None | None | test 데이터 입력1 | None | None |
1 | 85b0eb20-4385-40cb-9cfb-a6141c10e0d7 | None | None | test 데이터 입력2 | None | None |
2 | ae4465ec-c946-44f2-83f4-6216353a3a64 | None | {'category': 'test'} | 어제 주가는 큰 폭으로 상승했습니다. | None | None |
3.데이터 벡터화
(1) DF to Vector DB
샘플데이터 : 오픈소스 생성형 AI에서 주의해야 할 10가지 사항
- 기사를 csv로 만든 것입니다.
원문보기: https://www.ciokorea.com/news/337152#csidxc7d1d11066fad86a15937e4c3b29c6d
data = pd.read_csv('sample.csv', encoding='utf-8')
data.head()
구분 | 내용 | |
---|---|---|
0 | 낯선 라이선스 약관 | 현재 오픈소스 AI 라이선스 유형은 다양한 만큼 매우 복잡하다. 오픈소스 AI 모델... |
1 | 낯선 라이선스 약관 | 메타와 유사하게 애플은 ‘애플 샘플 코드 라이선스’하에 오픈ELM을 출시했다. 이 ... |
2 | 전문성 부족 | 오픈소스는 스스로 해야 하는 작업이 많을 수 있다. 기업은 코드를 다운로드할 수는 ... |
3 | 전문성 부족 | 업계 전체에 전문성이 부족하다는 점은 새로운 문제를 야기한다. 원래 오픈소스의 장점... |
4 | 탈옥 | LLM 공격 중 유명한 것에 탈옥(jailbreak)이라는 수법이 있다. 탈옥은 의... |
# Chroma 데이터베이스 인스턴스 생성
database = Chroma(persist_directory = "./data3", embedding_function = embeddings)
# 데이터프레임의 텍스트 열(시리즈)을 리스트로 변환
text_list = data['내용'].tolist()
# 리스트 내용을 각각 document로 변환
documents = [Document(page_content=text) for text in text_list]
print(documents[:2])
[Document(page_content='현재 오픈소스 AI 라이선스 유형은 다양한 만큼 매우 복잡하다. 오픈소스 AI 모델을 이용하려면 상업적으로 사용해도 괜찮은지, 수정 및 배포가 가능한지, 사내 코드 베이스에 안전하게 통합할 수 있는지 등을 알아봐야 한다. 여기에 몇 가지 새로운 문제가 등장했다. 일단 이전에는 볼 수 없는 제약이 오픈소스 라이선스에 적용됐다.\n메타의 라마(Llama) 라이선스를 예로 보자. 라마는 높은 인기를 자랑하는 오픈소스 LLM이다. 메타는 라마에 대해 ‘개방형 접근권을 제공하고 잠재적인 오용 문제를 해결하기 맞춤형 상용 라이선스 모델’을 적용한다고 밝혔다. 또한 이에 대해 ‘책임 및 보호 조치의 균형을 맞추기 위한 조치’라고 소개하고 있다.\n이런 라이선스 하에 기업은 상업적으로 라마 모델을 사용할 수 있고 개발자는 기본 라마 모델 위에 추가 작업을 만들어 배포할 수 있다. 단 다른 LLM을 개선하기 위해 라마가 출력하는 결과물을 활용할 수는 없다. (라마 파생 모델은 제외된다.) 또한 기업 또는 그 계열사의 월간 사용자가 700명을 초과하는 경우, 메타에게 라이선스 사용 허락을 요청해야 한다. 메타는 이를 승인하거나 승인하지 않을 수 있다. 어떤 기업에서 라마 3를 사용해서 뭔가를 만들었다면, 눈에 잘 띄는 위치에 ‘Built with Llama 3(라마 3를 기반으로 구축했음)’라는 문구를 표기해야 한다.'), Document(page_content='메타와 유사하게 애플은 ‘애플 샘플 코드 라이선스’하에 오픈ELM을 출시했다. 이 라이선스 역시 특허권은 제외하고 저작권 권한만 명시하고 있다. 애플이나 메타 모두 일반적으로 통용되는 오픈소스 라이선스를 사용하지는 않지만, 실제로 코드는 공개되어 있다. 여기에 애플은 실제로 코드뿐만 아니라 모델 가중치, 훈련 데이터 세트, 훈련 로그, 사전 훈련 구성도 공개했다.\n이제 오픈소스 라이선스의 또 다른 측면을 살펴보자. 기존의 오픈소스 소프트웨어에서 핵심은 ‘코드’였다. 그리고 그 코드를 통해 소프트웨어가 어떤 기능을 하는지, 잠재적인 문제나 취약점이 있는지 확인할 수 있었다.\n하지만 생성형 AI는 단순한 코드가 아니다. 학습 데이터, 모델 가중치, 미세 조정도 마찬가지다. 이러한 모든 요소는 모델의 작동 방식을 이해하고 잠재적인 편향을 파악하는 데 매우 중요다. 예를 들어, 평평한 지구 음모론에 대한 자료를 학습한 모델은 과학 관련 질문에 제대로 답하지 못할 수 있다. 북한 해커가 미세 조정한 모델은 멀웨어를 정확하게 식별하지 못할 수 있다. 그렇다면 오픈소스 LLM은 이러한 모든 정보를 공개할까? 모델에 따라 다르다. 심지어 버전에 따라 다를 수도 있다. 그만큼 관련된 업계 표준이 없다.\n카네기멜론 대학교의 AI 교수이자 전 PwC의 글로벌 AI 사업 총괄이었 아난드 라오는 “AI 모델에서 코드를 공개하는 경우도 있지만, 미세 조정 관련 정보가 없다면 비슷한 성능을 얻기 위해 많은 비용을 지출할 수 있다”라고 설명했다.')]
# Insert
database.add_documents(documents)
['9ff5efdf-9a96-4dcd-80af-0baf586feef6', 'dc3931ac-74f6-406f-93c9-8ef04b91dab8', 'a0f63368-13c2-4564-8d9e-777c10e8457f', '51a38d97-c1e1-4f1d-bb18-2620c421288b', '75976ce9-0531-4b7d-ba69-d66bd36e42d0', '74065a1e-43ef-47b2-ab10-46f0594bb695', '55b2b215-0e5c-40dd-9805-680c57470ba3', 'e38228d3-ae20-4179-a353-1144fb219e2c', 'bd22e549-d48e-473e-beae-e86e3df5ee9d', '19655174-a7e0-4e17-a985-2efb5e21dfbc', '2b314501-fb48-45a2-b973-a1c952a7c6b9', 'c26dd996-39f6-42e1-9be6-a74b23398928', '3b56d96b-68e9-49cc-8b88-07fb3b123548']
database.get()
{'ids': ['19655174-a7e0-4e17-a985-2efb5e21dfbc', '2b314501-fb48-45a2-b973-a1c952a7c6b9', '3b56d96b-68e9-49cc-8b88-07fb3b123548', '51a38d97-c1e1-4f1d-bb18-2620c421288b', '55b2b215-0e5c-40dd-9805-680c57470ba3', '74065a1e-43ef-47b2-ab10-46f0594bb695', '75976ce9-0531-4b7d-ba69-d66bd36e42d0', '9ff5efdf-9a96-4dcd-80af-0baf586feef6', 'a0f63368-13c2-4564-8d9e-777c10e8457f', 'bd22e549-d48e-473e-beae-e86e3df5ee9d', 'c26dd996-39f6-42e1-9be6-a74b23398928', 'dc3931ac-74f6-406f-93c9-8ef04b91dab8', 'e38228d3-ae20-4179-a353-1144fb219e2c'], 'embeddings': None, 'metadatas': [None, None, None, None, None, None, None, None, None, None, None, None, None], 'documents': ['또 다른 공격 벡터는 모델의 시스템 프롬프트이다. 수기스에 따르면시스템 프롬프트는 일반 사용자에게 보통 공개되지 않는다. 시스템 프롬프트는 모델이 원치 않거나 비윤리적인 행동을 인식하는 안전망을 포함하고 있기에 중요하다. 수기스는 “해커가 시스템 프롬프트에 접근해서 모델을 공격하는 방법을 알아낼 수 있다”라고 설명했다.', '오픈소스 그룹 일각에서는 AI 모델에 가드레일(허용 가능한 범위를 두는 일종의 가이드라인 또는 도구)을 두는 것 자체를 반대하기도 한다. 모델에 아무런 제한 없어야 더 나은 성능을 발휘할 것이라 믿는 곳도 있다. 기업은 현재 사용하는 오픈소스 모델이 가드레일에 대해 어떤 방향을 추구하는지조차 잘 모를 수도 있다.\n수기스는 “현재 오픈소스 생성형 AI 모델의 안전성을 평가하는 독립적인 기관은 없다”라며 “유럽의 AI 법은 이러한 문서를 일부 요구할 것이지만, 대부분의 조항은 2026년에야 시행될 것”이라고 밝혔다. 또한 수기스는 “나라면 가능한 한 많은 문서를 확보하고, 모델을 테스트 및 평가하고, 회사 내부에 몇 가지 보호 장치를 마련할 것”이라고 밝혔다.', '사실 많은 사람이 AI 표준에 대해 이야기할 때 윤리, 개인정보 보호, 설명 가능성 등을 이야기한다. 실제로 작년 12월에 발표된 ISO/IEC 42001 표준과 같은 작업이 해당 영역을 다루고 있다. 그리고 지난 4월 미국 국립표준기술연구소(NIST)는 AI 관련 공통 언어를 제시하는 등 AI 표준 계획 초안을 발표했다. 여기에선 주로 위험과 거버넌스 문제에 초점을 맞추고 있다. 그럼에도 기술 표준에 관해서는 아직 정해진 것이 많지 않다.\n클라우드 네이티브 컴퓨팅 재단의 CIO인 테일러 돌잘은 “표준에 대한 논의는 매우 초기 단계에 머물러 있다”라며 ”단 데이터 분류, 학습 데이터, API, 프롬프트에 대한 표준 형식에 대해 의미 있는 논의가 이뤄지고 있다”라고 말했다. 그래도 아직 ‘논의’하는 수준일 뿐이다.', '업계 전체에 전문성이 부족하다는 점은 새로운 문제를 야기한다. 원래 오픈소스의 장점 중 하나는 수많은 사람이 코드를 살펴보고 프로그래밍 오류, 보안 취약점 및 기타 약점을 발견할 수 있다는 부분이다. 마치 외부의 ‘천개의 눈’으로 문제점을 공동으로 확인하는 셈이다. 기존의 오픈소스 소프트웨어야 수많은 전문가가 있어 천개의 눈을 가질 수 있었지만 AI 분야에서는 전문가가 부족하다. 천개의 눈을 아직 모으지 못했으니 보안 취약점에 제대로 대응하지 못할 수도 있다.', '예술가, 작가, 기타 저작권 소유자들이 대형 AI 기업을 상대로 소송을 제기하고 있다. 하지만 오픈소스 모델이 지적재산권을 침해하고, 그 모델을 제품이나 서비스에 도입한 기업들만 큰돈을 벌고 있다면 어떻게 될까? 기업 사용자가 소송을 당할 수도 있을까?\nEY의 구아레라는 “잠재적인 위험성은 있다. 법원에서 진행 중인 관련 소송이 어떤 결과를 맞이할지는 아직 아무도 모른다”라며 “데이터세트에 대한 보상이 있어야 하는 사회로 향하고 있을지도 모른다”라고 분석했다. 또한 구아레라는 “대형 기술 업체는 앞으로 늘어날 저작권 관련 위기를 극복하고 필요한 자금을 확보할 수 있는 더 나은 위치에 있다”라고 평가했다.', '반면에 악의적인 공격자는 접근하기 쉬운 오픈소스 모델을 무료로 다운로드하여 자신의 환경에서 실행하며 해킹을 시도할 수 있다. 또한 모델이 사용하는 시스템 프롬프트와 안전 기능까지 다 볼 수 있기 때문에 탈옥을 위한 유리한 고지를 선점할 수 있다. 기업에선 오픈소스 AI 모델 전문 보안 담당자가 없는 경우가 많기 때문에 이런 공격에 취약할 수 있다. 라오는 “예를 들어 공격자는 학습 데이터를 분석하여 모델이 이미지를 잘못 식별하거나 사용자가 인식하지 못하게 문제 없어 보이는 프롬프트를 만드는 방법을 알아낼 수 있다”라고 설명했다.\nAI 모델 출력물에 워터마크를 추가해도 공격을 막지 못할 수도 있다. 악의적인 공격자가 코드를 분석 및 리버스 엔지니어링을 통해 워터마크를 제거할 수 있기 때문이다. 또한 공격자는 모델이나 기타 지원 코드 및 도구를 분석하여 취약한 영역을 찾을 수도 있다.\n컨설팅 업체인 노탈(Nortal)의 수석 데이터 과학자인 엘레나 수기스는 “공격자는 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있다”라며 “모델이 특정 시스템의 일부이고 모델 출력 결과가 시스템의 다른 부분에서 사용되는 경우 문제가 될 수 있다. 특히 모델의 출력 생성 방식을 공격할 수 있다면 전체 시스템이 중단될 수 있다. 기업에 매우 위험한 일이다”라고 말했다.', 'LLM 공격 중 유명한 것에 탈옥(jailbreak)이라는 수법이 있다. 탈옥은 의도적으로 사용자가 제시한 지침을 어기게 하고 멀웨어를 생성하도록 속이는 교묘한 프롬프트를 만드는 것이다. 일부 벤더는 탈옥 현상을 파악해서 알려주고 막는 서비스를 제공하고 있다. 오픈소스 모델에 보내는 메시지에 접근하며 의심스러운 활동의 징후를 모니터링하는 벤더도 있다.\n악의적인 공격자가 비공개 환경에서 실행되는 엔터프라이즈 버전의 제품을 구매할 가능성은 낮다. 애초에 프롬프트 정보가 기업 내부에서만 입력되고 벤더에게 전송되지 않기 때문이다.', '현재 오픈소스 AI 라이선스 유형은 다양한 만큼 매우 복잡하다. 오픈소스 AI 모델을 이용하려면 상업적으로 사용해도 괜찮은지, 수정 및 배포가 가능한지, 사내 코드 베이스에 안전하게 통합할 수 있는지 등을 알아봐야 한다. 여기에 몇 가지 새로운 문제가 등장했다. 일단 이전에는 볼 수 없는 제약이 오픈소스 라이선스에 적용됐다.\n메타의 라마(Llama) 라이선스를 예로 보자. 라마는 높은 인기를 자랑하는 오픈소스 LLM이다. 메타는 라마에 대해 ‘개방형 접근권을 제공하고 잠재적인 오용 문제를 해결하기 맞춤형 상용 라이선스 모델’을 적용한다고 밝혔다. 또한 이에 대해 ‘책임 및 보호 조치의 균형을 맞추기 위한 조치’라고 소개하고 있다.\n이런 라이선스 하에 기업은 상업적으로 라마 모델을 사용할 수 있고 개발자는 기본 라마 모델 위에 추가 작업을 만들어 배포할 수 있다. 단 다른 LLM을 개선하기 위해 라마가 출력하는 결과물을 활용할 수는 없다. (라마 파생 모델은 제외된다.) 또한 기업 또는 그 계열사의 월간 사용자가 700명을 초과하는 경우, 메타에게 라이선스 사용 허락을 요청해야 한다. 메타는 이를 승인하거나 승인하지 않을 수 있다. 어떤 기업에서 라마 3를 사용해서 뭔가를 만들었다면, 눈에 잘 띄는 위치에 ‘Built with Llama 3(라마 3를 기반으로 구축했음)’라는 문구를 표기해야 한다.', '오픈소스는 스스로 해야 하는 작업이 많을 수 있다. 기업은 코드를 다운로드할 수는 있지만, 제대로 작동시키려면 사내 전문가나 외부 컨설턴트가 필요할 수 있다. 이는 생성형 AI 분야에서 큰 문제다. 이제 막 나온 기술과 관련해서 수년간의 경험을 가진 사람은 존재할 수 없다. 라오는 그런면에서 생성형 AI를 완전 처음 시작하거나 빠르게 도입하고 싶은 기업이라면 차라리 상용 플랫폼으로 시작하는 것이 더 안전하다고 조언했다.\n라오는 “오픈소스 버전을 다운로드하려면 전문 지식이 필요하다”라며 “개념 증명을 완료하고 모델을 실제 제품에 배포 후 비용이 늘어나고 있다면, 오픈소스의 대안을 본격적으로 살펴봐야 할 것”이라고 설명했다.', '생성형 AI 프로젝트는 단순한 코드 그 이상이기 때문에 잠재적으로 보안 위협에 노출될 수 있는 영역이 더 많다. LLM은 여러 방면에서 악의적인 공격을 받을 수 있다. 수기스에 따르면, 이들은 관리가 제대로 이루어지지 않는 프로젝트의 개발팀에 침투하여 소프트웨어에 바로 악성 코드를 추가할 수 있다. 거기서 끝나지 않고 훈련 데이터, 미세 조정 또는 가중치까지 오염시킬 수 있다.\n수기스는 “해커는 예시 악성 코드로 모델을 재학습시켜 사용자 인프라에 침입할 수 있다”라며 “또는 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수도 있다”라고 설명했다.', '오픈소스 기술을 소비하는 기업이 표준과 호환성을 중시하는 경우가 많다. 그래서 사용자 주도의 오픈소스 프로젝트는 보통 기존에 나온 표준을 따를 때가 많다.\n실제로 리눅스 재단이 약 500명의 기술 전문가를 대상으로 진행한 작년 설문조사에 따르면, 71%가 개방형 표준을 선호하는 반면, 폐쇄형 표준을 선호하는 응답자는 10%에 불과했다. 보통 상용 소프트웨어 업체는 고객이 자사 기술 생태계에 갇혀 있는 것을 선호한다. 오픈소스 기술은 다를 것이라고 기대할 수 있지만, 표준을 따르지 않는 생성형 AI 기술은 꽤 있다.', '메타와 유사하게 애플은 ‘애플 샘플 코드 라이선스’하에 오픈ELM을 출시했다. 이 라이선스 역시 특허권은 제외하고 저작권 권한만 명시하고 있다. 애플이나 메타 모두 일반적으로 통용되는 오픈소스 라이선스를 사용하지는 않지만, 실제로 코드는 공개되어 있다. 여기에 애플은 실제로 코드뿐만 아니라 모델 가중치, 훈련 데이터 세트, 훈련 로그, 사전 훈련 구성도 공개했다.\n이제 오픈소스 라이선스의 또 다른 측면을 살펴보자. 기존의 오픈소스 소프트웨어에서 핵심은 ‘코드’였다. 그리고 그 코드를 통해 소프트웨어가 어떤 기능을 하는지, 잠재적인 문제나 취약점이 있는지 확인할 수 있었다.\n하지만 생성형 AI는 단순한 코드가 아니다. 학습 데이터, 모델 가중치, 미세 조정도 마찬가지다. 이러한 모든 요소는 모델의 작동 방식을 이해하고 잠재적인 편향을 파악하는 데 매우 중요다. 예를 들어, 평평한 지구 음모론에 대한 자료를 학습한 모델은 과학 관련 질문에 제대로 답하지 못할 수 있다. 북한 해커가 미세 조정한 모델은 멀웨어를 정확하게 식별하지 못할 수 있다. 그렇다면 오픈소스 LLM은 이러한 모든 정보를 공개할까? 모델에 따라 다르다. 심지어 버전에 따라 다를 수도 있다. 그만큼 관련된 업계 표준이 없다.\n카네기멜론 대학교의 AI 교수이자 전 PwC의 글로벌 AI 사업 총괄이었 아난드 라오는 “AI 모델에서 코드를 공개하는 경우도 있지만, 미세 조정 관련 정보가 없다면 비슷한 성능을 얻기 위해 많은 비용을 지출할 수 있다”라고 설명했다.', '노탈의 수기스는 “대형 벤더는 학습 데이터를 구입하고 소송을 벌이는 데 쓸 돈이 있을 뿐만 아니라, 선별된 데이터 세트에 쓸 돈도 있다”라고 설명했다. 무료로 공개된 데이터 세트에는 합법적인 콘텐츠만 있는 것이 아니다. 일부는 저작권이 있는데 허가 없이 포함된 상태일 수 있다. 거기다 부정확하고 편향된 정보, 멀웨어 및 출력 품질을 저하시킬 수 있는 기타 자료도 들어가 있다.\n수기스는 “많은 모델 개발자가 큐레이션된 데이터를 사용하자고 이야기하고 있다”라며 “하지만 그렇게 하려면 인터넷 전체를 학습시키는 것보다 비용이 더 많이 든다”라고 밝혔다. '], 'uris': None, 'data': None}
(2) 질문으로 유사도 높은 문서 조회하기
# 문서 조회 : 유사도 점수도 함께 조회
query = "생성형 AI 도입시 예상되는 보안 위협은 어떤 것들이 있어?" # 질문할 문장
k = 5 # 유사도 상위 k 개 문서 가져오기.
result = database.similarity_search_with_score(query, k = k) #← 데이터베이스에서 유사도가 높은 문서를 가져옴
print(result)
print('-'*50)
for doc in result:
print(f"유사도 점수 : {round(doc[1], 5)}, 문서 내용: {doc[0].page_content}") # 문서 내용 표시
print('*'*10)
[(Document(page_content='생성형 AI 프로젝트는 단순한 코드 그 이상이기 때문에 잠재적으로 보안 위협에 노출될 수 있는 영역이 더 많다. LLM은 여러 방면에서 악의적인 공격을 받을 수 있다. 수기스에 따르면, 이들은 관리가 제대로 이루어지지 않는 프로젝트의 개발팀에 침투하여 소프트웨어에 바로 악성 코드를 추가할 수 있다. 거기서 끝나지 않고 훈련 데이터, 미세 조정 또는 가중치까지 오염시킬 수 있다.\n수기스는 “해커는 예시 악성 코드로 모델을 재학습시켜 사용자 인프라에 침입할 수 있다”라며 “또는 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수도 있다”라고 설명했다.'), 0.2519096048124197), (Document(page_content='사실 많은 사람이 AI 표준에 대해 이야기할 때 윤리, 개인정보 보호, 설명 가능성 등을 이야기한다. 실제로 작년 12월에 발표된 ISO/IEC 42001 표준과 같은 작업이 해당 영역을 다루고 있다. 그리고 지난 4월 미국 국립표준기술연구소(NIST)는 AI 관련 공통 언어를 제시하는 등 AI 표준 계획 초안을 발표했다. 여기에선 주로 위험과 거버넌스 문제에 초점을 맞추고 있다. 그럼에도 기술 표준에 관해서는 아직 정해진 것이 많지 않다.\n클라우드 네이티브 컴퓨팅 재단의 CIO인 테일러 돌잘은 “표준에 대한 논의는 매우 초기 단계에 머물러 있다”라며 ”단 데이터 분류, 학습 데이터, API, 프롬프트에 대한 표준 형식에 대해 의미 있는 논의가 이뤄지고 있다”라고 말했다. 그래도 아직 ‘논의’하는 수준일 뿐이다.'), 0.2645925343300896), (Document(page_content='오픈소스 그룹 일각에서는 AI 모델에 가드레일(허용 가능한 범위를 두는 일종의 가이드라인 또는 도구)을 두는 것 자체를 반대하기도 한다. 모델에 아무런 제한 없어야 더 나은 성능을 발휘할 것이라 믿는 곳도 있다. 기업은 현재 사용하는 오픈소스 모델이 가드레일에 대해 어떤 방향을 추구하는지조차 잘 모를 수도 있다.\n수기스는 “현재 오픈소스 생성형 AI 모델의 안전성을 평가하는 독립적인 기관은 없다”라며 “유럽의 AI 법은 이러한 문서를 일부 요구할 것이지만, 대부분의 조항은 2026년에야 시행될 것”이라고 밝혔다. 또한 수기스는 “나라면 가능한 한 많은 문서를 확보하고, 모델을 테스트 및 평가하고, 회사 내부에 몇 가지 보호 장치를 마련할 것”이라고 밝혔다.'), 0.26710133350769), (Document(page_content='반면에 악의적인 공격자는 접근하기 쉬운 오픈소스 모델을 무료로 다운로드하여 자신의 환경에서 실행하며 해킹을 시도할 수 있다. 또한 모델이 사용하는 시스템 프롬프트와 안전 기능까지 다 볼 수 있기 때문에 탈옥을 위한 유리한 고지를 선점할 수 있다. 기업에선 오픈소스 AI 모델 전문 보안 담당자가 없는 경우가 많기 때문에 이런 공격에 취약할 수 있다. 라오는 “예를 들어 공격자는 학습 데이터를 분석하여 모델이 이미지를 잘못 식별하거나 사용자가 인식하지 못하게 문제 없어 보이는 프롬프트를 만드는 방법을 알아낼 수 있다”라고 설명했다.\nAI 모델 출력물에 워터마크를 추가해도 공격을 막지 못할 수도 있다. 악의적인 공격자가 코드를 분석 및 리버스 엔지니어링을 통해 워터마크를 제거할 수 있기 때문이다. 또한 공격자는 모델이나 기타 지원 코드 및 도구를 분석하여 취약한 영역을 찾을 수도 있다.\n컨설팅 업체인 노탈(Nortal)의 수석 데이터 과학자인 엘레나 수기스는 “공격자는 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있다”라며 “모델이 특정 시스템의 일부이고 모델 출력 결과가 시스템의 다른 부분에서 사용되는 경우 문제가 될 수 있다. 특히 모델의 출력 생성 방식을 공격할 수 있다면 전체 시스템이 중단될 수 있다. 기업에 매우 위험한 일이다”라고 말했다.'), 0.26833864413804986), (Document(page_content='예술가, 작가, 기타 저작권 소유자들이 대형 AI 기업을 상대로 소송을 제기하고 있다. 하지만 오픈소스 모델이 지적재산권을 침해하고, 그 모델을 제품이나 서비스에 도입한 기업들만 큰돈을 벌고 있다면 어떻게 될까? 기업 사용자가 소송을 당할 수도 있을까?\nEY의 구아레라는 “잠재적인 위험성은 있다. 법원에서 진행 중인 관련 소송이 어떤 결과를 맞이할지는 아직 아무도 모른다”라며 “데이터세트에 대한 보상이 있어야 하는 사회로 향하고 있을지도 모른다”라고 분석했다. 또한 구아레라는 “대형 기술 업체는 앞으로 늘어날 저작권 관련 위기를 극복하고 필요한 자금을 확보할 수 있는 더 나은 위치에 있다”라고 평가했다.'), 0.27547543168162303)] -------------------------------------------------- 유사도 점수 : 0.25191, 문서 내용: 생성형 AI 프로젝트는 단순한 코드 그 이상이기 때문에 잠재적으로 보안 위협에 노출될 수 있는 영역이 더 많다. LLM은 여러 방면에서 악의적인 공격을 받을 수 있다. 수기스에 따르면, 이들은 관리가 제대로 이루어지지 않는 프로젝트의 개발팀에 침투하여 소프트웨어에 바로 악성 코드를 추가할 수 있다. 거기서 끝나지 않고 훈련 데이터, 미세 조정 또는 가중치까지 오염시킬 수 있다. 수기스는 “해커는 예시 악성 코드로 모델을 재학습시켜 사용자 인프라에 침입할 수 있다”라며 “또는 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수도 있다”라고 설명했다. ********** 유사도 점수 : 0.26459, 문서 내용: 사실 많은 사람이 AI 표준에 대해 이야기할 때 윤리, 개인정보 보호, 설명 가능성 등을 이야기한다. 실제로 작년 12월에 발표된 ISO/IEC 42001 표준과 같은 작업이 해당 영역을 다루고 있다. 그리고 지난 4월 미국 국립표준기술연구소(NIST)는 AI 관련 공통 언어를 제시하는 등 AI 표준 계획 초안을 발표했다. 여기에선 주로 위험과 거버넌스 문제에 초점을 맞추고 있다. 그럼에도 기술 표준에 관해서는 아직 정해진 것이 많지 않다. 클라우드 네이티브 컴퓨팅 재단의 CIO인 테일러 돌잘은 “표준에 대한 논의는 매우 초기 단계에 머물러 있다”라며 ”단 데이터 분류, 학습 데이터, API, 프롬프트에 대한 표준 형식에 대해 의미 있는 논의가 이뤄지고 있다”라고 말했다. 그래도 아직 ‘논의’하는 수준일 뿐이다. ********** 유사도 점수 : 0.2671, 문서 내용: 오픈소스 그룹 일각에서는 AI 모델에 가드레일(허용 가능한 범위를 두는 일종의 가이드라인 또는 도구)을 두는 것 자체를 반대하기도 한다. 모델에 아무런 제한 없어야 더 나은 성능을 발휘할 것이라 믿는 곳도 있다. 기업은 현재 사용하는 오픈소스 모델이 가드레일에 대해 어떤 방향을 추구하는지조차 잘 모를 수도 있다. 수기스는 “현재 오픈소스 생성형 AI 모델의 안전성을 평가하는 독립적인 기관은 없다”라며 “유럽의 AI 법은 이러한 문서를 일부 요구할 것이지만, 대부분의 조항은 2026년에야 시행될 것”이라고 밝혔다. 또한 수기스는 “나라면 가능한 한 많은 문서를 확보하고, 모델을 테스트 및 평가하고, 회사 내부에 몇 가지 보호 장치를 마련할 것”이라고 밝혔다. ********** 유사도 점수 : 0.26834, 문서 내용: 반면에 악의적인 공격자는 접근하기 쉬운 오픈소스 모델을 무료로 다운로드하여 자신의 환경에서 실행하며 해킹을 시도할 수 있다. 또한 모델이 사용하는 시스템 프롬프트와 안전 기능까지 다 볼 수 있기 때문에 탈옥을 위한 유리한 고지를 선점할 수 있다. 기업에선 오픈소스 AI 모델 전문 보안 담당자가 없는 경우가 많기 때문에 이런 공격에 취약할 수 있다. 라오는 “예를 들어 공격자는 학습 데이터를 분석하여 모델이 이미지를 잘못 식별하거나 사용자가 인식하지 못하게 문제 없어 보이는 프롬프트를 만드는 방법을 알아낼 수 있다”라고 설명했다. AI 모델 출력물에 워터마크를 추가해도 공격을 막지 못할 수도 있다. 악의적인 공격자가 코드를 분석 및 리버스 엔지니어링을 통해 워터마크를 제거할 수 있기 때문이다. 또한 공격자는 모델이나 기타 지원 코드 및 도구를 분석하여 취약한 영역을 찾을 수도 있다. 컨설팅 업체인 노탈(Nortal)의 수석 데이터 과학자인 엘레나 수기스는 “공격자는 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있다”라며 “모델이 특정 시스템의 일부이고 모델 출력 결과가 시스템의 다른 부분에서 사용되는 경우 문제가 될 수 있다. 특히 모델의 출력 생성 방식을 공격할 수 있다면 전체 시스템이 중단될 수 있다. 기업에 매우 위험한 일이다”라고 말했다. ********** 유사도 점수 : 0.27548, 문서 내용: 예술가, 작가, 기타 저작권 소유자들이 대형 AI 기업을 상대로 소송을 제기하고 있다. 하지만 오픈소스 모델이 지적재산권을 침해하고, 그 모델을 제품이나 서비스에 도입한 기업들만 큰돈을 벌고 있다면 어떻게 될까? 기업 사용자가 소송을 당할 수도 있을까? EY의 구아레라는 “잠재적인 위험성은 있다. 법원에서 진행 중인 관련 소송이 어떤 결과를 맞이할지는 아직 아무도 모른다”라며 “데이터세트에 대한 보상이 있어야 하는 사회로 향하고 있을지도 모른다”라고 분석했다. 또한 구아레라는 “대형 기술 업체는 앞으로 늘어날 저작권 관련 위기를 극복하고 필요한 자금을 확보할 수 있는 더 나은 위치에 있다”라고 평가했다. **********
(3) 질문에 대한 답변 받기
절차
질문을 받아
유사도 높은 문서를 DB에서 검색(RAG)
질문과 유사도높은 문서로 프롬프트 구성
GPT에 질문하고 답변 받기
RetrievalQA
랭체인에서 제공하는 체인 함수
RAG + QA
query
'생성형 AI 도입시 예상되는 보안 위협은 어떤 것들이 있어?'
chat = ChatOpenAI(model="gpt-3.5-turbo")
retriever = database.as_retriever()
qa = RetrievalQA.from_llm(llm=chat, retriever=retriever, return_source_documents=True, )
result = qa(query) # 질문 ->
print(result["result"]) # 대답 출력
생성형 AI 도입시 예상되는 보안 위협은 다음과 같은 것들이 있을 수 있습니다: 1. 해커가 악성 코드를 추가하여 소프트웨어에 침입할 수 있음 2. 훈련 데이터, 미세 조정 또는 가중치를 오염시킬 수 있음 3. 모델을 재학습시켜 사용자 인프라에 침입할 수 있음 4. 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수 있음 5. 접근하기 쉬운 오픈소스 모델을 이용하여 해킹 시도가 가능함 6. 모델이 사용하는 시스템 프롬프트와 안전 기능을 이용하여 악의적인 공격자가 공격을 시도할 수 있음 7. 모델 출력물에 워터마크를 추가하여도 공격을 막을 수 없음 8. 공격자가 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있음.
- 유사도 높은 문서 4개를 조회하는 것이 기본값임.
result
{'query': '생성형 AI 도입시 예상되는 보안 위협은 어떤 것들이 있어?', 'result': '생성형 AI 도입시 예상되는 보안 위협은 다음과 같은 것들이 있을 수 있습니다:\n1. 해커가 악성 코드를 추가하여 소프트웨어에 침입할 수 있음\n2. 훈련 데이터, 미세 조정 또는 가중치를 오염시킬 수 있음\n3. 모델을 재학습시켜 사용자 인프라에 침입할 수 있음\n4. 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수 있음\n5. 접근하기 쉬운 오픈소스 모델을 이용하여 해킹 시도가 가능함\n6. 모델이 사용하는 시스템 프롬프트와 안전 기능을 이용하여 악의적인 공격자가 공격을 시도할 수 있음\n7. 모델 출력물에 워터마크를 추가하여도 공격을 막을 수 없음\n8. 공격자가 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있음.', 'source_documents': [Document(page_content='생성형 AI 프로젝트는 단순한 코드 그 이상이기 때문에 잠재적으로 보안 위협에 노출될 수 있는 영역이 더 많다. LLM은 여러 방면에서 악의적인 공격을 받을 수 있다. 수기스에 따르면, 이들은 관리가 제대로 이루어지지 않는 프로젝트의 개발팀에 침투하여 소프트웨어에 바로 악성 코드를 추가할 수 있다. 거기서 끝나지 않고 훈련 데이터, 미세 조정 또는 가중치까지 오염시킬 수 있다.\n수기스는 “해커는 예시 악성 코드로 모델을 재학습시켜 사용자 인프라에 침입할 수 있다”라며 “또는 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수도 있다”라고 설명했다.'), Document(page_content='사실 많은 사람이 AI 표준에 대해 이야기할 때 윤리, 개인정보 보호, 설명 가능성 등을 이야기한다. 실제로 작년 12월에 발표된 ISO/IEC 42001 표준과 같은 작업이 해당 영역을 다루고 있다. 그리고 지난 4월 미국 국립표준기술연구소(NIST)는 AI 관련 공통 언어를 제시하는 등 AI 표준 계획 초안을 발표했다. 여기에선 주로 위험과 거버넌스 문제에 초점을 맞추고 있다. 그럼에도 기술 표준에 관해서는 아직 정해진 것이 많지 않다.\n클라우드 네이티브 컴퓨팅 재단의 CIO인 테일러 돌잘은 “표준에 대한 논의는 매우 초기 단계에 머물러 있다”라며 ”단 데이터 분류, 학습 데이터, API, 프롬프트에 대한 표준 형식에 대해 의미 있는 논의가 이뤄지고 있다”라고 말했다. 그래도 아직 ‘논의’하는 수준일 뿐이다.'), Document(page_content='오픈소스 그룹 일각에서는 AI 모델에 가드레일(허용 가능한 범위를 두는 일종의 가이드라인 또는 도구)을 두는 것 자체를 반대하기도 한다. 모델에 아무런 제한 없어야 더 나은 성능을 발휘할 것이라 믿는 곳도 있다. 기업은 현재 사용하는 오픈소스 모델이 가드레일에 대해 어떤 방향을 추구하는지조차 잘 모를 수도 있다.\n수기스는 “현재 오픈소스 생성형 AI 모델의 안전성을 평가하는 독립적인 기관은 없다”라며 “유럽의 AI 법은 이러한 문서를 일부 요구할 것이지만, 대부분의 조항은 2026년에야 시행될 것”이라고 밝혔다. 또한 수기스는 “나라면 가능한 한 많은 문서를 확보하고, 모델을 테스트 및 평가하고, 회사 내부에 몇 가지 보호 장치를 마련할 것”이라고 밝혔다.'), Document(page_content='반면에 악의적인 공격자는 접근하기 쉬운 오픈소스 모델을 무료로 다운로드하여 자신의 환경에서 실행하며 해킹을 시도할 수 있다. 또한 모델이 사용하는 시스템 프롬프트와 안전 기능까지 다 볼 수 있기 때문에 탈옥을 위한 유리한 고지를 선점할 수 있다. 기업에선 오픈소스 AI 모델 전문 보안 담당자가 없는 경우가 많기 때문에 이런 공격에 취약할 수 있다. 라오는 “예를 들어 공격자는 학습 데이터를 분석하여 모델이 이미지를 잘못 식별하거나 사용자가 인식하지 못하게 문제 없어 보이는 프롬프트를 만드는 방법을 알아낼 수 있다”라고 설명했다.\nAI 모델 출력물에 워터마크를 추가해도 공격을 막지 못할 수도 있다. 악의적인 공격자가 코드를 분석 및 리버스 엔지니어링을 통해 워터마크를 제거할 수 있기 때문이다. 또한 공격자는 모델이나 기타 지원 코드 및 도구를 분석하여 취약한 영역을 찾을 수도 있다.\n컨설팅 업체인 노탈(Nortal)의 수석 데이터 과학자인 엘레나 수기스는 “공격자는 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있다”라며 “모델이 특정 시스템의 일부이고 모델 출력 결과가 시스템의 다른 부분에서 사용되는 경우 문제가 될 수 있다. 특히 모델의 출력 생성 방식을 공격할 수 있다면 전체 시스템이 중단될 수 있다. 기업에 매우 위험한 일이다”라고 말했다.')]}
- 유사도 높은 문서 k개로부터 프롬프트 구성하여 질의하기
k = 6
retriever = database.as_retriever(search_kwargs={"k": k})
qa = RetrievalQA.from_llm(llm=chat, retriever=retriever, return_source_documents=True, )
result = qa(query)
result
{'query': '생성형 AI 도입시 예상되는 보안 위협은 어떤 것들이 있어?', 'result': '생성형 AI 도입시 예상되는 보안 위협으로는 악의적인 공격자가 프로젝트의 개발팀에 침투하여 악성 코드를 추가하거나 훈련 데이터, 미세 조정, 가중치를 오염시키는 등의 위협이 있을 수 있습니다. 또한 오픈소스 AI 모델을 다운로드하여 실행하고 해킹을 시도하는 공격자, 모델의 시스템 프롬프트와 안전 기능을 공격하여 유리한 고지를 차지하는 공격자, 모델의 출력물에 워터마크를 추가해도 공격을 막지 못하는 가능성도 있습니다. 그 외에도 모델이 특정 시스템의 일부이고 시스템의 다른 부분에서 사용되는 경우 전체 시스템이 중단될 수 있는 위협도 있을 수 있습니다. 이러한 보안 위협을 고려하여 적절한 보호 장치를 마련하는 것이 중요합니다.', 'source_documents': [Document(page_content='생성형 AI 프로젝트는 단순한 코드 그 이상이기 때문에 잠재적으로 보안 위협에 노출될 수 있는 영역이 더 많다. LLM은 여러 방면에서 악의적인 공격을 받을 수 있다. 수기스에 따르면, 이들은 관리가 제대로 이루어지지 않는 프로젝트의 개발팀에 침투하여 소프트웨어에 바로 악성 코드를 추가할 수 있다. 거기서 끝나지 않고 훈련 데이터, 미세 조정 또는 가중치까지 오염시킬 수 있다.\n수기스는 “해커는 예시 악성 코드로 모델을 재학습시켜 사용자 인프라에 침입할 수 있다”라며 “또는 가짜 뉴스와 잘못된 정보로 모델을 훈련시킬 수도 있다”라고 설명했다.'), Document(page_content='사실 많은 사람이 AI 표준에 대해 이야기할 때 윤리, 개인정보 보호, 설명 가능성 등을 이야기한다. 실제로 작년 12월에 발표된 ISO/IEC 42001 표준과 같은 작업이 해당 영역을 다루고 있다. 그리고 지난 4월 미국 국립표준기술연구소(NIST)는 AI 관련 공통 언어를 제시하는 등 AI 표준 계획 초안을 발표했다. 여기에선 주로 위험과 거버넌스 문제에 초점을 맞추고 있다. 그럼에도 기술 표준에 관해서는 아직 정해진 것이 많지 않다.\n클라우드 네이티브 컴퓨팅 재단의 CIO인 테일러 돌잘은 “표준에 대한 논의는 매우 초기 단계에 머물러 있다”라며 ”단 데이터 분류, 학습 데이터, API, 프롬프트에 대한 표준 형식에 대해 의미 있는 논의가 이뤄지고 있다”라고 말했다. 그래도 아직 ‘논의’하는 수준일 뿐이다.'), Document(page_content='오픈소스 그룹 일각에서는 AI 모델에 가드레일(허용 가능한 범위를 두는 일종의 가이드라인 또는 도구)을 두는 것 자체를 반대하기도 한다. 모델에 아무런 제한 없어야 더 나은 성능을 발휘할 것이라 믿는 곳도 있다. 기업은 현재 사용하는 오픈소스 모델이 가드레일에 대해 어떤 방향을 추구하는지조차 잘 모를 수도 있다.\n수기스는 “현재 오픈소스 생성형 AI 모델의 안전성을 평가하는 독립적인 기관은 없다”라며 “유럽의 AI 법은 이러한 문서를 일부 요구할 것이지만, 대부분의 조항은 2026년에야 시행될 것”이라고 밝혔다. 또한 수기스는 “나라면 가능한 한 많은 문서를 확보하고, 모델을 테스트 및 평가하고, 회사 내부에 몇 가지 보호 장치를 마련할 것”이라고 밝혔다.'), Document(page_content='반면에 악의적인 공격자는 접근하기 쉬운 오픈소스 모델을 무료로 다운로드하여 자신의 환경에서 실행하며 해킹을 시도할 수 있다. 또한 모델이 사용하는 시스템 프롬프트와 안전 기능까지 다 볼 수 있기 때문에 탈옥을 위한 유리한 고지를 선점할 수 있다. 기업에선 오픈소스 AI 모델 전문 보안 담당자가 없는 경우가 많기 때문에 이런 공격에 취약할 수 있다. 라오는 “예를 들어 공격자는 학습 데이터를 분석하여 모델이 이미지를 잘못 식별하거나 사용자가 인식하지 못하게 문제 없어 보이는 프롬프트를 만드는 방법을 알아낼 수 있다”라고 설명했다.\nAI 모델 출력물에 워터마크를 추가해도 공격을 막지 못할 수도 있다. 악의적인 공격자가 코드를 분석 및 리버스 엔지니어링을 통해 워터마크를 제거할 수 있기 때문이다. 또한 공격자는 모델이나 기타 지원 코드 및 도구를 분석하여 취약한 영역을 찾을 수도 있다.\n컨설팅 업체인 노탈(Nortal)의 수석 데이터 과학자인 엘레나 수기스는 “공격자는 특정 요청을 계속 보내 인프라를 과부하시켜 모델이 작동하지 않도록 만들 수 있다”라며 “모델이 특정 시스템의 일부이고 모델 출력 결과가 시스템의 다른 부분에서 사용되는 경우 문제가 될 수 있다. 특히 모델의 출력 생성 방식을 공격할 수 있다면 전체 시스템이 중단될 수 있다. 기업에 매우 위험한 일이다”라고 말했다.'), Document(page_content='예술가, 작가, 기타 저작권 소유자들이 대형 AI 기업을 상대로 소송을 제기하고 있다. 하지만 오픈소스 모델이 지적재산권을 침해하고, 그 모델을 제품이나 서비스에 도입한 기업들만 큰돈을 벌고 있다면 어떻게 될까? 기업 사용자가 소송을 당할 수도 있을까?\nEY의 구아레라는 “잠재적인 위험성은 있다. 법원에서 진행 중인 관련 소송이 어떤 결과를 맞이할지는 아직 아무도 모른다”라며 “데이터세트에 대한 보상이 있어야 하는 사회로 향하고 있을지도 모른다”라고 분석했다. 또한 구아레라는 “대형 기술 업체는 앞으로 늘어날 저작권 관련 위기를 극복하고 필요한 자금을 확보할 수 있는 더 나은 위치에 있다”라고 평가했다.'), Document(page_content='오픈소스는 스스로 해야 하는 작업이 많을 수 있다. 기업은 코드를 다운로드할 수는 있지만, 제대로 작동시키려면 사내 전문가나 외부 컨설턴트가 필요할 수 있다. 이는 생성형 AI 분야에서 큰 문제다. 이제 막 나온 기술과 관련해서 수년간의 경험을 가진 사람은 존재할 수 없다. 라오는 그런면에서 생성형 AI를 완전 처음 시작하거나 빠르게 도입하고 싶은 기업이라면 차라리 상용 플랫폼으로 시작하는 것이 더 안전하다고 조언했다.\n라오는 “오픈소스 버전을 다운로드하려면 전문 지식이 필요하다”라며 “개념 증명을 완료하고 모델을 실제 제품에 배포 후 비용이 늘어나고 있다면, 오픈소스의 대안을 본격적으로 살펴봐야 할 것”이라고 설명했다.')]}
** PDF 파일로 Vector DB 만들기**
from langchain.document_loaders import PyPDFLoader
# !pip install pypdf
# pdf 파일 다운 https://eiec.kdi.re.kr/policy/callDownload.do?num=244119&filenum=2&dtime=20231115052801
loader = PyPDFLoader("D2310160-1.pdf")
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
pages = loader.load_and_split(text_splitter)
pages[:5]
[Document(page_content='발 표 자 료\n에너지스토리지 (ESS) 산업 발전전략\n2023. 10. 31.\n산업통상자원부', metadata={'source': 'D2310160-1.pdf', 'page': 0}), Document(page_content='목 차\nⅠ. 추진 배경· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1\nⅡ. 국내외 ESS 현황· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 2\n \uf000 글로벌 ESS 시장 전망· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 2\n \uf000 주요국 ESS 정책 동향· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 4\n \uf000 국내 ESS 현황· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 6\n \uf000 정책방향 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 7\nⅢ. 비전 및 추진전략 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 8\nⅣ. 세부 추진 과제· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9', metadata={'source': 'D2310160-1.pdf', 'page': 1}), Document(page_content='Ⅳ. 세부 추진 과제· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9\n \uf000 장기 스토리지믹스 최적화 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9\n \uf000 시장 참여 활성화 및 보급 확대· · · · · · · · · · · · · · · · · · · · · · · · · · 12\n \uf000 시장선점을 위한 핵심 ESS 기술개발 · · · · · · · · · · · · · · · · · 16\n \uf000 산업기반 조성 및 글로벌 시장 진출· · · · · · · · · · · · · · · · · · · · · · 19\n \uf000 안전관리 체계 강화· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 22\n \nⅤ. 추진 일정· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 24', metadata={'source': 'D2310160-1.pdf', 'page': 1}), Document(page_content='- 1 -I. 추진 배경\n\uf000전원믹스변화에따른유연한전력망구축을위해ESS보급은필수\n ㅇ 재생e, 원전 등경직성전원증가에따른 전력수급불안정성은\nESS 보급을통해완화가능\n * 경직성 전원(신재생 +원전) : (‘21) 34% → (’30) 54.0% → (’36) 65.2%\nㅇ제주도‧\n호남 등재생 e발전비중이높은지역은 과잉발전또는 \n송전망제약으로인하여출력제한증가\n * 재생e 발전비중은 제주(24.3%), 호남(21.5%) 에서 높은 수준(‘23년 1분기) \n * 제주 출력제한 : (‘21) 65회/12.0GWh → (’22) 132회/28.9GWh → (‘23.8) 141회/29.3GWh\nㅇ ESS는재생 e변동성완화 ,송전선로건설지연문제해소 등전력\n계통안정화 및탄소중립에기여하는핵심적도구\n\uf000 침체된국내 ESS시장의활력회복과재도약지원\n ㅇ국내 ESS설치규모는 ‘17년이후급격한성장세를보였으나 ,‘20년\n이후 화재발생 ,지원제도일몰 등으로하락추세지속\n * 국내 ESS 설치 현황(MWh) : (~’17) 1,046 → (‘18) 3,836 → (‘20) 2,866 → (‘22) 252\n ㅇESS통합시스템경쟁력강화 ,수요창출 ,시장중심형지원제도\n설계 ,안전관리개선등다각적인대책마련이시급\n * 배터리 , 변환설비 (PCS), 제어 S/W 등 ESS 전체 구성요소의 경쟁력 강화 필요\n\uf000 급증하는글로벌 ESS시장선점을위한전략마련필요\nㅇ 글로벌 ESS시장은재생 e확대및각국의탄소배출저감정책\n등에따라지속적성장 추세\n * 글로벌 ESS 시장 규모(억$) : (‘22) 152 → (‘25) 266 → (‘30) 395 \nㅇ 미국,중국등주요국은장주기 ESS기술개발 ,설치의무화 ,보조금 \n지급등적극적보급정책을추진중\nㅇ 국내 ESS산업생태계활성화를통해향후글로벌신시장확산에 \n선제적으로대비해나갈필요\n⇒글로벌 ESS시장성장에대비하여기술개발 ,산업기반조성 등을\n통해에너지스토리지를미래전략산업으로육성해나갈필요', metadata={'source': 'D2310160-1.pdf', 'page': 2}), Document(page_content='- 2 -Ⅱ. 국내외 ESS 현황 \n1 글로벌 ESS 시장 전망\n□(시장전망 )재생 e비중증가에대응한적극적인 ESS보급으로글로벌 \nESS설비및시장은급격하게성장할것으로전망\nㅇ (설비규모 )ESS설비규모 (양수제외 )는‘22년43.8GW/91.5GWh 에서 \n‘30년508GW/1,432GWh 으로 10배이상증가할전망 (BNEF, ’23)\n * 양수설비는 ’22년 127GW 에서 ’30년 212GW 로 67% 증가(BNEF, ‘22)\nㅇ (시장규모 )글로벌 ESS연간시장규모는 ’22년152억불에서 ’30년\n395억불까지증가할것으로전망 (’21~’30년총2,620억불 )\n< 글로벌 ESS 누적설치량 전망(GW) > \n < 글로벌 ESS 연간 시장규모 >\n□(국가별 )미국과중국이글로벌 ESS보급량의절반이상을차지하며 ,\n주요선진국에서보급량이지속적으로증가할전망 (BNEF, ’23)\n * 호주는 ’30년까지 발전량 중 재생e 비중 82% 확대 정책에 따라 ESS 시장 급성장 예상\n< 국가별 ESS 누적설치량 현황 및 전망(출력 기준, GW) >\n국가 2022년2030년\n중국 10.9 175.1\n미국 11.7 123.2\n독일 4.6 29.6\n인도 0.1 20.1\n호주 1.8 16.0\n한국 4.1 6.0', metadata={'source': 'D2310160-1.pdf', 'page': 3})]
pages[0].page_content
'발 표 자 료\n에너지스토리지 (ESS) 산업 발전전략\n2023. 10. 31.\n산업통상자원부'
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
directory = "./pdf_db" # 경로 지정 -> 크로마 함수에서 폴더 만들어 줄것임
database = Chroma.from_documents(
pages, # load한 문서
OpenAIEmbeddings(), # Text embedding model
persist_directory=directory # persists the vectors to the file system
)
database.persist()
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
# 검색기 설정
retriever = database.as_retriever(
search_type="similarity", # Cosine Similarity
search_kwargs={"k": 3,}
)
# 모델 설정
chat = ChatOpenAI(model="gpt-3.5-turbo", streaming=True, callbacks=[StreamingStdOutCallbackHandler()])
# QA 체인 설정
qa = RetrievalQA.from_llm(llm=chat, retriever=retriever, return_source_documents=True)
query = '에너지스토리지 (ESS) 산업 발전전략에 대해서 알려줘.'
result = qa(query) # 질문 -> qa -> answer
print(result["result"]) # 대답 출력
에너지스토리지 (ESS) 산업 발전전략은 에너지스토리지 기반의 유연한 전력시스템을 구축하고 세계 3대 ESS 산업 강국으로 도약하는 것을 목표로 합니다. 이를 위한 전략에는 장기 스토리지 믹스 최적화, 시장 참여 활성화 및 보급 확대, 시장 선점을 위한 핵심 ESS 기술개발, 산업기반 조성 및 글로벌 진출 지원, 그리고 안전관리 체계 강화 등이 있습니다. 또한, ESS산업발전협의회를 구성하여 산업기반 조성과 글로벌 시장 진출을 위한 지원 방안을 마련하고 있습니다.에너지스토리지 (ESS) 산업 발전전략은 에너지스토리지 기반의 유연한 전력시스템을 구축하고 세계 3대 ESS 산업 강국으로 도약하는 것을 목표로 합니다. 이를 위한 전략에는 장기 스토리지 믹스 최적화, 시장 참여 활성화 및 보급 확대, 시장 선점을 위한 핵심 ESS 기술개발, 산업기반 조성 및 글로벌 진출 지원, 그리고 안전관리 체계 강화 등이 있습니다. 또한, ESS산업발전협의회를 구성하여 산업기반 조성과 글로벌 시장 진출을 위한 지원 방안을 마련하고 있습니다.
query = '글로벌 ESS 시장 전망에 대해서 알려줘.'
result = qa(query) # 질문 -> qa -> answer
print(result["result"]) # 대답 출력
글로벌 ESS 시장 전망에 따르면, 재생 E비중 증가에 대응하기 위해 적극적인 ESS 보급이 이루어질 것으로 예측됩니다. 이에 따라 글로벌 ESS 설비 및 시장이 급격하게 성장할 것으로 전망되며, ESS 설비 규모는 2022년 43.8GW/91.5GWh 에서 2030년 508GW/1,432GWh 로 10배 이상 증가할 것으로 예상됩니다. 미국과 중국이 글로벌 ESS 보급량의 절반이상을 차지하며, 주요 선진국에서 보급량이 계속해서 증가할 것으로 예측됩니다. 호주는 2030년까지 발전량 중 재생 E 비중을 82%로 확대하는 정책에 따라 ESS 시장이 급격히 성장할 것으로 전망됩니다.글로벌 ESS 시장 전망에 따르면, 재생 E비중 증가에 대응하기 위해 적극적인 ESS 보급이 이루어질 것으로 예측됩니다. 이에 따라 글로벌 ESS 설비 및 시장이 급격하게 성장할 것으로 전망되며, ESS 설비 규모는 2022년 43.8GW/91.5GWh 에서 2030년 508GW/1,432GWh 로 10배 이상 증가할 것으로 예상됩니다. 미국과 중국이 글로벌 ESS 보급량의 절반이상을 차지하며, 주요 선진국에서 보급량이 계속해서 증가할 것으로 예측됩니다. 호주는 2030년까지 발전량 중 재생 E 비중을 82%로 확대하는 정책에 따라 ESS 시장이 급격히 성장할 것으로 전망됩니다.
'KT AIVLE SCHOOL' 카테고리의 다른 글
LangChain 기초 정리 (2) | 2024.06.04 |
---|---|
RAG - 모델이 질문과 모델의 답변을 기억하기 및 이어지는 질문과 답변하기 (0) | 2024.06.04 |
ChatGPT(LLM)와 RAG를 이용하여 '예비 KT 에이블러들을 위한 QA 챗봇 모델' 만들기 (2) | 2024.06.04 |
1. LangChain (RAG) 일단 실행해보기 (0) | 2024.06.04 |
huggingface, gemma 라이센스 (0) | 2024.04.29 |
Contents
소중한 공감 감사합니다