• 分享5个用 Python就能轻松实现的AI项目
  • 发布于 1周前
  • 129 热度
    0 评论
通过构建项目是提升 AI 技能的最佳方式。然而,对于初学者来说,“该构建什么?” 是一个常见难题。本文将分享 5 个可快速完成的 AI 项目,从基础到高级,并逐步解析实现这些项目所需的步骤及 Python 库。初学者在思考项目创意时最常犯的错误是从“如何使用这项新技术?”这个问题开始。虽然这种方式可以帮助学习新工具,但还有更好的方法。

好的项目创意应当从“我能解决什么问题?”这个问题出发。这不仅能让你的项目故事在向潜在雇主/投资人展示时更具吸引力,同时也是将技术技能转化为实际价值的关键。以下这些项目都采用了“以问题为导向”的方法。你可以直接实现这些创意,或者(更好的是)将它们作为灵感来源,用来解决你亲身面临的问题。

入门级项目
1)简历优化工具(入门级)
在求职过程中,针对不同的职位描述调整简历虽然有效,但通常耗时耗力。几年前,想要自动化完成这项任务可能还属于高级项目,而如今,借助大语言模型,这已变得像调用一个 API 一样简单。

以下是实现这一自动化流程的具体步骤:
1.创建简历的 Markdown 版本(你可以使用 ChatGPT 自动生成)。
2.设计不同的提示模板,将你的 Markdown 格式简历和职位描述结合,生成新的 Markdown 格式简历。
3.使用 OpenAI 的 Python API 调用 GPT-4o-mini 动态重写简历内容。
4.使用 markdown 和 pdfkit 库分别将 Markdown 文件转换为 HTML 和 PDF 格式。
所需库:openai、markdown、pdfkit

虽然可以直接使用 ChatGPT 完成此任务,但通过 Python 实现的优势在于你可以轻松扩展这个流程。例如,可以实现批量处理多个职位描述和简历模板。

以下是第 3 步的代码示例:
import openai
openai.api_key = "your_sk"

# prompt (assuming md_resume and job_desciption have been defined)
prompt = f"""
I have a resume formatted in Markdown and a job description. \
Please adapt my resume to better align with the job requirements while \
maintaining a professional tone. Tailor my skills, experiences, and \
achievements to highlight the most relevant points for the position. \
Ensure that my resume still reflects my unique qualifications and strengths \
but emphasizes the skills and experiences that match the job description.

### Here is my resume in Markdown:
{md_resume}

### Here is the job description:
{job_desciption}

Please modify the resume to:
- Use keywords and phrases from the job description.
- Adjust the bullet points under each role to emphasize relevant skills and achievements.
- Make sure my experiences are presented in a way that matches the required qualifications.
- Maintain clarity, conciseness, and professionalism throughout.

Return the updated resume in Markdown format.

"""
# 堆代码 duidaima.com
# make api call
response = openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": prompt}
    ], 
    temperature = 0.25
)
    
# extract response
resume = response.choices[0].message.content
通过这种方式,你可以显著提升调整简历的效率,同时确保内容与职位需求高度匹配。
注意:
ChatGPT 在编写简短代码片段(以及提示词)时非常有用。如果在实现第 4 步时遇到困难,可以尝试用 ChatGPT 获取帮助。

2)YouTube 演讲摘要生成器(入门级)
虽然我喜欢将技术演讲视频添加到 YouTube 的“稍后观看”列表,但可能很久都不会真正去看它们 😅。为了解决这个问题,可以开发一个工具,代替我“观看”这些视频,并生成简洁的摘要和关键要点。

以下是实现方法:
1.使用正则表达式从视频链接中提取 YouTube 视频 ID。
2.使用 youtube-transcript-api 根据视频 ID 提取转录文本。
3.设计不同的 ChatGPT 提示词,有效地将转录内容总结为简洁摘要。

4.使用 OpenAI 的 Python API 将整个流程自动化。


所需库:openai、youtube-transcript-api
从技术角度来看,这个项目与第一个项目非常相似,但一个重要的区别是这里需要自动提取视频的转录文本,并将其输入到 LLM 中进行处理。
以下是实现转录提取的代码示例:
import re
from youtube_transcript_api import YouTubeTranscriptApi

youtube_url = "video link here"

# extract video ID with regex
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

# extract transcript
text_list = [transcript[i]['text'] for i in range(len(transcript))]
transcript_text = '\n'.join(text_list)
通过这种工具,你可以快速生成技术演讲的摘要和要点,大幅提高信息获取的效率。

3)自动整理 PDF 文件(中级)
我的 “稍后观看” 播放列表并不是唯一一个堆积技术信息的地方。另一个“藏身处”是我的桌面,它上面堆积了 118 篇研究论文。逐一查看这些论文过于耗时,让我们看看 AI 如何帮忙。可以构建一个工具,分析桌面上每篇 PDF 的内容,并根据主题将它们整理到不同的文件夹中。具体来说,文本嵌入技术可以将每篇论文转化为密集的向量表示,然后利用传统的机器学习算法(如 K-Means 聚类)将相似的文章分组。

以下是更详细的实现步骤:
1.使用 PyMuPDF 读取每篇研究论文的摘要。
2.利用 sentence-transformers 库将摘要转化为文本嵌入,并将嵌入存储在 Pandas DataFrame 中。
3.使用 sklearn 中你喜欢的聚类算法,根据相似性对嵌入进行分组。

4.为每个聚类创建一个文件夹,并将相应的文件移动到对应的文件夹中。


