본문 바로가기

💻 개발IT/기타

LLM과 프롬프트 엔지니어링

강의 요약

LLM 기본 개념 및 활용

인공지능 (AI)

인간의 지능을 모방하는 모든 컴퓨터 시스템.

좁게는 데이터를 학습하고 패턴을 분석하고 새로 입력된 데이터에 대한 결과를 예측 하는 모델.

일반적인 숫자 데이터 뿐 아니라 이미지 분석, 자연어 처리 등 다양한 응용 분야에서 활용

 

생성형 AI

텍스트, 이미지, 음악 등 다양한 형식의 콘텐츠를 자동으로 생성하는 인공지능 기술

 

대형 언어 모델(LLM)

방대한 양의 텍스트 데이터를 학습하여 자연어를 이해하고 생성할 수 있는 생성형 AI 모델

GPT-3 모델의 경우 일반적인 크롤링, 다양한 책, 위키피디아에서 데이터를 학습

 

MLOps

머신러닝 모델의 개발, 배포, 운영, 유지보수를 체계적으로 관리하는 방법론

DevOps 원칙을 머신러닝에 적용하여 개발 및 운영의 효율성을 극대화

데이터 관리, 모델 학습, 배포, 모니터링 등의 전 과정을 자동화하고 효율화

 

LLMOps

MLOps 개념을 LLM으로 확장

LLM의 개발, 배포, 운영 및 유지보수를 체계적으로 관리 

 

LLM fine-tuning

특정 작업이나 도메인에 맞게 LLM 모델을 튜닝하는 과정

특정 도메인에 관련된 데이터셋을 LLM 모델에 추가로 학습시키는 방식

LLM 모델 내부의 파라미터들을 업데이트하여 목표 도메인에 대한 답변 성능을 향상

 

ex) fine-tuned LLM : Code-Llama : Llama2 기반의 코딩 특화 LLM Code Llama 공개

 

프롬프트 엔지니어링

프롬프트 엔지니어링

LLM에게 원하는 결과를 얻기 위해 입력 프롬프트를 설계하고 최적화하는 과정

프롬프트의 구조와 내용을 조정하여 모델의 응답 품질을 향상시키는 방법

효과적인 프롬프트 설계는 모델의 성능을 극대화하고 작업의 효율성을 최적화

 

프롬프트 구성 요소

얻고 싶은 내용들을 구체적이고 자세하게 요청하는 것이 중요

 

1) 명령(Instruction) : 모델이 수행하기를 원하는 특정 작업 또는 지침

2) 맥락 정보(Context) : 모델을 조정할 수 있는 외부 정보 또는 추가 맥락

3) 입력데이터 : 답변을 찾고자 하는 입력 또는 질문

4) 출력 데이터 : 출력의 유형 또는 형식

 

Zero-Shot vs. Few-Shot

모델이 사전에 학습한 데이터에 포함되지 않은 새로운 작업을 수행할 수 있도록 하는 기법

 

1) Zero-Shot Learning

명시적인 예제 없이 모델이 새로운 작업에 대한 지시를 이해하고 수행

모델의 일반적인 언어 이해와 추론 능력을 활용하여 새로운 상황에서도 적절한 응답을 생성

2) Few-Shot Learning

모델이 새로운 작업을 학습하기 위해 소수의 예제를 제공받아 학습하는 기법

소수의 학습 데이터를 통해 새로운 패턴을 인식하고 이를 일반화하여 응답할 수 있도록 하는 방법

 

Chain-Of-thought

복잡한 문제를 단계별로 해결하기 위해 사용하는 기법

모델이 논리적인 추론 과정을 통해 중간 단계의 결론들을 도출하도록 유도 (원래라면 확률적인 답을 내놓음)

ex) 수학 문제, 복잡한 추론이 필요한 질문에서 유용

※ gpt-o1에서는 자체적인 기능으로 들어가있음

 

 

코드 생성 AI

langchain-community, langchain-core 설치

 

from langchain_core.output_parsers import StrOutputParser # 텍스트를 파싱하는 역할
from langchain_community.embeddings import OllamaEmbeddings # 텍스트를 벡터화 시켜주는 역할
from langchain_text_splitters import CharacterTextSplitter # 긴 텍스트를 일정한 길이로 나눠주는 역할
from langchain_community.chat_models import ChatOllama # 대화기반으로 Ollama를 사용할 수 있게하는 역할
from langchain_core.runnables import RunnablePassthrough

# 로컬 LLM 불러오기
!ollama pull llama2:7b
!ollama pull codellama:7b

# 로컬 LLM 접근하는 코드
from langchain_core.prompts import ChatPromptTemplate
chat_template = ChatPromptTemplate.from_messages([("user", "\n{question}")]) # user 역할 설정
chat_template.messages

# 모델 초기화
llama = ChatOllama(model="llama2:7b")
codellama = ChatOllama(model="codellama:7b")

# 체인 구성
rag_chain_llama = (
    {"question": RunnablePassthrough()} # 질문을 딕셔너리 형태로 받아서 RunnablePassthrough 전달
    | chat_template # 질문을 형식
    | llama # 모델로 처리
    | StrOutputParser() # 문자열로 반환
)

rag_chain_codellama = (
    {"question": RunnablePassthrough()}
    | chat_template # 질문을 형식
    | codellama # 모델로 처리
    | StrOutputParser() # 문자열로 반환
)

# 질문을 문자열 형태로 입력받아 답변을 문자열 형태로 출력합니다.
def get_answer_llama2(question):
    try:
        response = rag_chain_llama.invoke(
            {
                "input": question
            }
        )
        return response
    except Exception as e:
        return f"An error occurred: {str(e)}"

def get_answer_codellama(question):
    try:
        response = rag_chain_codellama.invoke(
            {
                "input": question
            }
        )
        return response
    except Exception as e:
        return f"An error occurred: {str(e)}"
        
request = "프로그래밍 언어 중 파이썬이 가지는 장점에 대해 설명해줘. 한글로 설명해줘"

response = get_answer_llama2(request)
print(response)

 

 

반응형