zzziaho

LLM 답이 매번 달라질 때 temperature와 seed로 고정하기

안녕하세요LLM을 API로 다루기 시작하면 같은 프롬프트를 두 번 보냈는데 답이 다르게 오는 상황을 곧 만나게 됩니다. 이래서는 테스트를 작성하기도 어렵고, 프롬프트를 고쳤을 때 정말 나아진 것인지 운이 좋았던 것인지도 가릴 수 없습니다. 이 글에서는 그 무작위성을 조절하는 값 네 개가 각각 어디에 작용하는지 정리하고, Ollama에 요청을 직접 보내 어느 값이 실제로 답을 고정해 주는지 확인해 보겠습니다. 확인하는 과정에서 공식 문서의 설명 하나가 실제 동작과 어긋나 있다는 사실도 함께 발견했습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.3, llama3.2:1b, Git Bash, jq 1.8.2..

LLM이 대화를 기억하는 방법과 토큰이 누적되는 이유

안녕하세요.ChatGPT, Gemini 등 AI와 대화를 이어가다 보면 AI가 나와 나눈 대화를 기억하고 있는 것처럼 느껴집니다.그런데 모델 쪽에는 지난 대화가 남지 않습니다. 대화가 이어지는 것처럼 보이는 이유는 지난 대화 전체를 매번 다시 보내기 때문입니다. 이 글에서는 Ollama로 턴을 늘려 가며 입력 토큰이 얼마나 불어나는지 직접 재고, 그 구조가 비용과 컨텍스트 한계에 어떻게 이어지는지 확인해 보겠습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.2, llama3.2:1b, jq 1.8.2입니다.먼저 결론입니다모델은 지난 대화를 기억하지 않습니다. ChatGPT나 Gemini와 같은 AI들이 ..

한국어가 영어보다 LLM 토큰(Token)을 더 쓰는 이유

안녕하세요.같은 프롬프트를 한국어로 보낼 때와 영어로 보낼 때 LLM이 세는 토큰 수가 다르다는 말이 있습니다. 토큰 수는 곧 요금이고 컨텍스트 한계이므로, 차이가 얼마나 되는지 알면 프롬프트를 어느 언어로 쓸지 판단할 근거가 생깁니다. 이 글에서는 Ollama의 prompt_eval_count(모델이 입력에서 읽은 조각의 개수)로 실제로 쓸 법한 프롬프트 세 쌍의 토큰 수를 재고, 그 차이를 요금과 컨텍스트로 환산해 비교해보겠습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.2, llama3.2:1b, jq 1.8.2입니다.제대로 측정하려면 막아야 할 것이 둘 있습니다토큰 수를 재는 일은 요청 한 번이..

LLM 토크나이저(Tokenizer)가 문장을 토큰으로 쪼개는 원리

안녕하세요.LLM에서 토큰 수는 곧 요금이고 컨텍스트 한계인데, 정작 무엇이 한 토큰인지는 우리가 정하지 않습니다. 모델이 이미 가지고 있는 어휘 목록이 정합니다. 이 글에서는 그 목록이 어떻게 만들어지는지 살펴보고, Ollama로 실제 모델의 어휘를 꺼내서 토큰 번호를 문자로 되돌려 보겠습니다.이 글은 Ollama가 설치되어 있고 모델을 하나 받아 둔 상태를 전제로 합니다.확인에 사용한 환경은 Windows 11, Ollama 0.33.1, llama3.2:1b, Git Bash, jq 1.8.2입니다.토크나이저는 AI 용어가 아닙니다토큰화는 LLM에서만 사용하는 개념은 아닙니다. 문자열을 의미 있는 최소 단위로 나누는 작업이며, 컴파일러가 소스 코드를 읽을 때부터 하던 일입니다. 자바 언어 명세 3장..

LLM(Large Language Model)이란 무엇이고 어떻게 답을 만드는가

