Notebook环境下的List、Slice与LLM大冒险

🐍 人生苦短,我用Python:Notebook环境下的List、Slice与LLM大冒险

Warning:本文可能引起以下后果------对JavaScript失去兴趣、疯狂爱上Python、以及半夜三点还在Jupyter Notebook里玩得不亦乐乎。后果自负!😏


前言:从「Hello World」到「Hello AI」的神奇旅程

话说那天,我正悠闲地写着JavaScript,突然有人跟我说:

「兄弟,你会用Python调LLM吗?」

我:「Python?那不是爬虫用的吗?」

他:「不,Python现在可以调AI!」

我:「???」

就这样,我打开了Jupyter Notebook,开始了今天的Python学习之旅。


一、Jupyter Notebook:代码界的「活字印刷术」

1.1 什么是Notebook?

Jupyter Notebook (文件后缀是 .ipynb)是一个超级酷的编程环境:

diff 复制代码
📝 Notebook = 笔记本

你可以:
- 边写代码
- 边运行
- 边记笔记
- 边出结果

就像你的电子笔记本,但这个本子会跑代码!

1.2 Notebook长什么样?

bash 复制代码
# Cell 1: 第一个代码块
print("my first notebook")

# 运行结果:
# my first notebook
ini 复制代码
# Cell 2: 定义一个列表
L = ["鸡蛋仙", "刚刚", "明明"]
print(L[0], L[1], L[2])

# 运行结果:
# 鸡蛋仙 刚刚 明明

对比一下传统开发

erlang 复制代码
传统开发:
写代码 → 保存文件 → 运行 → 看结果 → 改代码 → 保存 → 运行...

Notebook开发:
写代码 → 按Shift+Enter → 立刻看结果 → 改代码 → 按Shift+Enter → 立刻看结果...

我的感悟:Notebook就像「所见即所得」的编辑器,但比Word强大一万倍------因为它会跑代码!


二、Python List:比JavaScript Array更「随意」的容器

2.1 List是什么?

Python的List就是JavaScript的Array,但Python表示:「我更随意,你管不着!」

ini 复制代码
# 定义一个列表
L = ["鸡蛋仙", "刚刚", "明明"]

# 访问元素
print(L[0])  # 鸡蛋仙
print(L[1])  # 刚刚
print(L[2])  # 明明

2.2 List vs Array:谁更任性?

特性 Python List JavaScript Array
容量 动态,不用声明 动态,不用声明
类型 不约束,啥都能装 不约束,但有类型数组
长度 随时可变 随时可变
语法 []list() []Array()
ini 复制代码
# Python List:我是百宝箱
mixed_list = [1, "hello", 3.14, True, None, [1, 2, 3]]
print(mixed_list)
# 输出:[1, 'hello', 3.14, True, None, [1, 2, 3]]

# JavaScript Array:我也可以,但我不说
// const mixedArray = [1, "hello", 3.14, true, null, [1, 2, 3]];

2.3 为什么Python适合AI,JavaScript不适合?

Python的自信

ini 复制代码
# Python:我有高精度数字类型
a = 0.1
b = 0.2
print(a + b)  # 0.3 ✅ 完美!

JavaScript的尴尬

ini 复制代码
// JavaScript:我有Number类型,但我不精
const a = 0.1;
const b = 0.2;
console.log(a + b);  // 0.30000000000000004 😱

/*
JavaScript内心OS:
"我是网页脚本出身,精于交互
 计算这种事...抱歉我不太行"
*/

总结

语言 适合领域
Python 机器学习、爬虫、数据分析、科学计算
JavaScript 页面交互、前端开发、浏览器脚本

结论:兄弟俩各有所长,但AI领域,Python是爸爸!


三、Slice切片:Python的「作弊神器」

3.1 什么是切片?

切片(Slice) 就是从列表中「切」出一部分,就像切蛋糕一样简单!

scss 复制代码
# 定义一个列表
L = ["鸡蛋仙", "刚刚", "明明"]

