第 1 章 · 前置准备:Python 速成与环境配置
本章目标:让有传统编程背景(如 Java、前端)的读者,在最短时间内把 Python 跑起来、能读懂和改教程里的代码,并解决国内特有的环境坑。
如果你已经会 Python,直接跳到 1.4 看「国内环境配置」即可。
1.1 为什么是 Python
AI 应用开发的生态(SDK、框架、教程)九成在 Python。你不用担心——Python 语法比 Java 简单得多,有其他编程语言基础的人一到两天就能上手。本章不教你编程,只帮你"把已有的编程知识翻译成 Python"。
1.2 安装与环境
1. 装 Python
- 官网 https://www.python.org/downloads/ 下载 Python 3.11 或 3.12,Windows 安装时勾选 "Add python.exe to PATH"。
- 装完在终端验证:
python --version
# Python 3.12.x2. 建虚拟环境(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/simple1.3 Python 语法速成(以 Java 为例对照)
变量与类型:动态类型,不用声明
# Java: int age = 30; String name = "zhangsan";
age = 30 # 整数
name = "zhangsan" # 字符串
price = 2.5 # 浮点数
flag = True # 布尔(注意大写 True/False)
nothing = None # 相当于 nullPython 变量不用声明类型,类型在运行时决定。这是和 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三个新手最容易踩的坑
- 缩进:必须一致(建议全用 4 空格,别 Tab 空格混用)。
- 没有
++/--:用count += 1。 - 布尔是
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。