Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from huggingface_hub import InferenceClient | |
| import os | |
| # Secretsから取得 | |
| TOKEN = os.getenv("HF_TOKEN") | |
| # 高性能なLlama-3-70Bを使用(日本語の指示理解が非常に強力です) | |
| client = InferenceClient("meta-llama/Meta-Llama-3-70B-Instruct", token=TOKEN) | |
| def generate_press_release(category, title, key_elements, background, company_info): | |
| if not TOKEN: | |
| yield "❌ エラー: HF_TOKEN が設定されていません。Settings > Secretsを確認してください。" | |
| return | |
| # カテゴリごとのプロンプト調整用ヒント | |
| hints = { | |
| "新製品・新サービス": "革新性、利便性、ターゲットへのメリットを強調してください。", | |
| "イベント・展示会": "開催の社会的意義、登壇者の魅力、参加者が得られる体験を強調してください。", | |
| "業務提携・契約": "両社が組むことによる相乗効果(シナジー)と、業界への影響を強調してください。", | |
| "資金調達": "調達の目的、今後の事業展開、投資家からの期待値を強調してください。", | |
| "調査レポート": "調査結果の客観的なデータと、そこから見える社会的な傾向を強調してください。", | |
| "その他(周年・人事・移転等)": "これまでの歩みと、今後の決意やビジョンを強調してください。" | |
| } | |
| selected_hint = hints.get(category, "") | |
| # 強力な日本語プロンプト | |
| prompt = f""" | |
| あなたは日本の大手PR会社に所属する、エリート広報コンサルタントです。 | |
| 提供された情報が断片的であったり、多言語が混ざっていたりしても、その本質を汲み取り、メディアが記事にしたくなる【完璧な日本語】のプレスリリースを作成してください。 | |
| 【入力情報】 | |
| - カテゴリ: {category} | |
| - 暫定タイトル: {title} | |
| - 必須要素(詳細): {key_elements} | |
| - 背景・想い(メモ): {background} | |
| - 発信元情報: {company_info} | |
| 【絶対ルール】 | |
| 1. **言語の統一**: 入力に英語やエラーメッセージ、記号が含まれていても、それらを無視または適切な日本語に翻訳・補完してください。 | |
| 2. **語尾の指定**: すべて「です・ます」調(敬体)で統一してください。「である」「だ」は一切使用しないでください。 | |
| 3. **構成**: 【タイトル】【リード文】【詳細】【背景・ストーリー】【会社概要・お問い合わせ先】の形式を守ってください。 | |
| 4. **トーン**: 信頼感、誠実さ、そして革新性が伝わるビジネスレベルの文章にしてください。 | |
| 5. **指示の反映**: {selected_hint} | |
| 出力はすべて日本語のみで行ってください。 | |
| """ | |
| try: | |
| response = "" | |
| for message in client.chat_completion( | |
| messages=[{"role": "user", "content": prompt}], | |
| max_tokens=3000, | |
| stream=True, | |
| ): | |
| if message.choices and len(message.choices) > 0: | |
| token = message.choices[0].delta.content | |
| if token: | |
| response += token | |
| yield response | |
| except Exception as e: | |
| yield f"⚠️ エラーが発生しました: {str(e)}" | |
| # UIデザイン | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# 📢 プロフェッショナル・プレスリリース・ジェネレーター") | |
| gr.Markdown("業種を問わず、あらゆるニュースをメディア品質のプレスリリースへ変換します。") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| category = gr.Dropdown( | |
| choices=["新製品・新サービス", "イベント・展示会", "業務提携・契約", "資金調達", "調査レポート", "その他(周年・人事・移転等)"], | |
| label="ニュースのカテゴリ", value="新製品・新サービス" | |
| ) | |
| title = gr.Textbox(label="タイトル(仮)", placeholder="例:世界初の〇〇技術を開発") | |
| elements = gr.Textbox(label="具体的な内容・事実関係", lines=5, placeholder="5W1H(いつ、どこで、誰が、何を...)を入力してください。") | |
| context = gr.Textbox(label="開発背景・プロジェクトの想い", lines=5, placeholder="メモ書きや多言語が混ざっていても問題ありません。AIが適切に補完します。") | |
| company = gr.Textbox(label="会社情報・連絡先", placeholder="社名、代表名、本件に関するお問い合わせ先など") | |
| submit_btn = gr.Button("プレスリリースを自動生成", variant="primary") | |
| with gr.Column(scale=1): | |
| output = gr.Markdown() | |
| submit_btn.click( | |
| fn=generate_press_release, | |
| inputs=[category, title, elements, context, company], | |
| outputs=output | |
| ) | |
| if __name__ == "__main__": | |
| # Gradio 6.0+ の安定稼働設定 | |
| demo.launch(server_name="0.0.0.0", server_port=7860, show_error=True) |