llama파인튜닝
Unsloth: LLM을 파인튜닝 및 추론을 지원하는 라이브러리
# 1. 데이터 양자화 로드
# 2. 데이터셋 준비
# 3. 프롬프트 형태의 데이터셋 전처리
# 4. 학습 셋팅 (로라)
# 5. 학습 시작
# 6. 저장
퓨샷프롬프트
모델에게 특정 작업을 수행하도록 지시할 때, 소수의 예시(보통 2~5개)를 포함하여 프롬프트를 구성하는 방식
# 원샷 프롬프트 정의
one_shot_prompt = """
### Instruction:
CES 2023의 주제에 대해서 말해줘.
### Response:
CES 2023의 주제: 혁신적인 기술과 미래 지향적인 제품들에 중점을 두었습니다.
특징: 인공지능, 사물인터넷, 그리고 지속 가능한 기술이 주요한 테마로 다뤄졌습니다.
### Instruction:
CES 2024의 주제에 대해서 말해줘.
### Response:
"""
# 투샷 프롬프트 정의
two_shot_prompt = """
### Instruction:
CES 2022의 주제에 대해서 말해줘.
### Response:
예제1. CES 2022의 주제는 '기술과 혁신의 융합'으로,
특징: 5G, 자율주행, 그리고 스마트 홈 기술이 주요한 테마로 다뤄졌습니다.
### Instruction:
CES 2023의 주제에 대해서 말해줘.
### Response:
예제2. CES 2023의 주제는 혁신적인 기술과 미래 지향적인 제품들에 중점을 두었습니다.
특징: 인공지능, 사물인터넷, 그리고 지속 가능한 기술이 주요한 테마로 다뤄졌습니다.
### Instruction:
CES 2024의 주제에 대해서 말해줘.
### Response:
"""
ollama
# 랭체인: lib,
# langchain-community: 애플리케이션을 개발할때 쓰이는 각종 기능들을 담고 있다,
# ollama: lamma3나 다른 llm들을 다운로드 받고 쓸 수 있는 라이브러리
# chromadb: 청킹 vector들을 저장하는 sql 종류
# PyPDF2: pdf에서 글자를 추출해주는 라이브러리 이거 말고도 OCR로도 추출 가능(클로바ocr, 구글ocr, AI ocr모델 등)
올라마를 사용하려면
* 코랩 사용시 아래 코랩 터미널을 사용해야 함.
!pip install colab-xterm
%load_ext colabxterm
%xterm
1) 서버에 올라마가 설치되어 있어야 함. 내 컴퓨터 CPU/GPU 자원을 사용
curl -fsSL https://ollama.com/install.sh | sh
ollama serve
ollama pull exaone3.5:2.4b * ollama pull nomic-embed-text
챗봇 테스트 해보기
ollama run exaone3.5:2.4b
2) 파이썬에도 올라마 모듈을 설치해야 함.
pip install ollama
WEB 방식을 이용한 RAG 사용
1. 위키백과 끌어옴
2. 2000자씩, 200overlap으로 문단을 청킹하고 곧바로
2-1. jhgan/ko-sbert-sts 임베딩 모델로 벡터화 한다음에
3. 그 벡터들을 chroma DB에 저장함.
4. 올라마 서버 설치 + 올라마 서버 켰음 그리고, 엑사원 설치함.
5. 파이썬 코드로 티키타카 하는 코드 작성하여 엑사원이랑 대화함
그래프란?
연결관계를 표현하는 자료구조
RAG 구성의 2가지 방식
실습: 네오 4제이를 이용한 GraphRAG 구성
csv파일 > GraphRAG구성(네오4제이) > chatbot 참조
네오4제이
- 빈 프로젝트 > 메모장 복사한 뒤 > 아이디 비밀번호 입력
- :connect
- 네오 4제이 전용 언어 사이퍼가 있음.
- 네오 4제이에 연관관계 CSV를 업로드 하여 시각화 자료를 확인할 수 있음
hop
중심점을 기준으로 1번을 거쳐 연결되는 노드를 1hop이라고 한다.
데이터 연결성 크기 테이블에 따라 1hop, 2hop, 3hop.... 으로 구성할 수 있다.
AI 에이전트
- 프롬프트를 길게 쓸 수 없을 때, 챗봇의 역할을 단계별로 나누고, 단계별로 질의-응답 하게 한다.
- 여러개의 AI 를 사용 (앙상블), 역할 분담 및 협업
- LangGraph / Autogen / CrewAI
llm = ChatOpenAI(
model="ollama/exaone3.5:2.4b",
base_url="http://localhost:11434"
)
# 콘텐츠 기획자 에이전트 정의
planner = Agent(
role="콘텐츠 기획자",
goal="주제 {topic}에 대해 흥미롭고 사실에 기반한 콘텐츠를 기획한다. 모든 결과는 한국어로 작성합니다.",
backstory="당신은 'https://medium.com/'에서 주제 {topic}에 관한 블로그 글 기획 작업을 진행 중입니다. "
"독자들이 유익한 정보를 얻고 올바른 결정을 내릴 수 있도록 도와주는 정보를 수집합니다. "
"자세한 개요와 관련 주제, 하위 주제들을 준비하세요. 이 작업은 콘텐츠 작가가 글을 작성하는 기반이 됩니다. "
"답변은 반드시 한국어로 작성됩니다.",
llm=llm,
allow_delegation=False,
verbose=True
)
# 콘텐츠 작가 에이전트 정의
writer = Agent(
role="콘텐츠 작가",
goal="주제 {topic}에 대한 통찰력 있고 사실에 기반한 의견 기고문을 작성한다. 모든 결과는 한국어로 작성합니다.",
backstory="당신은 'https://medium.com/'에서 주제 {topic}에 관한 새로운 의견 기고문을 작성 중입니다. "
"콘텐츠 기획자가 제공한 개요와 관련 정보를 기반으로 글을 작성하세요. "
"개요의 주요 목표와 방향을 따르며, 객관적이고 공정한 통찰을 제공하고, 출처를 명확히 하세요. "
"의견과 객관적 사실을 구분해야 합니다. 답변은 반드시 한국어로 작성됩니다.",
llm=llm,
allow_delegation=False,
verbose=True
)
# 편집자 에이전트 정의
editor = Agent(
role="편집자",
goal="주어진 블로그 글을 'https://medium.com/'의 글쓰기 스타일에 맞게 편집한다. 모든 결과는 한국어로 작성합니다.",
backstory="당신은 콘텐츠 작가로부터 전달받은 블로그 글을 검토하는 편집자입니다. "
"블로그 글이 언론의 최선의 관행을 따르고, 의견이나 주장이 균형 잡힌 시각을 제공하며, "
"논란의 여지가 있는 주제나 의견은 피하도록 교정하세요. 결과는 반드시 꼭 한국어로 작성됩니다.",
llm=llm,
allow_delegation=False,
verbose=True
)
# 콘텐츠 기획 태스크 정의
plan = Task(
description=(
"1. 주제 {topic}와 관련된 최신 트렌드, 주요 인물, 그리고 주목할 만한 뉴스를 우선 파악합니다.\n"
"2. 대상 독자를 분석하여, 그들의 관심사와 문제점을 고려합니다.\n"
"3. 서론, 핵심 포인트, 행동 촉구(Call to Action)를 포함한 상세 콘텐츠 개요를 작성합니다.\n"
"4. SEO 키워드와 관련 데이터, 출처를 포함합니다."
),
expected_output="개요, 독자 분석, SEO 키워드 및 참고 자료가 포함된 포괄적인 콘텐츠 기획 문서",
agent=planner,
)
# 콘텐츠 작성 태스크 정의
write = Task(
description=(
"1. 콘텐츠 기획 문서를 바탕으로 주제 {topic}에 관한 흥미로운 블로그 글을 작성합니다.\n"
"2. SEO 키워드를 자연스럽게 포함합니다.\n"
"3. 각 섹션 및 부제목을 매력적으로 구성합니다.\n"
"4. 흥미로운 서론, 통찰력 있는 본문, 그리고 요약 결론으로 구성된 글의 구조를 갖춥니다.\n"
"5. 문법 오류 및 브랜드의 목소리에 맞게 교정합니다.\n"
),
expected_output="출판 준비가 된, 마크다운 형식의 잘 작성된 블로그 글 (각 섹션은 2~3 단락 포함)",
agent=writer,
)
# 블로그 글 편집 태스크 정의
edit = Task(
description="주어진 블로그 글을 문법 오류 및 브랜드의 목소리에 맞게 교정합니다.",
expected_output="출판 준비가 된, 마크다운 형식의 잘 작성된 블로그 글 (각 섹션은 2~3 단락 포함)",
agent=editor
)
# 에이전트와 태스크를 포함하는 크루 생성
crew = Crew(
agents=[planner, writer, editor],
tasks=[plan, write, edit],
verbose=True
)
# 입력값 설정 및 크루 실행
inputs = {"topic": "LangGraph, Autogen, Crewai를 활용한 멀티 에이전트 시스템 구축 비교 연구"}
result = crew.kickoff(inputs=inputs)
커서활용