# 切片操作
print(L[0:3])   # ['鸡蛋仙', '刚刚', '明明'] - 取所有
print(L[:3])    # ['鸡蛋仙', '刚刚', '明明'] - 从头开始
print(L[1:3])   # ['刚刚', '明明'] - 从索引1到2
print(L[-2:])   # ['刚刚', '明明'] - 取最后两个

3.2 切片的语法糖

scss 复制代码
# range() 生成序列
L = list(range(100))  # 0到99的列表
print(L)
# [0, 1, 2, 3, ... 99]

前10个元素

scss 复制代码
print(L[:10])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

后10个元素

scss 复制代码
print(L[-10:])
# [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

每隔3个取一个

scss 复制代码
print(L[:10:3])
# [0, 3, 6, 9]

所有元素每隔5个取一个

scss 复制代码
print(L[::5])
# [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

3.3 切片可视化

css 复制代码
📊 列表切片图解

索引:  0    1    2    3    4    5    6    7    8    9
数据: [0]  [1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]
        ↑                            ↑
      起点                          终点

L[:7]    → [0, 1, 2, 3, 4, 5, 6]      取前7个
L[3:]    → [3, 4, 5, 6, 7, 8, 9]      从索引3开始取
L[2:7]   → [2, 3, 4, 5, 6]            取索引2到6
L[::2]   → [0, 2, 4, 6, 8]            每隔1个取
L[::3]   → [0, 3, 6, 9]              每隔2个取

3.4 实战:去除字符串首尾空格

方法1:用strip()(简单粗暴)

python 复制代码
def trim(s):
    return s.strip()

print(trim("   hello world "))
# 输出:hello world

方法2:用切片(双指针思想)

sql 复制代码
def trim(s):
    # 找到第一个非空格的索引
    left = 0
    while left < len(s) and s[left] == ' ':
        left += 1
    
    # 找到最后一个非空格的索引
    right = len(s)
    while right > left and s[right - 1] == ' ':
        right -= 1
    
    # 切片截取
    return s[left:right]

print(trim("   hello world "))
# 输出:hello world

对比

scss 复制代码
方法1 strip():简单,但调用了内置函数
方法2 切片:稍微复杂,但理解了底层原理

面试官问:「请手写trim函数?」
你:「我会切片!😎」

四、调用LLM:Python与AI的第一次约会

4.1 LLM厂商大盘点

markdown 复制代码
🤖 LLM厂商一览

1. OpenAI(GPT系列)
   - 基于Google开源的Transformer架构
   - 引领了2022年底的生成式AI浪潮
   - 行业标准制定者

2. DeepSeek(国产之光)
   - 兼容OpenAI接口
   - 性价比高
   - 国内开发者的首选

3. Google(Gemini)
   - 背靠Google强大的技术实力
   - 多模态能力强

4. Anthropic(Claude)
   - 安全性强
   - 对话体验好
   - 有自己的特色

4.2 ModelScope:阿里的AI模型库

ModelScope = Model(模型)+ Scope(空间)

diff 复制代码
🏠 ModelScope是什么?

- 阿里达摩院开源的模型社区
- 提供了大量预训练模型
- 支持NLP、计算机视觉等任务
- 像GitHub,但专门放AI模型

4.3 用Python调用DeepSeek API

Step 1:安装依赖

复制代码
pip install openai

Step 2:编写代码(这段代码有bug,请注意!):

ini 复制代码
# 引入OpenAI客户端
from openai import OpenAI

# 实例化客户端,配置DeepSeek API
client = OpenAI(
    api_key="your-api-key-here",
    base_url="https://api.deepseek.com/v1"
)

# 选择的模型
COMPLETION_MODEL = "deepseek-chat"

# 构造Prompt(亚马逊产品场景)
prompt = """
Consideration product: 工厂现货PVC充气青蛙夜市地摊热卖充气玩具发光蛙儿儿童水上玩具

1. Compose human readable product title used on Amazon in english within 20 words.
2. Write 5 selling points for the products in Amazon
3. Evaluate a price range for this product in U.S.
4. Output the result in json format with three properties called title, selling_point and price_range
"""

