커뮤니티
포인트
쿠폰
내 강의실
국비 신청 내역
증명서
계정
로그아웃
학습 질문
개발 일지
나의 활동
답변 완료
chatgpt API 질문해도 될까요?
[왕초보] 플러터(Flutter)로 시작하는 앱개발 종합반 v0
기타
북마크
이*영
댓글
1
추천
0
조회수
6
조회수
6
답변 완료

* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.

* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.


chat GPT를 넣어보고 있는데 API 연결이 안돼서요.




class DreamInputPage extends StatefulWidget {

  final String selectedConstellation;


  DreamInputPage({Key? key, required this.selectedConstellation})

      : super(key: key);


  @override

  _DreamInputPageState createState() => _DreamInputPageState();

}


class _DreamInputPageState extends State<DreamInputPage> {

  final TextEditingController messageController = TextEditingController();

  List<Map<String, String>> messages = []; // 메시지를 객체 형태로 저장하는 리스트


  @override

  void initState() {

    super.initState();

    // 초기 서버 메시지 추가

    messages.add({

      "role": "system",

      "content":

          "안녕하세요! 별자리 운세에 기반한 꿈 해몽을 확인하실 수 있습니다. 어떤 꿈을 꾸셨나요? (로딩이 10~20초 정도 걸릴 수 있습니다.)"

    });

  }


  Future<void> getFortune(String myConstellation, List<String> userMessages,

      List<String> assistantMessages) async {

    String todayDateTime =

        DateFormat('yyyy-MM-dd HH:mm').format(DateTime.now()); // 현재 날짜와 시간


    List<Map<String, String>> messages = [

      {

        "role": "system",

        "content":

            "."

      },

      {

        "role": "user",

        "content":

            "."

      },

      {

        "role": "assistant",

        "content":

            ""

      },

      {

        "role": "user",

        "content": "."

      },

      {

        "role": "assistant",

        "content":

            "."

      },

    ];


    userMessages.forEach((message) {

      messages.add({"role": "user", "content": message});

    });


    assistantMessages.forEach((message) {

      messages.add({"role": "assistant", "content": message});

    });


    var response = await http.post(

        Uri.parse(

            'https://api.openai.com/v1/engines/davinci-codex/completions'),

        headers: {

          "Content-Type": "application/json",

          "Authorization": "Bearer ${dotenv.env['token']}"

        },

        body: json.encode({"model": "gpt-3.5-turbo", "messages": messages}));


    if (response.statusCode == 200) {

      var data = jsonDecode(response.body);

      print(data['choices'][0]['message']['content']); // 결과 처리

    } else {

      // 에러 처리

      print('Failed to call OpenAI API');

    }

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text('꿈 입력하기'),

      ),

      body: Column(

        children: <Widget>[

          Expanded(

            child: ListView.builder(

              itemCount: messages.length,

              itemBuilder: (context, index) {

                bool isUserMessage = messages[index]["role"] == "user";

                return Padding(

                  padding: EdgeInsets.symmetric(vertical: 4, horizontal: 8),

                  child: Align(

                    alignment: isUserMessage

                        ? Alignment.centerRight

                        : Alignment.centerLeft,

                    child: Container(

                      padding:

                          EdgeInsets.symmetric(vertical: 10, horizontal: 15),

                      decoration: BoxDecoration(

                        color: isUserMessage

                            ? Colors.lightBlue[100]

                            : Colors.grey[300],

                        borderRadius: BorderRadius.circular(20),

                      ),

                      child: Text(

                          messages[index]["content"]!), // 올바르게 'content' 키 사용

                    ),

                  ),

                );

              },

            ),

          ),

          Padding(

            padding: EdgeInsets.all(8.0),

            child: Row(

              children: <Widget>[

                Expanded(

                  child: TextFormField(

                    controller: messageController,

                    decoration: InputDecoration(

                      hintText: '오늘 어떤 꿈을 꾸셨나요?',

                      border: OutlineInputBorder(

                        borderRadius: BorderRadius.circular(15),

                      ),

                    ),

                  ),

                ),

                IconButton(

                  icon: Icon(Icons.send),

                  onPressed: () async {

                    if (messageController.text.isNotEmpty) {

                      // 사용자 메시지를 메시지 리스트에 추가

                      setState(() {

                        messages.add({

                          "role": "user",

                          "content": messageController.text

                        });

                      });

                      // getFortune 함수 호출

                      await getFortune(widget.selectedConstellation,

                          [messageController.text], []);


                      // 텍스트 필드 초기화

                      messageController.clear();

                    }

                  },

                ),

              ],

            ),

          ),

        ],

      ),

    );

  }

}



api call fail 이라고 나오는데 이유를 모르겠습니다. 혹시라도 알려주시면 감사하겠습니다.



취소
 공유
취소
댓글 0
댓글 알림
나의얼굴