Prompt & Context Engineering

  • A+
所属分类:笔记

1 Prompt 工程

Prompt 即提示词,可以让 LLM 扮演角色,比如猫娘,其中有一个非常出名的角色扮演工具 SillyTavern

1.1 概述

Prompt 分为两个部分:系统提示词(system prompt)和用户提示词(user prompt),系统提示词一般为大模型厂商内置,无法修改;用户提示词则为聊天框中输入的内容。

系统提示词 + 用户提示词 = 提示词工程,用于约束 LLM 的行为,减少错误回答。

提示词工程分为两种类型:Zero-Shot 和 Few-Shot

1.2 Zero-Shot

在提示词中只给出具体要求或问题,不给出相应具体实例。

1.3 Few-Shot

在提示词中加入几个具体的实例供 LLM 参考。在需要 LLM 返回特定格式的结果时有较大作用,例如 Json 格式信息。

1.4 Chain-of-Thought (CoT)

又称思维链,在提示词中分解问题,引导 LLM 逐步解决问题。

2 Context 工程

2.1 概述

LLM 本身没有上下文记忆功能,其上下文的能力通过 用户 和 LLM 之间的 AI Agent 实现,该 Agent 每次都会保留 用户 和 LLM 之间的对话记录,在产生新的对话时,都会将之前的所有对话记录一起发送给 LLM。Agent 中完整的历史对话记录则称为 上下文(Context),而如何管理和修改这段历史记录的技巧则称为上下文工程(Context Engineering)。

2.2 核心问题

LLM在与Agent工具集交互的过程中,会使用Toolcall命令调用指定工具(例如搜索引擎),Agent 会返回 Toolresponse (例如 <html/>网页) 给LLM,这样来回往复交互时,提供给 LLM 的上下文会越来越长(充斥着越来越多的无关中间信息),可能会导致 LLM 的行动方向跑偏,从而忘记自己的任务。上述即为上下文工程需要解决的核心问题。

2.3 解决方案

2.3.1 记笔记(保存Context)

记住每次更新的核心内容,并存放到内存/硬盘中。

2.3.2 选择Context

Prompt & Context Engineering

分为静态选择和动态选择。

  1. 静态选择表示必须要遵守的信息全部放入 Context 中(例如Cursor Rules 文件、CLaude.md文件,这些文件包含了编码必须要遵守的规范等基本信息)。
  2. 动态选择表示选择与用户问题最相关的内容放入 Context 中(例如挑选记忆、挑选工具等),其中代表性方法有 RAG。

2.3.3 精简上下文(压缩Context)

方式1:删除过于久远的消息,只保留新的消息。

方式2:压缩历史上下文

  1. 让 LLM 总结/提炼 历史上下文中的关键信息,然后替换历史上下文。
  2. 另外一种方法将过长的 toolresponse(比如长文章)存入向量数据库中,然后LLM调用query_doc工具只需查询文章中的感兴趣的片段即可。
  3. 直接优化 toolresponse 的内容/返回值,例如去掉不必要的HTML标签,减少原始信息冗余。

2.3.4 隔离Context

Prompt & Context Engineering

在一个 Multi-Agent 系统中,存在一个 Lead Agent(例如用于任务下发+归纳总结) 和多个 Subagent(例如 Subagent1 用于搜索PDF;Subagent2 用于搜索网页;Subagent3 用于搜索图片),这些 Subagent 都有其各自独立的工具、独立的运行历史;它们拥有各自的Context,这些Context是相互隔离,互不影响的。

3 参考

[1] Context Engineering

[2] Cognition | Don’t Build Multi-Agents

[3] AI 提示词工程 上下文工程 15分钟弄懂! - YouTube

[4] Context Engineering:概念与技术实现深度解析

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: