🎯 今日目标:掌握文心一言和文心一格API的获取与调用方法
一、核心概念澄清 ✅
今天首先澄清了一个重要概念区别:
- AI模型 vs 数据模型
• AI模型:百度已训练好的大模型(如文心一言),我们直接调用API使用
• 数据模型:自己项目中定义的数据库结构(Django Models),需要自己设计创建
重要结论:我们不需要在百度官网创建模型,只需要在自己的Django项目中创建数据模型,然后调用现成的AI模型API。
二、API获取流程 📋
- 文心一言API(文本生成)
获取步骤:
-
访问百度AI开放平台:https://ai.baidu.com/
-
注册/登录并完成实名认证
-
进入控制台 → 文心大模型 → 文心一言
-
创建应用,获取API Key、Secret Key、App ID
-
注意查看免费调用额度
-
文心一格API(图像生成)
获取步骤:
- 同样在百度AI开放平台控制台
- 选择文心一格服务并开通
- 获取API凭证
- 了解图片生成的参数配置
三、技术实现代码 💻
- 安装依赖
pip install requests baidu-aip
- 核心函数封装
获取access_token
def get_access_token(api_key, secret_key):
url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={api_key}&client_secret={secret_key}"
response = requests.post(url)
return response.json().get("access_token")
文心一言:生成故事文本
def generate_story(keywords, api_key, secret_key):
access_token = get_access_token(api_key, secret_key)
url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/eb-instant?access_token={access_token}"
prompt = f"请根据以下关键词创作一个适合儿童的短篇故事(300-500字):{keywords}"
payload = {"messages": [{"role": "user", "content": prompt}]
}response = requests.post(url, headers={'Content-Type': 'application/json'}, data=json.dumps(payload))
return response.json().get("result", "生成失败")
文心一格:生成故事插图
def generate_image(prompt, api_key, secret_key, save_path="story_image.png"):
access_token = get_access_token(api_key, secret_key)
url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/text2image/sd_xl?access_token={access_token}"
payload = {"prompt": prompt,"size": "1024x1024","style": "卡通","n": 1
}response = requests.post(url, headers={'Content-Type': 'application/json'}, data=json.dumps(payload))if "data" in response.json():image_url = response.json()["data"][0]["image"]img_response = requests.get(image_url)with open(save_path, 'wb') as f:f.write(img_response.content)return save_path
return None
四、Django项目集成方案 🔄
- 数据模型设计
models.py
class Story(models.Model):
title = models.CharField(max_length=200) # 实验一
keywords = models.CharField(max_length=300)
content = models.TextField()
image_url = models.URLField(blank=True) # 实验二
audio_url = models.URLField(blank=True) # 实验三
created_at = models.DateTimeField(auto_now_add=True)
- 视图函数示例
views.py
def create_story_view(request):
if request.method == 'POST':
keywords = request.POST.get('keywords', '')
# 1. 生成故事文本story_text = generate_story(keywords, API_KEY, SECRET_KEY)# 2. 生成插图image_prompt = f"儿童故事插图:{keywords}"image_path = generate_image(image_prompt, API_KEY, SECRET_KEY)# 3. 保存到数据库story = Story.objects.create(title=f"关于{keywords}的故事",keywords=keywords,content=story_text,image_url=f"/media/{image_path}" if image_path else "")return JsonResponse({'success': True, 'story': story.id})
五、学习收获与思考 💡
✅ 已掌握的知识点:
- API获取流程:清晰了解百度AI平台API申请步骤
- 接口调用方法:掌握access_token机制和API调用方式
- 错误处理意识:API调用需要添加try-catch和降级方案
- 项目集成思路:如何将AI能力嵌入到Django项目中
⚠️ 注意事项:
- 费用控制:API调用可能有费用,需关注免费额度和计费方式
- 速率限制:免费版本有QPS限制,需合理设计调用频率
- 内容安全:生成内容需符合平台规范,特别是儿童内容
- 数据存储:生成的图片建议使用云存储,避免服务器压力
六、下一步行动计划 🎯
短期任务(明天):
- ✅ 完成百度API账号注册和认证
- ✅ 获取实际的API Key和Secret Key
- ✅ 编写完整的Django模型和视图
- ✅ 测试端到端流程(关键词→故事→图片)
中期计划:
- 🔄 添加语音合成功能(实验三)
- 🔄 设计前端界面(表单提交+结果显示)
- 🔄 添加用户认证和故事收藏功能
- 🔄 优化生成提示词(prompt engineering)
备选方案:
如果百度API遇到问题,可考虑:
• 文本生成:智谱AI、阿里通义千问
• 图像生成:Stable Diffusion API、Leonardo AI
七、遇到问题与解决方案 ❓
问题1:API调用返回权限错误
可能原因:access_token过期或无效
解决方案:每次调用前检查token有效期,过期时重新获取
问题2:生成内容不符合预期
解决方案:优化提示词(prompt),加入更详细的约束条件
改进后的prompt
prompt = f"""
请根据以下关键词创作一个适合6-8岁儿童的短篇故事:
关键词:{keywords}
要求:
- 故事长度300-500字
- 包含正能量和教育意义
- 语言简单生动
- 有明确的开始、发展、结尾
"""
问题3:图片生成风格不一致
解决方案:在prompt中明确指定风格参数
payload = {
"prompt": f"卡通风格,色彩鲜艳,适合儿童:{prompt}",
"size": "1024x1024",
"style": "卡通",
"negative_prompt": "恐怖、暴力、成人内容" # 负面提示词
}
八、技术思考延伸 💭
- 性能优化方向
• 异步处理:使用Celery异步队列处理生成任务
• 缓存机制:对常见关键词的结果进行缓存
• 批量生成:一次生成多个版本供用户选择
- 功能扩展可能
• 多语言支持:生成不同语言版本的故事
• 互动故事:让用户选择故事发展方向
• 个性化定制:根据用户年龄调整故事难度
- 用户体验优化
• 生成进度提示
• 多版本选择
• 一键分享功能
📊 今日学习总结
学习模块 掌握程度 实践状态
概念理解 ✅ 优秀 已清晰区分AI模型与数据模型
API获取 ✅ 良好 了解流程,待实际操作
代码实现 ✅ 优秀 完成核心函数编写
Django集成 ✅ 良好 设计好数据模型和视图结构
错误处理 🔄 进行中 了解基本思路,需实际测试