当前位置: 首页 > news >正文

AI领域新趋势:从提示(Prompt)工程到上下文(Context)工程

AI领域新趋势:从提示(Prompt)工程到上下文(Context)工程

在人工智能领域,尤其是与大型语言模型(LLM)相关的应用开发中,一个新兴的概念正在逐渐取代传统的提示工程(Prompt Engineering),那就是上下文工程(Context Engineering)。本文将深入探讨这一转变背后的原因、上下文工程的内涵以及它对AI应用开发的重要意义。

在这里插入图片描述

一、什么是上下文工程?

上下文工程是一种构建动态系统的过程,目的是为LLM提供正确格式的信息和工具,使其能够合理地完成任务。这与传统的提示工程有着本质的区别。提示工程主要关注于如何巧妙地措辞提示,以期从LLM中获得更好的答案。然而,随着应用的复杂性不断增加,人们逐渐意识到,向AI提供完整且结构化的上下文比任何巧妙的措辞都更为重要。

上下文工程是一个系统,而不是简单的字符串。它是一个在主LLM调用之前运行的系统,能够从多个来源获取上下文,包括应用开发者、用户、之前的交互、工具调用或其他外部数据。这个系统是动态的,可以根据不同的任务和情境动态地构建最终的提示。它强调提供正确的信息和工具,如果输入的信息不准确或不完整,输出的结果也必然不可靠。同时,信息和工具的格式也至关重要,就像与人类沟通一样,清晰、简洁的格式更容易被理解和处理。

二、上下文工程的重要性

当基于LLM的智能体系统(Agent)出现问题时,很多时候并非模型本身的问题,而是因为没有向模型提供适当的上下文。随着模型技术的不断进步,模型本身的错误越来越少,而上下文错误却成为了主要问题。上下文可能存在问题的原因包括:缺少模型做出正确决策所需的关键上下文信息;上下文格式不佳,影响模型对数据的理解和处理。

例如,想象一个AI助手被要求根据一封简单的电子邮件安排会议。如果这个助手只有用户请求的上下文,而没有其他相关信息,如日历信息、过去的电子邮件往来、联系人列表等,那么它生成的回复可能是无用且机械的。相反,如果能够在调用LLM之前,将这些相关的信息作为上下文提供给模型,那么生成的回复就会更加智能和实用。

三、上下文工程与提示工程的关系

虽然提示工程是上下文工程的一个子集,但上下文工程的范围更广。提示工程更多地关注于如何将上下文以最佳的方式组织在提示中,以适应动态数据并正确地格式化它们。而上下文工程则不仅包括提示的构建,还包括从多个来源收集和整合上下文信息,以及确保这些信息和工具的格式适合LLM处理。

四、上下文工程的实践案例

一些基本的上下文工程实践包括:

  • 工具使用:确保代理在需要访问外部信息时,有相应的工具可以使用,并且这些工具返回的信息格式要便于LLM理解和处理。
  • 短期记忆:在长时间的对话中,创建对话摘要,并在后续对话中使用这些摘要。
  • 长期记忆:能够获取用户在之前对话中表达的偏好。
  • 提示工程:在提示中清晰地列举代理的行为指令。
  • 检索:动态地检索信息,并在调用LLM之前将其插入到提示中。

五、LangGraph和LangSmith如何助力上下文工程

LangGraph是一个以可控性为目标构建的代理框架,它允许开发者完全控制代理的运行步骤、输入LLM的内容以及输出的存储位置。这种高度的可控性使得开发者可以进行各种复杂的上下文工程操作。而LangSmith则是一个LLM应用的可观测性和评估解决方案,其关键功能之一是能够追踪代理调用。通过LangSmith,开发者可以看到代理运行的所有步骤,以及输入和输出LLM的确切内容,从而调试上下文是否包含了完成任务所需的所有相关信息和工具。

六、结论

上下文工程的兴起反映了AI应用开发的一个重要转变。它强调了为LLM提供高质量上下文的重要性,这不仅包括正确的信息和工具,还包括这些信息和工具的格式和动态性。随着模型技术的不断发展,上下文工程将成为AI工程师必须掌握的关键技能。通过构建动态的上下文系统,我们可以使LLM更好地完成各种复杂任务。

七、参考资料

  • The rise of “context engineering”
  • The New Skill in AI is Not Prompting, It’s Context Engineering
http://www.lryc.cn/news/580212.html

相关文章:

  • Spring Boot + 本地部署大模型实现:优化与性能提升
  • 【排序算法】
  • 模型部署与推理--利用libtorch模型部署与推理
  • 前端捕获异常的全面场景及方法
  • MYSQL 服务正在启动或停止中,请稍候片刻后再试一次。
  • Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
  • 在 Ubuntu 22.04 上使用 Minikube 部署 Go 应用到 Kubernetes
  • 微服务架构下的抉择:Consul vs. Eureka,服务发现该如何选型?
  • 本地部署Dify并结合ollama大语言模型工具搭建自己的AI知识库
  • 软件反调试(4)- 基于IsDebuggerPresent的检测
  • Docker学习笔记:Docker网络
  • LDO VS DCDC
  • Redis的缓存击穿和缓存雪崩
  • [C++] C++多重继承:深入解析复杂继承关系
  • 每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜
  • 小架构step系列04:springboot提供的依赖
  • XION:玩转您的第一个智能合约
  • WPS中配置MathType教程
  • Linux入门篇学习——Linux 帮助手册
  • 三、jenkins使用tomcat部署项目
  • 【开源品鉴】FRP源码阅读
  • LangChain 全面入门
  • 数据结构入门:链表
  • 服务器的IO性能怎么看?
  • 数据库11:MySQL 库的操作、库的说明与表的操作、表的说明
  • 电机转速控制系统算法分析与设计
  • 微信小程序如何实现再多个页面共享数据
  • 达梦数据库DMHS介绍及安装部署
  • vue/微信小程序/h5 实现react的boundary
  • 使用Spring AOP实现@Log注解记录请求参数和执行时间