|
|
|
@@ -0,0 +1,457 @@
|
|
|
|
|
{
|
|
|
|
|
"cells": [
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 2,
|
|
|
|
|
"id": "97b6e429",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"### LLM 프레임워크"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"id": "ceaff2f6",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"from langchain_ollama import ChatOllama\n",
|
|
|
|
|
"from langchain_ibm import ChatWatsonx\n",
|
|
|
|
|
"from langchain_core.prompts import PromptTemplate, ChatPromptTemplate\n",
|
|
|
|
|
"from langchain_core.output_parsers import StrOutputParser, JsonOutputParser, PydanticOutputParser\n",
|
|
|
|
|
"from pydantic import BaseModel, Field\n",
|
|
|
|
|
"from typing import Literal\n",
|
|
|
|
|
"from dotenv import load_dotenv\n",
|
|
|
|
|
"import os\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"type"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 14,
|
|
|
|
|
"id": "2e83941f",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"# .env 내용 가져오기\n",
|
|
|
|
|
"load_dotenv()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"apikey = os.getenv(\"WATSONX_API_KEY\")\n",
|
|
|
|
|
"project_id = os.getenv(\"WATSONX_PROJECT_ID\")\n",
|
|
|
|
|
"watsonx_ai_url = os.getenv(\"WATSONX_URL\")\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 36,
|
|
|
|
|
"id": "dc504bf8",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Hello! I'm an AI and don't have feelings, but I'm here and ready to assist you. How can I help you today?\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"watson_lln = ChatWatsonx(\n",
|
|
|
|
|
" model_id = \"ibm/granite-4-h-small\",\n",
|
|
|
|
|
" url = f\"{watsonx_ai_url}\",\n",
|
|
|
|
|
" api_key = f\"{apikey}\",\n",
|
|
|
|
|
" project_id=f\"{project_id}\",\n",
|
|
|
|
|
" max_tokens = 2000\n",
|
|
|
|
|
")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"response = watson_lln.invoke(\"Hello, how are you?\")\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"id": "fc2e1c88",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"### langchain + ollama"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 17,
|
|
|
|
|
"id": "cc8ed21d",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"생성형 AI 는 데이터를 학습하여 새로운 콘텐츠 (문구, 이미지, 음악, 코드 등) 를 창조하는 인공지능 기술입니다. 기존의 인공지능이 데이터를 분석하거나 예측하는 데 중점을 둔 것과 달리, 생성형 AI 는 **창의적인 내용 생성**에 특화되어 있습니다. \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"### 핵심 특징\n",
|
|
|
|
|
"1. **새로운 콘텐츠 생성**: 학습 데이터를 기반으로 질의에 따라 텍스트, 이미지, 오디오 등을 자동 만들어냅니다. \n",
|
|
|
|
|
" - 예: 글 작성, 그림 그리기, 노래 작곡, 코드 생성 등 \n",
|
|
|
|
|
"2. **패턴 학습**: 거대한 데이터셋을 분석하여 언어, 이미지, 행동 등의 패턴을 학습합니다. \n",
|
|
|
|
|
" - 예: GPT 시 계열의 언어 모델은 millions of texts 를 기반으로 문맥과 문법을 파악합니다. \n",
|
|
|
|
|
"3. **맥락 이해**: 요청 사항의 의미나 맥락을 이해하여 답변을 생성합니다. \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"### 주요 기술 및 예시\n",
|
|
|
|
|
"- **LLM (Large Language Models)**: 텍스트를 생성하거나 답변을 제공합니다. (예: GPT-4, Llama, ChatGLM) \n",
|
|
|
|
|
"- **GANs (Generative Adversarial Networks)**: 이미지나 객체를 생성합니다. (예: StyleGAN) \n",
|
|
|
|
|
"- **Diffusion Models**: 이미지 생성에 주로 쓰입니다. (예: DALL-E 3, Stable Diffusion) \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"### 활용 분야\n",
|
|
|
|
|
"- 콘텐츠 작성 (글, 마케팅, 스토리텔링) \n",
|
|
|
|
|
"- 디자인 및 예술 창작 \n",
|
|
|
|
|
"- 프로그래밍 및 코드 생성 \n",
|
|
|
|
|
"- 고객 서비스 (챗봇, 고객 문의 응답) \n",
|
|
|
|
|
"- 의료/교육 등 전문 분야 (의사 추천, 학습 대안 생성 등) \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"### 한계 및 도전과제\n",
|
|
|
|
|
"- **정확성 문제 (Hallucination)**: 학습 데이터에 없는 사실을 허구적으로 생성할 수 있습니다. \n",
|
|
|
|
|
"- **데이터 편향**: 학습 데이터에 내재된 편향이나 민감한 정보 반영 가능. \n",
|
|
|
|
|
"- **윤리적 문제**: 저작권, 개인 정보 보호, 가짜 뉴스 등 고려 필요. \n",
|
|
|
|
|
"- **성능 최적화**: 고비용의 컴퓨팅 리소스와 에너지 소비 문제. \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"생성형 AI 는 인간의 창작 활동을 보완하거나 확장하는 도구로, 기술 발전이 계속되면 더 다양한 분야에서 활용될 것으로 예상됩니다. 다만, 윤리적 문제와 안전성 관리가 함께 고려되어야 합니다.\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"qwen_llm = ChatOllama(model=\"qwen3.5:4b\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"response = qwen_llm.invoke(\"생성형 AI를 설명해줘\")\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 18,
|
|
|
|
|
"id": "c1f464da",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"생성형 AI, 또는 생성적 인공지능(Generative AI)은 주로 딥러닝 기반의 모델로, 주로 데이터 생성과 변형에 특화되어 있습니다. 주요 특징과 적용 분야는 다음과 같습니다:\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"1. **데이터 생성**: 생성형 AI는 텍스트, 이미지, 오디오, 비디오 등 다양한 형태의 데이터를 생성합니다. 예를 들어, 텍스트 생성 모델인 GPT 시리즈나 이미지 생성 모델인 DALL-E나 Stable Diffusion은 학습된 패턴을 바탕으로 새로운 내용이나 시각적 표현을 만들어냅니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"2. **텍스트 생성**:\n",
|
|
|
|
|
" - **GPT (Generative Pre-trained Transformer)**: 광범위한 텍스트 데이터를 학습하여 자연스러운 언어를 생성합니다. 다양한 대화형 시나리오나 창작 글쓰기에 활용됩니다.\n",
|
|
|
|
|
" - **BART (BERT + Transformer)**: 대화형 AI나 다중 작업에서 높은 성능을 보이며, 텍스트 생성과 변형에 효과적입니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"3. **이미지 생성**:\n",
|
|
|
|
|
" - **DALL-E**: 텍스트 설명을 기반으로 정교한 이미지를 생성합니다. 예를 들어, \"빨간색의 현대적인 건물\"이라는 문구로 해당 스타일의 이미지를 만들 수 있습니다.\n",
|
|
|
|
|
" - **Stable Diffusion**: 사용자 친화적인 인터페이스를 제공하며, 다양한 스타일과 해상도의 이미지를 생성할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"4. **음성 생성**:\n",
|
|
|
|
|
" - **Wav2Vec 2.0**: 텍스트를 자연스러운 음성으로 변환하는 데 사용됩니다. 음성 합성 및 대화형 AI 시스템에서 중요한 역할을 합니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"5. **응용 분야**:\n",
|
|
|
|
|
" - **콘텐츠 제작**: 게임, 영화, 음악 산업에서 새로운 콘텐츠 생성에 활용됩니다.\n",
|
|
|
|
|
" - **마케팅 및 광고**: 개인화된 콘텐츠 생성, 광고 문구 제작 등에 활용됩니다.\n",
|
|
|
|
|
" - **교육**: 맞춤형 학습 자료 제공 및 퀴즈 생성 등 교육 도구로 활용됩니다.\n",
|
|
|
|
|
" - **의료**: 질병 진단 지원이나 환자 데이터 분석 등에서 보조 역할을 합니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"생성형 AI는 창의성과 자동화를 결합하여 다양한 분야에서 혁신적인 변화를 가져오고 있습니다. 그러나 윤리적 고려 사항과 데이터 편향성 문제 등도 함께 고려해야 합니다.\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"qwen_llm = ChatOllama(model=\"exaone3.5:2.4b\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"response = qwen_llm.invoke(\"생성형 AI를 설명해줘\")\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"id": "b5fbd806",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"### prompttemplate\n",
|
|
|
|
|
"- 하나의 문자열 프롬프트 생성"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 30,
|
|
|
|
|
"id": "38e55510",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"초급자 수준으로 재귀함수를 설명해줘. 예시 포함\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"# 기본 생성\n",
|
|
|
|
|
"template = PromptTemplate(input_variables=['topic', 'level'], template=\"{level} 수준으로 {topic}를 설명해줘. 예시 포함\")\n",
|
|
|
|
|
"prompt_text = template.format(topic = \"재귀함수\", level = \"초급자\")\n",
|
|
|
|
|
"print(prompt_text)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 32,
|
|
|
|
|
"id": "aeea9e13",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"['level', 'topic']\n",
|
|
|
|
|
"초급자 수준으로 재귀함수를 설명해줘. 예시 포함\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"template = PromptTemplate.from_template(\"{level} 수준으로 {topic}를 설명해줘. 예시 포함\")\n",
|
|
|
|
|
"print(template.input_variables)\n",
|
|
|
|
|
"prompt_text = template.format(topic = \"재귀함수\", level = \"초급자\")\n",
|
|
|
|
|
"print(prompt_text)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 37,
|
|
|
|
|
"id": "95d3e237",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"SQL Injection은 데이터베이스를 공격하는 한 방법으로, 공격자가 웹 애플리케이션의 데이터베이스에 악의적인 SQL 쿼리를 삽입하여 데이터를 조회, 변경, 삭제, 혹은 실행할 수 있는 위협입니다. 주로 사용자 입력을 통해 데이터베이스에 접근하는 웹 애플리케이션에 위험이 있습니다. 예를 들어, 로그인 폼에서 사용자 이름과 비밀번호를 입력할 때, 공격자가 SQL 쿼리를 조작하여 원하지 않은 데이터에 접근할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"SQL Injection 공격을 방지하기 위해서는 사용자 입력을 적절하게 검증하고, 파라미터화된 쿼리(statements)를 사용하며, 데이터베이스의 접근 권한을 최소화하는 등의 보안 조치가 필요합니다. 또한, 웹 애플리케이션에서 출력 데이터를 검증하고 정제하여 크로스 사이트 스크립팅(XSS) 공격 방지에도 도움이 됩니다.\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"template = PromptTemplate.from_template(\"\"\"\\\n",
|
|
|
|
|
"다음 질문에 답하시오.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"질문:\n",
|
|
|
|
|
"{question}\n",
|
|
|
|
|
"\"\"\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"formatted_prompt = template.format(question=\"SQL Injection 이란?\")\n",
|
|
|
|
|
"response = watson_lln.invoke(formatted_prompt)\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 38,
|
|
|
|
|
"id": "9537894c",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"ename": "NameError",
|
|
|
|
|
"evalue": "name 'exaone_llm' is not defined",
|
|
|
|
|
"output_type": "error",
|
|
|
|
|
"traceback": [
|
|
|
|
|
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
|
|
|
|
"\u001b[31mNameError\u001b[39m Traceback (most recent call last)",
|
|
|
|
|
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[38]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m response = exaone_llm.invoke(formatted_prompt)\n\u001b[32m 2\u001b[39m print(response.content)\n",
|
|
|
|
|
"\u001b[31mNameError\u001b[39m: name 'exaone_llm' is not defined"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"response = exaone_llm.invoke(formatted_prompt)\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"id": "da37a8ec",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"### ChatPromptTemplate\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"- 채팅 메시지 형식\n",
|
|
|
|
|
"- from_template() : Human 메시지만 생성\n",
|
|
|
|
|
"- from_messages() : 여러 메시지를 구성할 수 있음"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 41,
|
|
|
|
|
"id": "b7a9dbc0",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"SQL Injection은 웹 애플리케이션에 발생할 수 있는 보안 취약점 중 하나로, 해커가 악의적인 SQL 코드를 삽입하여 데이터베이스에 대한 비인가된 접근을 시도하거나 데이터베이스에 악의적인 명령을 실행하는 공격을 의미합니다. 이는 사용자 입력 데이터에 대한 충분한 검증이 이루어지지 않거나, 웹 애플리케이션의 SQL 쿼리가 외부 입력을 직접 포함하고 이를 검증하지 않을 때 발생할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"예를 들어, 웹 애플리케이션이 사용자로부터 입력받은 데이터를 SQL 쿼리에 직접 사용한다면, 해커는 이를 통해 부적절한 데이터를 삽입하거나, 이미 존재하는 SQL 쿼리에 추가적인 조건이나 명령을 포함시켜 데이터베이스에 악의적인 작업을 수행할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"SQL Injection 공격의 예로는 다음과 같은 것들이 있습니다:\n",
|
|
|
|
|
"1. 사용자 인증 회피: 로그인 폼에서 평범한 SQL 쿼리를 사용하는 경우, 해커는 ' OR '1'='1'과 같은 문자열을 입력함으로써 SQL 쿼리를 조작하여 인증 절차를 우회할 수 있습니다.\n",
|
|
|
|
|
"2. 데이터 삭제나 변경: DELETE, UPDATE 등의 명령을 사용하여 데이터를 삭제하거나 변경하는 공격이 가능합니다.\n",
|
|
|
|
|
"3. 데이터베이스 스키마 조사: UNION 명령어를 사용하여 데이터베이스의 구조나 다른 테이블의 정보를 탐색할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"SQL Injection 공격을 방지하기 위한 방법으로는 다음과 같은 것들이 있습니다:\n",
|
|
|
|
|
"1. 사용자 입력 데이터의 정규화와 검증: 입력 데이터가 올바른 형식과 크기를 가지고 있는지 확인해야 합니다.\n",
|
|
|
|
|
"2. 파라미터화된 쿼리 사용: 쿼리를 파라미터화하여 사용하면, 데이터베이스가 외부 입력을 직접 SQL 명령으로 해석하는 것을 방지할 수 있습니다.\n",
|
|
|
|
|
"3. 최소 권한 원칙 적용: 웹 애플리케이션의 데이터베이스 연결에 필요한 권한을 최소한으로 제한하여, 공격자가 얻을 수 있는 정보를 제한합니다.\n",
|
|
|
|
|
"4. 웹 애플리케이션 방어 기술 사용: Web Application Firewall (WAF)와 같은 보안 기술을 사용하여 SQL Injection 공격을 탐지하고 차단할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"SQL Injection 공격은 웹 애플리케이션의 보안에 심각한 위협이므로, 개발자와 보안 전문가들은 이를 예방하기 위해 신중한 설계와 철저한 검증을 수행해야 합니다.\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"template = ChatPromptTemplate.from_template(\"\"\"\\\n",
|
|
|
|
|
"다음 질문에 답하시오.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"질문:\n",
|
|
|
|
|
"{question}\n",
|
|
|
|
|
"\"\"\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"formatted_prompt = template.format(question=\"SQL Injection 이란?\")\n",
|
|
|
|
|
"response = watson_lln.invoke(formatted_prompt)\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 44,
|
|
|
|
|
"id": "24d4bcdb",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"파이썬에서 리스트 컴프리헨션은 리스트를 생성하는 간단하고 직관적인 방법입니다. 리스트 컴프리헨션을 사용하면, 기존 리스트나 반복 가능한 객체로부터 새로운 리스트를 만들 수 있으며, 이 과정에서 조건문과 함수를 적용할 수도 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"리스트 컴프리헨션의 일반적인 형태는 다음과 같습니다:\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"```python\n",
|
|
|
|
|
"[expression for item in iterable if condition]\n",
|
|
|
|
|
"```\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"여기서, \n",
|
|
|
|
|
"- `expression`은 새로운 리스트의 요소를 만들어주는 표현식(expression)입니다.\n",
|
|
|
|
|
"- `item`은 반복 가능한 객체로부터 하나씩 가져오는 변수입니다.\n",
|
|
|
|
|
"- `iterable`은 반복 가능한 객체입니다.\n",
|
|
|
|
|
"- `condition`은 선택적인 조건문으로, 이 조건을 만족하는 `item`들만 새로운 리스트에 포함됩니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"예를 들어, 다음과 같이 리스트 컴프리헨션을 사용하면 1부터 10까지의 제곱 값을 가진 리스트를 만들 수 있습니다:\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"```python\n",
|
|
|
|
|
"squares = [x**2 for x in range(1, 11)]\n",
|
|
|
|
|
"print(squares)\n",
|
|
|
|
|
"# Output: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]\n",
|
|
|
|
|
"```\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"또한, 조건을 추가하여 홀수의 제곱만을 리스트에 포함시킬 수도 있습니다:\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"```python\n",
|
|
|
|
|
"odd_squares = [x**2 for x in range(1, 11) if x % 2 != 0]\n",
|
|
|
|
|
"print(odd_squares)\n",
|
|
|
|
|
"# Output: [1, 9, 25, 49, 81]\n",
|
|
|
|
|
"```\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"리스트 컴프리헨션은 간결하고 읽기 쉽기 때문에 파이썬에서 많이 사용됩니다. 또한, 속도도 매우 빠릅니다.\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"template = ChatPromptTemplate.from_messages(\n",
|
|
|
|
|
" [\n",
|
|
|
|
|
" (\"system\", \"당신은 {role} 전문가입니다. {language}로 답변하세요.\"),\n",
|
|
|
|
|
" (\"human\", \"{question}\"),\n",
|
|
|
|
|
" ]\n",
|
|
|
|
|
")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"formatted_prompt = template.format(role = \"파이썬\", language=\"한국어\", question=\"리스트 컴프리헨션이란?\")\n",
|
|
|
|
|
"response = watson_lln.invoke(formatted_prompt)\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"id": "3144aa77",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"#### LCEL 파이프라인\n",
|
|
|
|
|
"- LCEL(LangChain Expression Language) : | 연산자로 컴포넌트를 연결하는 파이프라인 문법\n",
|
|
|
|
|
" - ex) prompt | llm | parser => 왼쪽에서 오른쪽으로 데이터가 흐르게(처리) 됨\n",
|
|
|
|
|
"- invoke() : 단일 동기 호출 / stream() : 스트리밍 / batch() : 여러 입력 병렬 처리"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"id": "a38e8147",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"XSS(크로스-사이트 스크립팅)는 웹 보안 취약점 중 하나로, 악의적인 스크립트 코드를 웹 페이지에 삽입하여 사용자의 정보를 탈취하거나 웹사이트를 조작하는 공격입니다. XSS 공격을 통해 공격자는 사용자의 세션 정보, 쿠키, 로그인 정보 등을 탈취할 수 있으며, 이를 통해 사용자의 계정을 훔쳐 사용하거나 개인 정보를 수집할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"XSS 공격은 주로 웹사이트에 입력 폼이나 다른 사용자가 입력한 데이터가 포함된 곳에 악의적인 스크립트 코드를 삽입하는 방식으로 이루어집니다. 이 스크립트 코드는 다른 사용자가 해당 웹 페이지를 방문할 때 실행되어 개인 정보를 탈취하거나 웹 페이지의 내용을 변경하는 등의 악의적인 행동을 수행할 수 있습니다.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"XSS 공격에 대한 대책으로는 웹 개발자가 사용자 입력을 적절히 검증하고, 출력 시에 적절한 인코딩을 수행하여 악의적인 스크립트가 실행되지 않도록 해야 합니다. 또한 사용자는 신뢰할 수 있는 웹사이트만 방문하고, 브라우저의 보안 기능을 최대한 활용하는 것이 중요합니다.\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"prompt = ChatPromptTemplate.from_messages(\n",
|
|
|
|
|
" [\n",
|
|
|
|
|
" (\"system\", \"당신은 {role} 전문가입니다.\"),\n",
|
|
|
|
|
" (\"human\", \"{question}\"),\n",
|
|
|
|
|
" ]\n",
|
|
|
|
|
")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"chain = prompt | watson_llm\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# formatted_prompt = prompt.format(role = \"보안\", question=\"XSS란?\")\n",
|
|
|
|
|
"response = chain.invoke({\n",
|
|
|
|
|
" \"role\": \"보안\",\n",
|
|
|
|
|
" \"question\" : \"XSS란?\"\n",
|
|
|
|
|
"})\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"print(response.content)"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"metadata": {
|
|
|
|
|
"kernelspec": {
|
|
|
|
|
"display_name": "Python (Ollama Venv)",
|
|
|
|
|
"language": "python",
|
|
|
|
|
"name": "ollama-venv"
|
|
|
|
|
},
|
|
|
|
|
"language_info": {
|
|
|
|
|
"codemirror_mode": {
|
|
|
|
|
"name": "ipython",
|
|
|
|
|
"version": 3
|
|
|
|
|
},
|
|
|
|
|
"file_extension": ".py",
|
|
|
|
|
"mimetype": "text/x-python",
|
|
|
|
|
"name": "python",
|
|
|
|
|
"nbconvert_exporter": "python",
|
|
|
|
|
"pygments_lexer": "ipython3",
|
|
|
|
|
"version": "3.12.3"
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
"nbformat_minor": 5
|
|
|
|
|
}
|