2025년 3월 1일 토요일

최근 포인트 클라우드 세그먼테이션 동향

이 글은 최근 포인트 클라우드 세그먼테이션 동향에 관한 연구를 간략히 조사한것이다.


레퍼런스

2025년 2월 15일 토요일

대형언어모델 Gemma2 파인튜닝하기

대형 언어 모델(LLM)인 Gemma2-2B를 미세 조정하면 특정 작업에 대한 성능을 크게 향상시킬 수 있다. 이 가이드는 Google Colab을 활용하여 Gemma2-2B를 미세 조정하는 과정을 단계별로 설명한다.  

사전 준비 사항  
미세 조정을 진행하기 위해 다음과 같은 준비가 필요하다.  
- Google Colab(https://colab.research.google.com/) 계정이 있어야 한다. 혹은, NVIDIA GPU 환경(24GB 이상)이 구축된 컴퓨터가 있어야 한다.
- Python 및 머신러닝 기초 개념을 이해하고 있어야 한다.  

1단계: 환경 설정  
1. Google Colab 접속  
   - Google Colab(https://colab.research.google.com/)에 접속하여 새 노트북을 생성한다.  
2. GPU 설정  
   - 상단 메뉴에서 `편집(Edit) > 노트북 설정(Notebook settings)`으로 이동하여 하드웨어 가속기를 `GPU`로 변경한다.  
3. 필요한 패키지 설치  
   - 아래 명령어를 실행하여 필수 라이브러리를 설치한다.  
   !pip install transformers datasets accelerate

2단계: Gemma2-2B 모델 불러오기  
Hugging Face의 `transformers` 라이브러리를 사용하여 사전 학습된 Gemma2-2B 모델을 로드한다.  
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "google/gemma2-2b"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

3단계: 데이터셋 준비  
미세 조정을 위해 작업에 맞는 데이터셋이 필요하다. Hugging Face의 `datasets` 라이브러리를 사용하여 데이터를 로드하고 토큰화할 수 있다.  
from datasets import load_dataset
# 'your_dataset'을 원하는 데이터셋 이름 또는 경로로 변경해야 한다. 데이터셋 예시: lavita/ChatDoctor-HealthCareMagic-100k · Datasets at Hugging Face
dataset = load_dataset('your_dataset')
# 토큰화 함수 정의
def tokenize_function(examples):
    return tokenizer(examples['text'], padding="max_length", truncation=True)
# 데이터셋 토큰화 적용
tokenized_dataset = dataset.map(tokenize_function, batched=True)

4단계: 모델 미세 조정  
데이터셋을 준비한 후, 아래 코드로 모델을 미세 조정할 수 있다.  
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=4,
    per_device_eval_batch_size=4,
    num_train_epochs=3,
    weight_decay=0.01,
)
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset["train"],
    eval_dataset=tokenized_dataset["validation"],
)
trainer.train()

5단계: 미세 조정된 모델 저장  
학습이 완료된 모델을 저장하여 향후 사용할 수 있도록 한다.  
model.save_pretrained("./fine_tuned_gemma2_2b")
tokenizer.save_pretrained("./fine_tuned_gemma2_2b")

결론  
이 가이드를 따르면 Google Colab에서 Gemma2-2B 모델을 미세 조정하여 특정 작업에 최적화된 모델을 만들 수 있다. 미세 조정을 통해 모델의 성능을 향상시키고 특정 도메인 문제를 해결하는 데 도움을 줄 수 있다.  

참고 
대형 모델의 미세 조정은 많은 GPU 리소스(최소 24GB 이상)를 필요로 한다. Google Colab Pro 또는 TPU를 활용하면 더 원활한 학습이 가능하다. 

2025년 1월 26일 일요일

생성AI, LLM, AI Agent와 그래픽, 디자인, 미디어아트 관련 자료 소개

이 글은 생성AI, LLM, AI Agent와 그래픽, 디자인, 미디어아트에 관한 자료를 정리한 것이다. 관련 도구 및 예제는 다음 링크에 자세히 설명하였으니 참고한다.
프롬프트에서 생성된 그래픽스 예시

