引言
在人工智能快速发展的今天,Python已经成为AI和数据科学领域事实上的标准编程语言。尽管存在零代码解决方案,但掌握Python编程仍然是构建完全自定义的AI项目和产品的关键技能。本文将为您提供一个面向初学者的Python AI开发快速入门指南,涵盖必要的基础知识,并通过实际的代码示例展示如何使用Python结合大语言模型(LLM)进行AI应用开发。
适合谁阅读
本文专为以下读者群体打造:
- 想要进入AI领域的编程新手
- 对Python和人工智能开发感兴趣的初学者
- 希望利用碎片时间学习AI编程的普通人
- 想要快速上手OpenAI API开发的开发者
我们将从Python基础知识开始,循序渐进地引导您完成一个简单但实用的AI项目。这不是一篇传统的全面Python教程,而是专注于帮助您快速掌握在AI时代必需的Python编程技能。
开发环境
在开始编写Python代码之前,我们需要一个合适的开发环境。Anaconda和Visual Studio Code (VSCode)是两个非常流行的工具,它们可以帮助我们更高效地编写和管理代码。
我之前的几篇文章对如何安装Anaconda和如何配置VSCode有详细的介绍,这里就只是简单的回顾一下。
安装Anaconda
Anaconda是一个开源的Python发行版,包含了许多有用的库和工具,特别适合数据科学和机器学习。以下是安装Anaconda的步骤:
- 访问Anaconda的官方网站:https://www.anaconda.com/products/distribution
- 根据你的操作系统(Windows、macOS或Linux)下载相应的安装程序。
- 运行下载的安装程序,并按照提示完成安装过程。安装过程中可以选择将Anaconda添加到系统PATH中,这样可以在命令行中直接使用
conda
命令进行包管理。
安装VSCode
Visual Studio Code (VSCode)是一个轻量级但功能强大的代码编辑器,支持多种编程语言和扩展。以下是安装VSCode的步骤:
- 访问VSCode的官方网站:https://code.visualstudio.com/
- 根据你的操作系统下载相应的安装程序。
- 运行下载的安装程序,并按照提示完成安装过程。
安装完成后,你可以通过以下步骤最小化配置VSCode以便更好地支持Python开发:
- 打开VSCode,点击左侧活动栏中的扩展图标(四个方块组成的图标)。
- 在搜索栏中输入"Python",找到由Microsoft提供的Python扩展并点击安装。
- 安装完成后,VSCode会提示你安装Python解释器。你可以选择Anaconda提供的Python解释器。
现在,你已经安装并配置好了Anaconda和VSCode,可以开始编写和运行Python代码了。
基础知识概览
Python数据类型详解
在AI编程中,理解和掌握Python的基本数据类型至关重要,以下是几种常用的数据类型:
字符串和数字
数据类型(或简称"类型")是 一种对数据进行分类的方法,以便在计算机中以适当和高效的方式处理它。
类型由一组可能的值和操作定义。例如,字符串是 任意的字符序列,可以以特定的方式进行操作。试试在你的Python命令行实例中运行以下字符串。
print("this is a string")
print('so is this another string')
print("""and
this is string
too""")
print("we can even " + "add strings together")
可以看到,尽管字符串可以相加(即连接),但要注意它们不能与 整数(int) 或 浮点数(float,带小数的数字) 等数值数据类型相加。如果我们在Python中尝试这样做,会收到一条错误信息,因为操作仅对兼容类型有效。
# 我们不能将字符串与其他数据类型相加,这会引发错误(顺便说一句,这就是如何在Python中编写注释)
try:
result = "I am " + 29
except TypeError as e:
print(e)
# 所以我们必须将29写成字符串
result = "I am " + "29"
print(result)
列表和字典
除了字符串、整数和浮点数等基本类型,Python还有用于构造更大数据集合的类型。
一种常用的类型是 列表,它是 值的有序集合。我们可以有字符串列表、数字列表、字符串和数字的混合列表,甚至是列表的列表。
print(["x", "y", "z"])
print([4, 5, 6])
print(["hello", 42, 7.89])
print([["cat", "dog"], [3, 4], [5.0, 6.0]])
另一种常用的数据类型是 字典,它由 键值对序列 组成,其中 键是字符串,而 值可以是任何数据类型。这是一种表示具有多个属性的数据的好方法。
user1 = {"Name": "Alex"}
print(user1)
user2 = {"Name": "Alex", "Age": 30, "Interests": ["Photography", "Travel", "Cooking"]}
print(user2)
users = [
{"Name": "Alex", "Age": 30, "Interests": ["Photography", "Travel", "Cooking"]},
{"Name": "Jamie", "Age": 25, "Interests": ["Gaming", "Reading", "Hiking"]}
]
print(users)
user_details = {
"User": {"Name": "Alex", "Age": 30, "Interests": ["Photography", "Travel", "Cooking"]},
"Last_login": "2024-10-01",
"Membership_Tier": "Premium"
}
print(user_details)
变量
到目前为止,我们已经看到了Python的一些基本数据类型和操作。大家也可能注意到我们把字符串或者字典的值赋值给了等号左边的一个单词,并使用print打印出来。这个单词就是变量。
变量 提供了 底层数据类型实例的抽象表示。例如,我可能会创建一个名为user_name的变量,它代表一个包含我名字"Jimmy"的字符串。这使我们能够编写不局限于特定值的灵活程序。
user_name = "Jimmy"
print(user_name)
我们可以对其他数据类型(例如整数和列表)执行相同的操作。
user_age = 29
user_interests = ["AI", "Music", "Bread"]
print(f"{user_name} is {user_age} years old. His interests include {user_interests}.")
这段代码执行后会输出:
Jimmy is 29 years old. His interests include ['AI', 'Music', 'Bread'].
在这段代码中,user_name
被赋值为"Jimmy"
,user_age
被赋值为29
,而user_interests
是一个包含三个字符串的列表:"AI"
、"Music"
和"Bread"
。print
函数使用了f-string格式化字符串,将这些变量的值插入到输出字符串中,所以使用起来非常方便。
创建脚本
现在我们的示例代码片段越来越长,让我们看看如何创建第一个脚本。这就是我们编写和执行更复杂的程序的开始。
为此,请在你的计算机上创建一个新文件夹,可以将其命名为python-example。由于我们已经安装了VSCode这个强大的IDE,接下来就让我们用它来创建和运行第一个Python程序。
以下是具体步骤:
- 打开VSCode
- 选择"File > Open Folder"(文件 > 打开文件夹),选择我们刚创建的python-example文件夹
- 在左侧资源管理器中右键点击,选择"New File"(新建文件),创建一个名为
example.py
的文件 - 在文件中输入我们的第一个Python程序:
print("Hello, world!")
如下图所示,运行这个程序有几种方式:
- 点击编辑器右上角的运行按钮(绿色三角形)
- 右键点击编辑器,选择"Run Python File in Terminal"
- 使用快捷键F5
VSCode会在底部打开集成终端并显示程序的输出。
使用VSCode的优势在于:
- 智能代码补全和提示
- 语法高亮显示
- 集成的调试工具
- 集成终端
- Git版本控制支持
- 丰富的扩展生态系统
这些功能可以大大提高我们的编程效率,之后我也会根据具体项目一一介绍。随着对Python的深入学习,这些功能会变得越来越有用。
循环和条件
Python的两个基本的代码流程控制语句是循环和条件。
循环语句 允许我们 多次运行特定代码块。最流行的是 for循环,它在遍历变量时运行相同的代码。
for i in range(3):
print(i * 2)
user_hobbies = ["Reading", "Traveling", "Cooking"]
for hobby in user_hobbies:
print(hobby.upper())
user_info = {"FirstName": "Alex", "Age": 35, "Hobbies": ["Reading", "Traveling", "Cooking"]}
for attribute, detail in user_info.items():
print(attribute, ":", detail)
另一个是 条件语句,例如if-else语句,它们 使我们能够控制程序的走向。例如,我们可能想检查用户是否达到了喝酒的年龄,或者是否是历史人物。
if user_info["Age"] >= 21:
print("User can legally drink alcohol")
if user_info["Age"] >= 500:
print("User is ancient")
else:
print("User is still young")
在for循环中使用条件语句是很常见的,以根据特定条件应用不同的操作,例如计算对烹饪感兴趣的用户数。
user_list = [{"Name": "Jimmy", "Age": 29, "Interests": ["AI", "Music", "Cooking"]},
{"Name": "Amy", "Age": 27, "Interests": ["Marketing", "YouTube", "Shopping"]},
{"Name": "Alex", "Age": 35, "Interests": ["Reading", "Traveling", "Cooking"]}]
cooking_lovers = []
for user in user_list:
if "Cooking" in user["Interests"]:
cooking_lovers.append(user["Name"])
print(len(cooking_lovers), "user(s) interested in Cooking:", cooking_lovers)
函数
函数 是 我们可以在特定数据类型上执行的可重用操作。
我们在之前的代码中已经看到一个基本函数print(),它可以打印很多数据类型。当然,还有一些其他类似的Python内置函数。比如下面这段代码里的type()函数,它的作用是返回变量的数据类型。
for key in user_info.keys():
print(key, ":", user_info[key])
for key in user_info.keys():
print(key, ":", type(user_info[key]))
下表是一些常用的Python内置函数:
虽然Python内置函数很有帮助,但Python真正的力量来自创建 用户定义函数 以 执行自定义操作。此外,自定义函数使我们能够编写更简洁的代码。例如,以下这个函数的作用是返回一个描述用户信息的字符串。这样我们每次想打印用户信息的时候,只需要调用这个函数,而不需要每次都写一遍代码。
def user_description(user_info):
"""
Function to return a sentence (string) describing input user
"""
return f'{user_info["FirstName"]} is {user_info["Years"]} years old and is interested in {user_info["Hobbies"][0]}.'
print(user_description(user_info))
使用Conda管理Python软件包
虽然我们可以使用Python实现任意程序,但对于某些用例来说,这可能非常耗时。Python的一个优势是其 活跃的开发者社区和强大的软件包生态系统。几乎任何你想用Python实现的东西都可能已经作为开源库存在。
由于我们使用的是Anaconda,我们可以使用其包管理器conda来安装这些包。要安装新的软件包,我们只需要在命令行运行conda命令。以下是如何安装numpy,一个实现基本数学对象和操作的重要数据科学库:
conda install numpy
安装numpy后,我们可以使用import语句将其导入到新的Python脚本中,并使用其数据类型和函数:
import numpy as np
v = np.array([1, 3, 6])
print(v)
print(2*v)
X = np.array([v, 2*v, v/2])
print(X)
print(np.matmul(X, v))
这里我们是使用conda命令将numpy添加到我们的基础Python环境中。不过,最佳实践是创建所谓的虚拟环境。虚拟环境的好处是可以为不同项目创建独立的Python环境,以避免软件包的冲突,也便于项目之后的发布。
以下是如何使用conda创建一个名为py312的新虚拟环境:
conda create --name py312 python=3.12
然后,我们可以激活它:
conda activate py312
最后,我们可以在这个环境中安装所需的包:
conda install numpy
使用conda的一个主要优势是它可以同时处理Python包及其依赖项,这使得环境管理更加可靠。你可以使用以下常用命令来管理你的conda环境:
conda env list # 列出所有环境
conda list # 显示当前环境中的所有包
conda env remove -n py312 # 删除环境
当然,既然我们的方向是AI开发,那还有其他一些常用的AI和数据科学库。以下是构建AI项目时一些可能用到的Python库。
实战项目:智能论文分析工具
为了将理论知识付诸实践,我们将开发一个简单实用的AI应用:使用Python和OpenAI API创建一个智能论文分析工具,这个工具可以根据论文内容生成简单的摘要和五个关键词。这个项目将帮助你:
- 学习如何调用OpenAI API
- 理解Python文件处理
- 掌握基本的AI应用开发流程
- 实践Python编程基础知识
安装依赖项
要运行此示例代码,我们需要安装几个库,包括openai
、PyPDF2
和python-dotenv
。由于某些包可能不在conda的默认channel中,我们需要添加conda-forge channel来安装它们。使用以下命令进行安装:
conda config --add channels conda-forge
conda install openai PyPDF2 python-dotenv
设置OpenAI API密钥
我们需要一个OpenAI API密钥来访问GPT模型。你可以通过OpenAI的官网注册并获取API密钥。
为了安全起见,我们将密钥存储在一个.env
文件中。创建一个名为.env
的文件,并添加以下内容:
OPENAI_API_KEY=你的_API_密钥
代码实现
以下是完整的Python脚本,用于从PDF研究论文中提取摘要和关键词:
import os
from openai import OpenAI
from PyPDF2 import PdfReader
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 定义函数以从PDF中提取文本
def extract_text_from_pdf(pdf_path):
reader = PdfReader(pdf_path)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
# 定义函数以生成摘要和关键词
def summarize_and_extract_keywords(text):
prompt = f"""
请为以下文本生成一个简洁的摘要,并提取五个关键词:
{text}
"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "你是一个专业的文档摘要生成器"},
{"role": "user", "content": prompt}
],
max_tokens=500,
temperature=0.5,
)
return response.choices[0].message.content.strip()
# 主函数
def main():
pdf_path = "sample.pdf" # 替换为你的PDF文件路径
print("正在从PDF中提取文本...")
text = extract_text_from_pdf(pdf_path)
print("正在生成摘要和关键词...")
result = summarize_and_extract_keywords(text)
print("结果:")
print(result)
if __name__ == "__main__":
main()
运行代码
将上述代码保存为一个Python文件(例如summarizer.py
),并确保你的PDF文件位于相同的目录中。然后在终端中运行以下命令:
python summarizer.py
如果一切顺利,你将看到从PDF提取的文本摘要和关键词。
代码详解
下面详细解释这段代码的结构和工作原理。
整体架构
这个程序主要由三个部分组成:
- 环境设置和依赖导入
- 核心功能函数
- 主程序入口
环境设置和依赖导入
import os
from openai import OpenAI
from PyPDF2 import PdfReader
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
这部分代码导入了我们需要的库:
os
: Python的标准库,用于处理操作系统相关的功能openai
: OpenAI的Python客户端库PyPDF2
: 用于读取PDF文件dotenv
: 用于从.env文件加载环境变量
核心功能函数
程序包含两个主要的功能函数:
- PDF文本提取函数:
def extract_text_from_pdf(pdf_path):
reader = PdfReader(pdf_path)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
这个函数使用PyPDF2库来读取PDF文件并提取其中的文本内容。它会遍历PDF的每一页并将文本拼接在一起。
- 摘要生成函数:
def summarize_and_extract_keywords(text):
prompt = f"""
请为以下文本生成一个简洁的摘要,并提取五个关键词:
{text}
"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "你是一个专业的文档摘要生成器"},
{"role": "user", "content": prompt}
],
max_tokens=500,
temperature=0.5,
)
return response.choices[0].message.content.strip()
这个函数使用OpenAI的API来生成文本摘要和提取关键词,这里我们调用gpt-4o-mini来完成任务。它的工作方式是:
- 构建一个提示语(prompt)
- 使用OpenAI的chat completions API发送请求
- 获取API的响应并返回生成的内容
主程序入口
def main():
pdf_path = "sample.pdf" # 替换为你的PDF文件路径
print("正在从PDF中提取文本...")
text = extract_text_from_pdf(pdf_path)
print("正在生成摘要和关键词...")
result = summarize_and_extract_keywords(text)
print("结果:")
print(result)
if __name__ == "__main__":
main()
主程序使用了Python的标准程序入口模式。if __name__ == "__main__":
这行代码确保主函数只在直接运行这个Python文件时才会执行,而在作为模块导入时不会执行。
主函数的执行流程是:
- 指定PDF文件路径
- 调用PDF文本提取函数
- 使用提取的文本调用摘要生成函数
- 打印结果
总结
到这里,我们已经可以使用 Python 和 LLM 来处理一些实际问题了。在本文中,我们学习了 Python 的基础知识,并通过一个简单的 AI 项目展示了如何使用 Python 和 OpenAI API 来进行文档摘要和关键词提取。虽然只是很短的时间,但是我相信大家已经对 Python和LLM有了一个初步的了解,也可以开始享受AI编程时代的乐趣了。接下来,大家可以进一步探索 Python 的强大功能,并构建更复杂的 AI 应用。