• 회원가입
  • |
  • 로그인
  • |
  • 장바구니
  • News
    뉴스 신제품 신간 Culture & Life
  • 강좌/특집
    특집 강좌 자료창고 갤러리
  • 리뷰
    리뷰
  • 매거진
    목차 및 부록보기 잡지 세션별 성격 뉴스레터 정기구독안내 정기구독하기 단행본 및 기타 구입
  • 행사/이벤트
    행사 전체보기 캐드앤그래픽스 행사
  • CNG TV
    방송리스트 방송 다시보기 공지사항
  • 커뮤니티
    업체홍보 공지사항 설문조사 자유게시판 Q&A게시판 구인구직/학원소식
  • 디렉토리
    디렉토리 전체보기 소프트웨어 공급업체 하드웨어 공급업체 기계관련 서비스 건축관련 업체 및 서비스 교육기관/학원 관련DB 추천 사이트
  • 회사소개
    회사소개 회사연혁 출판사업부 광고안내 제휴 및 협력제안 회사조직 및 연락처 오시는길
  • 고객지원센터
    고객지원 Q&A 이메일 문의 기사제보 및 기고 개인정보 취급방침 기타 결제 업체등록결제
  • 쇼핑몰
[무료다운로드] AI 전문가 에이전트 개발을 위한 LLM 기반 구조화된 JSON 데이터 RAG 및 생성하기
2024-08-05 4,834 10

BIM 칼럼니스트 강태욱의 이슈 & 토크

 

이번 호에서는 최근 챗GPT(ChatGPT)와 같은 AI 전문가 서비스 개발을 위한 LLM(Large Language Model, 대규모 언어 모델) 기술 중 하나인 LLM 기반 구조화된 형식의 데이터 생성하는 방법을 간략히 소개한다. 

 

■ 강태욱
건설환경 공학을 전공하였고 소프트웨어 공학을 융합하여 세상이 돌아가는 원리를 분석하거나 성찰하기를 좋아한다. 건설과 소프트웨어 공학의 조화로운 융합을 추구하고 있다. 팟캐스트 방송을 통해 이와 관련된 작은 메시지를 만들어 나가고 있다. 현재 한국건설기술연구원에서 BIM/GIS/FM/BEMS/역설계 등과 관련해 연구를 하고 있으며, 연구위원으로 근무하고 있다.
페이스북 | www.facebook.com/laputa999
홈페이지 | https://dxbim.blogspot.com
팟캐스트 | http://www.facebook.com/groups/digestpodcast

 

LLM을 다양한 시스템과 연동해 사용하려면, LLM의 출력이 기계가 이해 가능한 JSON, SQL, Code 형태여야 한다. 이번 호에서는 JSON 입출력이 가능하도록 RAG(Retrieval-Augmented Generation, 검색 증강 생성)를 처리하는 방법을 개발한다. 

이를 잘 이용하면, 건설, 건축 분야의 PDF 파일 등을 학습하고, 필요한 정보를 기계 처리 가능한 형식으로 출력해 계산 가능한 표, 수식 등의 형식으로 정보를 생성할 수 있다.

 


그림 1. LLM 기반 텍스트 입력 및 구조화된 JSON 형식 생성 절차 개념도

 

이번 호에서는 오픈AI(OpenAI) 챗GPT와 같이 API를 사용하려면 구독해야 하는 상용 모델 대신 라마, 미스트랄과 같은 오픈소스 모델을 사용한다. LLM 모델을 컴퓨터에 다운로드받고 구동하기 위해 올라마(Ollama)를 이용하고, LLM 프롬프트와 RAG 처리를 위해 랭체인(LangChain)을 사용한다.

 

개발 환경 준비

다음과 같이 개발 환경을 설치한다. 그리고 올라마(https://ollama.com) 도구를 설치하도록 한다.

 

pip install llama-cpp-python
pip install 'crewai[tools]'
pip install langchain

 

Text to JSON 

라마 모델을 로딩하고 JSON 문법으로 출력하도록 GBNF(GGML BNF) 문법 정의를 이용해 JSON 출력을 생성한다. 다음 코드를 실행한다.

 

from llama_cpp.llama import Llama, LlamaGrammar
import httpx

grammar_text = httpx.get("https://raw.githubusercontent.com/ggerganov/llama.cpp/master/grammars/json_arr.gbnf").text
grammar = LlamaGrammar.from_string(grammar_text)

llm = Llama("llama-2-13b.Q8_0.gguf")

response = llm(
    "JSON list of name strings of attractions in SF:",
    grammar=grammar, max_tokens=-1
)

import json
print(json.dumps(json.loads(response['choices'][0]['text']), indent=4))

 

출력 결과는 다음과 같이 샌프란시스코에 있는 놀이 시설을 보여준다. 

 

[
    {
        "address": {
            "country": "US",
            "locality": "San Francisco",
            "postal_code": 94103,
            "region": "CA",
            "route": "Museum Way",
            "street_number": 151
        },
        "geocode": {
            "latitude": 37.782569,
            "longitude": -122.406605
        },
        "name": "SFMOMA",
        "phone": "(415) 357-4000",
        "website": "http://www.sfmoma.org/"
    }
]

 

이와 같이 LLM 출력을 컴퓨터 처리하기 용이한 구조로 생성할 수 있다.

참고로, 여기서 사용한 JSON 문법은 <그림 2>와 같이 정형 규칙 언어로 정의된 것을 사용한 것이다. 

 


그림 2. json.gbnf(https://github.com/ggerganov/llama.cpp/tree/master/grammars)

 

 

■ 자세한 기사 내용은 PDF로 제공됩니다.

강태욱 laputa99999@gmail.com


출처 : 캐드앤그래픽스 2024년 8월호

포인트 : 무료

© 캐드앤그래픽스 무단전재 및 재배포금지, 기사 게재 희망시 당사 문의
  • kakao

댓글 0

로그인 후 댓글을 달수있습니다
등록된 코멘트가 없습니다.