【AI大模型应用开发工程师特训笔记】第04讲(第4章):运算符
目录
运算符是编程语言中用来对数据进行计算、比较、组合的符号。学会了变量和数据类型后,运算符就是你让数据“动起来”的工具。
本章所有例子都围绕 AI 大模型 的实际场景——比如调节温度系数、对比模型性能、组合多个判断条件、处理 Token 计数等。学完后,你将能够写出更智能的条件判断与数据运算代码。
4.1 算术运算符:对数字做数学运算
算术运算符用于对数字(整数、浮点数)进行加、减、乘、除等操作。在 AI 开发中,你可能需要计算 Token 总数、调整参数值、平均延迟等。
4.1.1 常用算术运算符一览
|
运算符 |
含义 |
例子 |
结果 |
|---|---|---|---|
|
|
加法 |
|
|
|
|
减法 |
|
|
|
|
乘法 |
|
|
|
|
除法(结果总是浮点数) |
|
|
|
|
整除(取整数部分) |
|
|
|
|
取余(模运算) |
|
|
|
|
幂运算 |
|
|
4.1.2 AI 场景实例:计算 Token 消耗与参数调节
# 1. 计算总 Token 数
input_tokens = 1200
output_tokens = 348
total_tokens = input_tokens + output_tokens
print(f"本次请求共消耗 {total_tokens} 个 token") # 1548
# 2. 温度系数放大与缩小
temperature = 0.85
higher_temp = temperature * 1.2 # 提高随机性
lower_temp = temperature / 1.5 # 降低随机性
print(f"原温度:{temperature},提高后:{higher_temp:.2f},降低后:{lower_temp:.2f}")
# 3. 整除与余数:将 token 分成批次处理(每批 512 个)
batch_size = 512
total_tokens = 1500
batches = total_tokens // batch_size # 2 整批
remainder = total_tokens % batch_size # 476 个剩余
print(f"需要 {batches} 个完整批次,剩余 {remainder} 个 token")
# 4. 幂运算:计算 2 的 n 次方(模型隐藏层维度常见值)
hidden_size = 2 ** 12 # 4096 维
print(f"隐藏层维度:{hidden_size}")
💡 注意:除法
/的结果总是浮点数,就算两个整数相除。5/2得到2.5而不是2。想要整数除法用//。
4.2 比较运算符:让 AI“判断”条件
比较运算符用于比较两个值的大小或是否相等,结果是一个布尔值(True 或 False)。AI 中常用于判断是否超出 token 限制、对比模型版本、停止生成条件等。
4.2.1 常用比较运算符
|
运算符 |
含义 |
例子(结果为 True 的例子) |
|---|---|---|
|
|
等于 |
|
|
|
不等于 |
|
|
|
大于 |
|
|
|
小于 |
|
|
|
大于等于 |
|
|
|
小于等于 |
|
4.2.2 AI 场景实例:参数校验与比较
# 1. 检查 temperature 是否在合法范围
temperature = 1.2
is_valid = (0.0 <= temperature <= 2.0) # Python 支持链式比较
print(f"温度{ temperature }是否合法?{is_valid}")
# 2. 比较两个模型的版本
model_a = "gpt-4-turbo"
model_b = "gpt-3.5-turbo"
is_same = (model_a == model_b)
print(f"模型相同?{is_same}") # False
# 3. 检查生成的 token 是否超过最大限制
max_tokens_limit = 4096
output_tokens = 5000
is_exceed = output_tokens > max_tokens_limit
print(f"超出限制?{is_exceed}") # True
if is_exceed:
print("警告:输出 token 过多,请减少 max_tokens 或截断结果")
# 4. 比较两个浮点数(注意误差问题)
temperature_1 = 0.7
temperature_2 = 0.7
# 直接比较通常可以,但如果是计算出来的,推荐用误差范围
threshold = 1e-9
is_equal = abs(temperature_1 - temperature_2) < threshold
print(f"温度相等?{is_equal}")
⚠️ 陷阱:浮点数比较不要直接用
==,因为0.1 + 0.2 == 0.3可能是False(浮点误差)。推荐使用abs(a-b) < 1e-9。
4.3 赋值运算符:给变量“喂数据”
赋值运算符用于将值赋给变量,最基础的 = 你已经见过。还有复合赋值运算符可以同时进行计算和赋值,写起来更简洁。
4.3.1 基本赋值与复合赋值
|
运算符 |
例子 |
等价写法 |
|---|---|---|
|
|
|
直接赋值 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4.3.2 AI 场景实例:累加 token 计数
# 1. 统计多轮对话的 token 总数
total_tokens = 0
# 第一轮
prompt_tokens = 150
completion_tokens = 80
total_tokens += prompt_tokens + completion_tokens # total_tokens = 0 + 230
# 第二轮
prompt_tokens = 200
completion_tokens = 110
total_tokens += (prompt_tokens + completion_tokens) # total_tokens = 230 + 310 = 540
print(f"总共消耗 token 数:{total_tokens}")
# 2. 动态调整温度系数
temperature = 0.8
temperature += 0.1 # 提高一点随机性
print(f"调整后温度:{temperature}") # 0.9
temperature *= 0.9 # 稍微降低
print(f"再调整:{temperature}") # 0.81
# 3. 批次处理中更新剩余 token
remaining_tokens = 1024
batch_size = 512
remaining_tokens -= batch_size # 使用一批后剩余
print(f"剩余 token:{remaining_tokens}") # 512
4.4 逻辑运算符:组合多个条件(像 AI 的多重判断)
逻辑运算符用于连接布尔表达式,得到最终的布尔结果。AI 场景中常用来综合判断:是否满足所有条件、是否至少满足一个条件、是否取反。
4.4.1 三个逻辑运算符
|
运算符 |
含义 |
规则 |
|---|---|---|
|
|
与 |
两边都为 |
|
|
或 |
至少一边为 |
|
|
非 |
取反, |
4.4.2 真值表(一目了然)
|
A |
B |
A and B |
A or B |
not A |
|---|---|---|---|---|
|
True |
True |
True |
True |
False |
|
True |
False |
False |
True |
False |
|
False |
True |
False |
True |
True |
|
False |
False |
False |
False |
True |
4.4.3 AI 场景实例:安全调用 API 的前置条件
# 1. 检查调用大模型 API 的所有条件
has_api_key = True
has_quota = False
is_network_ok = True
# 必须同时满足:有 key 并且有余额并且网络正常
can_call = has_api_key and has_quota and is_network_ok
print(f"可以调用 API?{can_call}") # False(因为 has_quota 为 False)
# 2. 至少满足一个条件才使用缓存
cache_hit = False
online_result_valid = True
use_result = cache_hit or online_result_valid
print(f"可以使用缓存/在线结果?{use_result}") # True
# 3. 取反:如果温度设置不合理,则发出警告
temperature = 2.5
is_invalid = not (0.0 <= temperature <= 2.0) # 等价于 temperature < 0 or temperature > 2
if is_invalid:
print(f"警告:温度 {temperature} 超出 [0,2] 范围")
# 4. 组合判断:满足条件则停止生成
stop_words = ["再见", "结束"]
response = "好的,再见"
should_stop = "再见" in stop_words or "结束" in stop_words # in 是成员运算符,后文会讲
print(f"是否停止生成?{should_stop}") # True
💡 短路求值:
and如果左边为 False,右边不会执行;or如果左边为 True,右边不会执行。利用这个特性可以写出更简洁的代码。
# 简短的默认值设置
temperature = 0.0
safe_temp = temperature or 0.7 # 如果 temperature 为 0(假值),则取 0.7
print(safe_temp) # 输出 0.7(因为 0.0 被视为 False)
4.5 位运算符:底层的二进制操作(了解即可)
位运算符直接操作整数的二进制位。AI 开发中很少直接用,但在某些高性能场景(如模型量化、压缩)或编写底层库时会用到。零基础了解概念即可。
4.5.1 位运算符列表
|
运算符 |
含义 |
例子 |
|---|---|---|
|
|
按位与 |
|
|
|
按位或 |
|
|
|
按位异或 |
|
|
|
按位取反 |
|
|
|
左移 |
|
|
|
右移 |
|
4.5.2 简单示例(不必深究)
# 二进制:5 -> 0101, 3 -> 0011
print(5 & 3) # 0001 -> 1
print(5 | 3) # 0111 -> 7
print(5 ^ 3) # 0110 -> 6
# 左移一位相当于乘以 2
tokens = 512
double_tokens = tokens << 1 # 1024
在 AI 中,位运算偶尔用于权限标记(如模型支持的功能位标志)或字符处理。初学者知道有这些东西即可。
4.6 成员运算符:检查元素是否在容器中
成员运算符用于判断一个值是否存在于某个序列(如字符串、列表、元组等)中。AI 场景:检查某个词是否在黑名单中,判断输出是否包含结束标志等。
|
运算符 |
含义 |
|---|---|
|
|
在...里面,返回 True |
|
|
不在...里面,返回 True |
4.6.1 AI 场景实例:过滤敏感词、检测结束符
# 1. 检查用户输入是否包含敏感词
sensitive_words = ["暴力", "色情", "政治"]
user_input = "请解释一下暴力美学"
has_bad_word = any(word in user_input for word in sensitive_words) # 简单写法:循环每个词判断
# 更易懂的写法:
has_bad_word = False
for word in sensitive_words:
if word in user_input:
has_bad_word = True
break
if has_bad_word:
print("输入包含敏感词,请修改")
# 2. 检查模型回复是否包含结束标记
response = "这是最终答案。[END]"
if "[END]" in response:
print("检测到结束标记,停止流式输出")
# 3. 判断模型名称是否在可用模型列表中
available_models = ["gpt-4", "gpt-3.5", "claude-3"]
model_choice = "llama-2"
if model_choice not in available_models:
print(f"错误:模型 {model_choice} 不在可用列表中")
💡
in对于字符串是子串判断,"cat" in "catalog"返回True。如果希望精确匹配单词,可以用空格分割后再判断。
4.7 身份运算符:比较对象身份(是否同一个)
身份运算符用于判断两个变量是否指向内存中的同一个对象。与 == 不同,== 比较的是值是否相等,而 is 比较的是对象身份(可以理解为 id 是否相同)。
|
运算符 |
含义 |
|---|---|
|
|
是同一个对象 |
|
|
不是同一个对象 |
4.7.1 何时使用?
在 AI 开发中,通常用 == 比较值就够了,但有时需要判断是否为 None 或是否同一个配置对象。
# 判断变量是否为 None(推荐使用 is,而不是 ==)
api_response = None
if api_response is None:
print("API 未返回任何结果")
# 两个变量指向同一个对象
config_a = {"temperature": 0.7}
config_b = config_a # config_b 和 config_a 指向同一个字典
print(config_a is config_b) # True
config_c = {"temperature": 0.7} # 新字典,内容相同但不同对象
print(config_a is config_c) # False
print(config_a == config_c) # True(值相等)
⚠️ 注意:对于小的整数和短字符串,Python 可能会做驻留优化,导致
is也返回 True,但不要依赖这种行为。判断相等永远用==,判断是否为None用is。
4.8 运算符优先级:谁先计算?
当表达式中有多个运算符时,Python 按照优先级决定计算顺序。你可以使用括号 () 强制改变顺序。
4.8.1 优先级表(从高到低)
|
优先级 |
运算符 |
|---|---|
|
1 |
|
|
2 |
|
|
3 |
|
|
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
|
10 |
|
|
11 |
|
|
12 |
|
|
13 |
|
4.8.2 AI 场景示例:验证参数合法性
# 错误写法:不加括号可能逻辑错误
temperature = 1.5
max_tokens = 3000
# 想要检查 temperature 范围且 max_tokens 不超过 4096
# 错误写法(比较运算符优先级高于 and)
# condition = 0 <= temperature <= 2 and max_tokens <= 4096 # 实际没问题,因为链式比较特殊
# 更好的做法是加括号
condition = (0 <= temperature <= 2) and (max_tokens <= 4096)
print(condition) # True
# 混合算术和比较
total_tokens = 1200 + 350
limit = 2048
is_within = total_tokens <= limit # 加法先计算,再比较
print(f"总 token {total_tokens} 是否在限制内?{is_within}")
# 使用括号改变优先级
result = 2 ** 3 * 4 # 先幂 (8) 再乘 = 32
result2 = 2 ** (3 * 4) # 先括号 (12) 再幂 = 4096
print(result, result2)
💡 建议:当你不太确定优先级时,直接加括号
()明确顺序,代码也更易读。
4.9 综合实战:AI 请求参数校验与决策
将本章所有运算符融合成一个脚本,模拟调用 AI 模型前的完整检查过程。
# 模拟 AI 请求参数校验器
# 用户配置(实际可能来自 input 或配置文件)
model = "gpt-4"
temperature = 1.3
max_tokens = 5000
top_p = 0.6
user_prompt = "帮我写一首诗"
stop_word = "END"
# 系统常量
ALLOWED_MODELS = ["gpt-4", "gpt-3.5", "claude-3"]
MAX_TOKENS_LIMIT = 4096
TEMPERATURE_MIN = 0.0
TEMPERATURE_MAX = 2.0
# 1. 检查模型合法性
model_valid = model in ALLOWED_MODELS
# 2. 检查温度范围
temp_valid = (TEMPERATURE_MIN <= temperature <= TEMPERATURE_MAX)
# 3. 检查 max_tokens 范围
tokens_valid = (1 <= max_tokens <= MAX_TOKENS_LIMIT)
# 4. 检查 top_p 范围(一般是 0~1)
top_p_valid = (0.0 < top_p <= 1.0)
# 5. 检查 prompt 不为空且长度不超过 8000 字符
prompt_valid = (user_prompt != "") and (len(user_prompt) <= 8000)
# 6. 综合判断所有条件
all_valid = model_valid and temp_valid and tokens_valid and top_p_valid and prompt_valid
# 输出结果
print("=" * 50)
print("AI 请求参数校验结果")
print(f"模型:{model} -> {'✅' if model_valid else '❌'}")
print(f"温度:{temperature} -> {'✅' if temp_valid else '❌'}")
print(f"max_tokens:{max_tokens} -> {'✅' if tokens_valid else '❌'}")
print(f"top_p:{top_p} -> {'✅' if top_p_valid else '❌'}")
print(f"提示词长度:{len(user_prompt)} -> {'✅' if prompt_valid else '❌'}")
print(f"是否可以发起请求:{'✅ 是' if all_valid else '❌ 否'}")
print("=" * 50)
# 如果不合法,给出具体建议
if not all_valid:
suggestions = []
if not model_valid:
suggestions.append(f"请选择模型:{', '.join(ALLOWED_MODELS)}")
if not temp_valid:
suggestions.append(f"温度范围为 {TEMPERATURE_MIN}~{TEMPERATURE_MAX}")
if not tokens_valid:
suggestions.append(f"max_tokens 范围为 1~{MAX_TOKENS_LIMIT}")
if not top_p_valid:
suggestions.append("top_p 应介于 0 和 1 之间(通常 0.1~0.95)")
if not prompt_valid:
suggestions.append("提示词不能为空且长度不超过 8000 字符")
print("改进建议:")
for s in suggestions:
print(f"- {s}")
运行此脚本(修改部分无效值)可以看输出变化。
4.10 本章小结
|
运算符类别 |
常用运算符 |
AI 典型应用 |
|---|---|---|
|
算术 |
|
Token 统计、参数缩放、批次分割 |
|
比较 |
|
校验温度范围、比较模型版本、限制长度 |
|
赋值 |
|
累加 token 总数、动态调参 |
|
逻辑 |
|
多条件组合校验(API 调用前检查) |
|
成员 |
|
敏感词过滤、可用模型判断 |
|
身份 |
|
判断是否为 None |
|
位运算 |
|
底层优化(了解即可) |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)