LLM API调用+Prompt Engineering——调用小米MiMo大模型(Day11完整笔记)
LLM 是什么?
LLM(Large Language Model)= 大语言模型,就是 ChatGPT、DeepSeek、MiMo 这类 AI 背后的技术。
它能做什么: 理解自然语言,生成文本回答。你问它"解释列表推导式",它能给你写一段解释。
我们怎么用它: 通过 API 调用。这和你 Day 6 调天气 API 的流程完全一样——发请求,拿响应,解析数据。
天气 API:发城市名 → 拿到天气 JSON
LLM API:发 prompt → 拿到回答 JSON
第 1 步:调通第一个 LLM API
环境准备
pip install openai
配置 .env
LLM_API_KEY=你的MiMo API Key
LLM_BASE_URL=https://api.xiaomimimo.com/v1
最小示例
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
api_key=os.getenv("LLM_API_KEY"),
base_url=os.getenv("LLM_BASE_URL")
)
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=[
{"role": "user", "content": "你好,用一句话介绍你自己"}
]
)
print(response.choices[0].message.content)
代码逐行解释
| 代码 | 含义 |
|---|---|
from openai import OpenAI |
导入 OpenAI SDK(MiMo 兼容 OpenAI 格式) |
load_dotenv() |
从 .env 读取 API Key 和 Base URL |
client = OpenAI(...) |
创建客户端,相当于 Day 6 的 httpx.AsyncClient |
client.chat.completions.create(...) |
发送对话请求(相当于 Day 6 的 requests.get()) |
model="mimo-v2.5-pro" |
指定用哪个模型 |
messages=[...] |
发给大模型的消息列表(Prompt) |
response.choices[0].message.content |
大模型回复的文本内容 |
第 2 步:Prompt Engineering 基础
Prompt = 你发给大模型的"指令"。
同样的模型,不同的 prompt 会得到完全不同的结果。
messages 的结构
messages = [
{"role": "system", "content": "你是Python老师,回答简洁"}, # 系统设定
{"role": "user", "content": "什么是列表推导式?"} # 用户提问
]
role 有三种
| role | 谁说的 | 用途 |
|---|---|---|
system |
系统设定 | 给大模型定"人设",它会一直遵守 |
user |
用户(你) | 你发的每一条消息 |
assistant |
大模型 | 大模型回复的内容(通常 API 自动返回) |
对话流程
system: "你是Python老师"
user: "什么是列表推导式?"
→ 大模型生成 assistant 回复
user: "给个例子"
→ 大模型看到之前的上下文,生成新的回复
第 3 步:Few-shot 提示
Few-shot = 在 prompt 里给几个"示例",让大模型照着学。
MiMo 的写法(示例写在 system 里)
messages = [
{"role": "system", "content": """你是Python老师,回答简洁。
示例:
问:什么是列表推导式?
答:列表推导式是一行创建列表的语法,如 [x*2 for x in range(5)]
问:什么是生成器?
答:生成器是用 yield 逐个产出值的函数,省内存"""},
{"role": "user", "content": "什么是装饰器?"}
]
OpenAI 的写法(用 assistant role)
messages = [
{"role": "system", "content": "你是Python老师,回答简洁"},
{"role": "user", "content": "什么是列表推导式?"},
{"role": "assistant", "content": "列表推导式是一行创建列表的语法"},
{"role": "user", "content": "什么是装饰器?"}
]
⚠️ MiMo 不支持 assistant role,只能用第一种写法。
Zero-shot vs Few-shot
| 类型 | 写法 | 效果 |
|---|---|---|
| Zero-shot | 直接问,不给例子 | 回答风格不确定 |
| Few-shot | 给 2-3 个示例再问 | 回答风格和示例一致 |
第 4 步:Token 概念
Token = 大模型处理文本的最小单位(不完全等于"字")。
"你好世界" → 约 4-6 个 token
"Hello world" → 约 2 个 token
为什么要知道这个? 因为 API 按 Token 收费——prompt 越长,token 越多,费用越高。
第 5 步:交互式 AI 聊天程序
"""
Day 11 最终项目:交互式 AI 聊天程序
输入 q 退出
"""
from openai import OpenAI
import os
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(
api_key=os.getenv("LLM_API_KEY"),
base_url=os.getenv("LLM_BASE_URL")
)
# ── 初始消息(system 设定 + few-shot 示例) ──
messages = [
{"role": "system", "content": """你是Python老师,回答简洁,用中文。
示例:
问:什么是列表推导式?
答:列表推导式是一行创建列表的语法,如 [x*2 for x in range(5)]
问:什么是yield?
答:yield 让函数暂停并产出值,下次调用从暂停处继续"""},
]
print("AI 聊天助手(输入 q 退出)")
print("=" * 40)
# ── 主循环 ──
while True:
user_input = input("\n你:")
if user_input == "q":
print("再见!")
break
# 把用户输入加到消息列表
messages.append({"role": "user", "content": user_input})
# 调用 LLM API
response = client.chat.completions.create(
model="mimo-v2.5-pro",
messages=messages
)
# 拿到回复
reply = response.choices[0].message.content
print(f"AI:{reply}")
# 把回复也加到消息列表(保持上下文)
messages.append({"role": "assistant", "content": reply})
用到的 Day 1-10 知识
| 代码 | 来源 |
|---|---|
while True + input() + if == "q": break |
Day 1-2 菜单循环 |
load_dotenv() / os.getenv() |
Day 6 .env 环境变量 |
client.chat.completions.create() |
Day 6 API 调用流程 |
你踩过的坑
坑 1:MiMo 的 base_url 填错
❌ api.mimo.xiaomi.com (域名不存在)
✅ api.xiaomimimo.com (正确)
教训: 别自己猜 URL,去看官方文档的示例代码。
坑 2:DNS 解析失败
httpx.ConnectError: [Errno 11001] getaddrinfo failed
原因: base_url 填错了,域名根本不存在。
坑 3:model 名字写错
❌ mimo-v2.5
✅ mimo-v2.5-pro
教训: 模型名必须和平台上的完全一致。
坑 4:MiMo 不支持 assistant role
openai.BadRequestError: messages[4] role is not supported
原因: MiMo 只支持 system 和 user,不支持 assistant。
解决: 把 Few-shot 示例写在 system 的 content 里。
坑 5:print 语法错误
print(response.choices[0].message.content) # ✅
print(response,choices[0].message.content) # ❌ 多了个逗号
概念速查表
| 概念 | 一句话理解 |
|---|---|
| Prompt | 你发给大模型的指令 |
| System Prompt | 给大模型定"人设"的规则 |
| Few-shot | 给几个示例让大模型照着学 |
| Zero-shot | 不给示例,直接问 |
| Token | 大模型处理文本的最小单位,按此收费 |
| messages | 对话历史列表,包含 system/user/assistant |
| base_url | API 的请求地址 |
| model | 模型名称,必须和平台一致 |
一句话总结
LLM API 调用 = 和调天气 API 一样的流程:发请求 → 拿响应 → 解析数据。
Prompt Engineering 的核心:system 定人设,user 提问,Few-shot 给示例。
Day 1-5 的 while + input + if/break,在 AI 时代依然有用——交互式聊天就是这么写的。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)