| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 프랑스) #바티칸 박물관(로마
- 파워포인트) #집(zip)파일 #아래한글(HWP) #brute-force(무차별 대입)
- 숫자 formatting
- #독점의 저주 #Curse of Monopoly #카카오 #카카오택시 #마이크로소프트 #Internet Explorer(IE) #지갑 #독점 #사랑
- 티스토리챌린지
- 스페인) #르네상스·바로크 조각 미술관(보르게세
- 네덜란드) #샤갈 미술관(니스
- xls
- ppt) 파일 #오피스(워드
- 인공지능
- #평판관리 #좋은평가받는법 #관계심리학 #인간관계팁 #신뢰쌓기 #진심의힘
- #선진국 대한민국 #선진국 #대한민국 #아이들 #청소년 #고민 #해결 #심리
- #환단고기 #상고사 #한국고대사 #단군 #역사학 #사료비판 #정서위서논쟁 #역사검증 #고대사연구 #정서위서논쟁 #사료비판 #역사학 #감정이아닌검증 #균형있는시각
- 에이전트
- #성인동화 #사람들의 심리 #100만원 수표 # 나의 가치 #구겨진 가치 #구겨진 수표
- 시스템 프롬프트
- # 암호(비밀번호) 분실 # 암호(비밀번호) 찾기 #오피스(doc
- 프랑스)#내셔널 갤러리(런던
- 영국) #프라도 미술관(마드리드
- #간단한 메모장 #개인정보처리 #Privacy Policy
- 오블완
- 로마) #반 고흐 미술관(암스테르담
- import sys
- 이탈리아) #오르세 미술관(파리
- #다산 정약용 #유배지에서 보낸 편지 #도덕 #용기 #염 #주역 #호연지기 #효제 #근검
- 엑셀
- #Netflix #넷플릭스 #자기잠식(Self-Cannibalization) #해법 중심 경영 #Disney Disney+ #Amazon Prime Video # Apple Apple TV+
- #자기계발 #자기성장 #자기관리 #긍정적인삶 #마인드셋 #심리학에세이 #삶의태도
- 파이썬
- #데일카네기 인간관계론 (고전 필독서) #인간관계론 (도서명) #인간관계개선 (가장 핵심적인 목적) #대화의기술 (실질적인 활용법) #인간관계꿀팁 (정보성) #직장생활팁 (실용성) #자기계발서 (카테고리)
- Today
- Total
아톨러브
II. AI Agent를 만들 때 자주 사용하는 패턴들 본문
#------- 1. 변수 f-string
user_name = "스티븐"
task = "분기별 판매 보고서를 요약하세요."
step = 2
max_steps = 5
prompt = f"User: {user_name} \nTask: {task} \nStep {step} of {max_steps}"
print(prompt)
#------- 2. 숫자 formatting
tokens_used = 25123
cost_per_token = 0.000003
print(f"사용한 토큰수: {tokens_used:,}")
print(f"현재까지 비용: ${tokens_used * cost_per_token:.4f}")
print(f"남아있는 예산: ${100-(tokens_used/1000):.4f}")
#------- 3. 여러 줄 문자열과 시스템 프롬프트
tools = "search , calculator, read_file"
system_prompt = f"""
당신은 사려깊은 검색 어시스턴트입니다.
Available tools: {tools}
Rules:
- 한번에 하나의 tool만 사용하세요.
- 작업을 마치면, FINISH를 사용해서 응답하세요.
"""
print(system_prompt)
print("시스템 프롬프트의 문자수: ", len(system_prompt))
#------- 4. 문자열 다루기
reply = " TOOL:Search \n"
clean = reply.strip()
print(repr(clean))
print(clean.lower())
print(clean.replace("TOOL:",""))
print(clean.split(":"))
print(clean.startswith("TOOL"))
#------- 5. 빈 응답 검사
responses = ["", " ", "FINISH", None]
for r in responses:
if r and r.strip():
print(f"사용가능한 응답: {r.strip()}")
else:
print(f"비어있는 응답, 재시도(Value was {r!r})")
#------- 6. 문자열 → 숫자 변환과 예외처리
raw = "12"
print(raw + "3")
print(int(raw) + 1)
for value in ["10", "7.3", "여섯"]:
try:
print(f"문자 {value!r}을/를 실수 {float(value)}(으)로 변환합니다.")
except ValueError:
print(f"{value!r}는 숫자가 아닙니다.")
#------- 7. 함수로 Prompt 생성하
def build_prompt(name, task, tools, tone="friendly"):
tool_list = ", ".join(tools)
prompt = f"""
당신은 {name}을 도와주는 어시스턴트입니다.
tone: {tone}
task: {task}
Tools: {tool_list}
작업을 마치면, FINISH를 사용해서 응답하세요.
"""
return prompt.strip()
result = build_prompt(
name="스티븐",
task="지난달 최고 판매 제품 3개를 찾아라.",
tools = {"검색", "계산기", "파일읽기"},
tone = "직접적이지만 친절한",
)
print(result)
print("-"*40)
print(f"프롬프트 길이: {len(result)} 개")
1. 변수 + f-string
user_name = "스티븐"
task = "분기별 판매 보고서를 요약하세요."
step = 2
max_steps = 5
prompt = f"User: {user_name} \nTask: {task} \nStep {step} of {max_steps}"
print(prompt)
먼저 4개의 변수를 만들었습니다.
user_name = "스티븐"
user_name이라는 변수에 "스티븐"라는 문자열을 저장합니다.
task = "분기별 판매 보고서를 요약하세요."
task에는 AI가 수행해야 할 작업을 저장합니다.
즉,
"분기별 판매 보고서를 요약해라."
라는 작업입니다.
그리고:
step = 2
max_steps = 5
현재 작업 단계와 최대 작업 단계를 저장합니다.
즉:
현재 단계 = 2
전체 단계 = 5
입니다.
f"..."가 핵심
prompt = f"User: {user_name} \nTask: {task} \nStep {step} of {max_steps}"
앞에 f가 붙었습니다.
이것을 f-string이라고 합니다.
문자열 안에 변수의 값을 집어넣을 수 있습니다.
예를 들어:
name = "Dana"
print(f"안녕하세요 {name}님")
결과:
안녕하세요 Dana님
입니다.
따라서 이 코드:
f"User: {user_name} \nTask: {task} \nStep {step} of {max_steps}"
는 실제로 다음과 같은 문자열을 만들어냅니다.
User: Dana
Task: summarize the quarterly sales report
Step 2 of 5
2. \n은 줄바꿈
여기서:
\n
도 중요합니다.
\n은 new line, 즉 줄바꿈을 의미합니다.
print("A\nB")
결과:
A
B
따라서:
"User: Dana \nTask: ..."
라고 하면 User와 Task가 서로 다른 줄에 표시됩니다.
3. Agent에서 왜 이런 형식이 중요한가?
이것은 단순한 문자열 연습 같지만 실제 Agent에서는 굉장히 흔합니다.
예를 들어 Agent에게 다음과 같은 정보를 전달할 수 있습니다.
User: 스티븐
Task: 분기별 판매 보고서를 요약하세요.
Step 2 of 5
즉 현재 Agent의 상태를 하나의 prompt로 만들어 모델에게 전달하는 것입니다.
최근 공부하신 Agent Loop와 연결하면:
사용자 요청
↓
현재 task
↓
현재 step
↓
사용 가능한 tool
↓
Prompt 생성
↓
LLM 호출
같은 구조가 됩니다.

