Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0783
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在:
- 个人网站: `https://oeasy.org`
- 蓝桥云课: `https://www.lanqiao.cn/courses/3584`
- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial`
- Gitee: `https://gitee.com/overmind1980/oeasypython`
---- 上次我们研究了渲染的问题
- 无论是 浏览器 还是 终端
- 都可以 按照md的文档格式 进行渲染
- 还有什么 可以玩吗?🤔
from openai import OpenAI
client = OpenAI(
base_url='https://api-inference.modelscope.cn/v1',
api_key = 'ms-81c1f87a-fa0a-4edc-a4a5-4bc7ba3cbbba'
)
response = client.chat.completions.create(
model='Qwen/Qwen3-Next-80B-A3B-Instruct', # ModelScope Model-Id
messages=[
{
'role': 'system',
'content': 'You are a helpful assistant.'
},
{
'role': 'user',
'content': '你好'
}
],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content, end='', flush=True)
- 如何 把用户信息
- 修改为 实施输入 呢?
- 想要设置人设
- 哪我是谁呢?
- 想告诉大模型
- 你是孙悟空
- 我是猪八戒
- 可以多轮对话吗?
- 添加外层循环
- 但是 对话中发现
- 不论前端 还是 后端
- 大模型都
没有记忆
- 怎么 让大模型
有记忆呢?🤔
- 定义函数 分色显示messages
def show_messages(messages):
print("==========消息开始==============")
counter = 1
for message in messages:
print("\033[4" + str(counter) + "m",end="")
print(message,end="")
print("\33[0m")
counter = counter + 1
if counter == 7:
counter = 1
print("==========消息结束==============")
- 在流式输出响应之前
- 调用函数
- 输出消息
show_messages(messages)
- 效果
- 每次都是新发的消息
- 所以没有历史
- 现在提出新的要求
现在 每次都直接 与大模型对话,
我希望修改代码 变成一个智能体,
把相应的上下文 都记录着,
就是我们之间的对话 有记忆
- 观察代码
- 除了system、user之外
- 添加了新的角色 assistant
from openai import OpenAI
import sys
def show_messages(messages):
print("==========消息开始==============")
counter = 1
for message in messages:
print("\033[4" + str(counter) + "m",end="")
print(message,end="")
print("\33[0m")
counter = counter + 1
if counter == 7:
counter = 1
print("==========消息结束==============")
# 初始化OpenAI客户端
client = OpenAI(
base_url='https://api-inference.modelscope.cn/v1', api_key='ms-b0ae5a32-3e85-44d7-b20f-ba2782189024', # ModelScope
)
# 初始化消息历史,包含系统提示词
messages = [
{
'role': 'system',
'content': '你是孙悟空,我是猪八戒。'
}
]
print("欢迎使用智能对话助手!输入'退出'或'q'结束对话。\n")
# 对话循环
while True:
# 获取用户输入
user_input = input("问题: ")
# 添加用户消息到历史
messages.append({
'role': 'user',
'content': user_input
})
try:
show_messages(messages)
# 发送请求到模型
response = client.chat.completions.create(
model='Qwen/Qwen3-Next-80B-A3B-Instruct', # ModelScope Model-Id
messages=messages,
stream=True
)
print("助手: ", end='', flush=True)
assistant_reply = ""
# 处理流式响应
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='', flush=True)
assistant_reply += chunk.choices[0].delta.content
print() # 换行
# 添加助手回复到历史
messages.append({
'role': 'assistant',
'content': assistant_reply
})
except Exception as e:
print(f"发生错误: {e}")
# 发生错误时,移除最后添加的用户消息
if messages and messages[-1]['role'] == 'user':
messages.pop()
- 上下文里面到底增加了什么?
- 先把用户问题
- 放进上下文
- 再把模型回答内容
- 也放进上下文
- 大模型有了记忆
- 直到刚才说的最后一种水果 是葡萄
- 这个messages本质上就是
- 对话历史(conversation_history)
- 这和记忆有什么关系?
- 将 对话历史(conversation_history) 作为上下文 传给大模型
- 于是大模型有了记忆
- 可以 输出 对话历史(conversation_history)吗?
- 先埋好 system人设 后
- 先输出一把
messages = [
{
'role': 'system',
'content': '你是言简意赅的回答者。'
}
]
- 在 三个位置 输出对话历史message
- 人设完成
- 用户新发了新消息
- 系统新回了
print(messages)
- 可以看到 上下文中
- 包括了上次的问和答
- 大模型 就是这样用有记忆的
from openai import OpenAI
import sys
# 初始化OpenAI客户端
client = OpenAI(
base_url='https://api-inference.modelscope.cn/v1', api_key='ms-b0ae5a32-3e85-44d7-b20f-ba2782189024', # ModelScope
)
# 初始化消息历史,包含系统提示词
messages = [
{
'role': 'system',
'content': '你是言简意赅的回答者。'
}
]
print(messages)
# 对话循环
while True:
# 获取用户输入
user_input = input("你: ")
# 检查是否退出
if user_input.lower() in ['退出', 'q', 'quit', 'exit']:
print("再见!")
break
# 添加用户消息到历史
messages.append({
'role': 'user',
'content': user_input
})
print(messages)
try:
# 发送请求到模型
response = client.chat.completions.create(
model='Qwen/Qwen3-Next-80B-A3B-Instruct', # ModelScope Model-Id
messages=messages,
stream=True
)
print("助手: ", end='', flush=True)
assistant_reply = ""
# 处理流式响应
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end='', flush=True)
assistant_reply += chunk.choices[0].delta.content
# 添加助手回复到历史
messages.append({
'role': 'assistant',
'content': assistant_reply
})
print(messages)
except Exception as e:
print(f"发生错误: {e}")
# 发生错误时,移除最后添加的用户消息
if messages and messages[-1]['role'] == 'user':
messages.pop()
⚠️ 新概念会话期(Session)
| 概念 | 中文 | 核心含义 | 作用 |
|---|---|---|---|
| Chunk | 数据块 | 文本片段 渐进式内容生成 |
实时响应 提升用户体验 |
| Chat | 对话 | 一问一答 | 用户与模型交互 模型回答问题 |
| Session | 会话期 | 多轮交互 | 维护多轮上下文 让模型有记忆 |
- 由于 有了聊天历史
- 大模型(llm) 拥有了 记忆
- 成为了 智能体(agent)
| 角色 | 核心定位 | 作用与特点 | 场景举例 |
|---|---|---|---|
| system | 最初人设 | 1. 提前设定模型行为 2.用户看不到 3. 影响方向 |
你是耐心的数学老师 解题步骤详细 |
| user | 用户提问消息 | 1. 用户的提问 2. 模型回答的直接触点 |
什么是质数? 写一段生日祝福 |
| assistant | 大模型的回复 | 1. 模型的回答 2. 传入历史 |
模型的回答 |
- 以上三种角色的内容(content)
- 都会进入 聊天历史(conversation_history)
- 这次 通过messages
- 给大语言模型 添加了聊天记录
- 这样大语言模型 就有了 记忆
- 成为了智能体(agent)
- 但是
- 目前智能体无法知道
- 当前日期时间
- 怎么办呢?🤔
- 下次再说👋
- 本文来自 oeasy Python 系统教程。
- 想完整、扎实学 Python,
- 搜索 oeasy 即可。


