Blender LLM 기반 그래픽 모델링 관련 자료
LLM, ollama, Blender python library 등을 이용하면, 프롬프트를 입력해, 3차원 모델을 자동 생성할 수 있다. 다음은 관련 예시를 보여준다. 
Prompt: Create 100 cubes. The y position of each cube follows the cosine function along the x-axis with random color.

이를 이용해 다음과 같은 GPT 에이전트가 구현된다. 

상세한 동작 메커니즘은 다음 링크를 참고한다.

LLM과 컴퓨터 그래픽스
앞에서 사용한 방법과 동일하게, OpenGL, processing.org 등 3차원 가시화 도구를 이용해 실시간으로 프롬프트를 통해 컴퓨터 그래픽스 장면을 생성할 수 있다. 다음은 프롬프트를 통해 생성된 그래픽스를 보여준다. 

데이터 기반 그래픽스 렌더링 예시

생성된 그래픽스 코드는 다음과 같다. 
from p5 import *
import pandas as pd

# Load the dataset
data = pd.read_csv('input.csv')

def setup():
  size(720, 400)
  no_stroke()

def draw_cone(size_x, size_y, position):
  with push_matrix():
    translate(*position)
    cone(size_x, size_y)

def draw():
  background(20, 100, 24)
  lights()
  rotate_x(frame_count * 0.01)
  # rotate_y(frame_count * 0.01)
  blinn_phong_material()

  interval = 200
  for i, row in data.iterrows():
    x = (i % 3) * interval - interval
    y = 0
    z = (i // 3) * interval - interval
    draw_cone(row['energy'], row['temperature'], (x, y, z))

  locX = mouse_x - width/2
  locY = mouse_y - height/2
  light_specular(0, 0, 255)
  point_light(360, 360*1.5, 360, locX, locY, 400)

if __name__ == '__main__':
  run(mode='P3D')

LLM과 사운드 엔지니어링
동일한 원리로 사운드를 개발할 수 있다. 다음은 LLM을 통해 생성된 사운드 코드를 실행한 결과이다. 
사운드 생성 예

생성된 코드는 다음과 같다.
from psonic import *
import time
from threading import Thread, Condition

set_server_parameter_from_log("127.0.0.1")

def play_mozart(condition):
  while True:
    with condition:
      condition.notifyAll() # Message to threads      

    beat = 0.33

    melody = [
      E5, E5, F5, G5, G5, F5, E5, D5, C5, C5, D5, E5, E5, D5, D5,
      E5, E5, F5, G5, G5, F5, E5, D5, C5, C5, D5, E5, D5, C5, C5
    ]

    # Drum beat pattern
    def play_beat():
      sample(DRUM_HEAVY_KICK, amp=1.5)  # Strong kick drum
      sample(ELEC_CHIME, amp=1.2)  # Electric guitar sample
      sample(BD_ZOME, amp=1.5)
      sleep(beat / 2)

      sample(DRUM_CYMBAL_CLOSED, amp=1.2)  # Closed cymbal
      sample(ELEC_CHIME, amp=0.6)  
      sample(BD_ZOME, amp=0.6)
      sleep(beat / 2)

      sample(DRUM_SNARE_HARD, amp=1.3)  # Strong snare
      sample(ELEC_CHIME, amp=1.2)   
      sample(BD_ZOME, amp=1.3)
      sleep(beat / 2)
      
      sample(DRUM_CYMBAL_CLOSED, amp=1.2)
      sample(ELEC_CHIME, amp=0.6)  
      sample(BD_ZOME, amp=0.6)
      sleep(beat / 2)

    # Melody, Beat Channel Play 
    for note in melody:
      play(note, amp=1.0) # , release=0.2)  # Melody
      play_beat()  # Beat Pattern


condition = Condition()
mozart_thread = Thread(name='producer', target=play_mozart, args=(condition,))
mozart_thread.start()

input("Press Enter to continue...")

LLM과 피지컬 컴퓨팅
피지컬 컴퓨팅에 많이 사용되는 아두이노 등을 이용해, 프롬프트로 명령을 주면, 임베딩 컴퓨터가 명령을 실행할 수 있는 코드를 LLM이 생성해, 모터, 조명과 같은 액추에이터를 동작시킬 수 있다. 다음은 그 예를 보여준다. 

참고로, 아두이노의 경우, .ino 코드 파일을 실시간으로 컴파일해 아두이노보드로 전송하는 cli 도구가 설치 시 포함되어 있다. 이를 이용해, 컴파일 에이전트를 구현할 수 있다. 
Arduino CLI 도구

Ollama와 오픈소스 LLM 이용한 건축 이미지 프롬프트 역공학
말이 어렵지만, 사실 멀티모달을 지원하는 llama3.2-vision과 같은 모델이 저렴하게 공개되고 있는 상황이라, 이를 이용하면 쉽게 프롬프트 키워드 역공학해서, 얻은 프롬프트로 이미지를 생성할 수 있다. 

올라마(ollama) 설치 후 이미지를 준비하고, 다음을 실행한다.
ollama run llama3.2-vision

그리고, image 명령을 이용해 해당 파일 경로를 입력하고 설명하라 한다. 이후, 이 설명을 미드저니 프롬프트 키워드로 변경해 달라 하고, 텍스트-이미지 서비스에 역공학된 프롬프트를 입력하면 된다. 다음은 그 결과이다. 
건축가 자하하디드 스타일 건축물 사진 역공학 후 생성한 이미지 결과(참고)
생성된 영상(KREA)

레퍼런스
이 주제와 관련된 레퍼런스는 다음과 같다.

AI 에이전트
그래픽 모델링
사운드 엔지니어링
피지컬 컴퓨팅

2025년 1월 22일 수요일

CAD 모델 생성AI 및 LLM 기술 조사

이 글은 CAD 모델 생성AI 및 LLM 기술을 조사한다.
SolidGen (Autodesk)

조사를 위해 다음 키워드로 구글링, GITHUB, 논문 검색을 수행한다. 
'CAD', 'Scketch', 'LLM', 'Generative AI', 'Transformers', 'github', 'huggingface'

다음은 검색된 기술 결과를 보여준다. 




레퍼런스

2025년 1월 13일 월요일

오픈소스 기반 2D Image to 3D model 소개

이 글은 오픈소스 기반 2D Image to 3D model (이미지 > 모델 변환)을 확인해 간략히 정리한다. 모델은 Stable Point Aware 3D, Structured 3D Latents 이다.
요즘 생각. 최근 난리인 GPU 1만개면 딥시크 10개 만들 수 있다는 모 대표님 말과 이 말에 따라 패닉하는 정부 기술투자 정책에 대해
기술 분석을 위해 누가 Structured 3D Latents 기술을 개발하고 오픈소스로 공개했나 지 궁금해 살펴보다가 이 글을 쓴다.

실무하는 기술자, 개발자들은 이미 5년전부터 하던 말인데, 이미 한국 AI는 그 당시 비교하던 미국, 유럽, 일본 뿐 아니라 중국에서도 크게 뒤져 있었다는 것이 중론이었다. 사실, 우리는 지금까지 전통적으로 OS, AI 포함 소프트웨어 분야에서 세계 시장에 제대로 된 명함을 내민 적이 별로 없다(IT강국?). 

요즘, 언론에서 딥시크로 패닉하는 뉴스 보내고 있다. 원인 중 하나로 인프라를 말하는데, 맥을 잘 못 짚어 보인다. 한참 잘못된 방향으로 기사를 쏟아내고 있어, 앞으로도 한참 멀었다는 생각이 드는 건 어쩔 수 없다. 우리나라 정부 보도자료는 이런 냄비성 기사들에 휘둘릴 정도로 전문성이 없는 듯 하다. 국회에서 모여 말하는 사람들조차 약장사들 밖에 없어, 주변 전문가들은 가기도 꺼려하는 상황이다. 여기에 엮이면 수많은 보도자료, 과제기획에 1년 이상이 없어지기 때문이다. 깊게 기술 개발할 시간만 없어진다. 보통 진짜 선수들은 운동장에서 연습하는 것을 좋아하지, 시끄럽기만 한 영양가 없는 곳은 싫어한다. 악화가 양화를 구축한지 오래라 이또한 어쩔 수 없어 보인다. 갑을 관계 제조업으로 성공한 나라의 숙명인지.. 더 생각해보면 문화의 한계라 느껴지기도..

딥러닝 좀 하는 개발자라면 알겠지만, AI 첨단 기술 중 하나가 잠재 공간에서 자유롭게 멀티모달 데이터를 학습, 변환하는 것이다. 이 스테이블 디퓨전 아키텍처를 3차원으로 자유자재로 가지고 놀 수 있는 곳은 사실 세계적으로 소수고, 대부분은 그냥 사용만 하고 있다. Structured 3D Latents가 나왔을 때 당연 미국 주요 빅테크 기업이 들어가 있는 것은 충분히 예상할 수 있었고, 중국인 개발자들도 참여했을꺼라는 생각도 했었다. 그런데, 이 논문의 저자들을 보고 속으로 약간 놀랐다. 아 애 대놓고 마이크로소프트 보다 1저자로 칭화대학 연구생들이 올라가 있었던 것이다.

1저자 학생은 칭화대 출신으로 5년전부터 마이크로소프트 인턴으로 공부하며, 미국 인프라를 사용하고 있고, 이 학생의 지도 교수조차 미국에서 공부하고 인텔 등에서 일한 경력직이다. 즉, 이 기술 개발의 숨은 스토리는 미국 빅테크 기업의 중국계 기술 경력 엔지니어를 교수로 네트웍 삼아, 중국 유학생을 보낸 후 5년째 되어, 이런 기술을 습득한 것으로 정리된다. 
상황이 이쯤 되면, 앞에 언급한 정부 정책에 대해 어떤 생각이 드는가. 
GPU 만개, 십만개 센터 구축한들, 우리가 이런 나라를 넘어서긴 매우 어려울 것 같다는 느낌이 들지 않나. 제일 큰 문제는 우리는 인재가 없다는 것이다. 인재란 것은 헝그리 정신으로 무장하고, 선진국에 건너가, 그들의 노하우를 밤새도록 공부하고, 체내화한 후, 귀국해 산업발전에 기여할 사람을 말한다. 이런 프로세스가 동작했던 적이 우리도 있었다. 사실, 왜 안되는 지, 이것도 조금만 리서치하고, 생각하면, 알 수 있는 것이다. 그리고, 수백 페이지 짜집기한 기술동향보고서 컨설팅 받는 것 보다 직접 실무 하는 사람들에게 물어보는 게 천 번 낫다. 

하드웨어 물량 예산 퍼부어도 이를 사용할 경력있는 전문가, 개발자가 없으면 의미가 있을까? 약장사들(물건파는)만 돈 벌고 끝날 것이다. 약장사들이 돈 가져갈 수록 이들 숫자만 많아질 것이고.. 사실, 이 예상을 하기 위해 관련 자료 리처치한 노력은 30분도 안 걸렸다. 정부는 기술 전문가는 커녕, 전문가를 알아볼 사람들조차 없다는 것이 진짜 위기일 듯 하다. 

예를 들어, 허깅페이스나 깃허브를 TV에서 처음 듣고, 라스베거스쇼에서 지인과 구경 다닌 후 보도자료 내는 상황이면 그 기술에 대한 정책과 투자를 결정하는 자리에 있어서는 안 될 것이다. 전문가도 없고, 리더쉽도 부재라, 정책 거버넌스는 혼돈 그 자체, 기술 투자와 발전에 대한 시장 신뢰가 없어지면, 산업은 각자도생이고, 약장사들만 판치게 된다. 그런데 사람들은 K팝 듣는 외국인들보고 선진국이라 정신승리하고 있으니... 산업이 없으면 K문화도 없다. 

이 상황 AI만 이럴까? -  2025.3.3

2025년 1월 9일 목요일

LLM 기반 BIM 지식 모델 학습 데이터셋 자동 생성 및 LLM 파인튜닝 도구 소개

이 글은 LLM(대형언어모델) 기반 BIM(Building Information Modeling) 지식 모델을 개발하기 위한 BIM 학습 데이터셋 생성 및 LLM 파인튜닝 도구를 소개한다. 
ChatGPT와 같이 일반적인 지식만 학습한 LLM은 환각현상이 심할 수 있으며, 온라인으로 연결된 LLM을 사용해야해 보안문제도 있을 수 있다. 이 글은 이런 문제를 해결하기 위한 도구를 소개한다. 

로컬 LLM 기반 BIM 모델 개발을 위해서는 BIM 데이터셋을 개발해야 하며, LLM(대규모 언어 모델)을 파인튜닝해야 한다. 이 글은 이를 위한 두 개의 프로그램을 소개하고, 각각의 기능과 사용 방법을 설명한다. 소스코드는 다음 github 링크를 참고한다.
BIM 지식 LLM 모델 학습 프로세스 및 결과

본 프로그램의 동작 방식의 상세한 설명은 레퍼런스를 참고하길 바란다. 이 레퍼런스에는 LLM 파인튜닝, RAG 등의 한계점을 함께 설명하고 있다.   

프로그램 소개
BIM AutoGen Dataset
BIM AutoGen Dataset은 PDF 문서로부터 LLM 파인튜닝을 위한 QA(질문-답변) 데이터셋을 자동으로 생성하는 도구이다. 이 도구는 OpenAI API를 활용해 텍스트를 분석하고, 질문과 답변을 JSON 형식으로 구조화하며, 답변의 모호성을 평가하여 데이터 품질을 높인다.
  • PDF 파일에서 QA 데이터셋을 자동으로 생성한다.
  • 생성된 데이터셋은 JSON 형식으로 저장되며, LLM 파인튜닝에 적합하다.

LLM Fine-Tuning with PEFT
LLM Fine-Tuning with PEFT는 PEFT(파라미터 효율적 파인튜닝) 기술을 활용해 BIM 도메인에 특화된 LLM(SLM)을 8GB GPU에서도 효율적으로 파인튜닝할 수 있게 한다.  이 도구는 Hugging Face와 W&B(Weights & Biases)와 같은 툴과 통합되어 모델 성능 모니터링 및 결과 공유가 가능하다.
  • LLM(Llama-3-8B 등)을 PEFT 기술로 경량화하여 파인튜닝한다.
  • 8GB GPU에서도 실행 가능하며, 저비용 환경에서도 모델 학습을 지원한다.
  • Hugging Face와 W&B 통합으로 학습 상태를 실시간으로 추적하고 공유할 수 있다.
사용방법
BIM AutoGen Dataset
1. 필수 라이브러리 설치:
   pip install os json PyPDF2 argparse re camelot fitz pdfminer.six openai tqdm

2. PDF 파일 준비:
   - `input` 폴더에 처리할 PDF 문서를 추가한다.

3. 다음 명령어를 사용해 스크립트를 실행한다:
   python BIM_autogen_dataset.py --input ./input --output ./output

4. 결과:
   - 생성된 QA 데이터셋은 `output` 폴더에 JSON 형식으로 저장된다.


LLM Fine-Tuning with PEFT
1. 필수 라이브러리 설치:
   pip install pandas torch wandb transformers huggingface_hub trl datasets peft PyPDF2 camelot-py pymupdf pdfminer.six openai tqdm

2. API Key 설정:
   - Hugging Face API Key: Hugging Face 계정을 통해 API 키를 발급받는다.
   - Weights & Biases API Key: W&B 계정을 통해 API 키를 발급받는다.

3. 데이터셋 준비:
   - BIM AutoGen Dataset으로 생성된 QA JSON 파일을 `dataset` 폴더에 저장한다.

4. 다음 명령어를 사용해 스크립트를 실행한다:
   python BIM_LLM_finetuning.py

5. 결과:
   - 파인튜닝된 모델은 `output_finetuning_model` 디렉토리에 저장된다.
   - 학습 로그는 `finetuning.log` 파일에 저장된다.

마무리
이 글은 BIM AutoGen Dataset과 LLM Fine-Tuning with PEFT를 통해 BIM 도메인에서 머신러닝 및 LLM 활용을 간소화하고자 하는 목적을 담고 있다. 모든 코드는 MIT 라이선스 하에 제공된다. 이 도구는 일반화된 프로세스로 개발되어 있으므로, BIM 이외 다른 분야에도 사용자화하여 활용할 수 있다.

레퍼런스
이 레퍼런스에는 LLM 파인튜닝, RAG 등의 한계점을 함께 설명하고 있다. 실제 해보면 알겠지만, 모든 문제를 해결하는 만병 통치약은 없다. 특정 영역에서 효과적인 솔류션도, 다른 영역에는 효과가 없는 경우가 많다는 것을 고려하고, 이러한 기술을 활용할 필요가 있다. LLM 생성모델에 대한 좀 더 깊은 이해가 필요하다면 이 블로그의 '스테이블 디퓨전', '트랜스포머스' 관련글을 참고하길 바란다. 

최근 SLM(Small Language Model) 모델 성능 테스트 사용기

이 글은 최근 SLM(Small Language Model) 모델 성능 테스트 사용기를 간략히 정리한 것이다.

테스트를 위해, ollama를 설치한 후, 터미널에서 다음 명령을 입력해 각각 적합한 SLM 모델을 다운로드 받는다.
ollama run gemma2

SLM 실행 모습
정보 생성 결과 예시

사용한 SLM 모델 중 유명한 gemma-2, llama-3, phi4를 테스트해보았다. 
  • gemma-2: 실행 속도가 매우 빠르다. 맥락에 따른 정보 생성 성능이 뛰어나다.
  • llama-3: 실행 속도는 중간이다. 생성 품질은 뛰어나다.
  • phi4: 실행 속도는 중상이다. 생성 품질도 뛰어나다.
  • llama-3.2:vision: 멀티모달 기능이 뛰어나다. 다른 것은 보통 수준이다.
다만, 이런 SLM은 4K 이내 프롬프트 크기 입력 등의 한계가 있다. 

레퍼런스

2025년 1월 4일 토요일

Gradio 와 LangChain 을 이용한 간단한 챗봇 개발하기

이 글은 손쉽게 웹 어플리케이션을 개발할 수 있는 Gradio 와 LangChain 을 이용해 간단한 챗봇을 개발해 본다. 
Gradio 적용 예시(YOLO. CLIP. AEC 건설 분야)

환경 설치
터미널에서 다음 라이브러리를 설치한다.
pip install gradio langchain

코딩
다음을 코딩하고 실행한다. 
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
import os
import gradio as gr

os.environ["OPENAI_API_KEY"] = "<input your openai key"  # API 키 설정

llm = ChatOpenAI(temperature=1.0, model='gpt-4o-mini')  

# LLM 응답 처리
def response(message, history, additional_input_info):
    history_langchain_format = []
    history_langchain_format.append(SystemMessage(content= additional_input_info))
    for human, ai in history:
            history_langchain_format.append(HumanMessage(content=human))
            history_langchain_format.append(AIMessage(content=ai))
    history_langchain_format.append(HumanMessage(content=message))
    gpt_response = llm(history_langchain_format)
    return gpt_response.content

# 인터페이스 생성
gr.ChatInterface(
    fn=response,   # LLM 응답처리 콜백함수 설정
    textbox=gr.Textbox(placeholder="Talk", container=False, scale=7),
    chatbot=gr.Chatbot(height=1000),
    title="ChatBot",
    description="I'm a chatbot that can chat with you. I'm lovely chatbot.",
    theme="soft",
    examples=[["Hi"], ["I'm good"], ["What's your name?"]],
    retry_btn="resend",
    undo_btn="delete❌",
    clear_btn="delete all💫",
    additional_inputs=[
        gr.Textbox("", label="Input System Prompt", placeholder="I'm chatbot.")
    ]
).launch()

실행 결과
성공한 결과는 다음과 같다. 

마무리
Gradio는 2019년에 Abubakar Abid에 의해 개발된 오픈소스 파이썬 라이브러리로, 머신러닝 모델을 손쉽게 웹 애플리케이션 형태로 배포하고 공유할 수 있도록 설계되었다.021년, Gradio는 AI 커뮤니티에서 널리 알려진 Hugging Face에 인수되었으며, 이를 통해 더욱 발전하고 있다.근에는 Gradio 5.0 버전이 출시되어, 월 사용자 수 200만 명과 47만 개 이상의 애플리케이션을 보유한 AI 개발 생태계의 핵심 도구로 자리 잡았다.
레퍼런스

2025년 1월 3일 금요일

LangChain 작동 메커니즘 분석기

이 글은 LangChain(랭체인) 작동 메커니즘을 분석한 것이다. 

랭체인은 제한된 LLM 입력 프롬프트 크기 한계 내에서 LLM의 추론 기능을 잘 활용하기 위해 개발된 라이브러리이다. LLM 환각 현상 등을 개선하기 위해 RAG 기법을 적극 개발하고 있는데, 이로인해, 다음과 같이 다양한 벤더사의 LLM, vector database, chunking 등을 지원해야 했다. 그러므로, 객체지향적으로 설계되어 추상화 레이어가 매우 깊고 복잡한 면이 있다.
다음은 주요 핵심 기능의 동작 방식을 설명한다.

도구(Tools)
LangChain에서 도구는 에이전트가 자연어 처리 이상의 작업을 수행할 수 있도록 제공되는 기능이나 API이다. 이 코드는 이를 명확히 정의하고 에이전트가 사용할 수 있도록 등록하고 있다.

코드에서의 예시:
functions = {
    "getWeather": {
        "name": "getWeather",
        "description": "Realtime info about the weather.",
        "parameters": CITY_PARAM,
        "function": partial(get_request, "/api/weather")
    },
    "getPopulation": {
        "name": "getPopulation",
        "description": "Realtime info about the population.",
        "parameters": CITY_PARAM,
        "function": partial(get_request, "/api/population")
    },
}
이름(name): 각 도구를 고유하게 식별할 수 있는 이름이다.
설명(description): 도구가 수행하는 작업을 설명한다.
매개변수(parameters): 도구가 받는 입력의 JSON 스키마를 정의한다.
함수(function): 도구가 실제로 실행할 작업이다. 여기서는 partial을 사용해 API 엔드포인트를 바인딩하였다.
LangChain과의 대응: LangChain에서 Tool 클래스 또는 tool 데코레이터로 도구를 정의하며, 위 코드와 유사한 방식으로 도구를 등록한다.

메모리(Memory)
메모리는 에이전트가 대화의 문맥을 유지하도록 돕는다. 제공된 코드에서는 messages 리스트가 이러한 역할을 한다.
코드에서의 예시:
messages = []
messages.append({"role": "system", "content": "You are an AI assistant with multiple tools..."})
messages 리스트는 대화 이력을 저장하며, 시스템 프롬프트, 사용자 입력, 모델 응답을 순차적으로 기록한다.
LangChain과의 대응: LangChain에서는 ConversationBufferMemory, ConversationSummaryMemory와 같은 메모리 모듈을 사용해 대화 이력을 관리한다.

에이전트 루프(Agent Loop)
에이전트 루프는 모델의 응답을 처리하고, 필요한 경우 도구를 호출하며, 사용자가 원하는 결과를 도출할 때까지 반복한다.
코드에서의 예시:
iter = 0
while iter < MAX_ITERATIONS:
    response = openai.ChatCompletion.create(...)
    if message.get("function_call"):
        function_name = message["function_call"]["name"]
        results = call_function(function_name, function_input)
        messages.append({"role": "function", "name": function_name, "content": results})
        iter += 1
    else:
        return message['content']

모델이 도구 호출 여부를 판단하며, 호출한 결과를 메시지 이력에 추가한 후 루프를 반복한다.
LangChain과의 대응: LangChain의 AgentExecutor는 에이전트의 도구 호출 및 반복 작업을 자동으로 관리한다.

확장된 구성 요소
동적 도구 호출
도구를 동적으로 호출하기 위해 도구 이름과 매개변수를 사용하여 실행하는 로직이 포함되어 있다.
코드에서의 예시:
def call_function(name, params):
    f = functions[name]
    return f['function'](json.loads(params))
도구 이름과 입력 데이터를 기반으로 적절한 함수를 실행한다.
LangChain과의 대응: LangChain은 등록된 도구의 run 메서드를 사용해 자동으로 호출하며, 이를 에이전트 실행 플로우에 통합한다.

반복적 추론
에이전트는 도구 결과를 기반으로 추가적인 작업을 수행하며, 원하는 결과를 얻기 위해 여러 차례 도구를 호출한다.
코드에서의 예시:
while 루프에서 반복적으로 도구를 호출하거나 모델의 응답을 처리한다.
LangChain과의 대응: LangChain은 이러한 작업을 지원하는 에이전트 프레임워크를 제공하며, react 기반 에이전트가 이러한 반복적 추론을 처리한다.

LangChain의 주요 기능과 비교
a. 도구 통합
제공된 코드에서 functions와 get_functions_for_model은 LangChain의 도구 등록 및 사양 정의와 유사하다.
b. 메모리 관리
대화 이력을 messages 리스트로 관리하는 방식은 LangChain의 메모리 모듈과 직접 대응된다.
c. 에이전트 루프
제공된 코드의 루프는 LangChain의 AgentExecutor와 구조적으로 유사하며, 사용자 정의 작업과 도구 호출을 통합한다.
d. 프롬프트 설계
시스템 메시지와 도구 사양이 포함된 구조는 LangChain의 프롬프트 엔지니어링 방식과 맞닿아 있다.

마무리
앞의 설명은 랭체인 도구 통합, 메모리 관리, 에이전트 루프의 구현 방식을 보여준다. LangChain은 이와 같은 구조를 확장 가능하고 재사용 가능한 방식으로 제공하며, 코드 작성과 관리의 복잡성을 줄이는 데 도움을 준다. LangChain을 사용하면 이러한 구성 요소를 더 간결하게 관리할 수 있으며, 다양한 에이전트 유형과 도구를 손쉽게 통합할 수 있다. 다만, 매우 복잡한 추상화와 불명확한 에이전트의 동작 메커니즘 등은 개선이 필요해 보인다. 최근 랭체인보다 간략화된 RAG 라이브러리가 오픈되고 있어, 프로젝트 목적에 따라 이를 고려해 볼 필요도 있다.

레퍼런스

2025년 1월 2일 목요일

Polygonjs 기반 인터랙티브 3D 앱 만들기

요즘 디지털 환경에서 인터랙티브 3D 경험은 다양한 산업에서 필수 요소가 되고 있다. 과학 시각화, 제품 쇼케이스, 비디오 게임, 디지털 트윈, 설정 도구(Configurators), 그리고 예술 작품까지, 3D 콘텐츠는 어디에서나 볼 수 있으며 그 활용 범위는 점점 넓어지고 있다.
그러나 이러한 몰입형 경험을 만드는 일은 쉽지 않다. 3D 디자인과 웹 기술 모두에 대한 전문 지식이 필요하며, 단순히 기능적으로 만드는 것조차 어려울 수 있다. 여기에 더해 텍스처 아티스트, 모델러, 리거, 애니메이터, 룩데브(look dev), 쉐이더 개발자 등 3D 분야의 다양한 전문성을 요구하기 때문에 작업은 금세 복잡해질 수밖에 없다.

머리말
Polygonjs는 이러한 과정을 단순화하고 쉽게 만들어주는 도구이다. Polygonjs는 다음과 같은 특징으로 웹용 3D 제작을 지원한다.
  • 사용하기 쉬움: 누구나 쉽게 접근할 수 있는 직관적인 도구이다.
  • 확장 가능: 특정 요구 사항과 워크플로에 맞게 확장할 수 있다.
  • 강력함: 아름답고 성능이 뛰어난 3D 경험을 만들 수 있다.
Polygonjs는 복잡함을 줄이고 창의성에 집중할 수 있도록 돕는다. 이제 Polygonjs를 사용하여 더 간단하고 빠르게, 그리고 멋진 3D 경험을 만들어 본다.


설치 방법
다음 명령을 실행해 본다. 
npm create polygonjs@latest
npm add polygonjs-editor
npm run polygon

사용 방법
사용 방법은 다음과 같다.

영상을 보면 알겠지만, 비쥬얼 프로그래밍 방식으로, 노드로 구성되어 있어, 작업이 직관적이
고 편리하다. 

레퍼런스