所需库:PyMuPDF、sentence_transformers、pandas、sklearn
这个项目的关键步骤是生成文本嵌入。以下是使用 sentence_transformers 实现这一功能的代码示例:
from sentence_transformers import SentenceTransformer
# load embedding model
model = SentenceTransformer("all-MiniLM-L6-v2")
# store abstracts in a list
abstract_list = ["abstract 1", "abstract 2"]
# calculate embeddings
embeddings = model.encode(abstract_list)
通过此工具,你可以快速整理并分类大量技术论文,轻松管理和查找所需的文档内容。

4)多模态搜索工具(中级)
几个月前,我协助一家企业为一组技术报告创建了一个基础的 RAG(检索增强生成)系统。在搜索这些报告时,一个主要挑战是关键信息通常以图表而非文本的形式呈现。将这些视觉信息纳入搜索过程的一种方法是使用多模态嵌入模型,将文本和图像表示在同一个向量空间中。

以下是项目的基本实现步骤:
1.使用 PyMuPDF 将 PDF 分块成多个部分,并提取其中的图像。
2.利用多模态嵌入模型(例如 nomic-ai/nomic-embed-text-v1.5)将文本块和图像转化为密集向量,并存储在 DataFrame 中。
3.对知识库中的所有 PDF 重复上述步骤。
4.用户查询时,将其输入与知识库相同的嵌入模型,生成查询的向量表示。
5.计算查询向量与知识库中每一项向量之间的余弦相似度。

6.返回相似度得分最高的前 k 个结果。


所需库:PyMuPDF、transformers、pandas、sklearn
项目中最重要的一步是如何对 PDF 进行分块。最简单的方法是使用固定字符数进行分块,并在相邻分块间保持一定的重叠。同时,记录元数据(如文件名和页码)也非常有用。以下是实现分块和图像提取的基础代码(感谢 ChatGPT 提供的片段)。如果遇到困难,可以尝试用 ChatGPT 提取图像的代码:
import fitz  # PyMuPDF

def extract_text_chunks(pdf_path, chunk_size, overlap_size):
    # Open the PDF file
    pdf_document = fitz.open(pdf_path)
    chunks = []

    # Iterate through each page in the PDF
    for page_num in range(len(pdf_document)):
        page = pdf_document[page_num]
        page_text = page.get_text()

        # Split the text from the current page into chunks with overlap
        start = 0
        while start < len(page_text):
            end = start + chunk_size
            chunk = page_text[start:end]

            # Store the page number with the chunk
            chunks.append((page_num + 1, chunk))
            # Move to the next chunk with the overlap
            start += chunk_size - overlap_size
    
    return chunks

# Parameters for extraction
pdf_path = "your_file.pdf"
chunk_size = 1000  # Size of each text chunk in characters
overlap_size = 200  # Overlap size in characters

text_chunks = extract_text_chunks_with_page_numbers(pdf_path, chunk_size, overlap_size)

# Display the chunks with page numbers
for i, (page_number, chunk) in enumerate(text_chunks):
    print(f"Chunk {i + 1} (Page {page_number}):\n{chunk}\n{'-' * 50}")
通过这种多模态搜索工具,你可以显著提升在技术报告、研究论文等复杂文档中查找关键内容的效率。将图表和文本结合起来,可以更全面地捕捉有价值的信息。

5)知识库问答系统(高级)
在过去的一年中,我帮助近 100 家企业和个人构建了 AI 项目。其中最常被问及的项目是文档问答系统。在前一个项目(多模态搜索工具)的基础上,我们可以以相对简单的方式实现这一功能。如果已经将文档分块并存储在 DataFrame 中,那么可以将多模态搜索工具升级为一个多模态 RAG(检索增强生成)系统。

实现步骤:
1.在知识库中执行搜索(类似于项目 4 中实现的工具)。
2.将用户查询与前 k 个搜索结果结合,并将它们输入多模态模型。
3.使用 Gradio 创建一个简单的用户界面,实现问答系统的交互功能。
所需库:PyMuPDF、transformers、pandas、sklearn、together/openai、Gradio

注意:通过 Together AI 的 API,Llama 3.2 Vision 可免费使用至 2025 年。
这个项目本质上是项目 2(演讲摘要生成)和项目 4(多模态搜索工具)的结合。但它新增了一个至关重要的部分:用户界面。可以使用如 Gradio 这样的仪表板工具,仅需几行代码即可创建一个简洁的聊天界面。

以下是从 Gradio 文档中改编的示例代码片段:
import gradio as gr
import time

def generate_response(message, history):
    """
        Your code for generating a response
    """
    return response

demo = gr.ChatInterface(
    fn=generate_response, 
    examples=[{"text": "Hello", "files": []}], 
    title="Echo Bot", 
    multimodal=True)

demo.launch()
通过这种问答系统,用户可以轻松地查询知识库中的相关信息并获得直接的回答。这种多模态 RAG 系统结合了图像与文本处理能力,适用于技术文档、研究报告或企业内部知识库的复杂查询需求。

总结
多亏了像 ChatGPT 和 Cursor 这样的工具,现在快速构建 AI 项目变得前所未有的简单。几年前可能会让我卡住好几个小时甚至几天的问题,如今通过先进的编程助手,只需几分钟就能解决。最后的建议是,充分利用这些工具来加速学习,并在选择项目时勇敢尝试。寻找实际问题,并将项目的实现限定在一个周末的时间内完成。
用户评论