上下文工程:比提示词工程更重要的事
个人主页 for_ever_love__ 欢迎各位大佬莅临其他栏目: 大模型开发从0到1 其他栏目: iOS项目总结大全 其他栏目: 我想学python了 其他栏目: iOS UI 文章目录上下文工程比提示词工程更重要的事一、从 Prompt Engineering 到 Context Engineering二、上下文的六个组成部分三、① 系统提示写边界而不是愿望四、② 工具定义让模型一眼选对五、③ 长期记忆注入最小必要信息六、④ 检索内容位置和格式都有讲究七、⑤ 对话历史分级而不是全留八、⑥ 当前输入别只给这一句九、装配顺序很重要十、一套可复用的装配器十一、怎么验证上下文的质量十二、小结上下文工程比提示词工程更重要的事提示词工程问的是这句话该怎么说。上下文工程问的是该给模型看什么。后者对效果的影响往往比前者大一个数量级。一、从 Prompt Engineering 到 Context EngineeringPrompt EngineeringContext Engineering关注对象措辞信息载体一句话系统提示 历史 检索 工具 示例关键能力表达取舍效果天花板中高一个真实的例子❌ 提示词写得很好但检索到的是 3 篇不相关的文档 → 模型只能基于不相关内容回答或者拒答 ✅ 提示词写得很朴素但检索到了精确的 2 段内容 → 模型直接给出正确答案信息对了措辞可以朴素信息错了措辞再精妙也没用。二、上下文的六个组成部分一次 LLM 调用的上下文其实是六块拼起来的┌─────────────────────────────────────┐ │ ① 系统提示 角色、规则、约束 │ ├─────────────────────────────────────┤ │ ② 工具定义 schema 与描述 │ ├─────────────────────────────────────┤ │ ③ 长期记忆 用户偏好、历史事实 │ ├─────────────────────────────────────┤ │ ④ 检索内容 知识库片段 │ ├─────────────────────────────────────┤ │ ⑤ 对话历史 最近几轮 │ ├─────────────────────────────────────┤ │ ⑥ 当前输入 用户这句话 │ └─────────────────────────────────────┘每一块都需要单独设计而且要设计它们的装配顺序。三、① 系统提示写边界而不是愿望# ❌ 愿望式模型会自由发挥SYSTEM你是一个专业的、友善的、乐于助人的技术助手 请尽可能准确、详细地回答用户的问题。# ✅ 边界式模型知道该怎么做SYSTEM你是 {product} 的技术支持助手。 【必答】 - 产品的功能用法、常见问题 - 报错信息的排查步骤 【不答】 - 价格引导到销售 - 与其他产品的对比说不便评价 【格式】 - 结论写在第一句 - 步骤用有序列表 - 代码用 包裹 【不确定时】 直接说我不确定不要猜。不要编造 API 名称或参数。 关键差别愿望式边界式“尽可能准确”“不确定就说不确定”“友善专业”“结论写第一句”“详细回答”给出具体的必答/不答清单后者可验证——你能检查模型有没有违反。四、② 工具定义让模型一眼选对工具定义的上下文成本很高每个 100~300 token而且直接影响选择准确率。描述模板tooldefsearch_orders(user_id:str,status:Literal[pending,paid,refunded]|NoneNone,days:int30,)-str:查询用户的订单列表。 何时使用用户问我买了什么、我的订单、订单状态。 何时不用查单个订单详情用 get_order_detail更快。 Args: user_id: 用户 ID格式 U 8 位数字 status: 订单状态。不传则返回所有状态 days: 查询最近多少天。默认 30 天最大 365 四段结构能力 → 何时用 → 何时不用 → 参数说明。何时不用这一段经常被忽略但它最能减少误选。精简原则每个工具的描述控制在 3 行以内 工具总数控制在 8 个以内超过就拆分 Agent 枚举值写进 Literal不写在描述里五、③ 长期记忆注入最小必要信息defbuild_memory_block(user_id:str,query:str)-str:只注入两类记忆 1. 高重要度的偏好/约束永久 2. 与当前问题相关的按需 pinnedstore.search(namespace(memories,user_id),filter{importance:{$gte:4},category:{$in:[preference,constraint]}},limit5,)relevantstore.search(namespace(memories,user_id),queryquery,limit3)lines[]formindedupe(pinnedrelevant):lines.append(f- [{m.value[category]}]{m.value[content]})return【关于该用户的已知信息】\n\n.join(lines)iflineselse常见的错误是把所有记忆都注入——50 条记忆占了 3000 token其中 45 条和当前问题无关。六、④ 检索内容位置和格式都有讲究位置研究显示模型对开头和结尾的内容注意力最强Lost in the Middle。deforder_docs_for_context(docs:list[Document])-list[Document]:最相关的放开头和结尾中等相关的放中间docssorted(docs,keylambdad:-d.metadata[score])iflen(docs)2:returndocs# 第 1 个放最前第 2 个放最后其余放中间out[docs[0]]out.extend(docs[2:])out.append(docs[1])returnout格式给每段内容加来源标记模型更容易引用也更容易识别这是资料。defformat_docs(docs:list[Document])-str:parts[]fori,dinenumerate(docs,1):srcd.metadata.get(source,未知)titled.metadata.get(title,)parts.append(f[资料{i}] 来源{titleorsrc}\n{d.page_content})return\n\n---\n\n.join(parts)加上资料 N编号回答时模型会写根据资料 2用户能核对。七、⑤ 对话历史分级而不是全留defbuild_context(history,question,docs,token_budget8000):parts[]# 关键事实永不压缩factsextract_pinned_facts(history)iffacts:parts.append(【已确认的事实】\n\n.join(f-{f}forfinfacts))# 较早的对话摘要iflen(history)8:parts.append(【较早的对话摘要】\nsummarize(history[:-8]))# 最近几轮原文recenthistory[-8:]return{facts:facts,summary:...,recent_history:recent,docs:docs,question:question,}三级结构事实结构化→ 摘要压缩→ 原文保真。八、⑥ 当前输入别只给这一句用户的这句话常常省略了上下文用户那它的价格呢它是什么得从历史里解析。两种做法① 查询改写推荐REWRITE_PROMPT根据对话历史把用户的最新问题改写成独立完整的问句。 对话历史 {history} 最新问题{question} 只输出改写后的问题。如果问题本身已经完整原样输出。defrewrite(history,question):ifis_standalone(question):returnquestionreturn(rewrite_prompt|cheap_llm|StrOutputParser()).invoke({history:to_text(history[-4:]),question:question})那它的价格呢 → LangChain 的 Pro 套餐价格是多少改写后的问题同时用于检索和生成——这能显著提升检索命中率。② 把历史一起给模型次优但简单九、装配顺序很重要同样的内容顺序不同效果不同messages[SystemMessage(SYSTEM),# 1. 身份和规则SystemMessage(memory_block),# 2. 用户长期记忆SystemMessage(facts_block),# 3. 已确认事实*recent_history,# 4. 最近对话HumanMessage(context_block),# 5. 检索内容HumanMessage(question),# 6. 当前问题]为什么检索内容放在最后离问题最近注意力最强用户消息位置的内容被当作当前关注的信息系统消息位置的内容容易被当作背景设定。另一种有效布局是把检索内容用context包起来放在用户消息里HumanMessage(fcontext{context_block}/context{question})关键给内容打标签让模型能区分资料和问题。十、一套可复用的装配器classContextBuilder:def__init__(self,budget:Budget):self.budgetbudgetdefbuild(self,user,question,history,docs)-list[BaseMessage]:# 1. 改写查询如果依赖上下文qrewrite(history,question)# 2. 检索用改写后的问题ifdocsisNone:docsretriever.invoke(q)docsdedupe_docs(docs)[:self.budget.max_docs]# 3. 分类预算allocself.budget.allocate({history:0.4,retrieval:0.6})# 4. 组装各部分msgs[SystemMessage(SYSTEM),*self._memory(user,q),*self._facts(history),*self._recent(history,alloc[history]),HumanMessage(self._context(docs,alloc[retrieval])),HumanMessage(question),# 原始问题不是改写的]returnself.budget.fit(msgs)def_recent(self,history,tokens):trimmedtrim_messages(history,max_tokenstokens,token_countercount_tokens,strategylast,include_systemFalse,start_onhuman)returntrimmeddef_context(self,docs,tokens):textformat_docs(docs)returnfcontext\n{truncate_by_paragraph(text,tokens*3)}\n/context注意最后一行HumanMessage(question)用的是原始问题不是改写后的——因为用户看到的是他自己的话回答也应该直接回应他的问题。十一、怎么验证上下文的质量上下文工程的效果可测① 检索质量defeval_retrieval(queries,ground_truth):hits0forq,gtinzip(queries,ground_truth):docsretriever.invoke(rewrite(history,q))texts[d.page_contentfordindocs]ifany(gtintfortintexts):hits1returnhits/len(queries)② 上下文精度检索 5 篇只有 2 篇被引用 → 精度 40%说明多塞了 3 篇垃圾。defcontext_precision(answer_with_citations,total_docs):returnlen(set(answer_with_citations))/total_docs③ Lost in the Middle 检查把关键信息放在中间位置看模型能不能找到deftest_middle_recall(docs):把答案放在第 3 篇中间看模型能否答出docsreorder_put_at_middle(docs,answer_idx2)returnask(docs)EXPECTED这三项指标是上下文工程效果的量化依据。十二、小结上下文 系统提示 工具 长期记忆 检索 历史 当前问题六条实践1. 系统提示写边界必答/不答清单不写愿望 2. 工具描述加何时不用控制数量在 8 个以内 3. 长期记忆只注入高价值项不全量 4. 检索内容按相关性排序位置加来源编号 5. 历史三级处理事实 / 摘要 / 原文 6. 查询先改写再检索和生成一句话总结提示词工程的产出是一段文字上下文工程的产出一套信息装配流程。后者更难但它是可测的、可迭代的、能沉淀成基础设施的——这正是它在工程上更有价值的原因。er_idx2)return ask(docs) EXPECTED**这三项指标是上下文工程效果的量化依据。** ## 十二、小结上下文 系统提示 工具 长期记忆 检索 历史 当前问题六条实践系统提示写边界必答/不答清单不写愿望工具描述加何时不用控制数量在 8 个以内长期记忆只注入高价值项不全量检索内容按相关性排序位置加来源编号历史三级处理事实 / 摘要 / 原文查询先改写再检索和生成**一句话总结提示词工程的产出是一段文字上下文工程的产出一套信息装配流程。** 后者更难但它是可测的、可迭代的、能沉淀成基础设施的——**这正是它在工程上更有价值的原因。**

