
你可能听过 “编程”“代码”,但不知道它们到底是什么 —— 其实编程就是「人类用计算机能懂的 “极简语言”,给计算机写 “任务清单”」。
举个类比:你给室友写了一张家务清单 ——「1. 倒垃圾 2. 买奶茶 3. 擦桌子」,室友能看懂并执行;编程就是给计算机写一张 **“计算机能看懂的清单”**:比如让计算机重复说 3 次 “我在学习 Python+LLM”,用 Python(最接近人类语言的计算机语言)写出来是:
# 这是给人类看的“注释”(说明代码的作用,计算机不会执行)
for i in range(3): # 让计算机“重复做3次”
print("我在学习Python+LLM") # 让计算机“说这句话”这段代码的逻辑和人类的 “重复 3 次 XX” 完全一致,这就是 Python 的核心优势:小白能直接看懂,无需复杂的专业背景。
LLM 是「大语言模型(Large Language Model)」的缩写,你可以把它理解成一个 “看过几千万亿文本的超级管家”:
但 LLM 有个核心 “小秘密”:它不会直接 “读” 汉字 / 英文,会把所有文本拆成「语义小片段(业内叫Token)」—— 比如 “我是电商客服” 会拆成['你', '是', '电', '商', '客', '服', ',', '我', '想', '了', '解']这类语义单元,再把每个片段转换成计算机能懂的数字编码。这个 “拆分成 Token 再编码” 的过程,是 LLM 能 “理解” 文本的底层逻辑—— 我们后面会用 Python 代码可视化这个过程,让你直观看到 LLM 的 “思维方式”。
全球 90% 以上的 LLM 开发(包括 ChatGPT、文心一言的后端)都用 Python,核心原因有 3 个:
transformers/openai等现成的工具库,无需从零写 LLM 调用逻辑;Win+R输入cmd打开命令行,输入python --version,显示「Python 3.11.8」则安装成功。python3 --version,显示「Python 3.11.8」则安装成功。sudo apt update && sudo apt install python3.11 python3-pip(Ubuntu/Debian 系统);python3 --version,显示「Python 3.11.8」则安装成功。IDE 是「集成开发环境」,是写 Python 代码的 “专业编辑器”,我们选择PyCharm 社区版(免费、功能足够满足 LLM 开发):
D:\LLM-Python-Study),点击「Create」创建项目;默认的 Python 库下载地址在国外,速度很慢,我们先配置国内清华镜像源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple;pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple。然后安装 LLM 开发必须的transformers 库(用来可视化 LLM 的 Token 机制):
pip install transformers;pip3 install transformers。安装完成后,在 PyCharm 中新建一个test_llm.py文件,输入以下代码验证:
from transformers import AutoTokenizer # 导入LLM工具包中的Token可视化工具
print("LLM库安装成功!")点击 PyCharm 右上角的「Run」按钮,输出「LLM 库安装成功!」则配置完成。
注释是给人类看的代码说明,计算机不会执行,是 LLM 开发中保证代码可维护的核心(比如记录 Prompt 的设计思路、API 参数的含义)。Python 支持两种注释:
#开头)用于简短说明单句代码的作用,LLM 开发中常用于标注变量、函数的含义:
# LLM的模型名称(ChatGPT的轻量版)
llm_model = "gpt-3.5-turbo"
# LLM的温度参数(0-2,0=严谨,2=随机)
llm_temperature = 0.7"""或'''包裹)用于详细说明一段代码的作用,LLM 开发中常用于标注复杂的 Prompt 模板设计思路、系统提示词的要求:
"""
多行注释:LLM系统提示词的设计要求
1. 身份:电商客服
2. 规则:仅回答商品相关问题
3. 风格:简洁明了,不超过20字
"""
system_prompt = "你是电商客服,仅回答商品相关问题,回答简洁。"变量是给数据起的 “外号”,不同类型的数据需要用不同的 “容器”(数据类型)存储,LLM 开发中仅用以下 4 种核心数据类型:
用于统计、计算的数值,分为两种:
token_limit = 4096(LLM 的上下文窗口限制,即最多处理 4096 个 Token)api_request_count = 100(LLM 的批量 API 请求次数)llm_temperature = 0.7(LLM 的随机性参数)product_price = 29.9(商品价格,用于生成带价格的 Prompt)LLM 场景示例代码:
# 整数:LLM上下文窗口限制(Token数量)
token_limit = 4096
# 浮点数:LLM温度参数(随机性)
llm_temperature = 0.7
# 浮点数:商品价格
product_price = 29.9
print("LLM上下文窗口限制:", token_limit)
print("LLM温度参数:", llm_temperature)
print("商品价格:", product_price)运行结果:
LLM上下文窗口限制: 4096
LLM温度参数: 0.7
商品价格: 29.9用于 ** 表示 “是 / 否”“真 / 假”** 的逻辑值,只有两个取值:True(真 / 是)和False(假 / 否),LLM 场景示例:
is_token_over_limit = True(判断 Prompt 的 Token 数量是否超过限制)is_api_request_valid = False(判断 LLM API 请求是否有效)LLM 场景示例代码:
# 布尔值:判断Prompt的Token数量是否超过限制
is_token_over_limit = False
# 布尔值:判断LLM API请求是否有效
is_api_request_valid = True
print("Token是否超限:", is_token_over_limit)
print("API请求是否有效:", is_api_request_valid)运行结果:
Token是否超限: False
API请求是否有效: True用于存储文本的数据类型,用""或''包裹,是 LLM 开发中最常用的数据类型—— 所有的 Prompt、用户提问、LLM 回答都是字符串:
字符串基础操作(LLM 场景必用):
单行字符串:user_question = "苹果15手机壳的发货时间"
多行字符串:用"""包裹,用于 LLM 的长 Prompt 模板:
# 多行字符串:LLM的长Prompt模板
long_prompt = """
你是电商客服,回答以下用户问题:
1. 仅回答商品相关问题
2. 回答要简洁明了
3. 包含商品价格信息
"""字符串拼接:用+或f-string拼接,用于动态生成 LLM Prompt:
# 变量:商品名称
product_name = "苹果15手机壳"
# 变量:用户问题
user_question = "发货时间"
# f-string动态拼接(推荐,Python 3.6+支持)
dynamic_prompt = f"帮我查询{product_name}的{user_question}"
print("动态生成的LLM Prompt:", dynamic_prompt)运行结果:
动态生成的LLM Prompt: 帮我查询苹果15手机壳的发货时间函数是把常用的重复操作 “打包成一个盒子”,需要时直接调用即可,LLM 开发中常用于封装重复的 Prompt 生成、Token 统计、API 参数构建逻辑,避免重复写代码。
函数的结构就像 “烤奶茶的机器”:
def:告诉计算机 “这是一个函数”函数名:机器的名称(比如make_milk_tea)参数:机器的 “原料入口”(比如tea_type/sugar)::函数的开始标志函数体:机器的 “操作步骤”(必须缩进)return:机器的 “成品出口”(返回结果)我们用函数封装 LLM 的 Prompt 生成逻辑,参数是product_name/user_question,返回值是full_prompt(完整的 LLM Prompt)和token_count(Prompt 的 Token 数量):
# 导入LLM Token统计工具
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")
# 定义函数:生成LLM的Prompt并统计Token数量
def generate_llm_prompt(product_name, user_question):
# 函数体1:生成系统提示词
system_prompt = "你是电商客服,仅回答商品相关问题,回答简洁。"
# 函数体2:生成用户提问Prompt
user_prompt = f"我想了解{product_name}的{user_question}"
# 函数体3:拼接完整的LLM Prompt
full_prompt = system_prompt + "\n用户:" + user_prompt + "\nLLM:"
# 函数体4:统计Token数量
token_count = len(tokenizer.tokenize(full_prompt))
# 返回结果(成品出口)
return full_prompt, token_count# 调用函数:查询苹果15手机壳的发货时间
prompt1, token1 = generate_llm_prompt("苹果15手机壳", "发货时间")
# 调用函数:查询华为Mate60手机壳的价格
prompt2, token2 = generate_llm_prompt("华为Mate60手机壳", "价格")
print("【苹果15手机壳的Prompt】:")
print(prompt1)
print("Token数量:", token1)
print("\n【华为Mate60手机壳的Prompt】:")
print(prompt2)
print("Token数量:", token2)【苹果15手机壳的Prompt】:
你是电商客服,仅回答商品相关问题,回答简洁。
用户:我想了解苹果15手机壳的发货时间
LLM:
Token数量: 42
【华为Mate60手机壳的Prompt】:
你是电商客服,仅回答商品相关问题,回答简洁。
用户:我想了解华为Mate60手机壳的价格
LLM:
Token数量: 41LLM 落地性:将生成的full_prompt直接复制到 ChatGPT / 文心一言等平台,即可获得符合要求的回答。
我们用transformers 库可视化 LLM 的 Token 拆分过程,让你直观看到 LLM 的 “思维方式”:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")
# LLM的完整Prompt
full_prompt = "你是电商客服,仅回答商品相关问题\n用户:苹果15手机壳的发货时间\nLLM:"
# 1. 拆分Prompt为Token
tokens = tokenizer.tokenize(full_prompt)
# 2. 转换为数字编码
token_ids = tokenizer.convert_tokens_to_ids(tokens)
# 3. 统计Token数量
token_count = len(tokens)
print("LLM拆分的Token:", tokens)
print("Token的数字编码:", token_ids)
print("Prompt的Token数量:", token_count)LLM拆分的Token: ['你', '是', '电', '商', '客', '服', ',', '仅', '回', '答', '商', '品', '相', '关', '问', '题', '用', '户', ':', '苹', '果', '15', '手', '机', '壳', '的', '发', '货', '时', '间', 'L', 'L', 'M', ':']
Prompt的Token数量: 34len(tokenizer.tokenize(prompt))可快速计算 Token 数量,这是 LLM 开发的 “必备技能”。我们用前面学的所有语法(注释、变量类型、函数)构建一个可复用的 LLM 智能客服 Prompt 系统,支持动态修改 LLM 身份、规则、商品名称、用户问题:
# 导入LLM Token统计工具
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")
"""
多行注释:LLM智能客服Prompt系统的设计要求
1. 功能:动态生成符合要求的LLM Prompt
2. 输入:LLM身份、规则、商品名称、用户问题
3. 输出:完整Prompt、Token数量、是否超限
"""
# -------------------------- 系统配置(可直接修改) --------------------------
# 布尔值:是否开启Token超限检查
check_token_limit = True
# 整数:Token限制
token_limit = 100
# -------------------------- 函数定义(打包核心逻辑) --------------------------
def create_kefu_prompt(llm_role, llm_rule, product_name, user_question):
# 生成系统提示词
system_prompt = f"你是{llm_role},{llm_rule}"
# 生成用户提问
user_prompt = f"我想了解{product_name}的{user_question}"
# 拼接完整Prompt
full_prompt = f"系统提示:{system_prompt}\n用户:{user_prompt}\nLLM:"
# 统计Token数量
token_count = len(tokenizer.tokenize(full_prompt))
# 判断是否超限
if check_token_limit:
is_over_limit = token_count > token_limit
else:
is_over_limit = False
# 返回结果
return full_prompt, token_count, is_over_limit
# -------------------------- 系统调用(使用核心逻辑) --------------------------
# 测试用例1:苹果15手机壳的发货时间
prompt1, token1, over1 = create_kefu_prompt(
llm_role="专业电商客服",
llm_rule="仅回答商品相关问题,回答简洁明了",
product_name="苹果15手机壳",
user_question="发货时间和快递方式"
)
# 测试用例2:华为Mate60手机壳的材质
prompt2, token2, over2 = create_kefu_prompt(
llm_role="专业电商客服",
llm_rule="仅回答商品相关问题,回答包含细节",
product_name="华为Mate60手机壳",
user_question="材质和防摔性能"
)
# -------------------------- 结果输出 --------------------------
print("【测试用例1:苹果15手机壳】")
print("完整Prompt:", prompt1)
print("Token数量:", token1)
print("是否超限:", over1)
print("\n" + "-"*60 + "\n")
print("【测试用例2:华为Mate60手机壳】")
print("完整Prompt:", prompt2)
print("Token数量:", token2)
print("是否超限:", over2)
print("\n✅ 系统运行完成!")【测试用例1:苹果15手机壳】
完整Prompt: 系统提示:你是专业电商客服,仅回答商品相关问题,回答简洁明了
用户:我想了解苹果15手机壳的发货时间和快递方式
LLM:
Token数量: 48
是否超限: False
------------------------------------------------------------
【测试用例2:华为Mate60手机壳】
完整Prompt: 系统提示:你是专业电商客服,仅回答商品相关问题,回答包含细节
用户:我想了解华为Mate60手机壳的材质和防摔性能
LLM:
Token数量: 50
是否超限: False
✅ 系统运行完成!llm_role/llm_rule即可快速切换 LLM 的身份和规则,避免重复写代码;def或:错误:generate_prompt(product_name, user_question);后果:代码报错(SyntaxError);正确:def generate_prompt(product_name, user_question):。
错误:prompt = "Token数量:" + 4096(字符串 + 整数);后果:代码报错(TypeError);正确:prompt = "Token数量:" + str(4096)(转换为字符串)或prompt = f"Token数量:{4096}"(f-string 自动转换)。
错误:is_valid = true(小写);后果:代码报错(NameError);正确:is_valid = True(首字母大写)。
错误:generate_prompt("苹果15手机壳")(缺少用户问题参数);后果:代码报错(TypeError);正确:generate_prompt("苹果15手机壳", "发货时间")(参数数量与定义一致)。
错误:"""LLM系统提示词(缺少闭合引号);后果:代码报错(SyntaxError);正确:"""LLM系统提示词"""(首尾引号一致)。
#)、多行("""),用于记录 LLM 的开发说明;下一篇我们将学习《Python 数据类型:LLM 语料与 API 参数的底层处理逻辑》,讲解如何用 Python 处理批量 LLM 语料和 API 请求参数。