作业一 / 杨皓文 / 202605486808

读懂它,和它好好说话

11 个词,加一个只照资料说话的查询助手。纯静态,双击就开。

它不是在读字,是在读一块块碎片

四关讲的是同一条路:文字先被切成 token 才进得了模型;它看到的全部东西叫 context,装不下就忘;让它干活靠 prompt,system 定人设、user 提需求;它没读过的资料,用 RAG 现喂。这张图不是课件原图,是按这条路自己画的。

01 / 拆字 文字→ Tokenizer 分词→ Token→ Token ID→ LLM
02 / 记忆 Context 上下文= System+ 历史对话+ 检索资料+ 本轮问题≤ ContextWindow
03 / 沟通 System Prompt定人设 / 护栏 User Prompt提需求 Prompt Engineering→ 稳定输出
04 / 查资料 资料文档→ 切块检索 Top-k→ 塞进 Prompt→ 有依据的回答(RAG)
一句话串完:「我爱学习」先变成几个 token,再变成数字进模型;你说过的每句话都躺在 context 里,窗口装不下就丢最早的;你和它的全部交流都是 prompt,system 决定它是谁,user 决定它这次做什么;它没读过的资料,只有 RAG 能救。

四关,各留一句结论

实验是在 harness 里做的,这里只放结论

同一个任务,两版提示词

A 是随手写的,B 是把要求说全的

Prompt A · 直白版 很多人习惯这么写

帮我写一篇公众号推文,关于网络安全竞赛宣讲会,面向大学生,简短一点。

实际输出:三百多字,通篇「提升安全意识」,没有奖项,没有报名方式,最后还得自己重写一遍。

Prompt B · 结构化版 角色+任务+约束+格式

角色:高校学院宣传干事。任务:撰写公众号短推文正文,120–150 字。主题:网络安全竞赛线下宣讲会。受众:本科大一至大三。要求:沉稳有青春感、不要空话;突出红蓝对抗实战、国家级奖项、现场答疑;末尾一句话引导扫码报名;不要标题、不要表情符号。

实际输出:一百五十字上下,三段推进,三个重点都在,末尾一句扫码,基本能直接发。

11 个词,一个一个拆

重点看「易错点」,那是最容易搞混的地方。按关卡筛,可以对着地图看它在链路里的位置。

拆字:这句话是多少 token简化版分词器,常见词整块,其余按字切

真实分词器(BPE / SentencePiece)跟这里不完全一样:生僻字和 emoji 常被拆成几个字节碎片,这就是一个 emoji 可能算好几个 token 的原因。

只按资料说话的查询助手

人设写在 System Prompt 里,资料内嵌在网页里,分词、检索、上下文记账全在浏览器本地跑,不联网。它答完会告诉你用的是哪几篇。

助

大模型笔记助手

人设已加载 · 16 篇资料

做完之后,剩下这些

几段记录:怎么来的、为什么长这样、哪里还没搞定。

这一页是怎么来的

作业要交一个小助手。做成能双击打开的网页:11 个词,加一个只查这 16 篇资料的助手。

为什么挑了「查资料」

问它「我们班今天留了什么作业」,它答得一本正经,一句真的都没有。把写着作业的 txt 丢过去再问,它立刻老实。这一前一后,比任何定义都更说明 RAG 是干什么的。

喂进去的 16 篇

11 篇对应 11 个词,另外 5 篇是实践:RAG 的六步流程、幻觉、和模型沟通的清单、省 token、11 词速查。全是我按课件重写的中文段落,直接写在 KB 里,没有外部文件,也不联网。

三个坑

  1. 第一版把整篇资料塞进 prompt,回答反而更飘。资料不是越多越好,检索没做对,塞进去的全是噪音。
  2. 「不要编造」写在提问里没用,写进 System Prompt 才稳。
  3. 窗口设成 4096 才看得见它丢消息;设大了什么都看不出来。

它不是真的大模型

回答是本地「检索 + 抽句子」,不是模型生成。好处是断网能用、不瞎编;坏处是句子有点硬。要接真模型,把 buildAnswer() 换成一次 API 调用,prompt 不用改。

换成别的主题

改三处:KB、PERSONA、标题。换成湘菜谱,人设就写「你是湘菜老师傅,只答菜谱里有的菜,说清做法和火候」。

杨皓文 / 202605486808 / 作业一《读懂它,和它好好说话》