Llama 3로 대량의 CSV 데이터 자동으로 분석하는 방법

Ollama를 사용해서 Llama 3를 설치하고 사용할 수 있습니다.

Ollama가 설치되어 있다면, http://localhost:11434 로 접속했을 때 다음과 같은 메시지를 볼 수 있는데요.

http://localhost:11434/api/generate 로 POST Request를 보내면, ChatGPT Api 사용하듯이 로컬모델을 사용할 수 있습니다.

이것을 활용해서 잠자는 동안에도 내 컴퓨터가 쉬지않고 내가 원하는 데이터를 분류해주도록 할 수 있습니다.

가장 기본적인 코드는 다음과 같습니다. (Python)

import requests

# API 엔드포인트 URL
url = "http://localhost:11434/api/generate"

# 요청 데이터
data = {
"model": "llama3",
"prompt": "what your name? Respond using JSON",
"format": "json",
"stream": False
}

# API에 POST 요청 보내기
response = requests.post(url, json=data)

# 응답 확인
if response.status_code == 200:
	result = response.json()
	
	# 응답에서 관련 정보 추출
	model = result.get("model")
	created_at = result.get("created_at")
	response_text = result.get("response")
	
	# 결과 출력
	print(f"Model: {model}")
	print(f"Created at: {created_at}")
	print(f"Response: {response_text}")
	print(result)

else:
	print("Error:", response.status_code)


이것을 Python으로 실행하면 연산결과(AI의 답변)가 화면에 표시됩니다.

이제 이걸 바탕으로 다양한 것을 할 수 있는데요.

두가지를 준비하시면 됩니다.

1. 분석할 데이터

2. 의도 : 데이터를 어떻게 분석, 분류하고 싶은지

두가지가 준비되면 Claude 3 Opus 모델을 사용하여 다음 3가지를 제공합니다.

1. llama 3 API 호출하는 기본 코드 (상단의 코드)

2. 분석할 데이터, 데이터를 저장할 파일명

3. 의도 : 데이터를 어떻게 분석, 분류하고 싶은지


다음과 같은 프롬프트를 만들 수 있습니다.


(코드)

import requests # API 엔드포인트 URL url = "[http://localhost:11434/api/generate](http://localhost:11434/api/generate)" # 요청 데이터 data = { "model": "llama3", "prompt": "what your name? Respond using JSON", "format": "json", "stream": False } # API에 POST 요청 보내기 response = requests.post(url, json=data) # 응답 확인 if response.status_code == 200: result = response.json() # 응답에서 관련 정보 추출 model = result.get("model") created_at = result.get("created_at") response_text = result.get("response") # 결과 출력 print(f"Model: {model}") print(f"Created at: {created_at}") print(f"Response: {response_text}") print(result) else: print("Error:", response.status_code)

(지시사항)

이 코드를 바탕으로 다음의 프로그램을 만들어줘

(분석할 데이터)

2024-04-01,나에게,"오늘은 새로운 달의 시작이야. 이번 달에는 건강, 일, 그리고 개인적인 성장에 집중해보자!"

2024-04-03,나에게,"블로그에 일상에서 영감을 얻는 방법에 대한 글을 써보는 건 어때? 많은 사람들에게 도움이 될 거야."

2024-04-05,나에게,"오늘은 운동을 30분 이상 하고, 건강한 식단을 유지하자. 작은 변화가 큰 차이를 만들어."

2024-04-08,나에게,"지금 하고 있는 일이 5년 후의 나에게 어떤 영향을 미칠지 생각해보자. 장기적인 관점을 가지는 게 중요해."

2024-04-11,나에게,"책을 몇 권 더 사서 읽어보자. 독서는 지식을 넓히고 창의력을 기를 수 있는 좋은 방법이야."

2024-04-15,나에게,"스트레스를 잘 관리하는 것이 중요해. 명상이나 심호흡을 통해 마음을 안정시키자."

2024-04-18,나에게,"실패를 두려워하지 말자. 실패는 성공으로 가는 과정일 뿐이야. 실패에서 배우고 앞으로 나아가자."

2024-04-22,나에게,"오늘은 지구의 날이야. 환경 보호를 위해 할 수 있는 일을 찾아보고, 실천해보자. 작은 노력이 모여 큰 변화를 만들 수 있어."

2024-04-25,나에게,"주변 사람들과 함께 재능기부 활동을 해보는 건 어때? 나누는 즐거움을 느낄 수 있을 거야."

