728x90
OpenAI로부터 데이터를 받을 때 처리 방식은 두 가지 흐름 중 하나를 따릅니다. 코드를 분석한 결과, OpenAI는 상품 ID만 반환하며, 상품의 나머지 상세 정보는 Firestore에서 가져옵니다.
데이터 처리 방식
1. OpenAI로부터 받은 데이터
OpenAI는 상품 ID와 추천 이유를 JSON 형태로 반환합니다. 반환된 데이터는 상품의 ID만 포함하며, 실제 상품 정보는 포함되어 있지 않습니다.
OpenAI 응답 데이터 예시:
{
"products": ["상품ID1", "상품ID2", "상품ID3"],
"reasons": {
"상품ID1": "추천 이유 1",
"상품ID2": "추천 이유 2",
"상품ID3": "추천 이유 3"
}
}
2. Firestore에서 상세 정보 가져오기
OpenAI가 반환한 products 리스트는 상품 ID만 포함하고 있으므로, Firestore에서 ID와 매칭되는 상품 정보를 가져옵니다.
final recommendedProductIds =
(aiResponse['products'] as List<dynamic>).cast<String>();
final recommendedProducts = allProducts
.where((p) => recommendedProductIds.contains(p.productId))
.toList();
1. OpenAI 응답에서 상품 ID 추출:
final recommendedProductIds =
(aiResponse['products'] as List<dynamic>).cast<String>();
-
- OpenAI의 응답에서 추천된 상품 ID 리스트(products)를 추출합니다.
- 결과: ["상품ID1", "상품ID2", "상품ID3"]
- 2.Firestore 데이터와 매칭:
final recommendedProducts = allProducts
.where((p) => recommendedProductIds.contains(p.productId))
.toList();
- Firestore에서 가져온 모든 상품 데이터(allProducts)와 OpenAI의 상품 ID를 비교합니다.
- ID가 일치하는 상품만 필터링하여 상세 정보를 포함한 리스트를 생성합니다.
결론
- OpenAI는 상품 ID만 반환:
- OpenAI는 products 리스트에 추천된 상품의 ID만 포함합니다.
- Firestore에서 상세 정보 가져오기:
- Firestore에서 ID와 매칭하여 ProductModel 형태의 상세 상품 데이터를 가져옵니다.
- 매칭된 상품 리스트는 UI로 전달됩니다.
- 이유와 상품 연결:
- OpenAI가 반환한 reasons 맵을 사용하여 상품 ID와 추천 이유를 연결합니다.
왜 이렇게 처리했을까?
- Firestore 데이터 활용:
- OpenAI에게 모든 상품 데이터를 넘겨주는 대신, ID만 반환받아 Firestore에서 데이터를 매칭하는 방식은 네트워크 비용을 줄이고 Firestore의 최신 데이터를 활용할 수 있습니다.
- 유연한 데이터 처리:
- Firestore 데이터를 기준으로 매칭하기 때문에 OpenAI 결과가 부분적이어도 문제가 되지 않습니다.
요약
- OpenAI는 상품 ID와 추천 이유를 JSON 형태로 반환합니다.
- 상품의 상세 정보(ProductModel)는 Firestore 데이터와 ID를 매칭하여 가져옵니다.
- 이 방식은 OpenAI의 계산 비용을 줄이고 Firestore의 최신 데이터를 활용하기 위한 효율적인 설계입니다.
728x90
'★★★트러블 슈팅' 카테고리의 다른 글
Flutter의 Sliver 시스템에서는 위젯 타입 간의 호환성 규칙 (0) | 2024.11.19 |
---|---|
대부분의 트러블 슈팅은 줄바꿈 문제 (0) | 2024.11.19 |
BlocListener는 Bloc 상태 관리에서 매우 유용한 위젯 (1) | 2024.11.13 |
닉네임, 비밀번호 등등 오류해결 (0) | 2024.11.13 |
파베 블록만 써서가져오지말고, 레퍼지토리 거쳐야하는 이유: 수정 (2) | 2024.11.06 |