# 定义获取响应的函数
def get_response(prompt):
    response = client.chat.completions.create(
        model=COMPLETION_MODEL,
        messages=[  # ⚠️ 注意:这里必须是 messages(复数)!
            {
                "role": "user",
                "content": prompt
            }
        ]
    )
    return response.choices[0].message.content

# 调用函数
print(get_response(prompt))

4.4 ⚠️ 踩坑经验:messages vs message

我犯的错误

ini 复制代码
# ❌ 错误写法(message是单数)
response = client.chat.completions.create(
    model=COMPLETION_MODEL,
    message=[  # 这个会报错!
        {"role": "user", "content": prompt}
    ]
)

# ✅ 正确写法(messages是复数)
response = client.chat.completions.create(
    model=COMPLETION_MODEL,
    messages=[  # 必须是复数!
        {"role": "user", "content": prompt}
    ]
)

报错信息

javascript 复制代码
TypeError: Missing required arguments;
Expected either ('messages' and 'model')
or ('messages', 'model' and 'stream') arguments to be given

教训:API参数名要严格按照文档来,一个字母都不能错!


五、Prompt Engineering:和AI说话的的艺术

5.1 什么是Prompt?

Prompt 就是你给AI的「任务描述」。Prompt写得好,AI表现就好;Prompt写得烂,AI就智障。

5.2 Prompt三要素

markdown 复制代码
📝 优秀Prompt的三大要素

1. ✅ 清晰且详细的表达目标
   - 不要说:「帮我写代码」
   - 要说:「写一个Python函数,输入是一个整数数组,输出是去重后的数组」

2. ✅ 分步骤
   - 不要说:「介绍一下Python」
   - 要说:「1. 介绍Python的历史 2. 介绍Python的特点 3. 介绍Python的应用场景」

3. ✅ 约束返回格式
   - 不要说:「给我一些数据」
   - 要说:「以JSON格式返回数据,包含name、age、city三个字段」

5.3 实战:让AI帮你写亚马逊产品描述

ini 复制代码
prompt = """
请为以下产品完成以下任务:

产品:工厂现货PVC充气青蛙夜市地摊热卖充气玩具发光蛙儿儿童水上玩具

任务:
1. 写一个亚马逊产品标题(英文,不超过20个词)
2. 写5个产品卖点(英文)
3. 评估美国市场的价格区间

输出格式:JSON,包含以下字段
- title: 产品标题
- selling_point: 5个卖点的数组
- price_range: 价格区间字符串

请确保输出是有效的JSON格式,方便程序解析。
"""

AI返回结果示例

bash 复制代码
{
    "title": "PVC Inflatable Glowing Frog Toy for Kids Water Fun Party Pool Beach",
    "selling_point": [
        "Durable PVC material, safe and non-toxic for children",
        "Built-in LED lights for glowing effect at night",
        "Easy to inflate and deflate for convenient storage",
        "Perfect for pool, beach, and backyard water play",
        "Great gift for kids birthday parties and summer activities"
    ],
    "price_range": "$8.99 - $15.99"
}

5.4 为什么约束JSON格式很重要?

diff 复制代码
📊 有JSON vs 无JSON的对比

有JSON格式:
- AI输出结构化数据
- 程序可以直接解析
- 方便后续处理
- 可以提取特定字段

无JSON格式:
- AI输出自由文本
- 需要文本解析
- 可能格式不稳定
- 难以自动化

六、实战案例:批量处理亚马逊产品

6.1 需求分析

假设你有1000个产品需要生成亚马逊描述,你会怎么做?

diff 复制代码
❌ 手动操作(累死你):
- 打开ChatGPT
- 复制粘贴产品信息
- 复制返回结果
- 重复1000次
- 预估时间:500小时

✅ 用Python + API(优雅):
- 读取产品列表
- 批量调用API
- 自动保存结果
- 预估时间:2小时

6.2 批量调用示例

ini 复制代码
import json
from openai import OpenAI

