周末可以完成的 5 个 AI 项目

更新时间:2024/10/30, 23:19

图片来自 Canva。

发展你的 AI 技能最好的方法是通过构建项目。然而,如果你刚开始学习,想出_要构建什么_可能会很困难。在这里,我分享了 5 个 AI 项目,你可以在三个不同复杂度水平上快速构建。我将详细介绍实现每个想法所需的步骤和 Python 库。


初学者在考虑项目想法时犯的头号错误是从问题“我怎样才能使用这项新技术?”开始。虽然这可能是学习新工具的一种不错方式,但有更好的方法。

好的项目想法始于问题“我可以解决什么问题?”这不仅在与潜在雇主分享时有一个好故事,而且解决问题是如何将技术技能转化为价值的方法。

以下项目都采用了这种以问题为先的方法。你可以直接采纳这些想法并实施,或者(更好的是)将它们作为解决你个人面临问题的灵感。

1) 简历优化(初学者)

申请工作中一项有效但耗时的部分是根据不同职位描述调整你的简历。虽然自动化这项任务在几年前可能是一个高级项目,但在今天的大型语言模型的帮助下,只需进行一次API 调用就可以实现。

以下是实现这种自动化的详细步骤。

  1. 创建你的简历的 markdown 版本(_注意:ChatGPT 可以为你完成这一步)。

  2. 尝试不同的提示模板,这些模板接受你的 markdown 简历和职位描述,并输出一个新的 markdown 格式的简历。

  3. 使用 OpenAI 的 Python API 提示 GPT-4o-mini 以动态重写你的简历。

  4. 使用 markdownpdfkit 库将 markdown 文件转换为 HTML,然后转换为 PDF。

: openaimarkdownpdfkit

虽然我们可以直接使用 ChatGPT 来完成这个任务,但使用 Python 实现的好处是我们可以轻松扩展这个过程。以下是第 3 步的一些起始代码。

import openai
openai.api_key = "your_sk"

# 提示(假设 md_resume 和 job_desciption 已经定义)
prompt = f"""
我有一个用 Markdown 格式排版的简历和一个职位描述。\
请调整我的简历以更好地符合职位要求,同时保持专业的语气。调整我的技能、经验和\
成就,突出与该职位最相关的要点。确保我的简历仍然反映出我的独特资格和优势,\
但强调与职位描述匹配的技能和经验。

### 这是我的 Markdown 格式简历:
{md_resume}

### 这是职位描述:
{job_desciption}

请修改简历:
- 使用职位描述中的关键词和短语。
- 调整每个角色下的项目符号,以强调相关技能和成就。
- 确保我的经验以符合所需资格的方式呈现。
- 保持清晰、简洁和专业。

以 Markdown 格式返回更新后的简历。

"""

# 进行 API 调用
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
)
    
# 提取响应
resume = response.choices[0].message.content

注意:ChatGPT 在编写这样的短代码片段(和提示)时非常有帮助。如果遇到困难,请尝试用它来完成第 4 步。

2) YouTube 讲座摘要生成器(初学者)

尽管我喜欢将技术讲座添加到我的 YouTube “稍后观看”播放列表中,但可能要过一段时间我才会观看它们(如果我有机会的话 😅)。一个可以帮助我的项目是一个工具,可以代替我观看视频并生成简洁的摘要,包括关键要点。

以下是一种实现方法:

  1. 使用正则表达式从视频链接中提取 YouTube 视频 ID

  2. 使用视频 ID 提取转录文本,使用 youtube-transcript-api

  3. 尝试不同的 ChatGPT 提示,有效地总结转录文本

  4. 使用 OpenAI 的 Python API 自动化这个过程

: openaiyoutube-transcript-api

从技术角度来看,这与第一个项目非常相似。然而,一个关键区别是我们需要自动提取视频转录文本,然后将其输入到大语言模型中。

以下是一些用于此目的的起始代码。

import re
from youtube_transcript_api import YouTubeTranscriptApi

youtube_url = "video link here"

# 使用正则表达式提取视频 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

# 提取转录文本
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. 为每个聚类创建文件夹,并将文件移动到适当的文件夹中。

: PyMuPDFsentence_transformerspandassklearn

这个项目的关键步骤是生成文本嵌入。以下是使用 sentence_transformers 进行此操作的代码片段。

from sentence_transformers import SentenceTransformer

# 加载嵌入模型
model = SentenceTransformer("all-MiniLM-L6-v2")

# 将摘要存储在列表中
abstract_list = ["摘要 1", "摘要 2"]

# 计算嵌入
embeddings = model.encode(abstract_list)

4) 多模态搜索(中级)

几个月前,我帮助一家公司为一组技术报告创建了一个基本的RAG系统。搜索这些报告时的一个挑战是关键信息通常是以图表和图像而不是文本的形式呈现。

将这些视觉信息纳入搜索过程的一种方法是使用多模态嵌入模型,将文本和图像在一个共享空间中表示。

以下是一个基本的步骤:

  1. 给定一个 PDF,将其分成部分,并使用 PyMuPDF 提取图像

  2. 使用多模态嵌入模型(例如nomic-ai/nomic-embed-text-v1.5)将部分和图像表示为密集向量,并将它们存储在数据框中

  3. 对知识库中的所有 PDF 重复此过程

  4. 给定用户查询,通过与知识库使用的相同嵌入模型进行处理

  5. 计算查询嵌入与知识库中每个项目之间的余弦相似度分数

  6. 返回前 k 个结果

: PyMuPDFtransformerspandassklearn

这个项目最重要的部分是如何分块 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_with_page_numbers(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系统。

以下是步骤:

  1. 在知识库上执行搜索(就像在项目4中创建的那样)

  2. 将用户查询与前k个搜索结果结合起来,并将它们传递给多模态模型。

  3. 为问答系统创建一个简单的Gradio用户界面。

: PyMuPDFtransformerspandassklearntogetheropenaiGradio

注: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": "Hello", "files": []}], 
    title="Echo Bot", 
    multimodal=True)

demo.launch()

接下来做什么?

有了像ChatGPT和Cursor这样的工具,构建AI项目变得前所未有的快速。几年前让我困扰数小时(甚至数天)的事情,现在可以在几分钟内通过先进的编码助手解决。

我要给出的建议是利用这些工具更快地学习,在项目选择上勇敢尝试。对于项目,找到问题并将实现时间限制在一个周末内。 、、

AI奇想空间
AI奇想空间
https://aimazing.site
AI 奇想空间是一个汇聚人工智能工具、资源和教程的导航网站。 在这里,你可以发现最新的AI技术、工具和应用,学习如何使用各种 AI 平台和框架,获取丰富的 AI 资源。 欢迎广大 AI 爱好者加入我们的社区,开启你的AI之旅!
AI交流群
Copyright © 2024 AI奇想空间.微信