学会了 LLM 是怎么训练出来的,接下来最重要的技能来了:怎么跟它说话。同样的模型,高手能用出 120% 的效果,新手只能发挥 30%------差距全在交互技巧上。这不是玄学,是一套可以系统学习和复制的工程方法论。
📑 目录
- [Prompt(提示词):你和 AI 之间的接口协议](#Prompt(提示词):你和 AI 之间的接口协议)
- [Context(上下文):AI 的「工作记忆」](#Context(上下文):AI 的「工作记忆」)
- Memory(记忆):突破单次对话的限制
- [思维链 CoT:让 AI 「慢慢想」](#思维链 CoT:让 AI 「慢慢想」)
Prompt(提示词):你和 AI 之间的接口协议
一句话定义
你输入给 LLM 的文本指令。它不是「魔法咒语」,而是你用来约束、引导、激发模型能力的结构化指令。
本质大白话
Prompt = 你给 AI 的工作说明书
差的 Prompt:
"帮我写篇文章"
→ AI 不知道:什么主题?长度?风格?给谁看?
→ 结果:四平八稳的水文
好的 Prompt:
"你是一位资深技术博主,请写一篇 2000 字的文章,
主题是 'RAG 技术入门',
目标读者是有编程基础但没接触过 RAG 的工程师,
要求:口语化表达、包含代码示例、最后总结 3 个常见坑"
→ 精准命中需求
Prompt 的黄金结构:ICIO 框架
| 组成 | 内容 | 示例 |
|---|---|---|
| Instruction | 要 AI 做什么 | 「解释 RAG 工作原理」 |
| Context | 为什么、什么场景 | 「我在做企业知识库项目」 |
| Input | 具体数据或素材 | 「以下架构文档:...」 |
| Output | 期望的输出格式 | 「用 Markdown 表格 + 代码示例输出」 |
python
# 结构化 Prompt 模板
SYSTEM_PROMPT = """
你是一个{role}专家。
任务:{task}
约束:语言={language},格式={format},字数≈{length},风格={tone}
"""
def build_prompt(instruction, context=None, input_data=None, format="markdown"):
prompt = f"## 指令\\n{instruction}\\n"
if context:
prompt += f"## 背景\\n{context}\\n"
if input_data:
prompt += f"## 输入数据\\n{input_data}\\n"
prompt += f"## 输出格式\\n{format}\\n"
return prompt
高级 Prompt 技巧
| 技巧 | 原理 | 效果 |
|---|---|---|
| Few-shot | 给几个示例 | 格式和质量稳定性大幅提升 |
| 角色设定 | 设定专家身份 | 回答专业度提升 |
| 思维链引导 | 加「一步步思考」 | 复杂推理准确率飙升 |
| 自洽采样 | 多次生成取投票 | 数学/逻辑题准确率提升 |
| 分解任务 | 大任务拆小步骤 | 避免遗漏,质量可控 |
❌ 常见误区
- ❌ Prompt 越长越好 --- 无关信息会稀释关键指令效果
- ❌ Prompt 是一次性工作 --- 需要根据反馈持续迭代调优
- ❌ 同一套 Prompt 通用所有模型 --- 不同模型「性格」不同
Context(上下文):AI 的「工作记忆」
一句话定义
每次 API 调用时传给模型的所有文本总和,包括系统提示、历史对话、检索到的文档等。它是 AI 当前能看到的所有信息。
上下文的组成结构
┌─────────────────────────────────────┐
│ Context Window │
│ ┌───────────────────────────────┐ │
│ │ System Prompt (~500-2000) │ │
│ │ 定义人设和行为规则 │ │
│ ├───────────────────────────────┤ │
│ │ Few-shot Examples (~1000-3k) │ │
│ │ 参考样例 │ │
│ ├───────────────────────────────┤ │
│ │ Conversation History (动态) │ │
│ │ 过往 Q&A 记录 │ │
│ ├───────────────────────────────┤ │
│ │ Retrieved Docs (RAG检索) │ │
│ │ 相关文档片段 │ │
│ ├───────────────────────────────┤ │
│ │ User Query (当前问题) │ │
│ └───────────────────────────────┘ │
│ │
│ ⚠️ 总量不能超过上下文窗口限制! │
└─────────────────────────────────────┘
上下文管理策略
python
# 策略1:滑动窗口 --- 只保留最近 N 轮
class SlidingWindowMemory:
def __init__(self, max_turns=10):
self.history = []
def add(self, user_msg, ai_msg):
self.history.append((user_msg, ai_msg))
if len(self.history) > self.max_turns:
self.history.pop(0)
# 策略2:摘要压缩 --- 长对话自动摘要
class SummaryCompressor:
def compress(self, history):
if token_count(history) > THRESHOLD:
summary = llm.summarize(history[:-5])
return [(summary, "已摘要")] + history[-5:]
return history
# 策略3:优先级分层
def build_context(sys_prompt, docs, recent_history, old_history, query):
budget = MAX_CONTEXT - token_count(sys_prompt) - token_count(query)
context = sys_prompt
remaining = budget
for component in [docs, recent_history, old_history]:
if token_count(component) <= remaining:
context += component
remaining -= token_count(component)
else:
context += truncate(component, remaining)
break
return context
❌ 常见误区
- ❌ 上下文越大越要塞满 --- 噪音信息干扰判断(Lost in the Middle)
- ❌ 历史全部保留最好 --- 太长的历史让模型「分心」
- ❌ System Prompt 可以很长 --- 也占有效窗口
Memory(记忆):突破单次对话的限制
一句话定义
让 AI 在跨会话维度上「记住」信息的机制。没有 Memory,每次从零开始;有了 Memory,才是真正的长期助手。
Memory 的层次架构
| 类型 | 作用域 | 实现 | 保存内容 |
|---|---|---|---|
| 短期记忆 | 当前会话 | 对话缓冲区 | 本次所有消息 |
| 长期记忆 | 跨会话 | 向量数据库 | 用户偏好、重要事件 |
| 工作记忆 | 当前任务 | 临时变量 | 正在处理的任务状态 |
python
class MemorySystem:
def __init__(self, vector_store):
self.short_term = []
self.long_term = vector_store
self.working = {}
def save_to_long_term(self, content, metadata):
embedding = embed(content)
self.long_term.store(embedding=embedding, text=content,
metadata={**metadata, "timestamp": now()})
def recall(self, query, top_k=5):
query_embedding = embed(query)
return self.long_term.search(query_embedding, top_k=top_k)
def build_context(self, current_query):
context = "\\n".join(self.short_term[-6:])
memories = self.recall(current_query)
if memories:
context += "\\n## 相关记忆\\n" + "\\n".join([m.text for m in memories])
return context
没有 Memory:
第1天:「我叫小明,喜欢 Python」→ 「你好小明!」
第30天:「我之前说过我喜欢什么?」→ 「抱歉不记得...」😑
有 Memory:
第1天:「我叫小明,喜欢 Python」→ 「记住了!」
第30天:「我之前说过喜欢什么?」→ 「你喜欢 Python!上次还讨论了 Django。」😊
❌ 常见误区
- ❌ Memory 就是聊天记录存储 --- 需要提取、压缩、向量化
- ❌ 记忆越多越好 --- 噪音记忆导致「记忆混淆」
- ❌ 只有大模型才需要 Memory --- 小模型也能大幅提升体验
思维链 CoT:让 AI 「慢慢想」
一句话定义
Chain-of-Thought,在 Prompt 中引导模型展示推理过程。对数学、逻辑、推理类问题,准确率质的飞跃。
为什么 CoT 有效?
没有 CoT:
Q: 小明有5个苹果,给了小红2个,又买了3个,现在几个?
A: 6个
有 CoT:
Q: 同上
A: 让我想一想:
① 初始 5 个
② 给小红 2 个 → 5-2=3
③ 又买 3 个 → 3+3=6
所以答案是 6 个
CoT 让计算过程显式化,每步都是简单算术,不容易错
CoT 的几种玩法
| 方法 | 做法 | 适用场景 | 效果 |
|---|---|---|---|
| Zero-shot CoT | 加一句「让我们一步步思考」 | 通用 | 免费立竿见影 |
| Few-shot CoT | 给带推理过程的示例 | 专业领域 | 效果更好 |
| Self-Consistency | 多次采样取投票多数 | 数学/逻辑 | 准确率飙升 |
| Tree-of-Thoughts | 分支探索多条路径 | 复杂规划 | 最强但最慢 |
python
# Zero-shot CoT(最简单)
def cot_prompt(question):
return f"""{question}\\n\\n让我们一步步思考:首先,"""
# Self-Consistency(多次+投票)
def self_consistent(question, samples=5):
answers = []
for _ in range(samples):
response = llm.generate(f"{question}\\n让我们一步步思考:", temperature=0.7)
answers.append(extract_final_answer(response))
from collections import Counter
return Counter(answers).most_common(1)[0][0]
# Tree-of-Thoughts
def tree_of_thoughts(question):
return llm.generate(f"""{question}\\n请从三个角度分析:
数学视角:... 逻辑视角:... 常识视角:...
综合结论:""")
❌ 常见误区
- ❌ CoT 适用于所有任务 --- 创意写作、翻译等场景多余
- ❌ CoT 步骤越多越好 --- 过长推理链增加累积错误
- ❌ 只有复杂模型才能用 CoT --- 小模型「变聪明」的最划算方式
📊 本节知识地图
┌────────────────────────────────────────────────────┐
│ 交互基础 --- 与 LLM 沟通的技艺 │
│ │
│ ┌──────────┐ ┌───────────────────────────┐ │
│ │ Prompt │ │ Context 管理 │ │
│ │ ICIO框架 │←→ │ 滑动窗口 / 摘要压缩 │ │
│ └─────┬────┘ └─────────────┬─────────────┘ │
│ │ │ │
│ ↓ ↓ │
│ ┌──────────┐ ┌──────────────┐ │
│ │ CoT │ │ Memory │ │
│ │ 思维链 │ │ 短期/长期/ │ │
│ └──────────┘ │ 工作记忆 │ │
│ └──────────────┘ │
│ │
│ 核心心法: │
│ Prompt定方向 → Context给材料 → Memory连贯性 → CoT保准确 │
└────────────────────────────────────────────────────┘
🚀 下节预告 & 跨模块引用
掌握了与 LLM 的沟通基本功,进入 模块二:向量与 RAG------让 LLM 从「能聊」进化到「懂你的私有数据」。
下一节将拆解:
- Embedding:文字怎么变成数字?
- RAG:怎么让 LLM 读你的 PDF/数据库?
- 向量数据库:FAISS、Chroma、Milvus 怎么选?
关联推荐:
- 📖 1.1 模型本源 → Token 和上下文窗口概念反复用到
- 📖 1.2 训练相关 → Embedding 模型的训练方式
从「会说话」到「有知识」,出发!🚀