相关新闻

Linux权限类项目

Linux权限类项目

项目一 在opt目录下创建嵌入式目录,用于安装嵌入式框架。所有者为嵌入式部门的领导张总,所属组为嵌入式部门,张总有全部的权限,部门其他开发有读和执行的权限,其他人只有读的权限。 1.创建张总账号 密码123456 赋予sud…

2026/10/17 13:48:47 阅读更多 →
yuzu Switch 模拟器 PC 安装配置完整指南:10 分钟跑通第一盘

yuzu Switch 模拟器 PC 安装配置完整指南:10 分钟跑通第一盘

yuzu Switch 模拟器 PC 安装配置完整指南:10 分钟跑通第一盘 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding yuzu 是一款在 PC 上运行任天堂 Switch 游戏的模…

2026/10/17 13:48:47 阅读更多 →
Chatbox从零上手:提示词技巧、插件配置与避坑指南

Chatbox从零上手:提示词技巧、插件配置与避坑指南

简介:面向AI对话系统初学者的Chatbox实战指南,以从零到进阶的完整路径帮助读者快速掌握智能对话工具,覆盖日常问答、创意文案、学习辅导等常见场景。文档系统拆解了注册登录、提问黄金法则、常用插件调用、个性化助手训练等核心环节&#xff…