4. 토큰과 비용 계산
다음 코드입니다.
tokens_used = 25123
cost_per_token = 0.000003
현재까지 사용한 토큰 수가:
25,123 tokens
이라고 가정합니다.
그리고 토큰 하나당 비용을:
$0.000003
이라고 가정합니다.
토큰 수 출력
print(f"사용한 토큰수: {tokens_used:,}")
여기서 아주 중요한 formatting이 있습니다.
:,
입니다.
숫자에 천 단위 콤마를 넣으라는 의미입니다.
예를 들어:
tokens_used = 25123
print(f"{tokens_used:,}")
결과:
25,123
입니다.
즉:
25123
을
25,123
으로 보여주는 것입니다.
5. .4f
다음입니다.
print(f"현재까지 비용: ${tokens_used * cost_per_token:.4f}")
먼저 계산부터 해보면:
tokens_used * cost_per_token
즉:
25123 × 0.000003
입니다.
결과는:
0.075369
정도입니다.
그런데 뒤에:
:.4f
가 붙어 있습니다.
이것은 소수점 이하 4자리까지 표시하라는 뜻입니다.
그래서:
0.075369
가
0.0754
로 표시됩니다.
결과:
현재까지 비용: $0.0754
6. :.4f의 의미
이것은 앞으로 자주 만나게 됩니다.
f"{number:.4f}"
의 의미는:
number를 소수점 이하 4자리까지 표시
입니다.
예:
x = 3.141592
print(f"{x:.2f}")
print(f"{x:.4f}")
결과:
3.14
3.1416
7. 예산 계산
print(f"남아있는 예산: ${100-(tokens_used/1000):.4f}")
여기에는 약간 이상한 부분이 있습니다.
코드 그대로 계산하면:
100 - (25123 / 1000)
입니다.
먼저:
25123 / 1000 = 25.123
그러므로:
100 - 25.123 = 74.877
결과는:
남아있는 예산: $74.8770
정도가 됩니다.
하지만 이것은 실제 토큰 비용을 계산한 예산은 아닙니다. 교육용 예제에서 단순하게 만든 계산식입니다.
실제라면:
remaining_budget = budget - tokens_used * cost_per_token
처럼 계산하는 것이 자연스럽습니다.
8. 시스템 프롬프트 만들기
다음 코드가 AI Agent와 직접적으로 연결됩니다.
tools = "search , calculator, read_file"
system_prompt = f"""
당신은 사려깊은 검색 어시스턴트입니다.
Available tools: {tools}
Rules:
- 한번에 하나의 tool만 사용하세요.
- 작업을 마치면, FINISH를 사용해서 응답하세요.
"""
여기서 새로운 문법이 나옵니다.
f"""
...
"""
이것은 여러 줄 문자열 + f-string입니다.
9. """ """는 무엇인가?
일반적인 문자열은:
text = "안녕하세요"
처럼 한 줄로 만들 수 있습니다.
하지만 여러 줄을 넣고 싶다면:
text = """
첫 번째 줄
두 번째 줄
세 번째 줄
"""
처럼 사용할 수 있습니다.
이를 triple quoted string, 즉 삼중 따옴표 문자열이라고 합니다.
AI에서는 특히 중요합니다.
왜냐하면 Prompt가 길어지기 때문입니다.
예를 들어:
당신은 검색 어시스턴트입니다.
사용자의 질문을 분석하세요.
필요하면 검색 도구를 사용하세요.
작업을 마치면 FINISH를 사용하세요.
같은 Prompt를 작성하기 편합니다.
10. 그런데 앞에 f가 붙었다
system_prompt = f"""
...
Available tools: {tools}
...
"""
앞에 f가 있으므로 f-string 기능도 동시에 사용합니다.
따라서:
tools = "search , calculator, read_file"
의 값이:
{tools}
자리에 들어갑니다.
최종 Prompt는 대략:
당신은 사려깊은 검색 어시스턴트입니다.
Available tools: search , calculator, read_file
Rules:
- 한번에 하나의 tool만 사용하세요.
- 작업을 마치면, FINISH를 사용해서 응답하세요.
가 됩니다.
11. 이것이 바로 Agent의 System Prompt
이 부분은 지금 공부하고 있는 Agent에서 상당히 중요합니다.
system_prompt
은 단순한 문자열이지만, LLM에게는 행동 규칙을 알려주는 지침이 됩니다.
예를 들어:
당신은 사려깊은 검색 어시스턴트입니다.
→ Agent의 역할
Available tools: search, calculator, read_file
→ Agent가 사용할 수 있는 도구
한번에 하나의 tool만 사용하세요.
→ 행동 규칙
작업을 마치면 FINISH를 사용하세요.
→ 종료 규칙
입니다.
즉 Agent를 아주 단순화하면:
System Prompt
↓
"너는 누구인가?"
"무슨 일을 하는가?"
"어떤 Tool을 사용할 수 있는가?"
"어떤 규칙을 지켜야 하는가?"
"언제 끝내야 하는가?"
를 알려주는 것입니다.
12. len(system_prompt)
print("시스템 프롬프트의 단어수: ", len(system_prompt))
여기서 주의할 점이 있습니다.
len()은 문자열의 길이, 즉 문자 개수를 반환합니다.
따라서 이 표현은 사실 엄밀하게 말하면:
시스템 프롬프트의 문자수
라고 하는 것이 맞습니다.
len(system_prompt)는 단어 수가 아닙니다.
예를 들어:
text = "hello world"
print(len(text))
결과는:
11
입니다.
단어는 2개지만 문자는 공백까지 포함해서 11개입니다.
따라서 이 코드의:
"시스템 프롬프트의 단어수"
라는 표현은 조금 부정확합니다.
13. 문자열 다루기
다음 코드입니다.
reply = " TOOL:Search \n"
clean = reply.strip()
여기서 AI Agent에서 상당히 중요한 문자열 처리 기술이 나옵니다.
LLM의 응답은 항상 우리가 원하는 형태로 딱 떨어지지 않을 수 있습니다.
예를 들어 모델이:
TOOL:Search
처럼 앞뒤에 공백이나 줄바꿈을 붙일 수 있습니다.
그래서 정리하는 것입니다.
14. .strip()
clean = reply.strip()
strip()은 문자열 앞뒤의 공백이나 줄바꿈 등을 제거합니다.
원래:
" TOOL:Search \n"
였다면:
"TOOL:Search"
가 됩니다.
중요한 것은 문자열 중간의 공백은 제거하지 않는다는 것입니다.
15. repr()
print(repr(clean))
repr()은 문자열을 개발자가 확인하기 좋은 형태로 보여줍니다.
예를 들어:
text = "hello"
print(text)
print(repr(text))
결과는 대략:
hello
'hello'
입니다.
특히 공백이나 \n 같은 것이 있는지 확인할 때 매우 유용합니다.
AI Agent를 디버깅할 때 자주 사용합니다.
16. .lower()
print(clean.lower())
문자열을 모두 소문자로 바꿉니다.
TOOL:Search
→
tool:search
이렇게 됩니다.
왜 필요할까요?
LLM이:
TOOL:Search
라고 할 수도 있고:
tool:search
라고 할 수도 있기 때문입니다.
문자열 비교를 할 때 대소문자를 통일하면 편합니다.
17. .replace()
print(clean.replace("TOOL:",""))
replace()는 문자열의 특정 부분을 다른 문자열로 바꿉니다.
여기서는:
TOOL:Search
에서
TOOL:
을 빈 문자열 ""로 바꿉니다.
결과:
Search
입니다.
즉:
clean.replace("TOOL:", "")
는 사실상
"TOOL:"이라는 접두어를 제거해라.
입니다.
18. .split(":")
print(clean.split(":"))
:를 기준으로 문자열을 나눕니다.
TOOL:Search
를:
["TOOL", "Search"]
로 만듭니다.
이것은 Agent에서 굉장히 유용합니다.
예를 들어 LLM이:
TOOL:calculator
라고 응답했다고 하면:
parts = clean.split(":")
결과:
["TOOL", "calculator"]
가 됩니다.
그러면:
parts[0]
→ "TOOL"
parts[1]
→ "calculator"
를 얻을 수 있습니다.
19. .startswith()
print(clean.startswith("TOOL"))
뜻은:
이 문자열이 "TOOL"로 시작하는가?
입니다.
"TOOL:Search".startswith("TOOL")
→ True
반면:
"FINISH".startswith("TOOL")
→ False
입니다.
Agent에서는 이런 식으로 사용할 수 있습니다.
if response.startswith("TOOL"):
# Tool 실행
즉 LLM의 응답을 보고:
TOOL:Search
인지
FINISH
인지 판단할 수 있습니다.
20. 빈 응답 검사
다음 코드입니다.
responses = ["", " ", "FINISH", None]
for r in responses:
if r and r.strip():
print(f"사용가능한 응답: {r.strip()}")
else:
print(f"비어있는 응답, 재시도(Value was {r!r})")
이 부분은 Agent의 안정성과 관련이 있습니다.
LLM이나 Tool의 결과가 항상 정상적인 문자열이라고 보장할 수 없기 때문입니다.
예를 들어:
""
빈 문자열
" "
공백만 있는 문자열
None
값 자체가 없는 경우
등이 있을 수 있습니다.
21. for r in responses
for r in responses:
리스트에 있는 값을 하나씩 꺼냅니다.
첫 번째:
r = ""
두 번째:
r = " "
세 번째:
r = "FINISH"
네 번째:
r = None
입니다.
22. if r and r.strip()
이 부분이 핵심입니다.
if r and r.strip():
두 가지를 확인합니다.
첫 번째
r
값 자체가 존재하는가?
두 번째
r.strip()
공백을 제거했을 때 실제 내용이 있는가?
예를 들어:
r = ""
이면:
r
→ False
입니다.
r = " "
이면:
r
→ True
하지만:
r.strip()
→ ""
이므로 False입니다.
r = "FINISH"
이면:
r
→ True
r.strip()
→ "FINISH"
→ True
입니다.
23. r!r은 무엇인가?
f"Value was {r!r}"
여기서:
!r
은 repr 방식으로 표시하라는 뜻입니다.
예를 들어:
r = " "
라면 일반적으로 출력하면:
Value was
처럼 공백인지 잘 안 보입니다.
하지만:
f"{r!r}"
이면:
' '
라고 보여줍니다.
None이면:
None
이라고 명확하게 보여줍니다.
따라서 디버깅에 굉장히 좋습니다.
24. 문자열과 숫자
다음 코드입니다.
raw = "12"
print(raw + "3")
print(int(raw) + 1)
여기서 매우 중요한 Python 특징이 나옵니다.
raw는 숫자 12가 아닙니다.
raw = "12"
이므로 **문자열 "12"**입니다.
첫 번째:
raw + "3"
는:
"12" + "3"
입니다.
문자열끼리 더하면 문자열을 이어붙입니다.
결과:
123
하지만:
int(raw) + 1
에서는:
int("12")
를 통해 문자열 "12"를 정수 12로 바꿉니다.
따라서:
12 + 1
→
13
입니다.
25. int()와 float()
Python에서는 데이터를 숫자로 변환할 수 있습니다.
int("12")
→ 12
float("7.3")
→ 7.3
입니다.
즉:
문자열
↓
숫자 변환
↓
계산
입니다.
AI Agent에서는 Tool의 결과가 문자열로 돌아오는 경우가 많기 때문에 이런 변환이 중요합니다.
26. try / except
다음 코드가 아주 중요합니다.
for value in ["10", "7.3", "여섯"]:
try:
print(f"문자 {value!r}을/를 실수 {float(value)}(으)로 변환합니다.")
except ValueError:
print(f"{value!r}는 숫자가 아닙니다.")
여기서:
try:
는
"일단 이 작업을 시도해봐."
라는 뜻입니다.
그리고:
except ValueError:
는
"그런데 숫자 변환 과정에서 ValueError가 발생하면 이렇게 처리해."
라는 뜻입니다.
27. 첫 번째 "10"
float("10")
→
10.0
정상적으로 변환됩니다.
28. 두 번째 "7.3"
float("7.3")
→
7.3
역시 정상입니다.
29. 세 번째 "여섯"
float("여섯")
이것은 숫자로 변환할 수 없습니다.
따라서 Python이:
ValueError
라는 오류를 발생시킵니다.
하지만 프로그램이 죽는 대신:
except ValueError:
가 이 오류를 잡아서:
'여섯'는 숫자가 아닙니다.
라고 출력합니다.
30. 이것이 Agent에서 중요한 이유
실제 Agent에서는 외부 데이터가 들어옵니다.
예:
사용자 입력
API 결과
파일
DB
검색 결과
LLM 응답
그리고 그 데이터가 항상 우리가 원하는 형태라는 보장이 없습니다.
예를 들어:
"1500"
일 수도 있지만,
"약 1,500원"
일 수도 있습니다.
따라서:
try:
...
except:
...
와 같은 방어적인 프로그래밍이 중요합니다.
31. 마지막 함수 build_prompt
이제 가장 중요한 부분입니다.
def build_prompt(name, task, tools, tone="friendly"):
함수를 하나 만들었습니다.
함수 이름은:
build_prompt
입니다.
뜻 그대로:
Prompt를 만들어주는 함수
입니다.
32. 함수의 매개변수
def build_prompt(name, task, tools, tone="friendly"):
4개의 매개변수를 받습니다.
name
task
tools
tone
그런데 tone에는 기본값이 있습니다.
tone="friendly"
따라서 tone을 전달하지 않으면 자동으로:
friendly
가 들어갑니다.
33. ", ".join(tools)
tool_list = ", ".join(tools)
이것도 매우 중요한 Python 문법입니다.
tools가:
["검색", "계산기", "파일읽기"]
라면:
", ".join(tools)
결과는:
검색, 계산기, 파일읽기
가 됩니다.
즉 리스트를 하나의 문자열로 합치는 것입니다.
34. 주의할 점: tools가 set이다
실제 호출을 보면:
tools = {"검색", "계산기", "파일읽기"}
중괄호 {}를 사용했습니다.
이것은 set(집합)입니다.
리스트라면:
["검색", "계산기", "파일읽기"]
set은:
{"검색", "계산기", "파일읽기"}
입니다.
그리고 set은 순서를 보장하지 않습니다.
따라서 결과가 실행할 때마다:
검색, 계산기, 파일읽기
일 수도 있고
파일읽기, 검색, 계산기
일 수도 있습니다.
Prompt에서 Tool의 순서가 중요하다면:
tools = ["검색", "계산기", "파일읽기"]
처럼 list를 사용하는 것이 좋습니다.
35. Prompt 생성
함수 내부:
prompt = f"""
당신은 {name}을 도와주는 어시스턴트입니다.
tone: {tone}
task: {task}
Tools: {tool_list}
작업을 마치면, FINISH를 사용해서 응답하세요.
"""
앞에서 배운 개념이 모두 들어 있습니다.
{name}
호출할 때:
name="스티븐"
이므로:
당신은 스티븐을 도와주는 어시스턴트입니다.
가 됩니다.
{tone}
직접적이지만 친절한
이 들어갑니다.
{task}
지난달 최고 판매 제품 3개를 찾아라.
가 들어갑니다.
{tool_list}
검색, 계산기, 파일읽기
가 들어갑니다.
36. .strip()을 붙이는 이유
return prompt.strip()
Prompt 앞뒤에 불필요한 줄바꿈이나 공백이 생길 수 있기 때문에 제거합니다.
예를 들어:
당신은 스티븐을 도와주는 어시스턴트입니다.
...
에서 맨 앞의 불필요한 줄바꿈을 제거해줍니다.
37. return
return prompt.strip()
이것은
함수가 만들어낸 결과를 호출한 곳으로 돌려준다.
는 의미입니다.
따라서:
result = build_prompt(...)
라고 하면 함수가 만든 Prompt가:
result
에 들어갑니다.
38. 실제 함수 호출
result = build_prompt(
name="스티븐",
task="지난달 최고 판매 제품 3개를 찾아라.",
tools={"검색", "계산기", "파일읽기"},
tone="직접적이지만 친절한",
)
여기서 각각:
name
↓
스티븐
task
↓
지난달 최고 판매 제품 3개를 찾아라.
tools
↓
검색, 계산기, 파일읽기
tone
↓
직접적이지만 친절한
이 함수로 전달됩니다.
그러면 함수가 Prompt를 만들고:
return prompt.strip()
으로 반환합니다.
그 결과가:
result
에 들어갑니다.
39. 마지막 출력
print(result)
그러면 만들어진 Prompt가 출력됩니다.
대략:
당신은 스티븐을 도와주는 어시스턴트입니다.
tone: 직접적이지만 친절한
task: 지난달 최고 판매 제품 3개를 찾아라.
Tools: 검색, 계산기, 파일읽기
작업을 마치면, FINISH를 사용해서 응답하세요.
가 됩니다.
40. 전체 코드를 Agent 관점에서 보면
이 코드에서 가장 중요한 것은 각각의 Python 문법을 따로 외우는 것이 아닙니다.
전체 구조를 이렇게 이해하는 것이 중요합니다.
사용자
↓
name
task
tone
tools
↓
build_prompt()
↓
Prompt 생성
↓
LLM
↓
응답
↓
문자열 정리
↓
TOOL인가?
FINISH인가?
↓
Tool 실행 또는 종료
즉 지금 공부하고 계신 AI Agent의 기본 골격이 이미 들어 있습니다.
41. 이번 코드에서 특히 기억할 Python 문법
이번 코드는 앞으로 Agent 코드를 읽을 때 계속 만날 문법들을 상당히 잘 모아놓았습니다.
| f"{x}" | 변수 삽입 | Prompt 생성 |
| \n | 줄바꿈 | Prompt 구성 |
| """ """ | 여러 줄 문자열 | System Prompt |
| :, | 천 단위 콤마 | 토큰/금액 출력 |
| :.4f | 소수 4자리 | 비용 출력 |
| .strip() | 앞뒤 공백 제거 | LLM 응답 정리 |
| repr() / !r | 문자열 원형 확인 | 디버깅 |
| .lower() | 소문자 변환 | 응답 비교 |
| .replace() | 문자열 교체 | Tool prefix 제거 |
| .split() | 문자열 분리 | Tool/명령 분석 |
| .startswith() | 시작 문자열 검사 | TOOL: 확인 |
| if r | 값 존재 확인 | 빈 응답 처리 |
| int() | 정수 변환 | 숫자 계산 |
| float() | 실수 변환 | 숫자 계산 |
| try/except | 오류 처리 | 잘못된 LLM/외부 데이터 대응 |
| def | 함수 정의 | Prompt 생성 함수 |
| join() | 여러 문자열 합치기 | Tool 목록 생성 |
| return | 함수 결과 반환 | Prompt 전달 |
🌟이번 코드에서 가장 중요한 3개
제가 지금 단계에서 특히 강조하고 싶은 것은 세 가지입니다.
① f-string
f"Task: {task}"
→ 변수를 Prompt 안에 넣는다.
② 문자열 처리
strip()
lower()
replace()
split()
startswith()
→ LLM이 내놓은 문자열을 분석하고 정리한다.
이것은 Agent를 만들 때 정말 많이 사용합니다.
③ 함수로 Prompt를 만든다
def build_prompt(...):
→ Prompt를 매번 직접 작성하지 않고 함수로 자동 생성한다.
이 단계부터 단순한 Python 프로그램이 조금씩 Agent 프로그램의 구조로 발전하기 시작합니다.
'AI, 클라우드, 문서, 자동화 > AI_AGENT' 카테고리의 다른 글
| I. Python 실행 환경이 제대로 갖춰져 있는지 확인하는 간단한 점검 프로그램 (0) | 2026.08.22 |
|---|
