2장 · LLM API 기초 — 절 목차01. LLM 호출은 함수다02. 시스템 지시로 역할 입히기03. temperature 일관성과 다양성 사이04. 따라하기 chat 함수 만들기05. LLM은 방금 한 말도 잊는다06. 따라하기 대화를 손으로 쌓아 멀티턴 만들기07. 토큰과 비용 감각08. 정리 체크리스트
정리 & 체크리스트
한 줄 요약
2장이 끝났습니다. LLM을 다루는 기본기가 갖춰졌습니다 — 역할을 부여하고, 답의 성격을 조절하고, 대화를 이어 가는 법. 3장부터는 여기에 도구를 붙입니다.
1. 2장에서 만든 것
code/ch02_chat.py — 함수 세 개.
| 함수 | 하는 일 | 어디서 다시 쓰나 |
|---|---|---|
chat(system, user, temperature) |
한 번 묻고 한 번 답 받기 | 3장 이후에도 계속 |
chat_multi(system, history) |
대화 전체를 보내고 답 받기 | 개념이 7장으로 |
say(role, text) |
대화 한 줄 만들기 | 4장에서 형태가 확장 |
2. 이 장의 핵심 내용 — 말로 설명할 수 있어야 할 것들
- LLM 호출은
generate_content(model, contents, config)함수 하나다. 답은.text로 꺼낸다. system_instruction은 대화 전체에 계속 적용되는 역할·규칙이다. 질문마다 반복할 필요가 없다.- 같은 질문이라도 시스템 지시가 바뀌면 말투·길이·태도가 전부 달라진다.
- 시스템 지시는 강한 부탁이지 절대 명령이 아니다. 반드시 지켜져야 하는 것은 코드나 문서 근거로 강제한다.
temperature는 답의 들쭉날쭉함을 정한다. 에이전트 실습에서는 거의 항상 0을 쓴다 — 판단이 흔들리면 디버깅이 불가능하기 때문이다.- LLM 호출은 무상태다. 두 번째 호출은 첫 번째를 전혀 모른다.
- 멀티턴의 정체는 리스트에 대화를 쌓아 매번 통째로 보내는 것이다. ChatGPT도 이렇게 한다.
- 한 턴은 세 단계다 — 사용자 말 기록 → 전체 전송 → 답변 기록. 세 번째를 빠뜨리면 모델은 자기가 한 말을 모른다.
- 기억은 모델의 능력이 아니라 우리가 만드는 구조다.
- 토큰은 LLM이 글을 세는 단위이고, 멀티턴은 턴이 늘수록 입력 토큰 수가 늘어난다. 출력이 입력보다 비싸다.
3. 체크리스트
- [ ]
python code/ch02_chat.py가 끝까지 돌아간다 - [ ] 시스템 지시를 바꿔 답이 달라지는 것을 직접 확인했다
- [ ]
[2]에서 이름을 잊는 것과[3]에서 기억하는 것의 차이가 무엇 때문인지 설명할 수 있다 - [ ]
history에 무엇이 들어 있는지 찍어 봤다 - [ ]
temperature=0과1.5의 차이를 직접 확인했다
4. 아직 안 한 것 — 3장으로 넘어가며
2장까지의 상담원은 말은 잘하지만 아무것도 모릅니다.
고객 : 주문 O001203은 지금 어떤 상태인가요?
상담원: 확인 후 안내드리겠습니다.
시스템 지시를 아무리 잘 써도 이 답은 바뀌지 않습니다. 주문 데이터가 입력에 없기 때문입니다. 5절에서 본 것과 같은 구조의 문제입니다 — 없는 정보는 지시로 만들 수 없습니다.
그래서 3장에서는 정보를 가져오는 통로를 만듭니다.
아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.
def get_order_status(order_id: str) -> str:
"""주문번호로 주문 상태를 조회한다."""
... # orders.csv 를 읽어서 돌려주는 평범한 파이썬 함수
그리고 이 함수를 LLM에게 쥐여 줍니다.
아래는 개념 설명용 코드입니다 — 실습 파일에 넣지 않습니다.
config = types.GenerateContentConfig(
tools=[get_order_status], # ← 3장에 새로 배우는 한 줄
system_instruction=SYSTEM,
)
config 에 tools 한 줄이 추가되는 것, 그게 "에이전트"가 시작되는 지점입니다. 1장에서 말한 그대로 — 도구는 그냥 파이썬 함수입니다.
3장에서 확인하게 될 가장 중요한 사실
미리 예고해 둡니다. 3장의 핵심은 이 한 문장입니다.
LLM은 함수를 직접 실행하지 못합니다.
모델이 하는 일은 "이 함수를 이 값으로 불러 주세요"라고 요청하는 것까지입니다. 실제로 실행하는 건 우리 코드입니다. 이 경계선을 정확히 아는 것이 3장의 목표이고, 4장의 ReAct(Reasoning + Acting, 생각 · 행동 · 관찰을 반복하는 방식) 루프와 8장의 멀티에이전트가 전부 여기서 출발합니다.