🤗
入门 免费 English
Context Course
Context Course
[待填写] Context Course — 来自 Hugging Face 的免费课程
📖 你将学到
- [待填写]
01 上下文是什么
你好!欢迎来到这门免费的 AI 课程。这一章,咱们先搞清楚一个核心概念:上下文。
想象一下,你跟朋友聊天。你说“昨天那家餐厅不错”,朋友马上知道你在说哪家。但如果换个陌生人,他可能一头雾水。这个“默契”,就是上下文。在 AI 里,上下文就是模型对话时“记住”的前面内容。
为什么重要?因为没有上下文,AI 就是个“金鱼”——7秒记忆。你问“北京天气怎么样”,它答了。再问“那上海呢”,它不知道“那”指的是“天气”。上下文一长,回答才连贯。
具体操作:我们先用 Hugging Face 的在线工具体验一下。
1) 打开浏览器,访问 huggingface.co/chat(国内可正常访问,无需魔法)。
2) 在对话框输入:“给我推荐一本科幻小说。”
3) 等它回复后,接着输入:“为什么推荐这本?”——看,模型记得刚才的对话,这就是上下文起作用。
4) 再试一个:新开一个对话,直接问“为什么推荐这本?”——模型懵逼了,因为它没有上下文。
实用技巧:每次对话开始时,给 AI 一个“背景设定”,效果会好很多。比如:
Prompt 模板:
“你现在是资深科幻编辑。我是一位刚入门的读者,喜欢硬科幻。请推荐一本适合我的书,并解释理由。”
这样,模型就有了“角色上下文”,回答更有针对性。国内用的话,Hugging Face 聊天免费,但有时慢。备选方案:用 ModelScope(阿里旗下),同样支持类似对话,且速度快。
这一章你只要记住:上下文是 AI 的“记忆”,给对了,回答才靠谱。下一章咱们手把手调上下文长度。
想象一下,你跟朋友聊天。你说“昨天那家餐厅不错”,朋友马上知道你在说哪家。但如果换个陌生人,他可能一头雾水。这个“默契”,就是上下文。在 AI 里,上下文就是模型对话时“记住”的前面内容。
为什么重要?因为没有上下文,AI 就是个“金鱼”——7秒记忆。你问“北京天气怎么样”,它答了。再问“那上海呢”,它不知道“那”指的是“天气”。上下文一长,回答才连贯。
具体操作:我们先用 Hugging Face 的在线工具体验一下。
1) 打开浏览器,访问 huggingface.co/chat(国内可正常访问,无需魔法)。
2) 在对话框输入:“给我推荐一本科幻小说。”
3) 等它回复后,接着输入:“为什么推荐这本?”——看,模型记得刚才的对话,这就是上下文起作用。
4) 再试一个:新开一个对话,直接问“为什么推荐这本?”——模型懵逼了,因为它没有上下文。
实用技巧:每次对话开始时,给 AI 一个“背景设定”,效果会好很多。比如:
Prompt 模板:
“你现在是资深科幻编辑。我是一位刚入门的读者,喜欢硬科幻。请推荐一本适合我的书,并解释理由。”
这样,模型就有了“角色上下文”,回答更有针对性。国内用的话,Hugging Face 聊天免费,但有时慢。备选方案:用 ModelScope(阿里旗下),同样支持类似对话,且速度快。
这一章你只要记住:上下文是 AI 的“记忆”,给对了,回答才靠谱。下一章咱们手把手调上下文长度。
02 调上下文长度
上一章咱们理解了上下文是什么。这一章,直接上手:怎么控制上下文长度。
你可能遇到过:AI 聊着聊着,突然忘了开头说的。那是因为上下文长度有限。Hugging Face 的模型,默认上下文长度一般是 2048 个 token(大概 1500 个汉字)。太长?模型会“失忆”。太短?回答没深度。
咱们用 Hugging Face 的 Inference API 来调。不需要本地装 Python,用浏览器就行。
1) 访问 Hugging Face Inference API 文档。
2) 找到“Text Generation”部分,点“Try it out”。
3) 在请求体里,找到 `parameters` 字段,加上 `max_new_tokens` 和 `truncation`。
具体代码(直接复制到 API 测试页面):
```json
{
"inputs": "请用 200 字介绍量子计算。",
"parameters": {
"max_new_tokens": 100,
"truncation": true,
"temperature": 0.7
}
}
```
4) 点“Execute”——看返回结果,模型只生成了 100 个 token 左右。这就是限制了输出长度。
但上下文长度(输入长度)怎么调?用 `max_input_tokens` 参数:
```json
{
"inputs": "(一段很长的文章,比如 3000 字)请总结。",
"parameters": {
"max_input_tokens": 1024,
"max_new_tokens": 200
}
}
```
这样,模型只读前 1024 个 token,后面的忽略。好处:省资源,快。坏处:可能漏关键信息。
实用技巧:对于中文任务,1 个汉字 ≈ 2 个 token。所以 2048 上下文大概能装 1000 字。如果对话超过 20 轮,建议手动“截断”前面内容,只保留最近 5 轮。
Prompt 模板(自动截断上下文):
“以下是最近的对话历史(只保留最后 3 轮):
用户:北京天气如何?
AI:今天晴天。
用户:那上海呢?
AI:上海多云。
用户:现在请忽略之前对话,只回答最新问题:广州天气如何?”
注意:国内用 Inference API 可能慢,建议用 阿里云 DashScope,它支持类似参数,且免费额度多。
这一章重点:调 max_input_tokens 控制输入,调 max_new_tokens 控制输出。下章讲怎么用上下文做“角色扮演”。
你可能遇到过:AI 聊着聊着,突然忘了开头说的。那是因为上下文长度有限。Hugging Face 的模型,默认上下文长度一般是 2048 个 token(大概 1500 个汉字)。太长?模型会“失忆”。太短?回答没深度。
咱们用 Hugging Face 的 Inference API 来调。不需要本地装 Python,用浏览器就行。
1) 访问 Hugging Face Inference API 文档。
2) 找到“Text Generation”部分,点“Try it out”。
3) 在请求体里,找到 `parameters` 字段,加上 `max_new_tokens` 和 `truncation`。
具体代码(直接复制到 API 测试页面):
```json
{
"inputs": "请用 200 字介绍量子计算。",
"parameters": {
"max_new_tokens": 100,
"truncation": true,
"temperature": 0.7
}
}
```
4) 点“Execute”——看返回结果,模型只生成了 100 个 token 左右。这就是限制了输出长度。
但上下文长度(输入长度)怎么调?用 `max_input_tokens` 参数:
```json
{
"inputs": "(一段很长的文章,比如 3000 字)请总结。",
"parameters": {
"max_input_tokens": 1024,
"max_new_tokens": 200
}
}
```
这样,模型只读前 1024 个 token,后面的忽略。好处:省资源,快。坏处:可能漏关键信息。
实用技巧:对于中文任务,1 个汉字 ≈ 2 个 token。所以 2048 上下文大概能装 1000 字。如果对话超过 20 轮,建议手动“截断”前面内容,只保留最近 5 轮。
Prompt 模板(自动截断上下文):
“以下是最近的对话历史(只保留最后 3 轮):
用户:北京天气如何?
AI:今天晴天。
用户:那上海呢?
AI:上海多云。
用户:现在请忽略之前对话,只回答最新问题:广州天气如何?”
注意:国内用 Inference API 可能慢,建议用 阿里云 DashScope,它支持类似参数,且免费额度多。
这一章重点:调 max_input_tokens 控制输入,调 max_new_tokens 控制输出。下章讲怎么用上下文做“角色扮演”。
03 角色扮演上下文
上一章我们学会了调上下文长度。这一章,玩点高级的:用上下文让 AI 扮演特定角色。
你肯定见过那种“AI 女友”或“AI 老师”。背后的原理很简单:在上下文里植入角色设定。模型会根据设定调整语气、知识范围、行为规则。
操作步骤(用 Hugging Face Chat 演示):
1) 打开 huggingface.co/chat。
2) 在输入框里,先写一段“角色设定”,然后才问问题。格式如下:
Prompt 模板(角色扮演):
“你现在是一位有 20 年经验的川菜大厨,名叫老王。你脾气急,说话带四川口音,喜欢用‘老子’‘龟儿子’这些词。你的知识范围仅限于川菜,其他菜系你一概说‘莫得意思’。现在,我问你:水煮鱼怎么做?”
3) 发送后,AI 会用川普回答你。比如:“老子跟你说,水煮鱼关键在刀工和辣椒油……”
4) 接着问:“那宫保鸡丁呢?”——AI 会继续用老王口吻回答,因为上下文里保留了角色设定。
关键点:角色设定越详细,效果越好。包括:姓名、年龄、职业、性格、口音、知识边界、行为禁忌。
高级技巧:用“系统提示”(System Prompt)来固定角色。Hugging Face 的 Chat 默认支持系统提示:
1) 在聊天窗口,点击右上角设置(齿轮图标)。
2) 找到“System Prompt”框,输入:
“你是一位严格的语文老师,只纠正学生的语法错误,不回答其他问题。如果学生问非语法问题,你回复:‘请先完成语法作业。’”
3) 保存后,所有对话都受这个系统提示约束。
国内替代方案:用 通义千问,它也支持角色设定。在对话开头写“请扮演……”,效果类似。
实用技巧:如果你想要角色“记忆”长期一致,可以把角色设定放在每次对话的最前面,并定期(比如每 5 轮)重复一次。因为上下文太长时,模型可能“忘记”开头。
这一章你学会了:上下文 = 角色的“人设”。下一章,我们挑战复杂任务:多轮对话的上下文管理。
你肯定见过那种“AI 女友”或“AI 老师”。背后的原理很简单:在上下文里植入角色设定。模型会根据设定调整语气、知识范围、行为规则。
操作步骤(用 Hugging Face Chat 演示):
1) 打开 huggingface.co/chat。
2) 在输入框里,先写一段“角色设定”,然后才问问题。格式如下:
Prompt 模板(角色扮演):
“你现在是一位有 20 年经验的川菜大厨,名叫老王。你脾气急,说话带四川口音,喜欢用‘老子’‘龟儿子’这些词。你的知识范围仅限于川菜,其他菜系你一概说‘莫得意思’。现在,我问你:水煮鱼怎么做?”
3) 发送后,AI 会用川普回答你。比如:“老子跟你说,水煮鱼关键在刀工和辣椒油……”
4) 接着问:“那宫保鸡丁呢?”——AI 会继续用老王口吻回答,因为上下文里保留了角色设定。
关键点:角色设定越详细,效果越好。包括:姓名、年龄、职业、性格、口音、知识边界、行为禁忌。
高级技巧:用“系统提示”(System Prompt)来固定角色。Hugging Face 的 Chat 默认支持系统提示:
1) 在聊天窗口,点击右上角设置(齿轮图标)。
2) 找到“System Prompt”框,输入:
“你是一位严格的语文老师,只纠正学生的语法错误,不回答其他问题。如果学生问非语法问题,你回复:‘请先完成语法作业。’”
3) 保存后,所有对话都受这个系统提示约束。
国内替代方案:用 通义千问,它也支持角色设定。在对话开头写“请扮演……”,效果类似。
实用技巧:如果你想要角色“记忆”长期一致,可以把角色设定放在每次对话的最前面,并定期(比如每 5 轮)重复一次。因为上下文太长时,模型可能“忘记”开头。
这一章你学会了:上下文 = 角色的“人设”。下一章,我们挑战复杂任务:多轮对话的上下文管理。
04 多轮对话管理
前几章我们学了上下文基础和角色扮演。这一章,实战硬骨头:多轮对话的上下文管理。
想象你在做一个客服机器人。用户说:“我要退单。”AI 说:“请提供订单号。”用户说:“12345。”AI 说:“已找到订单,确认退吗?”用户说:“是的。”——这需要 4 轮上下文。如果中间用户突然问“今天天气怎么样”,AI 得能切换话题,但还得记住退单流程。
怎么实现?我们手写一个简单的上下文管理逻辑。用 Python 示例,但你也可以在 Hugging Face 的 Spaces 里直接运行。
1) 先安装依赖(如果你本地有 Python):
```bash
pip install huggingface-hub
```
2) 写一个上下文管理函数:
```python
from huggingface_hub import InferenceClient
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") # 免费模型
# 上下文列表,存储对话历史
context = []
def chat_with_context(user_input, max_history=5):
# 添加用户输入
context.append(f"用户: {user_input}")
# 只保留最近 max_history 轮
if len(context) > max_history * 2: # 每轮有两句话(用户+AI)
context.pop(0)
context.pop(0)
# 拼接成完整提示
prompt = "\n".join(context) + "\nAI:"
response = client.text_generation(prompt, max_new_tokens=200)
# 添加 AI 回复
context.append(f"AI: {response}")
return response
# 测试
print(chat_with_context("我要退单"))
print(chat_with_context("订单号是12345"))
print(chat_with_context("确认退"))
print(chat_with_context("今天天气怎么样")) # 模型会切换话题,但退单信息还在上下文里
```
3) 运行后,你会发现:即使聊到天气,模型依然记得订单号。因为 `context` 列表里保留了最近 5 轮。
实用技巧:对于生产环境,建议用“滑动窗口”策略:
- 保留系统提示(角色设定)始终在最前面。
- 用户输入和 AI 回复按时间排序。
- 当总 token 数超过限制时,优先丢弃最早的对话轮次,而不是中间或最新的。
Prompt 模板(滑动窗口):
“系统:你是客服小助手。
用户:我要退单。
AI:请提供订单号。
用户:12345。
AI:已找到,确认退吗?
用户:确认退。
AI:已提交退单申请。
---以上是历史对话,仅保留最后 3 轮---
用户:今天天气怎么样?
AI:”
注意:国内用户如果不想写代码,可以用 Coze(扣子),它内置了上下文管理功能,拖拽就能配置多轮对话。
最后,送你一个终极技巧:给每轮对话打标签。比如“意图:退单”、“实体:订单号12345”。这样即使上下文被截断,关键信息也不会丢。下一章我们讲更高级的:向量化记忆。
想象你在做一个客服机器人。用户说:“我要退单。”AI 说:“请提供订单号。”用户说:“12345。”AI 说:“已找到订单,确认退吗?”用户说:“是的。”——这需要 4 轮上下文。如果中间用户突然问“今天天气怎么样”,AI 得能切换话题,但还得记住退单流程。
怎么实现?我们手写一个简单的上下文管理逻辑。用 Python 示例,但你也可以在 Hugging Face 的 Spaces 里直接运行。
1) 先安装依赖(如果你本地有 Python):
```bash
pip install huggingface-hub
```
2) 写一个上下文管理函数:
```python
from huggingface_hub import InferenceClient
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") # 免费模型
# 上下文列表,存储对话历史
context = []
def chat_with_context(user_input, max_history=5):
# 添加用户输入
context.append(f"用户: {user_input}")
# 只保留最近 max_history 轮
if len(context) > max_history * 2: # 每轮有两句话(用户+AI)
context.pop(0)
context.pop(0)
# 拼接成完整提示
prompt = "\n".join(context) + "\nAI:"
response = client.text_generation(prompt, max_new_tokens=200)
# 添加 AI 回复
context.append(f"AI: {response}")
return response
# 测试
print(chat_with_context("我要退单"))
print(chat_with_context("订单号是12345"))
print(chat_with_context("确认退"))
print(chat_with_context("今天天气怎么样")) # 模型会切换话题,但退单信息还在上下文里
```
3) 运行后,你会发现:即使聊到天气,模型依然记得订单号。因为 `context` 列表里保留了最近 5 轮。
实用技巧:对于生产环境,建议用“滑动窗口”策略:
- 保留系统提示(角色设定)始终在最前面。
- 用户输入和 AI 回复按时间排序。
- 当总 token 数超过限制时,优先丢弃最早的对话轮次,而不是中间或最新的。
Prompt 模板(滑动窗口):
“系统:你是客服小助手。
用户:我要退单。
AI:请提供订单号。
用户:12345。
AI:已找到,确认退吗?
用户:确认退。
AI:已提交退单申请。
---以上是历史对话,仅保留最后 3 轮---
用户:今天天气怎么样?
AI:”
注意:国内用户如果不想写代码,可以用 Coze(扣子),它内置了上下文管理功能,拖拽就能配置多轮对话。
最后,送你一个终极技巧:给每轮对话打标签。比如“意图:退单”、“实体:订单号12345”。这样即使上下文被截断,关键信息也不会丢。下一章我们讲更高级的:向量化记忆。
💡 想要更系统的 AI 学习路线?
去 ganhuo.ai 看完整路线图 →