Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 커밋 메시지
- docker
- crud
- 네팔
- 알고리즘
- Lv.2
- 로그인
- openAI
- fastapi
- 프로젝트
- 서버 꺼짐
- mysql
- LV2
- llm
- 코딩테스트
- 세션로그인
- Spring
- 우테코
- OOM
- 부트스트랩
- cors
- springboot
- 회고
- 해외봉사
- 프로그래머스
- Java
- Dockerfile
- spring boot
- 쿠키로그인
- 게시판
Archives
- Today
- Total
s00jin 님의 블로그
5. [FastAPI + OpenAI API] 사전 공부 | 날짜 출력 오류 문제 해결 본문
분명 오늘은 25.05.19인데..
프롬프트에 사용자가 날짜에 대한 입력이 없으면 해당 입력이 들어온 날짜로 설정해 달라고 했더니
{'category': '식비', 'amount': 20000, 'date': '2023-10-12'}
이렇게 반환한다.. 반항..?
더보기
지금 적으면서도 어이없어 웃기지만 혹시나 하는 마음에 내 시간을 찍는 코드를 썻다.. (가져와도 gpt 서버 시간 가져올텐데 말이다..ㅎㅎ)
해결 코드
파이썬 datetime을 사용해서 today란 변수에 오늘 날짜를 저장하게 한 후 프롬프트에 today를 받게 했다.
from datetime import datetime
today = datetime.today().strftime("%Y-%m-%d")
위 코드로 today에 날짜를 담아줬다.
그리고 조금의 편리함을 위해 response도 수정했다. 혹시 몰라 프롬프트에 날짜에 관해 명시해줬다.
response = client.chat.completions.create(
model="gpt-4.1-nano",
messages=[
{"role": "system", "content": f"""너는 사용자 소비 내역을 정리해주는 가계부 어시스턴트야.
오늘 날짜는 {today}야.
만약 사용자가 '오늘', '어제', '그제' 같은 말을 하면 이를 기준으로 정확한 날짜(YYY-MM-DD)로 바꿔줘."""},
{"role": "user", "content": "어제 1800원짜리 아메리카노 마셨어"}
],
tools=tools,
tool_choice="auto"
)
이렇게 다 수정하고 실행했는데 ..!
또 에러 발생!!!!!!😡
openai.BadRequestError: Error code: 400 - {'error': {'message': "Missing required parameter: 'tools[0].function'.", 'type': 'invalid_request_error', 'param': 'tools[0].function', 'code': 'missing_required_parameter'}}
이유는 “type”: “function”을 사용하면서 OpenAI API가 요구하는 포맷에 맞추지 않아서였다.
현재 코드는 type과 name, description, parameters 가 같은 선 상에 있다. 하지만 name, description, parameters가 function이라는 키 안에 들어가 한 단계 더 중첩시켜야한다고 한다.
아래 코드는 수정된 코드다
from openai import OpenAI
import os
import json
from datetime import datetime
client = OpenAI(
api_key=os.environ.get("OPENAI_API_KEY")
)
tools = [{
"type": "function",
"function": {
"name": "save_expense",
"description": "사용자의 소비 내역을 파싱하여 금액과 카테고리, 날짜를 저장",
"parameters": {
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": ["카페", "식비", "교통", "의류", "문화", "공과금", "기타"],
"description": "정해진 소비 카테고리 중 하나"
},
"amount": {
"type": "integer",
"description": "금액 (숫자만, 원단위)"
},
"date": {
"type": "string",
"description": "소비한 날짜"
}
},
"required": ["category", "amount", "date"],
"additionalProperties": False
}
},
"strict": True
}]
today = datetime.today().strftime("%Y-%m-%d")
response = client.chat.completions.create(
model="gpt-4.1-nano",
messages=[
{"role": "system", "content": f"""너는 사용자 소비 내역을 정리해주는 가계부 어시스턴트야.
오늘 날짜는 {today}야.
만약 사용자가 '오늘', '어제', '그제' 같은 말을 하면 이를 기준으로 정확한 날짜(YYY-MM-DD)로 바꿔줘."""},
{"role": "user", "content": "어제 1800원짜리 아메리카노 마셨어"}
],
tools=tools,
tool_choice="auto"
)
# 함수 코드 실행 - 모델의 응답을 구문 분석하고 함수 호출을 처리
tool_call = response.choices[0].message.tool_calls[0]
args = json.loads(tool_call.function.arguments)
print(args)
실행 결과
오늘 = 25.5.19
“어제 1800원짜리 아메리카노 마셨어”
이 입력에 대한 출력
{'category': '카페', 'amount': 1800, 'date': '2025-05-18'}
그제 114000원짜리 신발을 샀어
{'category': '기타', 'amount': 114000, 'date': '2025-05-17'}
오늘 89000원짜리 바지를 샀어
{'category': '의류', 'amount': 89000, 'date': '2025-05-19'}
'프로젝트 > AI 분석 가계부' 카테고리의 다른 글
| 7. [회고] 프로젝트 마무리 (1) | 2025.07.07 |
|---|---|
| 6. [FastAPI + OpenAI API] 사전 공부 | OpenAI API 입력에 따른 함수 호출(Function Calling) (2) | 2025.06.26 |
| 4. [FastAPI + OpenAI API] 사전 공부 | OpenAI API 구조화된 출력 (1) | 2025.06.26 |
| 3. [FastAPI + OpenAI API] 사전 공부 | OpenAI API 연결 (1) | 2025.06.23 |
| 2. [FastAPI + OpenAI API] 사전 공부 | 가상환경 구축 및 서버 테스트 (1) | 2025.06.23 |