Python新手入門之編寫一個自動詩歌生成器
環(huán)境準(zhǔn)備:讓 Python ready for AI
在動手寫代碼之前,我們需要先搭好“舞臺”。對于零基礎(chǔ)的朋友來說,這一步其實(shí)非常簡單,只需要確保你的電腦里安裝了 Python,并準(zhǔn)備好兩個關(guān)鍵的“工具包”。
首先,請確認(rèn)你已安裝 Python 3.8 或更高版本。安裝時務(wù)必勾選"Add Python to PATH",這樣才能在命令行中直接調(diào)用它。安裝完成后,打開終端(Windows 下是 cmd 或 PowerShell,Mac 下是終端),輸入 python --version,如果能看到版本號,說明基礎(chǔ)環(huán)境沒問題。
接下來,我們需要安裝兩個核心庫:
requests:它是 Python 中的“快遞員”,負(fù)責(zé)向大模型 API 發(fā)送請求并取回結(jié)果。python-dotenv:它是你的“保險(xiǎn)箱”,用來安全地存儲 API 密鑰,避免將其硬編碼在代碼中泄露。
在終端中執(zhí)行以下命令即可一鍵安裝:
pip install requests python-dotenv
配置密鑰:拿到通往 AI 世界的“鑰匙”
要調(diào)用大模型,你需要一把“鑰匙”,也就是 API Key。這就好比你要使用外賣服務(wù),必須先注冊賬號并獲取令牌。
目前市面上有許多大模型提供商(如 OpenAI、月之暗面、阿里云等),注冊流程大同小異。以通用的流程為例:
- 登錄大模型平臺的控制臺。
- 找到"API Keys"管理頁面,點(diǎn)擊創(chuàng)建新的密鑰。
- 復(fù)制生成的密鑰(通常是一串長字符,如
sk-...)。
重要提示:千萬不要把這串字符直接寫在代碼文件里上傳到 GitHub 或其他公開平臺!最安全的做法是創(chuàng)建一個名為 .env 的文件,放在你的項(xiàng)目文件夾根目錄下,內(nèi)容如下:
OPENAI_API_KEY=sk-你的真實(shí)密鑰在這里
這樣,我們的代碼就可以通過讀取這個文件來獲取密鑰,既方便又安全。
核心實(shí)戰(zhàn):5 分鐘構(gòu)建自動詩歌生成器
環(huán)境就緒,密鑰在手,現(xiàn)在我們來完成今天的核心任務(wù):編寫一個能根據(jù)主題自動生成五言絕句的 Python 腳本。我們將把這個文件命名為 poem_generator.py。
1. 導(dǎo)入模塊與加載配置
首先,我們需要告訴 Python 要用哪些工具,并把剛才存好的密鑰讀出來。
import os
import requests
from dotenv import load_dotenv
# 加載 .env 文件中的環(huán)境變量
load_dotenv()
# 獲取 API 密鑰
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise ValueError("未找到 API 密鑰,請檢查 .env 文件配置")
這段代碼做了兩件事:一是引入必要的庫,二是從環(huán)境變量中安全地提取密鑰。如果沒找到密鑰,程序會立即報(bào)錯提醒,避免后續(xù)無效運(yùn)行。
2. 構(gòu)造 Prompt:給 AI 下達(dá)精準(zhǔn)指令
與大模型交互的核心在于 Prompt(提示詞)。你可以把它理解為給 AI 的“任務(wù)說明書”。說明書寫得越清晰,AI 生成的內(nèi)容就越符合預(yù)期。
針對“寫一首五言絕句”的需求,我們可以這樣設(shè)計(jì) Prompt:
def build_prompt(topic):
return f"""
你是一位精通中國古典文學(xué)的詩人,擅長創(chuàng)作五言絕句。
請以"{topic}"為主題,創(chuàng)作一首詩。
要求:
1. 嚴(yán)格遵循五言絕句格式(四句,每句五個字)。
2. 押韻自然,意境優(yōu)美。
3. 只輸出詩歌內(nèi)容,不要包含標(biāo)題或額外解釋。
"""
這里我們運(yùn)用了幾個技巧:角色設(shè)定(精通古典文學(xué)的詩人)、具體約束(五言、押韻、無廢話)以及變量插入( {topic})。這種結(jié)構(gòu)能讓大模型迅速進(jìn)入狀態(tài),輸出高質(zhì)量內(nèi)容。
3. 發(fā)送請求與解析響應(yīng)
這是整個流程中最具技術(shù)含量的部分。我們需要使用 requests 庫向 API 接口發(fā)送 HTTP POST 請求,并將用戶的 Prompt 包裝成 JSON 格式。
def generate_poem(topic):
url = "https://api.openai.com/v1/chat/completions" # 此處以通用接口為例,不同廠商地址可能不同
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-3.5-turbo", # 選擇模型,也可替換為其他兼容模型
"messages": [
{"role": "user", "content": build_prompt(topic)}
],
"temperature": 0.7 # 控制創(chuàng)造性,0.7 是一個平衡點(diǎn)
}
try:
response = requests.post(url, headers=headers, json=payload, timeout=10)
response.raise_for_status() # 如果狀態(tài)碼不是 200,拋出異常
# 解析 JSON 響應(yīng)
result = response.json()
poem_content = result["choices"][0]["message"]["content"]
return poem_content.strip()
except requests.exceptions.RequestException as e:
return f"請求失敗:{e}"
這段代碼邏輯非常清晰:
- 構(gòu)建請求頭:帶上身份認(rèn)證信息。
- 構(gòu)建載荷(Payload):指定模型、傳入消息列表。注意
messages是一個列表,即使只有單輪對話也要遵循此格式。 - 發(fā)送與處理:使用
post方法發(fā)送請求,并用raise_for_status()確保網(wǎng)絡(luò)通暢。 - 提取數(shù)據(jù):大模型返回的是復(fù)雜的 JSON 對象,我們需要層層深入,找到
choices->message->content這條路徑,那里才是我們要的詩句。
4. 運(yùn)行與測試
最后,我們把所有部分組裝起來,添加一個簡單的用戶交互入口:
if __name__ == "__main__":
print("?? 歡迎使用 AI 詩歌生成器!")
user_topic = input("請輸入一個主題(例如:春天、月亮、離別):")
if user_topic:
print("\n正在構(gòu)思詩句...\n")
poem = generate_poem(user_topic)
print(f"【{user_topic}】\n{poem}")
else:
print("未輸入主題,程序退出。")
保存文件后,在終端運(yùn)行 python poem_generator.py。當(dāng)你輸入“春天”時,幾秒內(nèi)你就能看到類似這樣的輸出:
春晨曉露潤桃枝,
燕語鶯啼入畫池。
最是一年好光景,
東風(fēng)拂柳惹相思。
理解背后的工作流
通過這個小小的詩歌生成器,你已經(jīng)掌握了 AI 原生應(yīng)用開發(fā)的最基本范式:輸入 -> 構(gòu)造 Prompt -> 調(diào)用 API -> 解析 JSON -> 輸出。
在這個過程中,Python 扮演了“膠水語言”的角色,它不需要懂如何寫詩,只需要負(fù)責(zé)把用戶的需求翻譯成大模型能聽懂的指令,然后把大模型的回復(fù)整理好展示給用戶。requests 庫處理了復(fù)雜的網(wǎng)絡(luò)通信細(xì)節(jié),而 JSON 格式則確保了數(shù)據(jù)交換的標(biāo)準(zhǔn)化。
對于初學(xué)者而言,不必一開始就糾結(jié)于深度學(xué)習(xí)算法的原理或神經(jīng)網(wǎng)絡(luò)的架構(gòu)。利用現(xiàn)有的大模型 API,結(jié)合簡單的 Python 腳本,就能快速構(gòu)建出具有實(shí)際價(jià)值的應(yīng)用。無論是寫詩、生成文案,還是未來的多輪對話機(jī)器人,其核心邏輯都是一脈相承的?,F(xiàn)在,你可以嘗試修改 Prompt 中的要求,比如讓 AI 寫一首“現(xiàn)代詩”或者“藏頭詩”,看看會發(fā)生什么有趣的變化。
到此這篇關(guān)于Python新手入門之編寫一個自動詩歌生成器的文章就介紹到這了,更多相關(guān)Python自動詩歌生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用pytz實(shí)現(xiàn)時區(qū)使用與轉(zhuǎn)換的示例詳解
這篇文章主要為大家詳細(xì)介紹了Python如何使用pytz實(shí)現(xiàn)時區(qū)使用與轉(zhuǎn)換,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下2025-11-11
python實(shí)現(xiàn)簡單socket程序在兩臺電腦之間傳輸消息的方法
這篇文章主要介紹了python實(shí)現(xiàn)簡單socket程序在兩臺電腦之間傳輸消息的方法,涉及Python操作socket的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
python實(shí)現(xiàn)文本進(jìn)度條 程序進(jìn)度條 加載進(jìn)度條 單行刷新功能
這篇文章主要介紹了python實(shí)現(xiàn)文本進(jìn)度條 程序進(jìn)度條 加載進(jìn)度條 單行刷新功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
對pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解
下面小編就為大家分享一篇對pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python?中的lambda匿名函數(shù)和三元運(yùn)算符
這篇文章主要介紹了Python?中的lambda匿名函數(shù)和三元運(yùn)算符,使用關(guān)鍵字???lambda???定義,所以匿名函數(shù)又稱之為lambda表達(dá)式,下面文章更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-04-04

