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

大模型的6种设计模式

大模型的六种设计模式

目录

  • 1. 链式思考模式 (Chain-of-Thought, CoT)
  • 2. ReAct模式 (Reasoning and Acting)
  • 3. 自洽性模式 (Self-Consistency)
  • 4. 代理模式 (Agent)
  • 5. 检索增强生成 (RAG - Retrieval Augmented Generation)
  • 6. 提示工程模式 (Prompt Engineering Patterns)
  • 总结

1. 链式思考模式 (Chain-of-Thought, CoT)

概念

通过引导大模型一步步展示其推理过程,而不是直接给出结论,从而提高复杂任务的准确性。

流程图

输入问题
提示模型展示思考步骤
是否需要分步骤?
步骤1: 分析问题
步骤2: 提出中间推理
步骤3: 得出结论
最终答案
直接回答

示例

prompt = """
问题: 如果一个水果摊有8个苹果,卖出了3个,又进货5个,现在有多少个苹果?让我们一步步思考:
1. 初始数量: 8个苹果
2. 卖出数量: 3个苹果
3. 卖出后剩余: 8-3=5个苹果
4. 进货数量: 5个苹果
5. 最终数量: 5+5=10个苹果所以现在有10个苹果。
"""

2. ReAct模式 (Reasoning and Acting)

概念

结合推理(Reasoning)和行动(Acting),让模型先思考再执行,适合需要与外部环境交互的任务。

流程图

输入任务
思考: 分析任务需求
行动: 选择合适工具
执行: 使用工具获取信息
观察: 分析执行结果
是否解决问题?
输出最终答案

示例

prompt = """
任务: 查找2023年全球GDP排名前三的国家思考: 我需要查询最新的全球GDP数据
行动: 搜索"2023年全球GDP排名"
观察: 根据搜索结果,2023年GDP排名前三的是美国、中国和日本
思考: 这些数据来源可靠吗?需要交叉验证
行动: 检查国际货币基金组织(IMF)发布的数据
观察: IMF数据确认2023年GDP排名前三的是美国、中国和日本最终答案: 2023年全球GDP排名前三的国家是美国、中国和日本。
"""

3. 自洽性模式 (Self-Consistency)

概念

通过多次运行同一问题,采用多数表决或一致性检查来提高答案可靠性,减少随机性导致的错误。

流程图

输入问题
多次运行同一提示
生成多个独立答案
比较所有答案
答案是否一致?
输出一致答案
使用多数表决或聚类
输出最终答案

示例

def self_consistency_solve(problem, n_samples=5):answers = []for i in range(n_samples):response = llm.generate(f"问题: {problem}\n\n让我们一步步思考:")answers.append(extract_final_answer(response))# 统计答案频率from collections import Counteranswer_counts = Counter(answers)# 返回出现最多的答案return answer_counts.most_common(1)[0][0]

4. 代理模式 (Agent)

概念

赋予模型自主决策和行动的能力,通过设定目标、规划步骤并使用工具来完成复杂任务。

流程图

接收任务
分析任务目标
规划执行步骤
选择合适工具
执行当前步骤
评估执行结果
任务是否完成?
调整计划
输出最终结果

示例

# 基于LangChain的代理实现
from langchain.agents import initialize_agent, Tool
from langchain.llms import OpenAI# 定义工具
tools = [Tool(name="搜索",func=search_tool,description="用于搜索互联网信息"),Tool(name="计算器",func=calculator_tool,description="用于执行数学计算")
]# 初始化代理
agent = initialize_agent(tools, llm=OpenAI(temperature=0), agent="zero-shot-react-description",verbose=True
)# 运行代理
agent.run("计算中国和美国GDP之和,并除以2")

5. 检索增强生成 (RAG - Retrieval Augmented Generation)

概念

将外部知识库和检索系统与生成模型结合,增强模型回答的事实准确性和时效性。

流程图

输入问题
分析问题关键信息
从知识库检索相关内容
将检索结果作为上下文
结合上下文生成回答
检查答案合理性
需要进一步检索?
精确查询
输出最终答案

示例

from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
from langchain.document_loaders import TextLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS# 1. 加载文档并创建向量数据库
loader = TextLoader("data.txt")
documents = loader.load()
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)# 2. 创建检索增强生成链
qa_chain = RetrievalQA.from_chain_type(llm=OpenAI(temperature=0),chain_type="stuff",retriever=vectorstore.as_retriever()
)# 3. 查询RAG模型
response = qa_chain.run("公司的退款政策是什么?")

