这个周末你可以用 Python 实现的 5 个 AI 项目

图片来自 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 的一些起始代码。

进口openai 
openai.api_key =“你的 sk”

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

### 以下是我的 Markdown 简历:
{md_resume}

### 以下是职位描述:
{职位描述}

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

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

"""
    
# 进行 API 调用
响应 = openai.chat.completions.create(
    模型=“GPT-4O-迷你”,
    消息=[ 
        {“角色”:“系统”,“内容”:“你真是一个得力助手。”},
        {“角色”:“用户”,“内容”: 提示} 
    ],
    温度 =0.25
)
    
# 提取响应
简历 = 响应.选择[0].消息.内容

注意:ChatGPT 对于编写此类简短代码片段(和提示)非常有用。如果您遇到困难,请尝试第 4 步。

2)YouTube 讲座总结(初学者)

虽然我喜欢将技术讲座添加到我的 YouTube“稍后观看”播放列表中,但可能要过一段时间才能观看它们(如果我有时间的话😅)。一个可以帮助我实现这一点的项目是一个可以帮我观看视频并生成包含要点的简明摘要的工具。

以下是一种方法:

  1. 使用正则表达式从视频链接中提取 YouTube 视频 ID
  2. 使用视频 ID 通过youtube-transcript-api提取成绩单
  3. 尝试使用不同的 ChatGPT 提示来有效地总结文字记录
  4. 使用 OpenAI 的 Python API 来自动化该过程

openaiyoutube-transcript-api

从技术角度来看,这与第一个项目非常相似。然而,一个关键的区别是,我们需要自动提取视频记录,并将其输入到 LLM 中。

这是一些启动代码。

从youtube_transcript_api导入re导入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 

# 提取成绩单
text_list = [transcript[i][ 'text' ] for i in  range ( len (transcript))] 
transcript_text = '\n' .join(text_list)

3)自动组织 PDF(中级)

我的“稍后观看”播放列表并不是我储存技术信息的唯一地方。另一个储存空间是我的桌面,上面堆满了 (118) 篇研究论文。由于手动审查这些论文会 (非常) 耗时,让我们看看人工智能可以如何提供帮助。

可以构建一个工具来分析我桌面上每个 PDF 的内容,并根据主题将它们组织到文件夹中。文本嵌入可以将每篇论文转化为密集的向量表示,然后可以使用 K-Means 等传统机器学习算法对类似的文章进行聚类。

以下是更详细的分类:

  1. 使用PyMuPDF阅读每篇研究文章的摘要
  2. 使用sentence-transformers库将摘要转换为文本嵌入并将其存储在 Pandas DataFrame 中
  3. 使用你最喜欢的 sklearn 聚类算法,根据相似性对嵌入进行分组
  4. 为每个集群创建文件夹并将文件移动到适当的文件夹中。

PyMuPDF sentence_transformerspandassklearn

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

从 sentence_transformers 导入 SentenceTransformer

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

# 将摘要存储在列表中
abstract_list = [ "abstract 1" , "abstract 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 提供)。如果您遇到困难,请尝试让它提取图像。

导入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 - override_size 
    
    return chunks 

# 提取的参数
pdf_path = "your_file.pdf"
 chunk_size = 1000   # 每个文本块的大小(以字符为单位)
 override_size = 200   # 重叠大小(以

字符为单位) text_chunks = extract_text_chunks_with_page_numbers(pdf_path, chunk_size, override_size) 

# 显示带有页码的块
for i, (page_number, chunk) in 枚举(text_chunks):
    打印(f“块{i + 1 }(第{page_number}页):\n {chunk} \n { '-' * 50 } ”)

5)知识库问答(高级)

在过去的一年里,我帮助了近 100 家企业和个人建立 AI 项目。到目前为止,人们最常问到的项目是文档问答系统。在之前项目的基础上,我们可以用一种直接的方式实现它。

如果我们已经将文档分块并存储在 DataFrame 中,我们可以将多模式搜索工具转换为多模式 RAG 系统。

步骤如下:

  1. 对知识库进行搜索(例如在项目 4 中创建的搜索)
  2. 结合用户查询与前 k 个搜索结果并将其传递给多模式模型。
  3. 为 QA 系统创建一个简单的 Gradio 用户界面。

图书馆 PyMuPDFtransformerspandassklearn together / openaiGradio

注意:Llama 3.2 Vision 通过 Together AI 的 API 可免费使用至 2025 年

该项目本质上结合了项目 2 和 4。但是,它包含用户界面的基本组件。为此,我们可以使用Gradio之类的仪表板工具,它允许我们用几行代码创建聊天 UI

这是根据 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 项目从未如此简单。几年前,一些问题会让我困扰数小时(甚至数天),而现在,借助高级编码助手,这些问题只需几分钟即可解决。

我的临别建议是使用这些工具来更快地学习,并大胆选择项目。对于项目,找到问题并将实施时间限制在周末。

给TA打赏
共{{data.count}}人
人已打赏
AI工具AI技巧

LobeChat:一键免费部署自己的私有聊天机器人 你能想到的功能它都有

2024-6-25 15:02:38

AI新闻AI科普

既然我们有了 LLM 和 RAG,为什么还需要 AI Agent?

2024-5-27 22:28:18

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
今日签到
有新私信 私信列表
搜索