2024-04-28,나에게,"이번 주말에는 집 정리를 해보자. 정리된 공간에서는 마음도 정리되는 느낌이 들 거야."

2024-04-30,나에게,"한 달 동안 고생 많았어. 내일은 새로운 달의 시작이니 새로운 마음가짐으로 시작하자! 넌 잘하고 있어."

(의도 : 데이터를 어떻게 분석, 분류하고 싶은지)

이런 데이터가 mydata.csv (데이터를 저장할 파일명) 라는 파일에 저장되어있고, 

ai를 사용해서 각 메시지가 어떤 카테고리에 해당하는지 자동으로 분류해서 new_mydata.csv에 저장하도록해(저장하는건 실시간으로 수정된걸 볼수있어야해) 반드시 사전에 등록된 카테고리중에서 분류되어야하고, 카테고리를 내가 추가할수도 있도록 코드를 설계해줘 카테고리를 내가 추가하면 그것이 파일에 기록되어서 프로그램을 종료했다가 실행해도 기억이 유지되어야해

api 호출시 사용되는 프롬프트는 영어로 작성해

Respond using JSON 라는 프롬프트를 반드시 넣어야해


위 프롬프트를 Claude 3 Opus 모델에 먹이면,

다음과 같은 코드를 작성해줍니다.


import requests
import csv
import json
import os

# API 엔드포인트 URL
url = "http://localhost:11434/api/generate"

# 카테고리 파일 경로
categories_file = "categories.txt"

# 카테고리 로드 함수
def load_categories():
    if os.path.exists(categories_file):
        with open(categories_file, "r", encoding="utf-8") as file:
            return [line.strip() for line in file]
    else:
        return []

# 카테고리 저장 함수
def save_categories(categories):
    with open(categories_file, "w", encoding="utf-8") as file:
        file.write("\n".join(categories))

# 데이터 분석 함수
def analyze_data(data, categories):
    # 요청 데이터
    request_data = {
        "model": "llama3",
        "prompt": f"The following is a message:\n\n{data}\n\nCategories: {', '.join(categories)}\n\nWhat category does this message belong to? Respond using JSON",
        "format": "json",
        "stream": False
    }
    
    # API에 POST 요청 보내기
    response = requests.post(url, json=request_data)
    
    # 응답 확인
    if response.status_code == 200:
        result = response.json()
        response_text = result.get("response")
        
        try:
            category = json.loads(response_text).get("category")
            if category in categories:
                return category
            else:
                return "기타"
        except (json.JSONDecodeError, KeyError):
            return "기타"
    else:
        print("Error:", response.status_code)
        return "기타"

# 메인 함수
def main():
    # 카테고리 로드
    categories = load_categories()
    
    # 카테고리 추가
    while True:
        new_category = input("추가할 카테고리를 입력하세요 (q: 종료): ")
        if new_category == "q":
            break
        if new_category not in categories:
            categories.append(new_category)
    
    # 카테고리 저장
    save_categories(categories)
    
    # CSV 파일 읽기
    with open("mydata.csv", "r", encoding="utf-8") as file:
        reader = csv.reader(file)
        data = list(reader)
    
    # 새로운 CSV 파일 쓰기
    with open("new_mydata.csv", "w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow(["Date", "To", "Message", "Category"])  # 헤더 추가
        
        for row in data:
            date, to, message = row
            category = analyze_data(message, categories)
            writer.writerow([date, to, message, category])
    
    print("분석이 완료되었습니다.")

# 프로그램 실행
if __name__ == "__main__":
    main()

위 코드를 실행해서 카테고리를 추가할 수 있고,

카테고리를 추가하고 q를 입력후 엔터를 누르면

이렇게 카테고리가 저장됩니다.

(그리고 ai에게 분석을 맡깁니다.)




중간에 에러가 나기도 하지만, 정상적으로 분석이 완료됩니다.



이 데이터가


이렇게 자동으로 분류되었습니다.


이렇게 API를 활용해서, 하나하나 사람이 직접 AI에게 질문하지 않아도, 자동으로 분석하고 분석결과를 정리하는 것이 가능합니다.


이 방법을 활용해서 내 카카오톡에 보내둔 메시지를 정리하거나,

오픈채팅방에 올라온 대화들을 정리할 수 있겠습니다.


#10기어벤져스

6
1개의 답글

(채용) 마케팅 리드, AI 엔지니어, 유튜브 PD, SNS 크리에이터

지피터스의 콘텐츠 플라이휠로 고속 성장할 팀원을 찾습니다!

👉 이 게시글도 읽어보세요