1.3 交互基础:Prompt、Context、Memory、思维链 CoT

学会了 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 模型的训练方式

从「会说话」到「有知识」,出发!🚀

相关推荐
360智汇云2 小时前
Data Agent 技术介绍(上)
microsoft
Z-D-K2 小时前
考验AI的“自我”、记忆和逻辑-AI对《红楼梦》后40回的改写(11)
人工智能·ai·aigc·交互·agi
城事漫游Molly2 小时前
AI赋能质性研究(八): 断言与命题写作,实现从数据到理论跨越的5个高质量 Prompt
人工智能·算法·prompt·ai for science·定性研究
xiami_world3 小时前
从prompt到产品:AI 生成 UI 的三条技术路径对比与工程实践
人工智能·ui·ai·prompt·aigc·ai编程
189228048616 小时前
NV041固态MT29F16T08GSLCEM9-QBES:C
人工智能·算法·microsoft·缓存·性能优化
编码者卢布6 小时前
【Azure App Service】应用服务中的SNAT (Source Network Address Translation 源网络地址转化)
microsoft·azure
烬、、、6 小时前
如何用 Claude Code 调用 gpt-image2 生成图片?
人工智能·笔记·gpt·prompt·skills
小雨下雨的雨6 小时前
蜡笔小画家鸿蒙PC用Electron框架 - 儿童学画蜡笔画技术实现详解
前端·javascript·华为·electron·前端框架·交互·鸿蒙系统
跨境牛马哥7 小时前
2026 Claude Code爬虫指南:如何搭建AI自动化数据采集系统?
microsoft