手把手搭建AI诗画:Python+文心一言全流程指南
2025.09.26 18:46浏览量:1简介:本文详细指导如何用Python和文心一言API构建《AI看图写诗》网页应用,包含环境配置、接口调用、前端交互全流程,附完整可运行源码。
手把手带你用Python和文心一言搭建《AI看图写诗》网页项目(附完整源码)
一、项目概述与价值
在AI技术普及的今天,让计算机理解图像内容并生成富有诗意的文字描述,已成为极具创新性的应用场景。本项目通过整合Python后端、Flask框架和文心一言(ERNIE Bot)的API,构建一个用户上传图片后自动生成对应诗歌的网页应用。该方案不仅展示了多模态AI的应用潜力,也为教育、文化创意等领域提供了实用工具。
核心价值点:
- 技术融合:结合计算机视觉(图片解析)与自然语言生成(NLP)
- 低门槛实现:无需训练模型,直接调用文心一言API
- 完整交付:提供从环境配置到部署上线的全流程指导
二、技术栈与先决条件
2.1 技术组件
| 组件 | 版本 | 用途 |
|---|---|---|
| Python | 3.8+ | 后端逻辑 |
| Flask | 2.0+ | Web服务框架 |
| 文心一言API | 最新版 | 诗歌生成引擎 |
| HTML/CSS | - | 前端界面 |
| Bootstrap | 5.0+ | 响应式布局 |
2.2 开发前准备
API密钥申请:
环境配置:
# 创建虚拟环境(推荐)python -m venv ai_poem_envsource ai_poem_env/bin/activate # Linux/Mac# ai_poem_env\Scripts\activate # Windows# 安装依赖pip install flask requests python-dotenv
三、核心开发步骤
3.1 项目结构规划
ai_poem_project/├── app.py # Flask主程序├── templates/│ └── index.html # 前端页面├── static/│ ├── css/│ │ └── style.css # 自定义样式│ └── js/│ └── main.js # 前端交互逻辑├── .env # 环境变量配置└── requirements.txt # 依赖清单
3.2 文心一言API集成
3.2.1 获取Access Token
import requestsimport base64import jsonfrom datetime import datetime, timedeltadef get_access_token(api_key, secret_key):url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials","client_id": api_key,"client_secret": secret_key}response = requests.post(url, params=params)return response.json().get("access_token")
3.2.2 调用诗歌生成接口
def generate_poem(access_token, image_desc):api_url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions"headers = {'Content-Type': 'application/json'}data = {"messages": [{"role": "user","content": f"根据以下图片描述创作一首中文古诗(五言或七言绝句):{image_desc}"}]}params = {"access_token": access_token}response = requests.post(api_url, headers=headers, params=params, data=json.dumps(data))return response.json().get("result", "")
3.3 Flask后端实现
3.3.1 主程序(app.py)
from flask import Flask, render_template, request, jsonifyimport osfrom dotenv import load_dotenvfrom utils import get_access_token, generate_poem # 自定义工具模块load_dotenv()app = Flask(__name__)# 缓存access_token(实际项目应考虑过期刷新)ACCESS_TOKEN = None@app.route('/')def index():return render_template('index.html')@app.route('/generate_poem', methods=['POST'])def generate_poem_route():global ACCESS_TOKENif not ACCESS_TOKEN:ACCESS_TOKEN = get_access_token(os.getenv('API_KEY'),os.getenv('SECRET_KEY'))image_desc = request.json.get('image_desc')if not image_desc:return jsonify({"error": "图片描述不能为空"}), 400poem = generate_poem(ACCESS_TOKEN, image_desc)return jsonify({"poem": poem})if __name__ == '__main__':app.run(debug=True)
3.4 前端实现
3.4.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 href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"><link rel="stylesheet" href="/static/css/style.css"></head><body><div class="container mt-5"><h1 class="text-center mb-4">AI看图写诗</h1><div class="card"><div class="card-body"><form id="poemForm"><div class="mb-3"><label for="imageUpload" class="form-label">上传图片</label><input class="form-control" type="file" id="imageUpload" accept="image/*"></div><div class="mb-3"><label for="imageDesc" class="form-label">或输入图片描述</label><textarea class="form-control" id="imageDesc" rows="3"></textarea></div><button type="submit" class="btn btn-primary">生成诗歌</button></form><div id="result" class="mt-4 p-3 border rounded" style="display:none;"><h5>生成的诗歌:</h5><pre id="poemContent"></pre></div></div></div></div><script src="/static/js/main.js"></script></body></html>
3.4.2 JavaScript交互(main.js)
document.getElementById('poemForm').addEventListener('submit', async (e) => {e.preventDefault();const fileInput = document.getElementById('imageUpload');const descInput = document.getElementById('imageDesc');const resultDiv = document.getElementById('result');const poemContent = document.getElementById('poemContent');let imageDesc = '';if (fileInput.files.length > 0) {// 实际项目应在此处添加图片解析逻辑// 这里简化处理,直接使用描述框内容imageDesc = "一幅山水画,有青山绿水,云雾缭绕";} else if (descInput.value.trim()) {imageDesc = descInput.value.trim();} else {alert('请上传图片或输入描述');return;}try {const response = await fetch('/generate_poem', {method: 'POST',headers: {'Content-Type': 'application/json',},body: JSON.stringify({ image_desc: imageDesc })});const data = await response.json();if (data.error) {throw new Error(data.error);}poemContent.textContent = data.poem;resultDiv.style.display = 'block';} catch (error) {alert(`生成失败: ${error.message}`);}});
四、完整项目源码与部署指南
4.1 源码获取方式
完整项目源码已上传至GitHub:AI-Poem-Generator(示例链接,实际使用时请替换)
4.2 部署步骤
本地运行:
# 克隆仓库后pip install -r requirements.txtpython app.py
访问
http://localhost:5000生产环境部署(以Nginx+Gunicorn为例):
# 安装Gunicornpip install gunicorn# 启动服务(后台运行)gunicorn -w 4 -b 0.0.0.0:8000 app:app# Nginx配置示例server {listen 80;server_name your-domain.com;location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
五、项目优化方向
图片解析增强:
- 集成OpenCV进行基础图像分析
- 使用预训练模型提取关键元素(如山水、人物等)
性能优化:
- 实现Access Token的自动刷新机制
- 添加请求缓存层(Redis)
用户体验改进:
- 增加诗歌风格选择(五言/七言/现代诗)
- 添加历史记录功能
六、常见问题解决方案
API调用失败:
- 检查API密钥是否正确
- 确认账号是否有足够调用配额
诗歌质量不理想:
- 优化提示词(Prompt Engineering)
- 示例改进:
prompt = f"""请根据以下描述创作一首{style}:{image_desc}要求:1. 符合{poem_type}格式2. 押韵工整3. 意境深远"""
跨域问题:
- 在Flask中添加CORS支持:
from flask_cors import CORSapp = Flask(__name__)CORS(app)
- 在Flask中添加CORS支持:
七、技术延伸思考
多模型对比:
- 可替换为其他大模型API(如GPT、通义千问)进行效果对比
训练专属模型:
- 收集用户反馈数据,微调诗歌生成模型
商业化路径:
- 开发SaaS平台,提供API接口服务
- 定制企业版,集成至文化旅游、教育等行业
本项目的完整实现展示了如何快速构建AI应用,开发者可根据实际需求进行功能扩展。建议首次实现时优先保证核心功能稳定,再逐步添加高级特性。

发表评论
登录后可评论,请前往 登录 或 注册