前途科技
  • 科技
  • AI
    • AI 前沿技术
    • Agent生态
    • AI应用场景
    • AI 行业应用
  • 初创
  • 报告
  • 学习中心
    • 编程与工具
    • 数据科学与工程
我的兴趣
前途科技前途科技
Font ResizerAa
站内搜索
Have an existing account? Sign In
Follow US
Copyright © 2024 AccessPath.com, 前途国际科技咨询(北京)有限公司,版权所有。 | 京ICP备17045010号-1 | 京公网安备 11010502033860号
未分类

音乐、歌词与智能代理AI:用Python和OpenAI打造智能歌词解读器

NEXTECH
Last updated: 2025年11月15日 上午7:52
By NEXTECH
Share
43 Min Read
SHARE

本文的焦点是说唱音乐。

Contents
1. 系统设计2. 代码实现

说唱音乐能让人热泪盈眶、引吭高歌、随之起舞,许多人也通过它学习了英语。许多人可能还记得第一次尝试理解Biggie和Tupac歌词的经历,从中了解到布鲁克林和加利福尼亚的故事、独特的俚语、生活中的挣扎,以及这些歌曲背后蕴含的深刻信息。

说唱音乐是绝佳的例证,展示了纯粹的歌词如何将音乐升华为一件艺术品。一些顶级的嘻哈歌曲,其构成可能仅仅是一个采样、几段鼓点,以及一个人在4/4拍的节奏上诗意地“说话”。

对于那些熟谙语言的人来说,阅读歌词或许并非必需;但对于非英语母语者,像Genius这样的工具极大地简化了理解过程。Genius是一个在线歌词音乐收集平台:如果需要一首歌的歌词,Genius是最佳选择。有了Genius,即使不完全理解Biggie所唱的内容,也可以阅读歌词,然后通过谷歌搜索和翻译来领会。不仅如此,当说唱歌手(或任何歌手)做出难以理解的特定引用时,Genius还会通过侧边栏片段提供清晰的解释。

Genius上的Biggie歌词截图

图片来源:Genius [链接]

You Might Also Like

解码海量观测数据中的非线性信号:气候模式识别的机器学习之旅
ChatGPT6:揭秘大模型自主进化机制与SEAL框架的突破
RAG技术深度解析:让AI更智能,掌握其工作原理、文档处理、检索策略与实战
蝉妈妈智库:2024年抖音电商年报

那么,Genius是如何做到这些的呢?它又是如何生成这些富有洞察力、实时更新且实用的注释片段的?

追溯到2009年Genius诞生之初,这类注释片段主要通过人工方式生成:用户可以自行添加评论,部分内容可能由版主进行审核,流程相对简单。

然而,如今,凭借我们所拥有的强大AI技术,整个流程可以变得更加顺畅和高效。尽管智能代理AI可能无法完全取代音乐专家的工作(原因众多),但它无疑能为具备领域知识的人员提供辅助,通过提供恰当的工具来帮助他们创建这些注释片段。

而这正是本文将要探讨和实践的内容。 微笑表情

本文将利用Streamlit、Python和OpenAI构建一个极其简洁的Web应用,它能根据歌曲歌词,提供文本含义的澄清。更具体地说,该应用将允许用户就文本内容提出问题,使Genius的理念更具“互动性”。此外,AI代理还将获取网络搜索结果,以便大型语言模型(LLM)在生成答案时参考其他歌曲和相关资源。

为了增加趣味性(以及出于版权考量),本文还将利用另一个AI代理创建自定义歌曲。

令人兴奋!现在开始构建! 火箭表情

如果对实验的最终成果感兴趣,可直接跳至第三部分。若希望一同构建这一精彩应用,请从下一部分开始阅读。 微笑表情

1. 系统设计

系统设计图如下所示:

系统设计图

图片由作者制作

具体来说,系统具备以下功能:

  1. 用户能够利用AI代理从头开始创作歌曲。此功能为可选,已有一批预生成的歌曲可供使用。
  2. 用户可以选择文本的某个部分并提出问题。
  3. AI代理能够以“Genius”风格生成回答。

此外,AI代理还配备了:

a. “内部歌曲知识”,包含歌曲的提取特征/元数据(例如,氛围、标题、主题等)。

b. 网络搜索工具,允许代理通过网络搜索歌曲并为问题添加上下文信息。

