빅데이타 & 머신러닝/생성형 AI (ChatGPT etc) 44

바이브 코딩 메뉴얼 - AI 에이전트를 활용한 더 빠르고 스마트한 개발

조대협 (http://bcho.tistory.com)소프트웨어를 작성하는 방식이 변화하고 있다. "바이브 코딩(Vibe Coding)"은 더 직관적이고 AI 주도적인 개발 프로세스를 일컫는 용어로 주목받고 있다. 온라인 커뮤니티에서 만들어지고 Cursor나 Windsurf 같은 도구를 통해 대중화된 이 방식은, 모든 코드를 직접 입력하기보다 지능형 에이전트를 통해 자신의 비전, 즉 "바이브(vibe)"에 기반하여 애플리케이션을 구축하도록 안내하는 것에 가깝다."에이전트 기반 코딩(Agentic Coding)"이라고도 알려진 이 방식은 단순히 멋진 자동 완성과는 다르다. 이는 Claude 3.7 Sonnet('Thinking' 버전이 특히)이나 Grok과 같은 AI 모델과 협력하여 초기 구조 설정부터 기능..

LLM 모델의 JDBC 드라이버 LiteLLM

조대협 (http://bcho.tistory.com) 최근 여러 LLM이 소개 되고 있는데, LLM 마다 가격이나 특성이 틀리기 때문에 여러 모델을 함께 사용하는 경우가 있는데, 이때 마다 SDK가 달라서 어려움이 있을 수 있다. (물론 Langchain을 써도 된다.) 또한 금액이나 요청 종류에 따라서 특정 LLM으로 라우팅을 하거나 또는 특정 LLM 모델이 응답을 하지 못할때 Fallback등의 기능을 구현해야 하는데, LiteLLM은 이런 기능을 제공하는 파이썬 라이브러리이다. 이글에서는 LiteLLM과, 대표적인 라우팅 기능에 대해서 알아보도록 한다. 1. LiteLLM이란 무엇이고 왜 필요한가?LiteLLM은 다양한 LLM 제공자(Provider)들의 API를 표준화된 단일 인터페이스로 호출할 ..

LLM 파인튜닝 기법 LoRA에 대한 개념 이해

LoRA 파인튜닝 개념의 이해조대협 (http://bcho.tistory.com) LLM 모델에 대한 Fine tuning시에, 가장 기본적인 방법은 모델을 학습데이터로 새롭게 처음부터 학습하는 방법인데, 이 방법은 (GPU)비용이 너무 많이 들고 시간도 많이 걸린다. 그래서 대안으로 등장한것이 PEFT (Parameter-Efficient Fine-Tuning) 이라는 개념으로 , 원본 모델의 패러미터(Weight)값은 고정 시키고 작은 수의 파라미터만 훈련하거나 작은 모듈을 추가하여 학습 하는 방법으로, 과적합 (Overfitting)을 방지하고 연산량을 줄이 는 방식이다. AdapterPEFT 방법으로는 오늘 살펴볼 LoRA나 Adapter 등의 방식이 있다.Adapter 방식은 기존 모델 아키텍처..

로컬에서 LLM 모델을 실행하기 위한 Ollama, LMStudio

요즘 LLM이 유행하면서 로컬 환경에서 소형 LLM인 sLLM을 실행하는 경우가 많은데, sLLM은 종류도 많을뿐더라, 코드를 직접 실행하고, 런타임을 최적화하기가 매우 어렵다.이런 문제를 해결하기 위해서 sLLM을 손쉽게 실행할 수 있는 환경이 있는데, 가장 널리 사용되는 환경으로는 Ollama와 LMStudio가 있다.  Ollama는 아래와 같이 CLI환경에서 프롬프트를 입력할 수 있다. 또한, HTTP REST API를 제공하기 때문에 애플리케이션 개발에도 유용하게 사용할 수 있다.  개인적으로는 LMStudio를 좀 더 선호하는데, LMStudio는 아래와 같이 GUI 베이스로, 쳇봇 GUI를 지원하기 때문에 좀더 깔끔하게 사용할 수 있고, 히스토리 관리등이 가능하다.  맥북 PRO M1으로 실..

생성형 AI로 코드 품질을 높이는 방법

쓰레드에서 @choi.openai 라는 분이 LLM 모델로 코드를 생성할때, "LLM에게 "더 나은 코드를 작성해달라"고 반복적으로 요구하면 실제로 더 나은 코드를 생성할 수 있다는 결과가 나왔습니다."라는 이야기가 있어서 테스트를 해봤다. 이 내용의 원본은 https://minimaxir.com/2025/01/write-better-code/ 이다.  Gemini를 이용해서 다음과 같이 간단한 REST API를 FastAPI로 만드는 프롬프트를 작성하였다.Create the REST API code with fastAPI. - get request with HTTP POST. Input body has username,address,gender fields. - have proper error hand..

2024년 LLM 애플리케이션 아키텍쳐 및 2025년 전망

2024년 LLM 애플리케이션 아키텍쳐 및 2025년 전망조대협(http://bcho.tistory.com) Langchain은 LLM (ChatGPT등)을 이용하여 애플리케이션을 개발할 수 있는 프레임웍이다.Langchain은 LangSmith라는 이름으로 LLM 애플리케이션의 실행 내역을 추적할 수 있는 기능을 가지고 있는데, 이를 통해서 사용자들의 LLM Application의 구조를 예측할 수 있다.  이번에 2024년 Langchain의 사용량에 대한 리포트가 나왔는데, 이를 통해서 LLM application이 어떻게 변화하고 있는지를 유추해볼 수 있다.  블로그 소스 : https://blog.langchain.dev/langchain-state-of-ai-2024/?fbclid=IwZXh0..

RAG 성능 튜닝 - Embedding fine tuning

다른 아이디어로는 Embedding 모델을 파인튜닝 하는 방법이 있다. OSS 나 클라우드 제공 Embedding 모델은 범용 목적에 맞춰져 있기 때문에, 특정 서비스의 단어 도메인과 맞지 않는 경우가 많다. 그래서, 이를 그 도메인의 단어로 파인튜닝하게 되면 Embedding된 결과를 통해서 유사 문서 (질문에 대한 답변)을 찾는 정확도가 향상되기 때문에 결과적으로 RAG의 성능을 향상 시킬 수 있다.  구글의 경우 Gecko Embedding 모델에 대한 파인 튜닝을 지원한다. https://cloud.google.com/vertex-ai/generative-ai/docs/models/tune-embeddings 텍스트 임베딩 조정  |  Generative AI on Vertex AI  |  Goo..

Small to Big Chunking in RAG

RAG에서 Chunk 를 retrieval 할때, 그 Chunk의 위와 아랫부분을 확장해서 같이 리턴하는 방법으로, 더 상세한 컨택스트를 리턴할 수 있다. 언뜻 보면 Parent/Child Chunking 기법과 유사하기는 하지만, 구현이 간단해 보이고, 문장을 중심으로 확장해서 컨택스트를 추출한다는 면에서 훨씬 효과가 있어보인다.  출처 https://www.youtube.com/watch?v=TRjq7t2Ms5I

LLM 애플리케이션 아키텍처 (1/2)

LLM 애플리케이션 아키텍처 (1/2) 조대협 (http://bcho.tistory.com) ChatGPT나, Gemini 모델과 같은 LLM 을 이용한 애플리케이션을 개발하는 형태를 보면, 보통 LLM에 프롬프트 엔지니어링을 사용한 프롬프트를 입력으로 사용하고, 리턴을 받아서 사용한다. 그리고 약간 발전된 형태의 경우에는 파인 튜닝을 사용하거나, 아주 발전된 형태는 외부 문서 저장소를 사용하는 형태 정도의 수준으로 개발한다. 즉 LLM을 한번 정도 호출하는 정도의 구조를 가지고 있다. 그러나 운영환경에 올라가는 LLM 기반의 애플리케이션의 구조는 이것보다 훨씬 복잡하다. 아래 그림은 LLM 애플리케이션의 아키텍처 예시이다. 단순하게 프롬프트를 작성해서 LLM을 한번만 호출하는 것이 아니라, 여러 예제를..

#19 ChatGPT에서 질문과 관련된 웹페이지 크롤링하기

조대협 (http://bcho.tistory.com) Langchain 에서 Agent가 사용하는 Tool을 사용자가 쉽게 개발해서 추가할 수 있다. 이번 예제에서는 DuckDuckSearch Tool을 이용하여, 질문에 관련된 웹사이트를 검색한후, 그 중 한 웹사이트의 내용을 크롤링해서 웹페이지 내용을 읽어온후에, 이를 요약하는 예제를 만들어 본다. 이를 위해서 웹페이지를 크롤링하는 툴을 BeautifulSoup 을 이용해서 만들어 본다. 커스텀 툴을 정의하는 방법은 몇가지가 있는데, 이 예제에서는 데코레이터를 사용하는 방법과 StructuredTool을 사용하는 방법 두가지를 살펴보자. 먼저 decorator를 사용하는 방법이다. HEADERS = { 'User-Agent': 'Mozilla/5.0 ..