6. 提示工程模式 (Prompt Engineering Patterns)

概念

通过精心设计提示模板,引导模型生成符合特定格式和要求的输出。

流程图

确定任务需求
设计提示模板
添加示例和格式指引
使用指令引导回答格式
输入完整提示给模型
评估输出质量
是否符合预期?
优化提示模板
固化为可复用模式

示例

# 基于角色的提示模板
role_prompt = """
你是一位经验丰富的医学专家。请用专业但通俗易懂的语言回答以下健康问题。
回答需要包含以下部分:
1. 简短的医学解释
2. 可能的原因
3. 建议的行动步骤
4. 何时需要咨询医生问题: {question}
"""# 使用少样本学习的提示模板
few_shot_prompt = """
问题: 怎样学习编程?
回答: 学习编程可以从选择一门入门语言如Python开始,参加在线课程,动手实践小项目,加入社区讨论。重要的是持续学习和解决实际问题。问题: 什么是机器学习?
回答: 机器学习是人工智能的一个分支,通过算法让计算机从数据中学习模式和做出预测,无需明确编程。常见应用包括推荐系统、图像识别和自然语言处理。问题: {your_question}
回答:
"""

总结

这六种大模型设计模式各有特点和适用场景:

设计模式核心优势典型应用场景
链式思考提高推理准确性数学问题、逻辑推理
ReAct结合思考与行动需要查询外部工具的任务
自洽性提高答案可靠性需要高准确度的关键决策
代理模式自主决策与执行复杂多步骤任务自动化
RAG增强知识与时效性需要专业或最新知识的问答
提示工程控制输出质量和格式结构化内容生成、专业场景

这些设计模式可以单独使用,也可以组合使用以解决更复杂的问题。选择合适的模式取决于具体任务需求、资源限制和期望的结果质量。随着大模型技术的不断发展,这些设计模式也将持续演进和完善。

相关文章:

大模型的6种设计模式

大模型的六种设计模式 目录 1. 链式思考模式 (Chain-of-Thought, CoT)2. ReAct模式 (Reasoning and Acting)3. 自洽性模式 (Self-Consistency)4. 代理模式 (Agent)5. 检索增强生成 (RAG - Retrieval Augmented Generation)6. 提示工程模式 (Prompt Engineering Patterns)总结…...

大模型的输出:温度对输出的影响

大模型的输出:温度对输出的影响 温度T 在大模型(如人工智能语言模型)中,“温度”(Temperature)是一个重要的参数,用于控制模型生成文本的随机性和多样性。它通常用于调整模型输出的概率分布&a…...

Unity中Spine骨骼动画完全指南:从API详解到避坑实战

Unity中Spine骨骼动画完全指南:从API详解到避坑实战 一、为什么要选择Spine? Spine作为专业的2D骨骼动画工具,相比传统帧动画可节省90%资源量。在Unity中的典型应用场景包括: 角色换装系统(通过插槽替换部件)复杂连招系统(动画混合与过渡)动态表情系统(面部骨骼控制)…...

汇丰eee2

聚合和继承有什么样的优点和区别,什么时候决定用,现实开发中,选择哪一种去使用? 聚合的优点: 灵活性: 聚合是一种弱耦合关系,被聚合对象可以独立存在,可以灵活地替换或修改被聚合对…...

C++Cherno 学习笔记day17 [66]-[70] 类型双关、联合体、虚析构函数、类型转换、条件与操作断点

b站Cherno的课[66]-[70] 一、C的类型双关二、C的union(联合体、共用体)三、C的虚析构函数四、C的类型转换五、条件与操作断点——VisualStudio小技巧 一、C的类型双关 作用:在C中绕过类型系统 C是强类型语言 有一个类型系统,不…...

wordpress 利用 All-in-One WP Migration全站转移

导出导入站点 在插件中查询 All-in-One WP Migration备份并导出全站数据 导入 注意事项: 1.导入部分限制50MB 宝塔解决方案,其他类似,修改php.ini配置文件即可 2. 全站转移需要修改域名 3. 大文件版本,大于1G的可以参考我的…...

springboot+easyexcel实现下载excels模板下拉选择

