在這篇文章中,我們將逐步建立一個 React Native 應用程序,該應用程式使用 Hugging Face 強大的 AI 模型根據提示和年齡範圍生成兒童故事。該應用程式允許用戶輸入提示,選擇年齡範圍,然後查看自訂故事以及總結故事的卡通圖像。
讓我們分解每個部分吧!
先使用 Expo 建立一個新的 React Native 專案:
npx create-expo-app@latest KidsStoryApp cd KidsStoryApp
在您的應用程式中設定 Expo Router 以便於導航,並安裝您可能需要的任何其他依賴項,例如圖示或動畫。
在 Home.js 檔案中,我們設定了一個螢幕,使用者可以在其中選擇年齡範圍、輸入故事提示,然後按按鈕產生故事。
從「react」匯入React, { useEffect, useRef, useState }; 進口 { 看法, 文字, 可觸碰不透明度, 樣式表, 文字輸入, 動畫, 活動指示器, 來自「react-native」; 從“../hooks/useKeyboardOffsetHeight”導入useKeyboardOffsetHeight; 從“../env”導入{HUGGING_FACE_KEY}; 從“expo-router”導入{useRouter}; const Home = () =>; { const AgeRanges = ["0-3", "4-6", "7-9"]; const [selectedAgeRange, setSelectedAgeRange] = useState("0-3"); const [textInput, setTextInput] = useState(""); const [isLoading, setIsLoading] = useState(false); const KeyboardOffsetHeight = useKeyboardOffsetHeight(); const animatedValue = useRef(new Animated.Value(0)).current; const 路由器 = useRouter(); useEffect(() => { 動畫.timing(animatedValue, { toValue:鍵盤偏移高度? -鍵盤偏移高度 * 0.5 : 0, 持續時間:500, 使用NativeDriver:正確, })。開始(); }, [鍵盤偏移高度]); const handleAgeRangeSelect = (範圍) => setSelectedAgeRange(範圍); const handleShowResult = () =>; { if (textInput.length > 5) { 獲取故事(); } 別的 { Alert("請輸入更多詳細資料。"); } }; 非同步函數 fetchStory() { setIsLoading(true); 嘗試 { let message = `為孩子寫一個關於 ${textInput} ${ 的簡單故事 選擇的年齡範圍? “針對年齡層” selectedAgeRange : “” },用簡單的話來說。僅提供故事內容,不含任何標題、標題或額外資訊。 `; 常量響應 = 等待獲取( “https://api-inference.huggingface.co/models/meta-llama/Llama-3.2-3B-Instruct/v1/chat/completions”, { 方法:“POST”, 標題:{ 授權:`持有者${HUGGING_FACE_KEY}`, “內容類型”:“應用程式/json”, }, 正文:JSON.stringify({ 型號:“meta-llama/Llama-3.2-3B-Instruct”, 訊息:[{角色:“用戶”,內容:訊息}], 最大令牌數:500, }), } ); if (!response.ok) throw new Error("無法取得故事"); const data = 等待response.json(); const StoryContent = data.choices[0].message.content; // 總結一下故事 const 摘要回應 = 等待獲取( “https://api-inference.huggingface.co/models/meta-llama/Llama-3.2-3B-Instruct/v1/chat/completions”, { 方法:“POST”, 標題:{ 授權:`持有者${HUGGING_FACE_KEY}`, “內容類型”:“應用程式/json”, }, 正文:JSON.stringify({ 型號:“meta-llama/Llama-3.2-3B-Instruct”, 訊息:[ { role: "user", content: `用一行總結這個故事:"${storyContent}"` }, ], 最大令牌數:30, }), }); if (!summaryResponse.ok) throw new Error("無法取得摘要"); constsummaryData = 等待summaryResponse.json(); const 摘要內容 = 摘要Data.choices[0].message.content; 路由器.push({ 路徑名:“/詳細資料”, 參數:{ 故事:storyContent,摘要:summaryContent }, }); } 捕獲(錯誤){ console.error("取得故事或摘要時發生錯誤:", error); Alert("取得故事時發生錯誤。請重試。"); } 最後 { setIsLoading(假); } } 返回 ( <h3> Home.js 的關鍵元件 </h3>
詳細資訊螢幕檢索產生的故事,對其進行總結,並顯示人工智慧產生的與故事相關的卡通圖像。
從「react」匯入React, { useEffect, useState }; 從「react-native」導入 { StyleSheet、View、Text、TouchableOpacity、ActivityIndicator、Image、ScrollView }; 從“expo-router”導入{useLocalSearchParams,useRouter}; 從“../env”導入{HUGGING_FACE_KEY}; 從“@expo/vector-icons/Ionicons”導入 Ionicons; const 詳細資料 = () => { const params = useLocalSearchParams(); const { 故事,摘要 } = 參數; const [imageUri, setImageUri] = useState(null); const [正在加載,setLoading] = useState(false); const 路由器 = useRouter(); useEffect(() => { const fetchImage = async () =>; { 設定載入(真); 嘗試 { const 回應 = 等待 fetch("https://api-inference.huggingface.co/models/stabilityai/stable-diffusion-xl-base-1.0", { 方法:“POST”, headers: { 授權: `Bearer ${HUGGING_FACE_KEY}`, "Content-Type": "application/json" }, 正文:JSON.stringify ({ 輸入:`卡通 ${summary}`,target_size:{ 寬度:300,高度:300 } }), }); if (!response.ok) throw new Error(`請求失敗:${response.status}`); const blob = 等待回應.blob(); const base64Data = 等待 blobToBase64(blob); setImageUri(`資料:圖片/jpeg;base64,${base64Data}`); } 捕獲(錯誤){ console.error("取得影像時發生錯誤:", error); } 最後 { 設定加載(假); } }; 取得影像(); }, []); const blobToBase64 = (blob) =>; { 返回新的 Promise((解決, 拒絕) => { const reader = new FileReader(); reader.onloadend = () =>;解決(reader.result.split(“,”)[1]); reader.onerror = 拒絕; reader.readAsDataURL(blob); }); }; 返回 ( <h3> 總結 </h3> <p>這個應用程式是將使用者輸入與人工智慧模型相結合以創建動態講故事體驗的好方法。透過使用 React Native、Hugging Face API 和 Expo Router,我們創建了一個簡單但功能強大的講故事應用程序,可以透過客製化的故事和插圖來娛樂孩子。 </p>
以上是使用 React Native 和 Hugging Face API 建立互動式兒童故事產生器的詳細內容。更多資訊請關注PHP中文網其他相關文章!