在这篇文章中,我们将逐步构建一个 React Native 应用程序,该应用程序使用 Hugging Face 强大的 AI 模型根据提示和年龄范围生成儿童故事。该应用程序允许用户输入提示,选择年龄范围,然后查看自定义故事以及总结故事的卡通图像。
特征
- 交互式故事生成:用户输入指导人工智能创建引人入胜的儿童故事。
- 摘要和可视化:故事被摘要并与人工智能生成的图像一起显示。
- 平滑的 UI 动画:动画使 UI 适应键盘输入。
- 导航和样式:使用 Expo Router 轻松导航并自定义样式,打造有吸引力的 UI。
让我们分解每个部分!
第 1 步:设置 React Native 和 Hugging Face API
首先使用 Expo 创建一个新的 React Native 项目:
npx create-expo-app@latest KidsStoryApp cd KidsStoryApp
在您的应用中设置 Expo Router 以便于导航,并安装您可能需要的任何其他依赖项,例如图标或动画。
第 2 步:创建故事生成器主屏幕
在 Home.js 文件中,我们设置了一个屏幕,用户可以在其中选择年龄范围、输入故事提示,然后按按钮生成故事。
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>
- 文本输入和年龄选择器:允许用户选择年龄范围并输入故事提示。
- Fetch Story:fetchStory 与 Hugging Face API 交互,根据输入生成和总结故事。
- 导航:如果成功获取故事和摘要,应用程序将导航到详细信息屏幕以显示结果。
步骤 3:在详细信息屏幕上显示故事和图像
详细信息屏幕检索生成的故事,对其进行总结,并显示人工智能生成的与故事相关的卡通图像。
Detail.js 代码
从“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中文网其他相关文章!

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。

如何在Quartz中提前发送任务通知在使用Quartz定时器进行任务调度时,任务的执行时间是由cron表达式设定的。现�...

在JavaScript中如何获取原型链上函数的参数在JavaScript编程中,理解和操作原型链上的函数参数是常见且重要的任�...

在微信小程序web-view中使用Vue.js动态style位移失效的原因分析在使用Vue.js...


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 Linux新版
SublimeText3 Linux最新版

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。