培养你的AI技能的最佳方式是通过动手做项目。尤其是刚开始时,可能会觉得该做什么项目难以抉择。在这里,我将分享5个你可以快速完成的AI项目,这些项目的难度分为三个级别。我将拆解每种项目所需的步骤和使用到的Python库。
这张图片来自Canva。
初学者在思考项目想法时最容易犯的错误是以这个问题为起点:“我如何使用这项新技术?”虽然这样确实能帮助你了解新工具,其实有更好的思路。
好的项目想法始于问自己,“我能解决什么问题?”这不仅在向潜在雇主介绍时是个很好的故事,而且解决问题是将技术技能转化为实际价值的关键。
下面提到的所有项目都采用了这种解决问题的方法。你可以直接把这些想法付诸实践,或者(更好一点)用它们来启发你解决自己的问题。
1) 简历优化入门:或
1) 简历优化入门,根据文档风格选择合适的形式。
申请工作时,一个既有效又耗时的过程是根据不同的工作描述调整简历。虽然自动化这项任务在几年前还是个高级项目,但如今有了大型语言模型,这就像调用一个API一样简单。
这里是如何一步步实施这种自动化的说明。
- 创建您简历的Markdown版本 _(注意:ChatGPT可以为您完成此操作)。
- 尝试不同的提示模板,这些模板结合您的Markdown简历和工作描述,生成一个新的Markdown格式简历。
- 使用OpenAI的Python API让GPT-4o-mini动态重写您的简历。
- 使用markdown和pdfkit库将Markdown文件先转换为HTML,再转换为PDF。
虽然我们可以轻松使用ChatGPT来完成这个任务,而使用Python的好处是,我们可以更轻松地扩展这个流程。这里是一些用于Step 3的初始代码示例。
导入 openai 包
openai.api_key = "your_sk"
# 假设 md_resume 和 job_description 已被定义
prompt = f"""
我有一个用 Markdown 格式化的简历和一份工作描述。 \
请根据工作要求调整我的简历,同时保持专业语气。定制我的技能、经历和成就,以突出对职位最相关的要点。 \
确保我的简历依然突出我的独特资质和优势,但强调与工作描述相匹配的技能和经历。
### 这是我的 Markdown 格式的简历:
{md_resume}
### 这是工作描述:
{job_description}
请按照以下要求修改简历:
- 使用工作描述中的关键词和短语。
- 调整每个角色下的项目符号列表,以强调相关的技能和成就。
- 确保我的经历以符合所需资格的方式来呈现。
- 全文保持清晰、简洁和专业的风格。
请返回更新后的 Markdown 格式简历。
"""
# 调用 API
response = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "您是乐于助人的助手。"},
{"role": "user", "content": prompt}
],
temperature = 0.25
)
# 提取响应内容
resume = response.choices[0].message.content
提示:ChatGPT 编写这种短代码片段(或提示)非常有帮助。如果你在第 4 步卡住了,可以试试用它。
2) YouTube 视频总结(新手)尽管我喜欢将技术讲座添加到我的 YouTube “稍后观看” 列表中,但可能要过一段时间我才会观看它们(如果我最后抽出时间来观看的话 😅)。一个可以帮助解决这个问题的工具项目是开发一个工具,它能帮我生成简洁的摘要,包含要点。
这有个办法。
- 使用正则表达式从视频链接中提取YouTube视频ID
- 使用视频ID通过youtube-transcript-api提取字幕文本
- 试验不同的ChatGPT提示,有效地总结字幕内容
- 使用OpenAI的Python API自动化整个流程
库:例如:openai(链接), youtube-transcript-api(链接)
从技术角度来说,这与第一个项目非常相似。不过,一个重要的区别是我们需要自动提取视频中的对话文本,然后将其作为输入给大语言模型。
这里有一段示例代码。
import re
from youtube_transcript_api import YouTubeTranscriptApi
youtube_url = "视频链接"
# 使用正则表达式提取视频ID
video_id_regex = r'(?:v=|\/)([0-9A-Za-z_-]{11}).*'
match = re.search(video_id_regex, youtube_url)
if match:
return match.group(1)
else:
return None
# 从字幕对象中提取文本内容
文本列表 = [transcript[i]['text'] for i in range(len(transcript))]
字幕文本 = '\n'.join(文本列表)
3) 自动整理 PDF,(中等难度)
我的“稍后听”播放列表并不是我收藏技术信息的唯一地方。另一个藏宝地是我的桌面,上面有(118篇)研究论文。因为人工阅读这些论文会非常费时,让我们看看AI能帮上什么忙。
可以创建一个工具,分析我电脑桌面上每个PDF的内容,并根据主题分类,将它们分类放到不同的文件夹里。文本嵌入可以将每篇论文转换为密集的向量表示形式,然后可以用传统的机器学习算法(如K-Means)把相似的文件聚类。
这里有一个更详细的分解:
-
使用PyMuPDF阅读每篇研究文章的摘要内容
-
使用sentence-transformers库将摘要转换为文本嵌入向量,并将其存储在Pandas DataFrame中
-
使用sklearn中喜欢的聚类算法根据相似性对嵌入向量进行聚类
- 为每个聚类创建文件夹并将相应的文件移入其中。
库包, :PyMuPDF,___sentencetransformers,pandas,sklearn
该项目的关键步骤是生成文本嵌入(text embeddings,即文本嵌入)。这里有一个使用sentence_transformers(一个生成文本嵌入的工具)生成文本嵌入的代码片段。
from 'sentence_transformers' 导入 SentenceTransformer
# 加载模型
model = SentenceTransformer("all-MiniLM-L6-v2")
# 将摘要存入列表
abstract_list = ["abstract 1", "abstract 2"]
# 计算摘要的嵌入向量
embeddings = model.encode(abstract_list)
4) 中级多模态搜索
几个月之前,我帮助一家公司为一组技术报告建立了一个基本的RAG系统。在搜索这些报告时遇到的一个挑战是,关键信息常常是通过图表和图示,而不是通过文本以外的形式展现的。
将这种视觉信息融入搜索过程的一种方式是使用多模态嵌入模型来将文本和图像映射到同一个空间中。
下面做个简单的分解
- 给定一个PDF,使用PyMuPDF将其分割成若干部分并提取图片
- 使用一个多模态嵌入模型(例如nomic-ai/nomic-embed-text-v1.5)将分块和图片表示为稠密向量,并将其存储在数据框中
- 对知识库中的所有PDF文件重复以上步骤
- 给定用户查询,将查询通过与知识库相同的嵌入模型进行处理
- 计算查询嵌入与知识库中每个条目的余弦相似度得分
- 返回前k个最相关的结果
库包:PyMuPDF, transformers, pandas, scikit-learn
该项目最重要的部分是如何对PDF进行分块。最简单的方法是采用固定字符数,并让各个块之间有一定的重叠(比如,每个块之间有部分重叠)。对于每个块来说,记录诸如文件名和页码之类的元数据也很有帮助(比如,这样可以更好地追踪每个块的信息)。
下面是一些基本的样板代码,可以帮你做到这一点(来自ChatGPT的帮助)。如果遇到问题,试着让它帮你提取图片。
import fitz # PyMuPDF
def extract_text_chunks(pdf_path, chunk_size, overlap_size):
# 打开PDF文件
pdf_document = fitz.open(pdf_path)
chunks = []
# 遍历PDF中的每一页
for page_num in range(len(pdf_document)):
page = pdf_document[page_num]
page_text = page.get_text()
# 将当前页面的文本分割成具有重叠的块
start = 0
while start < len(page_text):
end = start + chunk_size
chunk = page_text[start:end]
# 将页面编号与块一起存储
chunks.append((page_num + 1, chunk))
# 移动到下一个块,保持重叠部分
start += chunk_size - overlap_size
return chunks
# 设置参数
pdf_path = "your_file.pdf"
chunk_size = 1000 # 每个文本块的字符数
overlap_size = 200 # 字符重叠大小
text_chunks = extract_text_chunks(pdf_path, chunk_size, overlap_size)
# 显示带有页面编号的块
for i, (page_number, chunk) in enumerate(text_chunks):
print(f"块 {i + 1}(页面 {page_number}):\n{chunk}\n{'-' * 50}")
5), 进阶知识问答
这一年里,我帮助近100家企业和个人建立了AI项目。其中,人们最常询问的项目是一个文档问答系统。在此前的项目基础上,我们可以用简单直接的方式实现这一系统。
如果我们已经将文档切分成小块并存储在 DataFrame 中,我们可以将多模态搜索工具或系统转换为多模态 RAG 系统(检索和生成系统)。
下面是步骤如下:
- 在类似于项目4创建的知识库上执行搜索。
- 结合用户查询和搜索结果的前k个条目,并传递给一个多模态模型。
- 建立一个简单的Gradio用户界面,用于问答系统。
库包 : PyMuPDF ,transformers ,pandas ,sklearn, together /openai ,Gradio
Llama 3.2 Vision通过Together AI的API直到2025年都是免费的
这个项目基本上是项目2和项目4的结合。它包含了一个必要的用户界面组件。为此目的,我们可以使用像Gradio这样的仪表板工具,这个工具可以让我们用几行代码快速搭建一个聊天界面。
这里是一个参考自Gradio的文档的示例片段。
import gradio as gr
import time
def generate_response(message, history):
"""
在此处编写生成响应的代码
"""
return response
demo = gr.ChatInterface(
fn=generate_response,
examples=[{"text": "你好", "files": []}],
title="回声机器人(Echo Bot)",
multimodal=True)
demo.launch() # 启动界面
下一步是什么?
感谢像ChatGPT和Cursor这样的工具,构建AI项目从未如此简单快捷。几年前可能需要数小时(甚至数天)才能解决的问题,现在几分钟内就能用先进的编码助手解决。
我的最后建议是利用这些工具来学得更快,并在项目选择上大胆尝试。对于项目,发现问题并将实现时间限定在一个周末内。
在评论区留言提问吧 :)
想了解更多吗? 即将推出一个6周直播课程BootCamp面向AI构建者。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章