# 初始化客户端
client = OpenAI(
    api_key="your-api-key",
    base_url="https://api.deepseek.com/v1"
)

# 产品列表
products = [
    "PVC充气青蛙玩具",
    "儿童泳池浮床",
    "沙滩排球套装",
    # ... 1000个产品
]

def generate_amazon_description(product_name):
    """生成亚马逊产品描述"""
    prompt = f"""
    产品:{product_name}
    
    请生成:
    1. 亚马逊标题(英文,不超过20词)
    2. 5个卖点
    3. 价格区间
    
    输出JSON格式。
    """
    
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=[{"role": "user", "content": prompt}]
    )
    
    return json.loads(response.choices[0].message.content)

# 批量处理
results = []
for product in products:
    result = generate_amazon_description(product)
    results.append(result)
    print(f"✅ 完成:{product}")

# 保存结果
with open("results.json", "w", encoding="utf-8") as f:
    json.dump(results, f, ensure_ascii=False, indent=2)

print("🎉 全部完成!")

七、总结:今天的我vs明天的我

7.1 今日学习成果

复制代码
📚 今天学了什么

✅ Jupyter Notebook:边写代码边记笔记的神器
✅ Python List:比JavaScript更随意的数据容器
✅ Slice切片:简化元素提取的Python语法糖
✅ LLM API调用:用Python和AI对话
✅ Prompt Engineering:如何让AI听懂你的话

⏰ 预计学习时间:2小时
💪 实际学习时间:2小时(中间摸了30分钟鱼)
📈 收获指数:⭐⭐⭐⭐⭐

7.2 灵魂拷问

🤔 Python和JavaScript,你更想深入学哪个?

🤔 如果让你用API批量处理一个工作,你会做什么?

🤔 Prompt写得好 vs 代码写得好,哪个更重要?

欢迎在评论区聊聊你的想法! 👇👇👇


📌 相关标签

#Python #JupyterNotebook #LLM #API #DeepSeek #Prompt工程 #AI开发 #数据科学


🔗 相关资源


🎯 下一步学习计划

markdown 复制代码
📋 明日任务清单

1. 学习Python的字典(dict)
2. 尝试调用其他LLM厂商的API
3. 写一个完整的产品描述生成器
4. 了解Transformer架构原理
5. 尝试ModelScope上的预训练模型

声明:本文是我在Jupyter Notebook里的学习记录,代码均已测试。如有疏漏,欢迎指正。如有雷同,说明咱俩都在学Python!


「人生苦短,我用Python。但人生也不能只有Python,还得学JavaScript、学AI、学这个学那个。不过没关系,学到老,活到老,代码写到九十九!」

------鲁迅(这次是真的没说过) 😄


# 第一次使用Notebook的感悟

第一次打开Jupyter Notebook的感觉,就像第一次用智能手机------

「卧槽,这玩意儿比命令行酷多了!」

「卧槽,运行结果直接显示在下面!」

「卧槽,我可以直接在代码里写笔记!」

「卧槽...卧槽卧槽卧槽!」

推荐所有人都来试试Jupyter Notebook,你会发现编程可以很有趣! 🚀

相关推荐
清水白石0081 小时前
Python 数据建模指南:dataclass、TypedDict 与 Pydantic 的选型博弈
前端·javascript·python
小郑加油1 小时前
python_综合训练
开发语言·python
多彩电脑1 小时前
Kivy的事件向方法传递的event是什么?
开发语言·python
hnxaoli1 小时前
统信小程序(十四)支持拖拽的旋图程序
python·小程序
小林ixn1 小时前
从 List 切片到 LLM 调用:一篇搞定 Python 基础与 AI 接口
python·ai编程
sugar__salt1 小时前
从Python列表切片到LLM接口实战:零基础AI编程落地教程
开发语言·python·ai·prompt·transformer·ai编程
乐于分享的阿乐1 小时前
Miniconda3 超详细安装配置教程(附安装包及学习资料)
python
gis分享者2 小时前
从原理到落地,Python 实现客户细分与销量预测
python·客户细分,销量预测,商业智能