创意AI应用开发大赛 - 基于Google AI Studio的创新实践指南
·
🏆 创意AI应用开发大赛 - 基于Google AI Studio的创新实践指南
大赛主题:基于Google AI Studio构建创新性人工智能解决方案
适合人群:AI开发者、创新者、学生、技术爱好者
技术栈:Google AI Studio, Gemini API, Python, JavaScript
📋 目录
🎯 大赛概述
大赛背景
随着人工智能技术的快速发展,Google推出了AI Studio平台,为开发者提供了强大的AI能力。本次大赛旨在鼓励开发者利用Google AI Studio构建创新性AI应用,推动AI技术在各行业的落地应用。
大赛目标
- ✅ 探索AI技术的创新应用场景
- ✅ 培养AI应用开发能力
- ✅ 促进AI技术社区交流
- ✅ 发掘优秀AI解决方案
参赛要求
必选要求:
├─ 使用Google AI Studio平台
├─ 基于Gemini API开发
├─ 具有创新性和实用性
├─ 提供完整源代码
└─ 附带详细文档
加分项:
├─ 开源项目
├─ 多模态应用
├─ 解决实际问题
├─ 用户体验优秀
└─ 技术难度高
🚀 Google AI Studio简介
平台特点
核心优势:
├─ 强大的Gemini模型
├─ 多模态处理能力(文本、图像、视频、音频)
├─ 免费API额度
├─ 简单易用的界面
├─ 丰富的预训练模型
└─ 完善的开发文档
主要功能
1. Gemini Pro - 文本生成
# 文本生成示例
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel('gemini-pro')
response = model.generate_content("写一首关于AI的诗")
print(response.text)
2. Gemini Pro Vision - 图像理解
# 图像分析示例
import PIL.Image
model = genai.GenerativeModel('gemini-pro-vision')
img = PIL.Image.open('image.jpg')
response = model.generate_content(["描述这张图片", img])
print(response.text)
3. 对话系统
# 多轮对话示例
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=[])
response = chat.send_message("你好,我想了解AI")
print(response.text)
response = chat.send_message("能给我举个例子吗?")
print(response.text)
🛠️ 参赛准备
环境搭建
Step 1: 注册Google AI Studio
1. 访问 https://makersuite.google.com/
2. 使用Google账号登录
3. 创建新项目
4. 获取API密钥
Step 2: 安装SDK
# Python环境
pip install google-generativeai
# Node.js环境
npm install @google/generative-ai
Step 3: 配置环境变量
# Linux/Mac
export GOOGLE_API_KEY="your_api_key_here"
# Windows
set GOOGLE_API_KEY=your_api_key_here
开发工具推荐
IDE选择:
├─ VSCode(推荐)
├─ PyCharm
├─ Jupyter Notebook
└─ Google Colab
版本控制:
├─ Git
└─ GitHub
测试工具:
├─ Postman(API测试)
├─ pytest(Python单元测试)
└─ Jest(JavaScript测试)
💡 创意方向推荐
方向一:教育领域
1. AI智能家教系统
核心功能:
- 📚 个性化学习计划生成
- 🎯 知识点智能讲解
- 📝 作业自动批改
- 📊 学习进度追踪
技术方案:
class AITutor:
def __init__(self, api_key):
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('gemini-pro')
self.chat = self.model.start_chat(history=[])
def explain_concept(self, subject, concept, level="中学"):
prompt = f"""
作为一名{level}{subject}老师,请用通俗易懂的方式讲解:{concept}
要求:
1. 使用生活化的例子
2. 分步骤讲解
3. 包含练习题
"""
response = self.chat.send_message(prompt)
return response.text
def grade_homework(self, question, student_answer, correct_answer):
prompt = f"""
题目:{question}
学生答案:{student_answer}
参考答案:{correct_answer}
请评分(0-100)并给出详细反馈:
1. 答案正确性
2. 解题思路
3. 改进建议
"""
response = self.model.generate_content(prompt)
return response.text
# 使用示例
tutor = AITutor("YOUR_API_KEY")
explanation = tutor.explain_concept("数学", "二次函数", "初中")
print(explanation)
2. 多语言学习助手
核心功能:
- 🌍 实时翻译
- 🗣️ 口语练习
- 📖 语法纠错
- 🎭 情景对话
方向二:内容创作
1. AI写作助手
核心功能:
- ✍️ 文章大纲生成
- 📝 内容扩写
- 🎨 风格转换
- 🔍 SEO优化
完整实现:
class AIWriter:
def __init__(self, api_key):
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('gemini-pro')
def generate_outline(self, topic, keywords, word_count=2000):
prompt = f"""
请为以下主题生成详细的文章大纲:
主题:{topic}
关键词:{', '.join(keywords)}
目标字数:{word_count}
要求:
1. 包含引言、正文(3-5个主要部分)、结论
2. 每个部分列出2-3个要点
3. 符合SEO优化原则
"""
response = self.model.generate_content(prompt)
return response.text
def expand_content(self, outline_section, style="专业"):
prompt = f"""
请将以下大纲要点扩写成完整段落:
{outline_section}
写作风格:{style}
要求:
1. 内容充实,逻辑清晰
2. 使用恰当的例子和数据
3. 保持{style}的语言风格
"""
response = self.model.generate_content(prompt)
return response.text
def optimize_seo(self, content, target_keywords):
prompt = f"""
请优化以下内容的SEO:
内容:
{content}
目标关键词:{', '.join(target_keywords)}
优化建议包括:
1. 关键词密度调整
2. 标题优化
3. 内链建议
4. meta描述
"""
response = self.model.generate_content(prompt)
return response.text
# 使用示例
writer = AIWriter("YOUR_API_KEY")
# 生成大纲
outline = writer.generate_outline(
topic="人工智能在医疗领域的应用",
keywords=["AI医疗", "智能诊断", "医疗影像"],
word_count=3000
)
print("文章大纲:\n", outline)
# 扩写内容
section = "AI在医疗影像诊断中的应用"
content = writer.expand_content(section, style="科普")
print("\n扩写内容:\n", content)
# SEO优化
optimized = writer.optimize_seo(content, ["AI医疗", "智能诊断"])
print("\nSEO优化建议:\n", optimized)
2. 智能视频脚本生成器
核心功能:
- 🎬 脚本创作
- 🎭 分镜设计
- 🎵 配乐建议
- 📹 拍摄指导
方向三:商业应用
1. 智能客服系统
核心功能:
- 💬 24/7自动回复
- 🎯 意图识别
- 📊 情感分析
- 🔄 工单转接
技术实现:
class AICustomerService:
def __init__(self, api_key, company_info):
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('gemini-pro')
self.company_info = company_info
self.chat_sessions = {}
def create_session(self, user_id):
system_prompt = f"""
你是{self.company_info['name']}的智能客服助手。
公司信息:
- 主营业务:{self.company_info['business']}
- 服务时间:{self.company_info['service_hours']}
- 联系方式:{self.company_info['contact']}
你的职责:
1. 友好、专业地回答客户问题
2. 提供准确的产品/服务信息
3. 识别客户需求并推荐合适方案
4. 遇到复杂问题时引导转人工客服
"""
chat = self.model.start_chat(history=[
{"role": "user", "parts": [system_prompt]},
{"role": "model", "parts": ["我明白了,我会认真履行客服职责。"]}
])
self.chat_sessions[user_id] = chat
return chat
def handle_message(self, user_id, message):
if user_id not in self.chat_sessions:
self.create_session(user_id)
chat = self.chat_sessions[user_id]
response = chat.send_message(message)
# 情感分析
sentiment = self.analyze_sentiment(message)
# 意图识别
intent = self.identify_intent(message)
return {
"response": response.text,
"sentiment": sentiment,
"intent": intent,
"need_human": self.need_human_intervention(sentiment, intent)
}
def analyze_sentiment(self, message):
prompt = f"分析以下客户消息的情感(积极/中性/消极):{message}"
response = self.model.generate_content(prompt)
return response.text.strip()
def identify_intent(self, message):
prompt = f"""
识别客户意图(选择一个):
- 咨询产品
- 技术支持
- 投诉建议
- 购买咨询
- 其他
客户消息:{message}
"""
response = self.model.generate_content(prompt)
return response.text.strip()
def need_human_intervention(self, sentiment, intent):
return sentiment == "消极" or intent == "投诉建议"
# 使用示例
company_info = {
"name": "科技创新公司",
"business": "AI解决方案提供商",
"service_hours": "工作日 9:00-18:00",
"contact": "service@example.com"
}
cs = AICustomerService("YOUR_API_KEY", company_info)
# 处理客户消息
result = cs.handle_message(
user_id="user123",
message="你好,我想了解你们的AI产品"
)
print("客服回复:", result['response'])
print("情感:", result['sentiment'])
print("意图:", result['intent'])
print("需要转人工:", result['need_human'])
2. 市场分析助手
核心功能:
- 📈 数据分析
- 🎯 竞品分析
- 💡 策略建议
- 📊 报告生成
方向四:健康医疗
1. 健康咨询助手
核心功能:
- 🏥 症状初筛
- 💊 用药提醒
- 🥗 营养建议
- 🏃 运动计划
实现示例:
class HealthAssistant:
def __init__(self, api_key):
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('gemini-pro')
def symptom_check(self, symptoms, age, gender):
prompt = f"""
作为健康咨询助手,请分析以下症状:
患者信息:
- 年龄:{age}
- 性别:{gender}
- 症状:{symptoms}
请提供:
1. 可能的原因(3-5个)
2. 自我护理建议
3. 是否需要就医
4. 注意事项
免责声明:本建议仅供参考,不能替代专业医疗诊断。
"""
response = self.model.generate_content(prompt)
return response.text
def nutrition_plan(self, goal, current_weight, target_weight, dietary_restrictions):
prompt = f"""
请制定个性化营养计划:
目标:{goal}
当前体重:{current_weight}kg
目标体重:{target_weight}kg
饮食限制:{dietary_restrictions}
请提供:
1. 每日热量摄入建议
2. 三大营养素比例
3. 一周食谱示例
4. 注意事项
"""
response = self.model.generate_content(prompt)
return response.text
def exercise_plan(self, fitness_level, goal, available_time):
prompt = f"""
请制定运动计划:
健身水平:{fitness_level}
目标:{goal}
可用时间:每天{available_time}分钟
请提供:
1. 运动类型选择
2. 训练强度和频率
3. 详细动作指导
4. 进阶建议
"""
response = self.model.generate_content(prompt)
return response.text
# 使用示例
health_ai = HealthAssistant("YOUR_API_KEY")
# 症状检查
check_result = health_ai.symptom_check(
symptoms="头痛、轻微发热",
age=30,
gender="男"
)
print("症状分析:\n", check_result)
# 营养计划
nutrition = health_ai.nutrition_plan(
goal="减重",
current_weight=75,
target_weight=70,
dietary_restrictions="无"
)
print("\n营养计划:\n", nutrition)
方向五:创意娱乐
1. AI故事生成器
核心功能:
- 📖 互动小说
- 🎭 角色扮演
- 🎮 游戏剧情
- 🎨 插画描述
完整实现:
class StoryGenerator:
def __init__(self, api_key):
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('gemini-pro')
self.story_context = []
def create_story(self, genre, setting, characters, theme):
prompt = f"""
创作一个{genre}故事:
背景设定:{setting}
主要角色:{', '.join(characters)}
主题:{theme}
要求:
1. 引人入胜的开头
2. 清晰的故事线
3. 生动的人物刻画
4. 留有悬念
请生成故事的第一章(约500字)
"""
response = self.model.generate_content(prompt)
self.story_context.append(response.text)
return response.text
def continue_story(self, user_choice):
prompt = f"""
基于之前的故事内容和读者选择,继续创作:
之前的内容:
{self.story_context[-1]}
读者选择:{user_choice}
请继续故事(约500字),并在结尾提供3个选项供读者选择。
"""
response = self.model.generate_content(prompt)
self.story_context.append(response.text)
return response.text
def generate_illustration_prompt(self, scene_description):
prompt = f"""
为以下场景生成详细的插画描述(用于AI绘画):
场景:{scene_description}
请提供:
1. 画面构图
2. 色彩方案
3. 光影效果
4. 细节描述
5. 艺术风格建议
"""
response = self.model.generate_content(prompt)
return response.text
# 使用示例
story_gen = StoryGenerator("YOUR_API_KEY")
# 创建故事
first_chapter = story_gen.create_story(
genre="科幻",
setting="2150年的火星殖民地",
characters=["工程师李明", "AI助手ARIA", "殖民地长官"],
theme="人类与AI的共存"
)
print("第一章:\n", first_chapter)
# 继续故事
next_chapter = story_gen.continue_story(
user_choice="李明决定调查AI异常行为"
)
print("\n第二章:\n", next_chapter)
# 生成插画提示
illustration = story_gen.generate_illustration_prompt(
"李明站在火星殖民地的观景窗前,凝视着红色的地平线"
)
print("\n插画描述:\n", illustration)
🏗️ 完整项目示例
项目:AI驱动的个人知识管理系统
项目架构
ai-knowledge-manager/
├── backend/
│ ├── app.py # Flask主程序
│ ├── ai_engine.py # AI核心引擎
│ ├── database.py # 数据库操作
│ └── requirements.txt # Python依赖
├── frontend/
│ ├── index.html # 主页面
│ ├── app.js # 前端逻辑
│ └── style.css # 样式
├── docs/
│ ├── README.md # 项目说明
│ ├── API.md # API文档
│ └── DEPLOYMENT.md # 部署指南
└── tests/
├── test_ai_engine.py # 单元测试
└── test_api.py # API测试
后端实现
1. AI引擎核心 (ai_engine.py)
import google.generativeai as genai
from typing import List, Dict
import json
class KnowledgeAI:
def __init__(self, api_key: str):
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel('gemini-pro')
self.vision_model = genai.GenerativeModel('gemini-pro-vision')
def summarize_content(self, content: str, max_length: int = 200) -> str:
"""内容摘要生成"""
prompt = f"""
请为以下内容生成简洁的摘要(不超过{max_length}字):
{content}
要求:
1. 提取核心要点
2. 保持逻辑清晰
3. 使用简洁语言
"""
response = self.model.generate_content(prompt)
return response.text
def extract_keywords(self, content: str, num_keywords: int = 10) -> List[str]:
"""关键词提取"""
prompt = f"""
从以下内容中提取{num_keywords}个最重要的关键词:
{content}
只返回关键词列表,用逗号分隔。
"""
response = self.model.generate_content(prompt)
keywords = [k.strip() for k in response.text.split(',')]
return keywords[:num_keywords]
def categorize_content(self, content: str, categories: List[str]) -> str:
"""内容分类"""
prompt = f"""
请将以下内容分类到最合适的类别:
内容:{content}
可选类别:{', '.join(categories)}
只返回类别名称。
"""
response = self.model.generate_content(prompt)
return response.text.strip()
def generate_questions(self, content: str, num_questions: int = 5) -> List[str]:
"""生成复习问题"""
prompt = f"""
基于以下内容,生成{num_questions}个复习问题:
{content}
要求:
1. 问题由浅入深
2. 涵盖核心知识点
3. 适合自我测试
每行一个问题。
"""
response = self.model.generate_content(prompt)
questions = [q.strip() for q in response.text.split('\n') if q.strip()]
return questions[:num_questions]
def find_related_content(self, query: str, knowledge_base: List[Dict]) -> List[Dict]:
"""查找相关内容"""
prompt = f"""
查询:{query}
知识库:
{json.dumps(knowledge_base, ensure_ascii=False, indent=2)}
请找出与查询最相关的3个条目,返回它们的ID(用逗号分隔)。
"""
response = self.model.generate_content(prompt)
ids = [id.strip() for id in response.text.split(',')]
return [item for item in knowledge_base if str(item['id']) in ids]
def answer_question(self, question: str, context: str) -> str:
"""基于上下文回答问题"""
prompt = f"""
基于以下知识内容回答问题:
知识内容:
{context}
问题:{question}
要求:
1. 答案准确
2. 引用原文
3. 简洁明了
"""
response = self.model.generate_content(prompt)
return response.text
def analyze_image_note(self, image_path: str) -> Dict:
"""分析图片笔记"""
import PIL.Image
img = PIL.Image.open(image_path)
prompt = """
请分析这张图片笔记:
1. 提取文字内容
2. 识别图表/公式
3. 总结核心要点
4. 建议标签
以JSON格式返回结果。
"""
response = self.vision_model.generate_content([prompt, img])
try:
result = json.loads(response.text)
except:
result = {"raw_text": response.text}
return result
2. Flask API (app.py)
from flask import Flask, request, jsonify
from flask_cors import CORS
from ai_engine import KnowledgeAI
from database import KnowledgeDB
import os
app = Flask(__name__)
CORS(app)
# 初始化
API_KEY = os.getenv('GOOGLE_API_KEY')
ai_engine = KnowledgeAI(API_KEY)
db = KnowledgeDB('knowledge.db')
@app.route('/api/add_note', methods=['POST'])
def add_note():
"""添加笔记"""
data = request.json
content = data.get('content')
# AI处理
summary = ai_engine.summarize_content(content)
keywords = ai_engine.extract_keywords(content)
category = ai_engine.categorize_content(
content,
categories=['技术', '生活', '工作', '学习', '其他']
)
# 保存到数据库
note_id = db.add_note({
'content': content,
'summary': summary,
'keywords': keywords,
'category': category
})
return jsonify({
'success': True,
'note_id': note_id,
'summary': summary,
'keywords': keywords,
'category': category
})
@app.route('/api/search', methods=['GET'])
def search():
"""搜索笔记"""
query = request.args.get('q')
# 从数据库获取所有笔记
all_notes = db.get_all_notes()
# AI查找相关内容
related = ai_engine.find_related_content(query, all_notes)
return jsonify({
'success': True,
'results': related
})
@app.route('/api/ask', methods=['POST'])
def ask_question():
"""问答"""
data = request.json
question = data.get('question')
# 获取相关笔记
all_notes = db.get_all_notes()
related = ai_engine.find_related_content(question, all_notes)
# 构建上下文
context = '\n\n'.join([note['content'] for note in related])
# AI回答
answer = ai_engine.answer_question(question, context)
return jsonify({
'success': True,
'answer': answer,
'sources': related
})
@app.route('/api/generate_quiz', methods=['POST'])
def generate_quiz():
"""生成复习题"""
data = request.json
note_id = data.get('note_id')
note = db.get_note(note_id)
questions = ai_engine.generate_questions(note['content'])
return jsonify({
'success': True,
'questions': questions
})
@app.route('/api/upload_image', methods=['POST'])
def upload_image():
"""上传图片笔记"""
if 'image' not in request.files:
return jsonify({'success': False, 'error': '没有图片'})
file = request.files['image']
filepath = f'uploads/{file.filename}'
file.save(filepath)
# AI分析图片
analysis = ai_engine.analyze_image_note(filepath)
# 保存到数据库
note_id = db.add_note({
'content': analysis.get('raw_text', ''),
'image_path': filepath,
'analysis': analysis
})
return jsonify({
'success': True,
'note_id': note_id,
'analysis': analysis
})
if __name__ == '__main__':
app.run(debug=True, port=5000)
3. 数据库操作 (database.py)
import sqlite3
import json
from datetime import datetime
from typing import List, Dict, Optional
class KnowledgeDB:
def __init__(self, db_path: str):
self.db_path = db_path
self.init_db()
def init_db(self):
"""初始化数据库"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
summary TEXT,
keywords TEXT,
category TEXT,
image_path TEXT,
analysis TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
def add_note(self, note_data: Dict) -> int:
"""添加笔记"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('''
INSERT INTO notes (content, summary, keywords, category, image_path, analysis)
VALUES (?, ?, ?, ?, ?, ?)
''', (
note_data.get('content', ''),
note_data.get('summary', ''),
json.dumps(note_data.get('keywords', [])),
note_data.get('category', ''),
note_data.get('image_path', ''),
json.dumps(note_data.get('analysis', {}))
))
note_id = cursor.lastrowid
conn.commit()
conn.close()
return note_id
def get_note(self, note_id: int) -> Optional[Dict]:
"""获取单条笔记"""
conn = sqlite3.connect(self.db_path)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute('SELECT * FROM notes WHERE id = ?', (note_id,))
row = cursor.fetchone()
conn.close()
if row:
return dict(row)
return None
def get_all_notes(self) -> List[Dict]:
"""获取所有笔记"""
conn = sqlite3.connect(self.db_path)
conn.row_factory = sqlite3.Row
cursor = conn.cursor()
cursor.execute('SELECT * FROM notes ORDER BY created_at DESC')
rows = cursor.fetchall()
conn.close()
return [dict(row) for row in rows]
def update_note(self, note_id: int, note_data: Dict):
"""更新笔记"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('''
UPDATE notes
SET content = ?, summary = ?, keywords = ?, category = ?, updated_at = ?
WHERE id = ?
''', (
note_data.get('content'),
note_data.get('summary'),
json.dumps(note_data.get('keywords', [])),
note_data.get('category'),
datetime.now(),
note_id
))
conn.commit()
conn.close()
def delete_note(self, note_id: int):
"""删除笔记"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute('DELETE FROM notes WHERE id = ?', (note_id,))
conn.commit()
conn.close()
前端实现
1. HTML (index.html)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AI知识管理系统</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<header>
<h1>🧠 AI知识管理系统</h1>
<p>基于Google AI Studio的智能笔记助手</p>
</header>
<main>
<!-- 添加笔记 -->
<section class="add-note">
<h2>📝 添加笔记</h2>
<textarea id="noteContent" placeholder="输入笔记内容..."></textarea>
<div class="button-group">
<button onclick="addNote()">添加笔记</button>
<button onclick="uploadImage()">上传图片</button>
</div>
<input type="file" id="imageInput" accept="image/*" style="display:none">
</section>
<!-- AI分析结果 -->
<section class="ai-analysis" id="aiAnalysis" style="display:none">
<h3>🤖 AI分析结果</h3>
<div class="analysis-item">
<strong>摘要:</strong>
<p id="summary"></p>
</div>
<div class="analysis-item">
<strong>关键词:</strong>
<div id="keywords" class="keywords"></div>
</div>
<div class="analysis-item">
<strong>分类:</strong>
<span id="category" class="category-tag"></span>
</div>
</section>
<!-- 搜索 -->
<section class="search">
<h2>🔍 智能搜索</h2>
<input type="text" id="searchInput" placeholder="搜索笔记...">
<button onclick="searchNotes()">搜索</button>
</section>
<!-- 问答 -->
<section class="qa">
<h2>💬 智能问答</h2>
<input type="text" id="questionInput" placeholder="提问...">
<button onclick="askQuestion()">提问</button>
<div id="answerBox" class="answer-box" style="display:none">
<h3>回答:</h3>
<p id="answer"></p>
<h4>参考来源:</h4>
<ul id="sources"></ul>
</div>
</section>
<!-- 笔记列表 -->
<section class="notes-list">
<h2>📚 我的笔记</h2>
<div id="notesList"></div>
</section>
</main>
</div>
<script src="app.js"></script>
</body>
</html>
2. JavaScript (app.js)
const API_BASE = 'http://localhost:5000/api';
// 添加笔记
async function addNote() {
const content = document.getElementById('noteContent').value;
if (!content.trim()) {
alert('请输入笔记内容');
return;
}
try {
const response = await fetch(`${API_BASE}/add_note`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ content })
});
const data = await response.json();
if (data.success) {
// 显示AI分析结果
showAnalysis(data);
// 清空输入
document.getElementById('noteContent').value = '';
// 刷新笔记列表
loadNotes();
alert('笔记添加成功!');
}
} catch (error) {
console.error('Error:', error);
alert('添加失败,请重试');
}
}
// 显示AI分析结果
function showAnalysis(data) {
document.getElementById('aiAnalysis').style.display = 'block';
document.getElementById('summary').textContent = data.summary;
document.getElementById('category').textContent = data.category;
const keywordsDiv = document.getElementById('keywords');
keywordsDiv.innerHTML = '';
data.keywords.forEach(keyword => {
const tag = document.createElement('span');
tag.className = 'keyword-tag';
tag.textContent = keyword;
keywordsDiv.appendChild(tag);
});
}
// 搜索笔记
async function searchNotes() {
const query = document.getElementById('searchInput').value;
if (!query.trim()) {
alert('请输入搜索内容');
return;
}
try {
const response = await fetch(`${API_BASE}/search?q=${encodeURIComponent(query)}`);
const data = await response.json();
if (data.success) {
displayNotes(data.results);
}
} catch (error) {
console.error('Error:', error);
alert('搜索失败,请重试');
}
}
// 智能问答
async function askQuestion() {
const question = document.getElementById('questionInput').value;
if (!question.trim()) {
alert('请输入问题');
return;
}
try {
const response = await fetch(`${API_BASE}/ask`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ question })
});
const data = await response.json();
if (data.success) {
document.getElementById('answerBox').style.display = 'block';
document.getElementById('answer').textContent = data.answer;
const sourcesList = document.getElementById('sources');
sourcesList.innerHTML = '';
data.sources.forEach(source => {
const li = document.createElement('li');
li.textContent = source.summary || source.content.substring(0, 100) + '...';
sourcesList.appendChild(li);
});
}
} catch (error) {
console.error('Error:', error);
alert('提问失败,请重试');
}
}
// 上传图片
function uploadImage() {
document.getElementById('imageInput').click();
}
document.getElementById('imageInput').addEventListener('change', async (e) => {
const file = e.target.files[0];
if (!file) return;
const formData = new FormData();
formData.append('image', file);
try {
const response = await fetch(`${API_BASE}/upload_image`, {
method: 'POST',
body: formData
});
const data = await response.json();
if (data.success) {
alert('图片分析完成!');
loadNotes();
}
} catch (error) {
console.error('Error:', error);
alert('上传失败,请重试');
}
});
// 加载笔记列表
async function loadNotes() {
try {
const response = await fetch(`${API_BASE}/notes`);
const data = await response.json();
if (data.success) {
displayNotes(data.notes);
}
} catch (error) {
console.error('Error:', error);
}
}
// 显示笔记
function displayNotes(notes) {
const notesList = document.getElementById('notesList');
notesList.innerHTML = '';
notes.forEach(note => {
const noteCard = document.createElement('div');
noteCard.className = 'note-card';
noteCard.innerHTML = `
<h3>${note.summary || '无标题'}</h3>
<p>${note.content.substring(0, 200)}...</p>
<div class="note-meta">
<span class="category-tag">${note.category}</span>
<span class="date">${new Date(note.created_at).toLocaleDateString()}</span>
</div>
<div class="note-actions">
<button onclick="generateQuiz(${note.id})">生成复习题</button>
<button onclick="deleteNote(${note.id})">删除</button>
</div>
`;
notesList.appendChild(noteCard);
});
}
// 生成复习题
async function generateQuiz(noteId) {
try {
const response = await fetch(`${API_BASE}/generate_quiz`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ note_id: noteId })
});
const data = await response.json();
if (data.success) {
const questions = data.questions.join('\n');
alert(`复习题:\n\n${questions}`);
}
} catch (error) {
console.error('Error:', error);
alert('生成失败,请重试');
}
}
// 页面加载时获取笔记
window.onload = loadNotes;
3. CSS (style.css)
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
border-radius: 20px;
box-shadow: 0 20px 60px rgba(0,0,0,0.3);
overflow: hidden;
}
header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 40px;
text-align: center;
}
header h1 {
font-size: 2.5em;
margin-bottom: 10px;
}
main {
padding: 40px;
}
section {
margin-bottom: 40px;
padding: 30px;
background: #f8f9fa;
border-radius: 15px;
}
h2 {
color: #667eea;
margin-bottom: 20px;
font-size: 1.8em;
}
textarea {
width: 100%;
min-height: 150px;
padding: 15px;
border: 2px solid #e0e0e0;
border-radius: 10px;
font-size: 16px;
resize: vertical;
transition: border-color 0.3s;
}
textarea:focus {
outline: none;
border-color: #667eea;
}
input[type="text"] {
width: 100%;
padding: 15px;
border: 2px solid #e0e0e0;
border-radius: 10px;
font-size: 16px;
margin-bottom: 15px;
transition: border-color 0.3s;
}
input[type="text"]:focus {
outline: none;
border-color: #667eea;
}
button {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border: none;
padding: 12px 30px;
border-radius: 25px;
font-size: 16px;
cursor: pointer;
transition: transform 0.2s, box-shadow 0.2s;
}
button:hover {
transform: translateY(-2px);
box-shadow: 0 5px 15px rgba(102, 126, 234, 0.4);
}
button:active {
transform: translateY(0);
}
.button-group {
display: flex;
gap: 10px;
margin-top: 15px;
}
.ai-analysis {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
color: white;
}
.analysis-item {
margin-bottom: 20px;
}
.analysis-item strong {
display: block;
margin-bottom: 10px;
font-size: 1.1em;
}
.keywords {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.keyword-tag {
background: rgba(255,255,255,0.3);
padding: 8px 15px;
border-radius: 20px;
font-size: 14px;
}
.category-tag {
background: #667eea;
color: white;
padding: 5px 15px;
border-radius: 15px;
font-size: 14px;
display: inline-block;
}
.answer-box {
background: white;
padding: 20px;
border-radius: 10px;
margin-top: 20px;
}
.answer-box h3 {
color: #667eea;
margin-bottom: 10px;
}
.answer-box ul {
list-style-position: inside;
margin-top: 10px;
}
.note-card {
background: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
transition: transform 0.2s;
}
.note-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 20px rgba(0,0,0,0.15);
}
.note-card h3 {
color: #333;
margin-bottom: 10px;
}
.note-card p {
color: #666;
line-height: 1.6;
margin-bottom: 15px;
}
.note-meta {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.date {
color: #999;
font-size: 14px;
}
.note-actions {
display: flex;
gap: 10px;
}
.note-actions button {
padding: 8px 20px;
font-size: 14px;
}
@media (max-width: 768px) {
header h1 {
font-size: 1.8em;
}
main {
padding: 20px;
}
section {
padding: 20px;
}
.button-group {
flex-direction: column;
}
.note-actions {
flex-direction: column;
}
}
📊 评审标准
评分维度
创新性(30分):
├─ 应用场景新颖度(10分)
├─ 技术方案创新性(10分)
└─ 用户价值独特性(10分)
技术实现(30分):
├─ 代码质量(10分)
├─ AI能力应用深度(10分)
└─ 系统稳定性(10分)
实用性(20分):
├─ 解决实际问题(10分)
└─ 用户体验(10分)
完整性(20分):
├─ 功能完整度(10分)
└─ 文档完善度(10分)
加分项:
├─ 开源贡献(+5分)
├─ 多模态应用(+5分)
└─ 社会价值(+5分)
📝 提交指南
提交材料清单
必须提交:
□ 完整源代码(GitHub仓库链接)
□ README.md(项目说明)
□ 演示视频(3-5分钟)
□ API密钥使用说明
推荐提交:
□ 在线Demo链接
□ 技术文档
□ 用户手册
□ 测试报告
README模板
# 项目名称
> 一句话描述项目
## 项目简介
详细介绍项目背景、目标和核心功能。
## 技术栈
- Google AI Studio / Gemini API
- Python 3.9+
- Flask
- SQLite
- HTML/CSS/JavaScript
## 快速开始
### 环境要求
- Python 3.9+
- Google AI Studio API密钥
### 安装步骤
1. 克隆仓库
```bash
git clone https://github.com/yourusername/project.git
cd project
- 安装依赖
pip install -r requirements.txt
- 配置API密钥
export GOOGLE_API_KEY="your_api_key"
- 运行项目
python app.py
---
## ❓ 常见问题
### Q1: API额度不够怎么办?
**A:** Google AI Studio提供免费额度,合理使用即可。建议:
- 实现请求缓存
- 批量处理请求
- 优化prompt减少token消耗
### Q2: 如何提高AI响应准确性?
**A:** 优化prompt设计:
```python
# 不好的prompt
"总结这段文字"
# 好的prompt
"""
请为以下内容生成简洁的摘要(不超过200字):
{content}
要求:
1. 提取核心要点
2. 保持逻辑清晰
3. 使用简洁语言
"""
Q3: 如何处理多模态输入?
A: 使用Gemini Pro Vision:
import PIL.Image
model = genai.GenerativeModel('gemini-pro-vision')
img = PIL.Image.open('image.jpg')
response = model.generate_content([
"分析这张图片的内容",
img
])
Q4: 如何部署到生产环境?
A: 推荐方案:
- 使用Docker容器化
- 部署到云平台(Google Cloud, AWS, Azure)
- 配置HTTPS
- 设置API限流
🎓 学习资源
官方文档
推荐教程
入门教程:
├─ Google AI Studio快速开始
├─ Gemini API基础使用
└─ Prompt工程入门
进阶教程:
├─ 多模态应用开发
├─ 对话系统构建
└─ 性能优化技巧
实战项目:
├─ AI聊天机器人
├─ 智能内容生成器
└─ 图像分析应用
社区资源
🏅 优秀案例参考
案例1:AI学习助手
亮点:
- 个性化学习路径
- 智能知识图谱
- 自适应难度调整
技术特色:
- 多轮对话管理
- 知识点关联分析
- 学习进度追踪
案例2:创意写作工具
亮点:
- 多风格内容生成
- 实时协作编辑
- SEO智能优化
技术特色:
- Prompt模板库
- 内容质量评估
- 版本管理系统
案例3:智能客服平台
亮点:
- 24/7自动响应
- 多语言支持
- 情感分析
技术特色:
- 意图识别
- 上下文管理
- 人机协作
🚀 开始你的创意之旅
现在就开始构建你的AI应用吧!
行动步骤:
- ✅ 注册Google AI Studio账号
- ✅ 获取API密钥
- ✅ 选择创意方向
- ✅ 搭建开发环境
- ✅ 开始编码
- ✅ 测试优化
- ✅ 准备提交
记住:
- 💡 创新是关键
- 🎯 实用是核心
- 🏆 完整是基础
- 🌟 体验是加分项
📌 相关标签
核心技术: #GoogleAIStudio #GeminiAPI #AI应用开发
编程语言: #Python #JavaScript #Flask
应用领域: #教育科技 #内容创作 #智能客服
文章类型: #大赛指南 #技术教程 #完整项目
祝你在创意AI应用开发大赛中取得优异成绩! 🎉
如有问题,欢迎在评论区讨论交流!
作者简介: AI应用开发者,专注于Google AI Studio生态
原创声明: 本文为原创内容,转载请注明出处
更多推荐

所有评论(0)