这种设计具有良好的模块化特性,这意味着可以轻松地添加组件以增加系统的复杂性。例如,如果需要使歌曲生成功能更加精细,可以轻松调整歌曲生成代理,而无需对代码的其他部分进行大规模改动。

现在,将逐步构建该系统。 砖块表情

2. 代码实现

2.1 环境设置

完整的代码可在以下GitHub仓库中找到

代码项目的结构如下:

  1. 歌词生成器,对应文件为generate_madeup_lyrics.py
  2. 歌词问答模块,对应文件为qa.py
  3. Web应用主体(通过Streamlit运行的文件),即lyricsgpt_app.py
  4. 一系列辅助工具文件(如utils.py、constants.py、config.py等)

所有数据将存储在data文件夹中。

项目文件结构示意图

图片由作者制作

为避免冗余细节,本文仅描述该结构中的主要组件。首先介绍核心部分:Streamlit应用。

2.2 Streamlit 应用

请注意:在使用Streamlit应用以及任何需要LLM生成的部分时,都需要准备好OpenAI API密钥。在Streamlit应用之外,最简单的设置方法是使用操作系统环境变量:os.getenv(“OPENAIAPIKEY”) = “api_key”。在应用内部,系统会提示用户复制粘贴密钥。

该应用通过以下命令运行:

streamlit run lyricsgpt_app.py

其中,lyricsgpt_app.py的代码内容如下:

from future import annotations

import os
from pathlib import Path
from typing import Dict, List

import streamlit as st

from lyricsgpt import (
GenerationConfig,
SONGPROMPTS,
answer
question,
createlyricsdataset,
getclient,
load
songsfromjson,
)

APP_TITLE=”Use LLM to explore the lyrics of your favorite song”

@st.cachedata(showspinner=False)
def loaddataset(path: Path) ->List[Dict[str, str]]:
if path.exists():
return load
songsfromjson(path)
return []

def main() ->None:
st.setpageconfig(pagetitle=”LyricsGPT”, layout=”centered”)
st.title(APP
TITLE)
st.caption(
“LyricsGPT lets you explore AI-generated lyrics for a curated set of song “
“concepts. Provide your OpenAI API key to regenerate lyrics or ask new questions.”
)

config=GenerationConfig()
datasetpath=config.output_path

apikeyinput=st.textinput(
“OpenAI API Key”,
value=os.getenv(“OPENAI
APIKEY”, “”),
type=”password”,
help=(
“Enter your API key to access lyric regeneration and Q&A. Leave blank to “
“browse previously generated lyrics only.”
),
) api
key=apikeyinput.strip()

dataset=loaddataset(datasetpath)

if not dataset:
st.warning(
“No lyrics dataset found. Provide an OpenAI API key above and press”
” ‘Regenerate lyrics with LLM’ to create one.”
)
return

songtitles= [record[“title”] for record in dataset]
selectedtitle=st.selectbox(“Select a song”, songtitles)
selectedsong=next(record for record in dataset if record[“title”] ==selectedtitle)