2026/10/17 13:48:47 阅读更多 →

最新新闻

OpenClaw接入个人电脑后,全自动操作磁盘文件,完整从零本地部署教程来了!TaoToken统一Key配置指南

OpenClaw接入个人电脑后,全自动操作磁盘文件,完整从零本地部署教程来了!TaoToken统一Key配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 15:39:07 阅读更多 →
SQL Server 2008误删数据恢复:No backup set found故障实战指南

SQL Server 2008误删数据恢复:No backup set found故障实战指南

简介:本资源是一份面向SQL Server数据库管理员与运维工程师的实战型数据恢复指南,聚焦SQL Server 2008环境下误删数据的紧急抢救方案。内容系统梳理了基于完整恢复模式(Full Recovery)的原生T-SQL三步恢复法(事务日志备…

2026/10/17 15:39:07 阅读更多 →
Unity文字提示标牌效果:用Transform.LookAt与DynamicLine实现动态指向

Unity文字提示标牌效果:用Transform.LookAt与DynamicLine实现动态指向

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 15:39:07 阅读更多 →
Jupyter中TensorFlow直读HDFS:从环境配置到代码实现

Jupyter中TensorFlow直读HDFS:从环境配置到代码实现

1. 先想清楚:为什么非要在Jupyter里直接读HDFS前阵子帮项目组调一个文本分类模型,训练数据全在Hadoop生态的HDFS上,而算法同学习惯用Jupyter Notebook做快速验证。问题来了:训练脚本里tf.data那套流水线要在本地跑通,数…

2026/10/17 15:39:07 阅读更多 →
TensorFlow Hub加载BERT预训练模型实战:从环境配置到文本分类微调

TensorFlow Hub加载BERT预训练模型实战:从环境配置到文本分类微调

1. 为什么要在TensorFlow Hub上加载BERT做自然语言处理项目的朋友,大概率都绕不开BERT这个模型。2018年谷歌把它放出来之后,几乎重新定义了NLP领域的玩法——以前做文本分类、情感分析、问答系统,你得自己搭词向量、设计网络结构、调参调到怀…

2026/10/17 15:39:07 阅读更多 →
自适应滤波器毕设全流程:LMS与RLS算法从设计到答辩

自适应滤波器毕设全流程:LMS与RLS算法从设计到答辩

简介:这份资源是南京航空航天大学电子信息工程学院硕士课程「自适应滤波器设计及应用」的完整论文文档,面向通信、电子与通信工程等专业学生及需要完成相关毕业设计的学习者,帮助系统梳理自适应滤波器的理论基础、算法实现与MATLAB仿真验证。…

2026/10/17 15:38:06 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →