大家好,我是链上杯子(掘金:链上杯子)。
失业一年了,天天想着怎么翻身。最近在写提示词工具时发现,每次关掉程序,对话历史就没了。把聊天记录保存到文件里,下次打开还能继续看,甚至还能读取历史来做更长的上下文提示。学会文件读写后,感觉离一个真正能“记住”对话的小工具又近了一步。
本课目标:学会使用 Python 内置模块(import)、文件读写(open、read、write)、以及 json 模块处理结构化数据。通过保存/读取对话历史(txt 和 json 格式),实现提示词和 AI 交互记录的持久化。
核心代码实战
1. 基础文件操作 —— 保存对话到 txt 文件
# 先导入 open 需要的内置功能(其实 open 是内置的,不需要 import)
history = [
"用户:今天想写什么?",
"AI:来点治愈系短文吧~",
"用户:主题:雨天的咖啡馆",
"AI:好的,生成中..."
]
# 以写模式 'w' 打开文件(不存在会创建,存在会覆盖)
with open("conversation.txt", "w", encoding="utf-8") as f:
for message in history:
f.write(message + "\n") # 每条消息占一行
print("对话已保存到 conversation.txt")
运行后,当前目录会出现 conversation.txt 文件,内容是:
用户:今天想写什么?
AI:来点治愈系短文吧~
用户:主题:雨天的咖啡馆
AI:好的,生成中...
2. 读取 txt 文件 —— 加载历史继续对话
# 以读模式 'r' 打开
with open("conversation.txt", "r", encoding="utf-8") as f:
saved_history = f.readlines() # readlines() 返回列表,每行一个元素
# 去掉每行末尾的换行符 \n
saved_history = [line.strip() for line in saved_history]
print("从文件加载的对话历史:")
for msg in saved_history:
print(msg)
# 可以继续追加新消息
new_message = "用户:再来一篇关于星空的"
saved_history.append(new_message)
# 重新保存(覆盖原文件)
with open("conversation.txt", "w", encoding="utf-8") as f:
for msg in saved_history:
f.write(msg + "\n")
print("\n已追加新消息并保存。")
运行后会看到加载的内容,并追加一条新消息。
3. 使用 json 模块 —— 保存结构化对话(推荐方式)
json 模块可以把 Python 列表/字典存成标准 json 文件,读取时也能直接转回列表/字典。
import json # 需要 import json 模块
# 更结构化的历史:列表里放字典
structured_history = [
{"role": "user", "content": "今天心情一般,想听故事"},
{"role": "assistant", "content": "来一段温暖的冬日小故事?"},
{"role": "user", "content": "主题:雪地里的小屋"},
{"role": "assistant", "content": "雪花轻轻落在屋顶..."}
]
# 保存到 json 文件
with open("history.json", "w", encoding="utf-8") as f:
json.dump(structured_history, f, ensure_ascii=False, indent=2)
# indent=2 让文件可读性更好,ensure_ascii=False 防止中文乱码
print("结构化对话已保存到 history.json")
# 读取回来
with open("history.json", "r", encoding="utf-8") as f:
loaded_history = json.load(f)
print("\n从 json 加载的对话:")
for msg in loaded_history:
print(f"{msg['role']}:{msg['content']}")
运行后,history.json 文件内容类似:
[
{
"role": "user",
"content": "今天心情一般,想听故事"
},
{
"role": "assistant",
"content": "来一段温暖的冬日小故事?"
},
...
]
加载回来后,可以直接用于后续生成更长的上下文提示词。
小练习(2 道)
练习1(基础)
写一段代码:
- 定义一个列表,里面放 4–6 条你自己生成的提示词(字符串)。
- 用 with open 保存到 "my_prompts.txt" 文件,每条占一行。
- 然后再读取回来,打印所有内容。
练习2(进阶)
用 json 方式:
- 定义一个列表,里面放 4–5 个字典(每个字典有 "role" 和 "content" 键)。
- 保存到 "chat_history.json"。
- 读取回来后,遍历打印每条消息的 role 和 content。
- 再追加一条新消息(比如 {"role": "user", "content": "继续写"}),重新保存文件。
建议打开生成的 json 文件看看内容是否正确。
本课小结
本课介绍了 import 模块(json)、文件读写(open/with/read/write/readlines)、json.dump/load 保存/读取结构化数据。
在 AI 场景中,文件操作让对话历史可以持久化,下次打开程序还能“接上”之前的上下文,离完整的小 AI 工具又近一步。
下节预告
下一课:调用免费 LLM API(入门)—— 用 requests 模块调用免费大模型 API,实现真正的 AI 交互。
欢迎在评论区贴出练习代码或生成的提示词,有问题可以留言。