-
Flutter Chat GPT์ฐ๋Flutter ํ ํฌ 2024. 7. 10. 21:12
1. GPT๊ฒฐ์ ์๋จ ๋ฑ๋ก
๋ฑ๋กํ์ด์ง -> https://platform.openai.com/settings/organization/billing/overview
2. ํ๋ก์ ํธ ์์ฑ
์ข์ธก ๋ฉ๋ด๋ฐ์ "+Create Project"๋ฅผ ๋๋ฌ ํ๋ก์ ํธ ์์ฑ
3. Secret Key์์ฑ
4. GPT์ ํต์ ํ ํจ์ ์์ฑ
import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:firebase_database/firebase_database.dart'; class ChatServices { static const String _baseUrl = 'https://api.openai.com/v1/chat/completions'; final String apiKey; ChatServices({required this.apiKey}); Future<String> getResponse(List<Map<String, String>> messages) async { final response = await http.post( Uri.parse(_baseUrl), headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer $apiKey', }, body: jsonEncode({ 'model': 'gpt-3.5-turbo', // ์ฌ์ฉํ ๋ชจ๋ธ ID 'messages': messages, 'max_tokens': 150, // ์ ํ์ ๋งค๊ฐ๋ณ์ 'temperature': 0.7, // ์ ํ์ ๋งค๊ฐ๋ณ์ }), ); print('response ${response.body}'); if (response.statusCode == 200) { final data = jsonDecode(utf8.decode(response.bodyBytes)); // ํ๊ตญ์ด๊ฐ ๊นจ์ง์ง์๋๋ก ๋์ฝ๋ฉ return data['choices'][0]['message']['content'].trim(); // ์๋ต ๋ฉ์ธ์ง๋ง ์ถ์ถ } else { throw Exception('Failed to load response'); } } }
5. ๊ธฐ๋ณธ์ ์ธ UI์์ฑ
import 'package:devjang_cs/services/chat_services.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class ChatScreen extends StatefulWidget { const ChatScreen({Key? key}) : super(key: key); @override State<ChatScreen> createState() => _ChatScreenState(); } class _ChatScreenState extends State<ChatScreen> { final TextEditingController _controller = TextEditingController(); final List<Map<String, String>> _messages = []; /// ์ง๊ธ์ ํ๋์ฝ๋ฉ๋์ด์์ง๋ง ๋ณด์์ ์ํด ๋ฐ๋ก ๋ณด๊ด ํ์ final ChatServices _apiService = ChatServices(apiKey: 'your api key'); void _sendMessage() async { if (_controller.text.isEmpty) return; setState(() { _messages.add({ 'role': 'user', 'content': _controller.text, }); }); final response = await _apiService.getResponse(_messages); setState(() { _messages.add({ 'role': 'assistant', 'content': response, }); }); _controller.clear(); } @override Widget build(BuildContext context) { return Column( children: [ Expanded( child: ListView.builder( itemCount: _messages.length, itemBuilder: (context, index) { final message = _messages[index]; return ListTile( title: Text(message['content']!), subtitle: Text(message['role']!), ); }, ), ), Padding( padding: const EdgeInsets.all(8.0), child: Row( children: [ Expanded( child: TextField( controller: _controller, decoration: InputDecoration( hintText: '๋ฉ์ธ์ง๋ฅผ ์์ฑํด์ฃผ์ธ์', ), ), ), IconButton( icon: Icon(Icons.send), onPressed: _sendMessage, ), ], ), ), ], ); } }
6. ๊ฐ๋จํ ์๋ ์์ ์ฌ์ง
'Flutter ํ ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Flutter Web Firebase Auth์ฐ๋ (0) 2024.07.08 Flutter Firebase Hosting ์ค์ (์น์ฌ์ดํธ๋ฐฐํฌ) (0) 2024.07.08 Flutter + Firebase ์ฐ๋ (0) 2023.11.24 Flutter + FCM ์ฐ๋ (Flutter 3.0์ด์, ์๋ก์ดFCM์ ์ฉ๋ฒ์ , 3.0์ด์์ด ์๋์ฌ๋ ๊ฐ๋ฅํฉ๋๋ค) (0) 2023.11.24 Flutter Fastlane CI/CD(2) - Android (1) 2023.03.07