안녕하세요.챗지피티(ChatGPT), 클로드(Claude), 제미나이(Gemini)처럼 요즘 널리 쓰이는 AI 서비스들은 만든 회사도 다르고 화면도 다릅니다. 그런데 그 안에서 실제로 글을 만들어 내는 부분은 모두 LLM이라는 같은 종류의 모델입니다.쓰다 보면 궁금해지는 것들이 생깁니다. 왜 어떤 질문에는 술술 답하다가 어떤 질문에는 그럴듯한 거짓말을 하는지, 왜 같은 질문을 다시 물으면 답이 조금씩 달라지는지 같은 것들입니다. 이 궁금증들은 전부 LLM이 답을 만들어 내는 방식 하나로 이어집니다.이번 포스팅에서는 그 LLM이 무엇이고 어떻게 답을 만드는지 알아보겠습니다.LLM이 무엇인가LLM은 Large Language Model, 큰 언어 모델의 약자입니다.Language Model (언어 모델): ..

Ollama 설치부터 API 호출까지 정리

안녕하세요로컬 LLM 중 하나인 Ollama에 대해 알아보고 설치 및 API 호출하는 방법까지 정리해보도록 하겠습니다.Ollama가 무엇인가Ollama는 로컬 컴퓨터에서 LLM을 내려받아 실행하게 해 주는 도구입니다. 오픈소스로 공개되어 있습니다. 모델 파일을 직접 관리하거나 추론 서버를 따로 띄우지 않아도, 명령 한 줄로 모델을 받고 바로 대화할 수 있습니다.그리고 Ollama는 REST API 서버를 함께 띄웁니다. 설치하면 로컬에 API 엔드포인트가 열리고, 상용 API를 호출하듯 요청을 보낼 수 있습니다. 그래서 터미널에서 대화만 해 보는 용도를 넘어 코드에 붙여 쓰는 것까지 가능합니다.이름에 라마가 들어가서 로고가 라마 이미지인데 상당히 귀엽습니다.왜 로컬에서 돌리는가ChatGPT, Claude..

8장. 프록시와 연관관계 정리

* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다.📁 프록시 기초엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다.예를들어:회원과 팀 함께 출력:public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("팀 이름: " + team.getName()); // 팀도 사용!}→ Member와 Team을 모두 사용하므로 ..

7장. 고급 매핑

* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다.📁 상속 관계 매핑관계형 데이터베이스에는 객체지향 언어에서 다루는 '상속'이라는 개념이 없다.대신 슈퍼타입 서브타입 관계( Super-Type Sub-Type Relationship) 라는 모델링 기법이 존재하고이 기법이 객체의 상속 개념과 가장 유사하다. 슈퍼타입 서브타입 논리 모델을 실제 물리 모델인 테이블로 구현할 때는 3가지 방법이 있다.조인 전략단일 테이블 전략구현 클래스마다 테이블 전략📁 조인 전략 (Joined Strategy)엔티티 각각을 모두 테이블로 변환하는 전략.자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용한다.* 주의사항객체는 타입으로 구분이 ..

6장. 다양한 연관관계 매핑

* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다.📁 고려사항엔티티의 연관관계를 매핑할 때는 다음 3가지를 고려해야 한다.1. 다중성다대일(N:1): @ManyToOne일대다(1:N): @OneToMany일대일(1:1): @OneToOne다대다(N:M): @ManyToMany2. 단방향, 양방향테이블: 외래 키 하나로 양쪽 조인 가능 (방향 개념 없음)객체: 참조용 필드가 있는 쪽으로만 참조 가능한쪽만 참조: 단방향양쪽이 서로 참조: 양방향3. 연관관계의 주인양방향 관계에서 연관관계의 주인을 정해야 함외래 키를 관리하는 참조주인이 아닌 쪽은 읽기만 가능주인이 아닌 쪽에 mappedBy 속성으로 주인 지정📁 다대일 (N:1)데이터베이스 테이블의..

5장. 연관관계 매핑 기초

* 해당 포스팅은 김영한님의 '자바 ORM 표준 JPA 프로그래밍' 교재를 학습한 후 내용을 정리한 글입니다. 📁 연관관계가 필요한 이유연관관계가 없는 경우 객체를 테이블에 맞추어 모델링 해야한다.그렇게 되는 경우 아래와 같은 문제점이 발생한다.테이블은 외래키로 조인을 사용해서 연관된 테이블을 찾고,객체는 참조를 사용해서 연관된 객체를 찾는다.테이블과 객체 사이에는 이런 큰 간격이 존재하기 때문에객체를 테이블에 맞추어 데이터 중심으로 모델링하면 협력 관계를 만들 수 없다.📁 단방향 연관관계@Entitypublic class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Colum..