ToolBox

AI 应用开发实战教程

第 1 章 · 前置准备:Python 速成与环境配置

2/9
教程/AI 应用开发实战教程/第 1 章 · 前置准备:Python 速成与环境配置
2 节 / 共 9 AI 应用开发实战教程

第 1 章 · 前置准备:Python 速成与环境配置

第 1 章 · 前置准备:Python 速成与环境配置

本章目标:让有传统编程背景(如 Java、前端)的读者,在最短时间内把 Python 跑起来、能读懂和改教程里的代码,并解决国内特有的环境坑。

如果你已经会 Python,直接跳到 1.4 看「国内环境配置」即可。


1.1 为什么是 Python

AI 应用开发的生态(SDK、框架、教程)九成在 Python。你不用担心——Python 语法比 Java 简单得多,有其他编程语言基础的人一到两天就能上手。本章不教你编程,只帮你"把已有的编程知识翻译成 Python"。


1.2 安装与环境

1. 装 Python

python --version
# Python 3.12.x

2. 建虚拟环境(venv,相当于隔离的依赖空间)

Python 的依赖如果都装到全局,不同项目会互相污染。所以每个项目建一个 venv(类比 Java 里每个项目独立的 classpath):

# 在项目目录下执行
python -m venv .venv

# 激活(Windows)
.venv\Scripts\activate

# 激活后命令行前面会出现 (.venv),表示已进入虚拟环境

之后所有 pip install 都在激活后的 venv 里装。养成习惯:每个项目一个 venv,别装全局。

3. pip 换国内源(关键,否则下载很慢甚至失败)

pip 默认从国外 PyPI 拉包,国内很慢。换清华源,一劳永逸:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

或者单次安装时临时指定:

pip install openai -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 Python 语法速成(以 Java 为例对照)

变量与类型:动态类型,不用声明

# Java:  int age = 30;  String name = "zhangsan";
age = 30                # 整数
name = "zhangsan"       # 字符串
price = 2.5             # 浮点数
flag = True             # 布尔(注意大写 True/False)
nothing = None          # 相当于 null

Python 变量不用声明类型,类型在运行时决定。这是和 Java 最大的手感差异。

列表 / 字典 / 元组(最常用的三种容器)

# 列表 list ≈ Java 的 ArrayList,可变、可放任意类型
nums = [1, 2, 3]
nums.append(4)          # 追加
print(nums[0])          # 索引从 0 开始
print(nums[-1])         # 负数索引 = 倒数,这里是 4
print(nums[1:3])        # 切片:取索引 1~2,得 [2, 3]

# 字典 dict ≈ Java 的 HashMap / Map
user = {"name": "zhangsan", "age": 30}
print(user["name"])      # 取值
user["city"] = "深圳"    # 加键值对

# 元组 tuple:不可变列表,很少直接用,知道即可
point = (1, 2)

控制流:缩进代替大括号

Python 用缩进表示代码块,没有 {} 这是有 Java 经验的人最需要适应的点——缩进错了,代码就是错的。

# Java: if (x > 0) { ... }
if age >= 60:
    print("退休")           # 缩进 4 空格,属于 if 块
elif age >= 18:
    print("成年")
else:
    print("未成年")

# for 循环(和 Java 的 for-each 类似,直接遍历容器)
for n in [1, 2, 3]:
    print(n)

for i, name in enumerate(["玉米", "小麦"]):   # 需要下标时用 enumerate
    print(i, name)

# while 循环
count = 0
while count < 3:
    print(count)
    count += 1            # 注意:Python 没有 count++

函数:def 定义,参数灵活

# Java: public String add(int a, int b) { return ...; }
def add(a, b):
    return a + b

# 默认参数
def greet(name, title="工程师"):
    return f"你好,{title} {name}"

# **kwargs 接收任意关键字参数(Agent 工具调用里常见)
def run_tool(**kwargs):
    print(kwargs)          # 打印出 {'grain_name': '玉米'}

run_tool(grain_name="玉米")

f-string:字符串插值(最常用,务必会)

name = "玉米"
weight = 5000
# f 前缀 + 花括号里放变量,比 Java 的字符串拼接清爽得多
s = f"{name} 入库 {weight} 公斤"
print(s)   # 玉米 入库 5000 公斤

类:能看懂就行

class Grain:
    def __init__(self, name, weight):   # 构造方法,注意是 __init__
        self.name = name                # self 相当于 Java 的 this
        self.weight = weight

    def info(self):
        return f"{self.name}: {self.weight}kg"

g = Grain("玉米", 5000)
print(g.info())

import:导入机制

import os                          # 导入整个模块
from openai import OpenAI          # 从模块导入某个类/函数
import json                        # 标准库

# 本教程里你会反复见到:
from openai import OpenAI
from pydantic import BaseModel
from sentence_transformers import SentenceTransformer
import chromadb

三个新手最容易踩的坑

  1. 缩进:必须一致(建议全用 4 空格,别 Tab 空格混用)。
  2. 没有 ++/--:用 count += 1
  3. 布尔是 True/False(首字母大写),不是 true/false;空值是 None,不是 null

1.4 国内环境配置(重点,第 4 章用得到)

第 4 章会用到 sentence-transformers 加载中文 Embedding 模型(BGE)。这个模型默认从 HuggingFace(huggingface.co)下载,国内经常连不上或极慢。

解决办法:设一个环境变量,让 HuggingFace 走国内镜像:

# 在代码最开头、import 任何模型之前加上这两行
import os
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"

# 然后再加载模型
from sentence_transformers import SentenceTransformer
embedder = SentenceTransformer("BAAI/bge-small-zh-v1.5")

或者在命令行(Git Bash)里临时设置:

export HF_ENDPOINT=https://hf-mirror.com

如果镜像也慢,可以手动下载模型到本地,再让代码从本地路径加载:

embedder = SentenceTransformer("D:/models/bge-small-zh-v1.5")  # 本地目录

1.5 自测:确认环境就绪

把下面这段保存成 check.py 跑一遍,全绿就说明环境 OK,可以正式进入第 2 章:

# check.py
import sys
print("Python 版本:", sys.version.split()[0])

def add(a, b):
    return a + b

nums = [1, 2, 3]
info = {"name": "zhangsan", "role": "工程师"}
print(f"自测通过:{add(1, 2)},列表长度 {len(nums)},我是 {info['name']}")

# 下面这行留到第 3 章再取消注释(需要先装 openai 并填 key)
# from openai import OpenAI

运行:

python check.py

看到 自测通过:3,列表长度 3,我是 zhangsan 就对了。


本章小结

  • 装 Python 3.11+,每个项目建 venv,pip 换清华源。
  • Python 是动态类型、缩进定代码块、没有 ++True/False/None
  • 会用 list/dict、for 循环、f-string、def 函数,就够读懂本教程全部代码。
  • 第 4 章之前,一定把 HF_ENDPOINT 镜像配好,否则 Embedding 模型下载会卡死。

下一步:进入第 2 章,搞懂大模型到底是什么,学会写 Prompt。