st.markdown(f”## {selected_song[‘title’]}”)

st.divider()
st.markdown(“### Lyrics”)
st.markdown(selected_song[“lyrics”])

st.divider()
st.markdown(“### Ask a question about a specific excerpt”)

if not api_key:
st.info(“Enter your OpenAI API key above to ask new questions about the lyrics.”)
st.stop()

st.write(
“Highlight the relevant lines in the lyrics above, copy them, and paste “
“into the excerpt box below before submitting your question.”
)

excerpt=st.textarea(
“Selected excerpt”,
placeholder=”Paste the lyric lines you want to ask about…”,
height=120,
)
question=st.text
area(
“Your question”,
placeholder=”What would you like to know about this excerpt?”,
height=120,
)

colsubmit, coloptions=st.columns([1, 2])
allowweb=coloptions.checkbox(“Allow supplementary web search”, value=True)
maxresults=coloptions.slider(“Max search results”, 1, 5, 3, disabled=not allow_web)

submitclicked=colsubmit.button(“Get answer”, disabled=not apikey)
if submit
clicked:
if not question.strip():
st.error(“Please enter your question.”)
else:
client=getclient(apikey)
with st.spinner(“Thinking…”):
result=answerquestion(
client,
config,
song=selected
song,
excerpt=excerpt,
question=question,
allowweb=allowweb,
maxsearchresults=max_results,
)
st.subheader(“Answer”)
st.markdown(result[“answer”])

if result.get(“searchresults”):
st.subheader(“Research references”)
for res in result[“search
results”]:
st.markdown(f”{res[‘title’]} — {res[‘snippet’]}”)
st.markdown(f”{res[‘url’]}“)
st.write(“”)
elif result.get(“searcherror”):
st.warning(f”Web search failed: {result[‘search
error’]}”)

st.info(f”Dataset source: {dataset_path}“)

if name ==”main“:
main()

这段代码虽然较长,但结构清晰直观:每一行都代表Web应用的一个组成部分:

  1. Web应用的标题
  2. 歌曲选择器,允许用户从数据文件夹中选择歌词(后续将详细介绍)
  3. 文本块输入框,用户可在此复制粘贴感兴趣的歌词片段
  4. 问题输入框,用户可就上述选定的歌词片段提出问题
  5. 答案显示框,LLM将在此处回答问题。

然而,这“仅仅”是执行层;真正的核心工作由lyricsgpt模块及其对象/函数完成。接下来,将介绍其中一些关键部分!

2.3 歌词生成器

此部分为可选功能,并未集成到侧重于Genius风格歌词解读的Web应用中。如果仅对歌词解读功能感兴趣,可以跳过此节。但必须指出:此部分功能相当酷炫。

对于歌词生成功能,其机制十分简单:

  • 用户提供一个标题、一种氛围、一个主题,以及一个隐藏的“反转”信息。
  • 系统便能生成相应的歌词。

例如:

[
{
“title”: “Glitter in the Rearview”,
“theme”: “letting go of a high-profile love story”,
“vibe”: “late-night highway pop ballad”,
“twist”: “a hidden reference to a fleet number 13”,
}
]

生成结果如下:

第一节

城市灯火之下,细语舞动天际线,我们彻夜闪耀,如同午夜星空中的钻石。但爱只是一场高楼之梦,建立在脆弱的缝隙之上,现在我驶离高速公路,留下回声在其中。

副歌

后视镜中尽是点点星光,逐渐褪成蓝色调,每一次欢笑和泪水,都随之飘远。当前方道路展开,我让记忆沉淀,后视镜中尽是点点星光,放手你我。

[更多LLM生成文本]

尾声

我驶入寂静,那里过往无法误解,后视镜中尽是点点星光,以及你我的碎片。后视镜中尽是点点星光,一段爱情故事过早落幕。

效果很不错吧?实现此功能的代码如下:

TAGGED:AI应用Streamlit大模型智能体歌词解读
Share This Article
Email Copy Link Print
Previous Article 未使用Skill生成的SaaS登陆页面 Claude Code:Anthropic AI团队利用Skills革新前端设计,UI设计师如何应对“AI slop”挑战?
Next Article New API中转站用量查询参数配置 CC Switch:一键切换Claude、Codex AI供应商配置的桌面工具及安装指南
Leave a Comment

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

最新内容
20251202135921634.jpg
英伟达20亿美元投资新思科技,AI芯片设计革命加速
科技
20251202130505639.jpg
乌克兰国家AI模型选定谷歌Gemma,打造主权人工智能
科技
20251202121525971.jpg
中国开源AI新突破:DeepSeek V3.2模型性能比肩GPT-5
科技
20251202112744609.jpg
马斯克预言:AI三年内解决美国债务危机,可信吗?
科技

相关内容

AI应用场景

AI赋能个人成长:运用机器思维优化人生决策

2025年11月6日
未分类

过拟合与欠拟合:深入理解机器学习中的偏差-方差权衡

2025年11月23日
AI 前沿技术

程序员必备:Prompt三大进阶技巧与实用模板

2025年11月8日
未分类

营销人员为何转向准地理提升实验?深度解析与规划指南

2025年9月24日
Show More
前途科技

前途科技是一个致力于提供全球最新科技资讯的专业网站。我们以实时更新的方式,为用户呈现来自世界各地的科技新闻和深度分析,涵盖从技术创新到企业发展等多方面内容。专注于为用户提供高质量的科技创业新闻和行业动态。

分类

  • AI
  • 初创
  • 学习中心

快速链接

  • 阅读历史
  • 我的关注
  • 我的收藏

Copyright © 2025 AccessPath.com, 前途国际科技咨询(北京)有限公司,版权所有。 | 京ICP备17045010号-1 | 京公网安备 11010502033860号

前途科技
Username or Email Address
Password

Lost your password?

Not a member? Sign Up