基于PaLM API的Medium文章生成器故障排查求助
基于PaLM API的Medium文章生成器故障排查
以下是你的代码中存在的核心问题及对应修复方案:
1. API端点错误
你使用的PALM_API_ENDPOINT不符合PaLM API(现Gemini API)的官方规范,正确的文本生成端点应为Google提供的域名:
PALM_API_ENDPOINT = "https://generativelanguage.googleapis.com/v1/models/text-bison-001:generateText"
2. 请求Payload格式不匹配API要求
PaLM API对请求结构有明确要求,你当前的payload字段命名和层级完全错误:
- 原
prompt字段需嵌套为prompt.text temperature、max_tokens需放在generationConfig下,且max_tokens要改为maxOutputTokens
修正后的generate_medium_article函数payload示例:
payload = { "prompt": { "text": f"Write a Medium article on the topic {topic}." }, "generationConfig": { "temperature": 0.7, "maxOutputTokens": 2000 } }
3. 响应解析逻辑错误
PaLM API的返回结果中,生成文本的存储路径并非generated_text,而是嵌套在candidates[0].output中,修正解析代码:
article = response.json()["candidates"][0]["output"]
4. API密钥硬编码风险
直接在代码中写入PALM_API_KEY存在密钥泄露风险,建议改用环境变量加载:
import os PALM_API_KEY = os.getenv("PALM_API_KEY")
运行前需设置环境变量:Linux/macOS执行export PALM_API_KEY="你的密钥",Windows执行set PALM_API_KEY="你的密钥"
5. Hashtags生成的token限制过小
generate_hashtags中max_tokens设为5,完全无法生成有效数量的标签,建议调整为100左右,同时同步修正payload和响应解析逻辑。
完整修复后代码示例
import streamlit as st import requests import os PALM_API_ENDPOINT = "https://generativelanguage.googleapis.com/v1/models/text-bison-001:generateText" PALM_API_KEY = os.getenv("PALM_API_KEY") def generate_medium_article(topic): """基于PaLM API生成指定主题的Medium文章""" if not PALM_API_KEY: st.error("请设置PALM_API_KEY环境变量") return "" payload = { "prompt": { "text": f"Write a Medium article on the topic {topic}." }, "generationConfig": { "temperature": 0.7, "maxOutputTokens": 2000 } } headers = { "Authorization": f"Bearer {PALM_API_KEY}" } try: response = requests.post(PALM_API_ENDPOINT, json=payload, headers=headers) response.raise_for_status() article = response.json()["candidates"][0]["output"] return article except Exception as e: st.error(f"请求失败:{str(e)}") return "" def generate_hashtags(topic): """基于PaLM API生成指定主题的标签""" if not PALM_API_KEY: st.error("请设置PALM_API_KEY环境变量") return [] payload = { "prompt": { "text": f"Generate 5-8 relevant hashtags for the topic {topic}, separated by commas." }, "generationConfig": { "temperature": 0.7, "maxOutputTokens": 100 } } headers = { "Authorization": f"Bearer {PALM_API_KEY}" } try: response = requests.post(PALM_API_ENDPOINT, json=payload, headers=headers) response.raise_for_status() hashtags_text = response.json()["candidates"][0]["output"] hashtags = [tag.strip() for tag in hashtags_text.split(",")] return hashtags except Exception as e: st.error(f"请求失败:{str(e)}") return [] def main(): """StreamLit应用:生成Medium文章和标签""" st.title("Medium文章生成器与标签生成器") topic = st.text_input("输入文章主题:") if st.button("生成Medium文章"): if topic: article = generate_medium_article(topic) if article: st.write(article) else: st.warning("请输入主题") if st.button("生成标签"): if topic: hashtags = generate_hashtags(topic) if hashtags: st.write(hashtags) else: st.warning("请输入主题") if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者user22495083
相关产品推荐
相关产品推荐