定义下拉注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface ExcelDropDown {/*** 固定下拉选项*/String[] source() default {};/*** 动态数据源key(从上下文中获取)*/String sourceMethod() default "";…...

LeetCode.3396.使数组元素互不相同所需的最少操作次数

3396. 使数组元素互不相同所需的最少操作次数 给你一个整数数组 nums,你需要确保数组中的元素 互不相同 。为此,你可以执行以下操作任意次: 从数组的开头移除 3 个元素。如果数组中元素少于 3 个,则移除所有剩余元素。 注意&…...

【工具使用】在OpenBMC中使用GDB工具来定位coredump原因

在OpenBMC调试中,有时会产生coredump却不知道从哪里入手分析,GDB工具就可以提供帮助。 1 编译带GDB工具的镜像 OpenBMC镜像中默认没有加入GDB工具,因此首先需要编译一个带GDB工具的OpenBMC镜像用于调试。在recipes-phosphor/packagegroups/…...

Linux系统(Ubuntu和树莓派)的远程操作练习

文章目录 一、实验一(一)实验准备(二)Ubuntu 下的远程操作(三)树莓派下的远程操作(四)思考 二、实验二1.talk程序2. C 编写 Linux 进程间通信(IPC)聊天程序 一…...

雪花算法、md5加密

雪花算法生成ID是一个64位长整型(但是也可以通过优化简短位数) 组成部分: 时间戳 机器ID 序列号 用途: 分布式系统唯一ID生成:解决数据库自增ID在分布式环境下的唯一性问题、避免UUID的无序性和性能问题 有序性…...

《P2660 zzc 种田》

题目背景 可能以后 zzc 就去种田了。 题目描述 田地是一个巨大的矩形,然而 zzc 每次只能种一个正方形,而每种一个正方形时 zzc 所花的体力值是正方形的周长,种过的田不可以再种,zzc 很懒还要节约体力去泡妹子,想花最少的体力值…...

高效创建工作流,可实现类似unreal engine的蓝图效果,内部使用多线程高效执行节点函数

文章目录 前言(Introduction)开发环境搭建(Development environment setup)运行(Run test)开发者(Developer)编译(Compile)报错 前言(Introductio…...

Design Compiler:语法检查工具dcprocheck

相关阅读 Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482 dcprocheck是一个在Design Compiler存在于安装目录下的程序(其实它是一个指向snps_shell的符号链接,但snps_shell可以根据启动命令名判…...

aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual

文章目录 aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual学习内容:1. 整体架构1.1 代码链接1.2 全体处理架构 2. 代码分析2.1 创建ImageRepo,并设定给FargateTaskDef2.2 创建CodeBuild project2.3 对CodeBuild project赋予权限&#…...

自定义实现C++拓展pytorch功能

ncrelu.cpp #include <torch/extension.h> // 头文件引用部分namespace py pybind11;torch::Tensor ncrelu_forward(torch::Tensor input) {auto pos input.clamp_min(0); // 具体实现部分auto neg input.clamp_max(0);return torch::cat({pos, neg}, …...

深度学习|注意力机制

一、注意力提示 随意&#xff1a;跟随主观意识&#xff0c;也就是指有意识。 注意力机制&#xff1a;考虑“随意线索”&#xff0c;有一个注意力池化层&#xff0c;将会最终选择考虑到“随意线索”的那个值 二、注意力汇聚 这一部分也就是讲第一大点中“注意力汇聚”那个池化…...

京东店铺托管7*16小时全时护航

内容概要 京东店铺托管服务的*716小时全时护航模式&#xff0c;相当于给商家配了个全年无休的"运营管家"。专业团队每天从早7点到晚11点实时盯着运营数据和商品排名&#xff0c;连半夜流量波动都能通过智能系统秒级预警。这种全天候服务可不是单纯拼人力——系统自动…...

遵循IEC62304YY/T0664:确保医疗器械软件生命周期合规性

一、EC 62304与YY/T 0664的核心定位与关系 IEC 62304&#xff08;IEC 62304&#xff09;是国际通用的医疗器械软件生命周期管理标准&#xff0c;适用于所有包含软件的医疗器械&#xff08;如嵌入式软件、独立软件、移动应用等&#xff09;&#xff0c;其核心目标是确保软件的安…...

Android Input——输入系统介绍(一)

Input 是 Android 系统中的一个重要模块&#xff0c;它是负责处理用户输入操作的核心组件。该系统从各种输入设备&#xff08;如触摸屏、键盘、鼠标等&#xff09;获取原始输入事件&#xff0c;并将其转换为 Android 应用可以理解和消费的 KeyEvent 或 MotionEvent 对象。 一、…...

20250408-报错:pre_state = state同更新现象

项目场景&#xff1a; 基于强化学习解决组合优化问题 问题描述 # POMO Rolloutstate, reward, done self.env.pre_step()# next_state statewith autocast():while not done:# 执行动作并获取新状态和奖励selected, prob self.model(state)# 更新状态:因为self.env.step(s…...

如何在服务器里部署辅助域

辅助域&#xff08;Additional Domain Controller&#xff0c;ADC&#xff09;是指在现有的Active Directory&#xff08;活动目录&#xff09;架构中&#xff0c;新增一个或多个域控制器以提高目录服务的可用性和可靠性。以下是辅助域的定义、功能和应用场景的详细说明&#x…...

WPS JS宏编程教程(从基础到进阶)-- 第五部分:JS数组与WPS结合应用

目录 摘要第5章 JS数组与WPS结合应用5-1 JS数组的核心特性核心特性解析5-2 数组的两种创建方式(字面量与扩展操作符)1. 字面量创建2. 扩展操作符创建5-3 数组创建应用:提取字符串中的数字需求说明代码实现5-4 用函数创建数组(new Array、Array.of、Array.from)1. new Arra…...

Kaggle-Housing Prices-(回归预测+Ridge,Lasso,Xgboost模型融合)

Housing Prices 题意&#xff1a; 给出房子的各种特性&#xff0c;让你预测如今房子的价格。 思考&#xff1a; 数据处理&#xff1a; 1.用plt查看散点图&#xff0c;选择对价格影响高的特征值&#xff1a;YearBuilt&#xff0c;YearRemodAdd&#xff0c;GarageYrBlt。但是…...

C语言:32位数据转换为floaf解析

在C语言中&#xff0c;将接收到的32位数据&#xff08;通常是一个unsigned int或int类型&#xff09;转换为float类型可以通过以下方式实现&#xff1a; 除了下面的方法外还有几个方法&#xff0c;参考博客&#xff1a; C语言&#xff1a;把两个16位的数据合成32位浮点型数据 …...

MQTT协议:IoT通信的轻量级选手

文章总结&#xff08;帮你们节约时间&#xff09; MQTT协议是一种轻量级的发布/订阅通信协议。MQTT通信包括连接建立、订阅、发布和断开等过程。MQTT基于TCP/IP&#xff0c;其通信过程涉及多种控制包和数据包。ESP32S3可以通过MQTT协议接收消息来控制IO9引脚上的LED。 想象一…...

GNSS有源天线和无源天线

区别 需要外部供电的就是有源天线&#xff0c;不需要外部供电的是无源天线。 无源天线 一般就是一个陶瓷片、金属片等&#xff0c;结构简单&#xff0c;成本低廉&#xff0c;占用空间及体积小&#xff0c;适合于强调紧凑型空间的导航类产品。 不需要供电&#xff0c;跟设备直…...

欧税通香港分公司办公室正式乔迁至海港城!

3月20日&#xff0c;欧税通香港分公司办公室正式乔迁至香港油尖旺区的核心商业区海港城!左手挽着内地市场&#xff0c;右手牵起国际航道——这波乔迁选址操作堪称“地理课代表”! 乔迁仪式秒变行业大联欢!感谢亚马逊合规团队、亚马逊云、阿里国际站、Wayfair、coupang、美客多…...

Qt 自带的QSqlDatabase 模块中使用的 SQLite 和 SQLite 官方提供的 C 语言版本(sqlite.org)对比

Qt 自带的 QSqlDatabase 模块中使用的 SQLite 和 SQLite 官方提供的 C 语言版本&#xff08;sqlite.org&#xff09;在核心功能上是相同的&#xff0c;但它们在集成方式、API 封装、功能支持以及版本更新上存在一些区别。以下是主要区别&#xff1a; 1. 核心 SQLite 引擎 Qt 的…...

zustand 源码解析

文章目录 实现原理createcreateStore 创建实例CreateStoreImpl 实现发布订阅createImpl 包装返回给用户调用的 hookuseSyncExternalStoreWithSelector 订阅更新zustand 性能优化自定义数据更新createWithEqualityFncreateWithEqualityFnImpl 返回 hookuseSyncExternalStoreWith…...