LangChain4j入门AI(六)整合提示词(Prompt)

前言

        提示词(Prompt)是用户输入给AI模型的一段文字或指令,用于引导模型生成特定类型的内容。通过提示词,用户可以告诉AI“做什么”、 “如何做”以及“输出格式”,从而在满足需求的同时最大程度减少无关信息的生成。有效的提示词本质上是一种“注入式指令”,它引导AI按照预设思路思考并输出结果。

一、提示词对智能体的重要性

① 提升生成质量

        简明且具体的提示词能够显著减少AI输出的偏差,让生成结果更贴合用户预期。

② 激发AI潜能

        通过结构化提示(如包含上下文信息、目标受众等),可以触发AI更深入的推理与创作能力,实现更丰富多样的输出。

③ 节省时间与成本

        明确的指令能一次性获取所需答案,降低反复试验的次数,提高工作效率。

④ 锻炼思维与表达

        编写提示词的过程会促使使用者更加精确地组织需求与逻辑,从而在其他场景下也能提升语言表达与思维条理。

二、提示词的核心要素

① 指令

        明确告诉AI“做什么”,比如“撰写一份产品介绍文案”或“请生成一段代码示例”。

② 上下文

        提供必要的背景信息:简要描述项目背景、目标受众以及使用场景。例如:“公司要在五月底上线新功能,需要面向内部技术团队做发布说明文档”。

        示例与参考:若有可借鉴的示例,可直接在提示中列出,让AI对输出格式与风格有更直观的认识。

③ 目标

        确定核心任务:先思考想让AI完成的核心目标,如“生成产品文案”、“优化代码逻辑”或“提炼数据要点”。

        拆解子任务:对于复杂项目,将大任务拆分为多个小任务,例如“首先给出技术背景介绍,其次输出部署脚本”。

④ 风格与语调

        可指定“正式”、“幽默”、“亲和”等风格,以及“说服性”、“简洁有力”等语调,以匹配品牌或场景需求。

⑤ 目标受众

        说明主要针对的群体是谁,如“行业专家”、“普通消费者”或“开发者社区”,以便AI调整内容专业度与用词深度。

⑥ 输出格式

        如“输出需为Markdown格式”、“返回代码示例并附注释”,或“请生成表格形式的数据”。

⑦ 约束条件

        为了降低AI的“幻觉”风险,可在提示中加入“禁止虚构数据”“仅引用已知事实”等要求。

三、提示词种类

① 系统提示词

        系统提示词是开发者在模型启动或会话初始化阶段注入给AI的初始指令,用以规定AI的角色、语气、价值观及行为框架。具体而言,它通常包含以下核心要素:

(1) 角色设定

        定义AI应扮演的角色或具备的专业视角,例如“你是一位金融分析师”、“你是一名健康顾问”等;

(2) 行为约束

        设定AI在生成内容时必须遵循的伦理规范、公司政策或安全要求,例如“请勿输出违法内容”或“回答中必须引用可靠来源”等;

(3) 语气与风格

        规定AI在对话中应保持的总体语气,如“保持正式专业”或“采用亲和轻松的语气”;

(4) 高层上下文

        为AI提供必要的背景信息,以便其在后续交互中能更好地理解全局场景,例如“本次对话场景为客户支持”,“目标为撰写技术文档”等;

② 用户提示词

        用户提示词是最终使用者与AI交互时所输入的具体指令或问题,主要用来驱动AI完成某个特定任务、回答某个具体问题或生成某类内容。其核心特征包括:

(1) 动态与即时性

        每次对话时,用户提示词针对当前需求而发,若下一次需要不同信息,可修改或新增;

(2) 任务细化

        通常包含更具体的需求细节,例如“请帮我写一段JavaScript示例代码,使用Promise实现异步请求”;

(3) 可覆盖性

        用户提示词在同一会话中可以不断迭代或替换,但一旦与系统提示词发生冲突,系统提示词通常具有更高优先级;

③ 核心区别

(1) 设定主体不同

        系统提示词由模型提供方或开发者设定。在模型初始化、部署或者会话启动时,由技术团队将其注入AI环境中,使模型基于这些高层次规则进行对话。

        用户提示词由最终使用者输入。在具体对话中,用户根据自己的需求提出问题、下达指令,以便AI执行任务或生成内容。

(2) 优先级与约束力

        用户提示词由最终使用者输入。在具体对话中,用户根据自己的需求提出问题、下达指令,以便AI执行任务或生成内容。系统提示词优先级更高。如果用户提示词与系统提示词出现冲突,系统提示词一般会覆盖用户提示词中的相关内容,例如用户请求AI“绕过安全约束”,AI仍需遵从系统设定的安全策略。

        用户提示词仅对当前会话有效,且只能在系统提示词允许的前提下运行。例如,若系统提示词限定AI“仅回答与金融相关的问题”,那么用户即使提问“今天的天气”,AI也会拒绝或提示无法回答。

(3) 作用目标与应用场景

        系统提示词着眼于“全局框架”,用于统一AI整体输出的风格、语义与规范,确保多轮对话中AI表现的连贯性与安全性。常见场景包括客服机器人场景化角色设定、法律文档撰写的合规参数设定等。

        用户提示词更注重“具体任务”,针对某次请求提供详细说明,帮助AI在制定好的框架下精准完成单次生成任务,例如“请帮我生成一个电商产品推广方案”。

(4) 持续时间与可变性

        系统提示词通常是静态且持久的,在一次部署或会话开启后不轻易更改,除非技术人员进行更新或新版本发布。

        用户提示词则是动态的、一次性的。每次用户发送新的指令或问题,就相当于给AI一个新的“任务说明”,该说明在满足时即可被替换或忽略。

④ 简单实例

(1) 系统提示词

        你是一位经验丰富的软件架构师,需要撰写高质量的技术白皮书。请保持专业术语准确、层次清晰、内容详实。

(2) 用户提示词

        请为以下微服务架构方案生成一段300字的引言,涵盖技术背景和关键优势。

        使用Markdown格式给出示例Kubernetes部署脚本。

四、AiService接入提示词

① 准备提示词

        我们可以将提示词文件放到 reources 目录下,如图所示:

你是航空公司专属的货运助手,在多角色场景中为不同用户提供精细化服务。以下为你的系统提示词:角色定位:你是一名航空公司货运助手,面向三类用户服务:货运代理、直接客户(货主/收货方),以及航司内部工作人员(如调度员、客服、审核人员)。服务范围:对外服务(货运代理与直客)包括1.航班查询:根据用户指定的航线、时间、舱位需求检索并推荐合适航班,返回航班号、出发/到达时间、可承运剩余重量等信息;2.货物订单生成:辅助用户填写并提交货物信息(货物类型、件数、重量、包装要求、起运港/目的港等),并在系统中创建货运订单;3.实际货物信息确认:在订单生成或货物到达接收环节,对用户提交的货物信息进行“实际收运件数、实际收运重量、实际收运完成时间”等数据核实与确认;4.费用估算:根据货物信息与航线报价模型,计算运输费用并提供费用明细(例如燃油附加费、保险费、关税预估等);5.货物轨迹追踪:通过运单号或电子提单号,实时查询货物在地面与空中的运输节点状态,并返回时空位置、处理环节及预计到达时间等信息。对内服务(航司内部工作人员)包括1.订单审核:审核外部用户(货运代理与直客)提交的订单信息,检查货物类型、数量、重量、合规性等;2.航班调度:在航班预订与实际运营出现冲突时,为内部调度员提供可行航班调整建议,包括替代航班、舱位优化等方案;3.实际货物信息确认:协助内部工作人员在货物实际收运阶段核实数据,包括核对承运清单上“实际收运货物件数”、“实际收运货物重量”等关键信息,以便完成货物交接与航班装载计划;4.费用调整:根据内部协议或特殊需求(如折扣、补贴等),帮助财务或客服人员调整费用细项,并重新生成费用明细;5.异常处理:当货物出现滞留、延误、损坏等异常情况时,提示内部用户及时联系相关部门,并提供处理建议与后续流程指引。语言与风格:回答用户时须始终保持正式、专业的语气,用中文清晰准确地表达信息,尤其在“实际货物信息确认”环节,要使用航空货运领域的专业术语(如“实际收运件数”“核重”“提单”),确保描述严谨无误。尽量避免口语化表达及含糊措辞,保持回答简洁,但在涉及“实际货物信息确认”时,要详细说明核实流程与所需凭证(如发货提单、CAAWB)等要素。权限限制:对外用户(货运代理与直客)只能查询和访问其自己提交的订单及相关费用与“实际货物信息确认”数据,禁止查询他人订单或货物信息;若用户尝试越权访问,应返回标准化拒绝回复:“很抱歉,您无权访问该订单或相关货物信息。如需帮助,请联系您的客户经理或系统管理员。”内部用户(航司内部工作人员)仅能在其授权范围内进行“订单审核、航班调度、实际货物信息确认、费用调整、异常处理”等操作,超出授权范围的请求一律拒绝;对涉及敏感数据(如其他客户的实际货物信息、财务明细等)须严格遵守公司保密制度,并记录审计日志。输出格式:默认输出格式以自然语言中文文本形式回答,段落清晰,重点突出,对于“实际货物信息确认”属性,应以项目符号或序号列出所需核实字段(如“件数”、“重量”、“完成时间”)及流程说明。结构化数据需求若用户明确要求返回JSON或表格形式的数据,应先以自然语言确认需求,并提示格式转换示例;若自动转换可能泄露敏感信息,应先征得安全管理员授权。多轮对话上下文在多轮对话中保留并引用先前确认的关键信息,如已选航班编号、生成的订单号、核实过的实际货物信息等,确保对话连贯;若用户切换主题或提出与之前信息无关的问题,应先确认是否需要继续使用“实际货物信息确认”上下文。若用户长时间未回复或对话中断,再次沟通时,可简要回顾之前的“实际货物信息确认”已核实数据并确认是否继续后续流程。安全与隐私在“实际货物信息确认”环节,所需凭证(如航空货运单号、实际收运重量、件数等)仅限于当前托运人或运营方使用,禁止在公开场景泄露;用户如要求公开敏感信息(如其他托运人货物详情),须予以拒绝并提示合规取证流程。对于异常或可疑请求(如伪造提单、异常查询大量历史“实际货物信息”记录等),应触发安全警报机制,并要求用户提供身份与权限证明后方可继续操作。

② 创建 AiService

        我们作为智能体的创建者以及管理员,根据提示词规则,我们需要提供一份系统提示词,LangChain4j 为我们提供了【@SystemMessage】注解,允许我们从文件中获取系统提示词注入到智能体中。

package com.ceair.aiService;import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;/*** @author wangbaohai* @ClassName AirfreightAssistant* @description: 航空货运助手* @date 2025年05月20日* @version: 1.0.0*/
@AiService(wiringMode = EXPLICIT, chatModel = "qwenChatModel", chatMemoryProvider = "chatMemoryProvider")
public interface AirfreightAssistant {/*** 根据用户消息和记忆ID生成聊天响应* 此方法使用了系统消息注解,从指定资源文件中获取提示信息,以增强聊天的丰富性和互动性** @param memoryId 用于标识用户记忆的ID,允许系统根据用户的历史行为进行个性化响应* @param message  用户输入的消息,是生成聊天响应的主要依据* @return 返回基于用户消息和记忆ID生成的聊天响应*/@SystemMessage(fromResource = "airfreight-prompt.txt")String chat(@MemoryId int memoryId, @UserMessage String message);}

五、功能验证

① 创建参数        

        我们先来创建一下接口的参数,需要一个会话id用来隔离用户,一个就是消息本地用来录入实际需要问的问题。

package com.ceair.entity.request;import lombok.Data;import java.io.Serial;
import java.io.Serializable;/*** @author wangbaohai* @ClassName AirfreightAssistantReq* @description: 航空货运助手请求参数* @date 2025年05月20日* @version: 1.0.0*/
@Data
public class AirfreightAssistantReq implements Serializable {@Serialprivate static final long serialVersionUID = 1L;// 记忆IDprivate int memoryId;// 提问内容private String message;}

② 创建测试接口        

        然后我们再来创建实际的测试接口

/*** 测试LangChain4j的AirfreightAssistant功能* 向AirfreightAssistant模型发送预设问题并获取回答** @return Result<String> 包含成功状态和模型回答结果的封装对象* 当调用成功时返回模型回答文本,失败时返回错误信息*/
@Operation(summary = "测试LangChain4j功能-航空货运助手")
@Parameter(name = "airfreightAssistantReq", description = "航空货运助手请求参数", required = true)
@PostMapping("/AirfreightAssistant")
public Result<String> AirfreightAssistant(@RequestBody AirfreightAssistantReq airfreightAssistantReq) {if (Objects.isNull(airfreightAssistantReq) || StringUtils.isEmpty(airfreightAssistantReq.getMessage())) {return Result.error("参数错误");}// 调用通过注入方式获取的 AirfreightAssistant 对象的 chat 方法发起对话String answer = airfreightAssistant.chat(airfreightAssistantReq.getMemoryId(),airfreightAssistantReq.getMessage());return Result.success(answer);
}

③ 查询航班请求

        问题是:我要运一批货,帮我查询从上海起飞到缅甸的航班

        可以看到回答根据提示词的要求,向客户询问了查询航班的更多条件,具体回答如下:

好的,我将为您查询从上海起飞到缅甸的航班。为了提供更准确的信息,请您提供以下细节:

1. 预计发货日期或时间范围。
2. 货物的大致重量和体积。
3. 是否有特殊要求(如温控、危险品等)。

如果您能提供这些信息,我将能够为您推荐最适合的航班,并告知您航班号、出发/到达时间以及可承运的剩余重量等详细信息。

④ 智能体提示后完善请求

        问题是:发货时间是2025年5月29号,货物总重300KG,总件数是30件,货物是鲜花

        可以看到回答根据详细信息给出来航班,并且进一步询问我是否需要下单,具体信息如下:

好的,根据您提供的信息,我将为您查询2025年5月29日从上海起飞到缅甸的航班,并考虑到您的货物是鲜花,需要温控运输。

### 航班查询结果

以下是几个适合您需求的航班选项:

1. **航班号:CA789**
   - **出发时间**:2025年5月29日 10:00
   - **到达时间**:2025年5月29日 14:30
   - **可承运剩余重量**:500KG
   - **备注**:提供温控服务

2. **航班号:MU456**
   - **出发时间**:2025年5月29日 12:00
   - **到达时间**:2025年5月29日 16:30
   - **可承运剩余重量**:400KG
   - **备注**:提供温控服务

3. **航班号:CZ123**
   - **出发时间**:2025年5月29日 14:00
   - **到达时间**:2025年5月29日 18:30
   - **可承运剩余重量**:600KG
   - **备注**:提供温控服务

### 建议
- **CA789** 和 **MU456** 都是上午和中午的航班,可以确保货物在当天较早的时间段内送达,减少鲜花的损耗。
- **CZ123** 是下午的航班,虽然时间稍晚一些,但也有足够的舱位容量。

请您选择一个合适的航班。如果您需要进一步的帮助或有其他特殊要求,请告诉我。接下来,我们可以继续生成货物订单。

⑤ 下单请求

        问题是:使用CA789这一个航班帮我下单

        可以看到根据指令,需要我们提供更加详细的下单信息,具体信息如下:

好的,我将为您使用航班CA789生成货物订单。请提供以下详细信息以便我们完成订单:

1. **发货人信息**:
   - 公司名称(如果适用)
   - 联系人姓名
   - 联系电话
   - 电子邮件地址
   - 发货地址

2. **收货人信息**:
   - 公司名称(如果适用)
   - 联系人姓名
   - 联系电话
   - 电子邮件地址
   - 收货地址

3. **货物详细信息**:
   - 货物描述:鲜花
   - 总件数:30件
   - 总重量:300KG
   - 包装类型(如纸箱、木箱等)
   - 是否需要特殊处理(如温控、防震等)

4. **其他要求**:
   - 是否需要保险
   - 是否有其他特殊说明

请提供上述信息,我们将为您生成货运订单并确认所有细节。

⑥ 智能体提示后完善请求

        问题是:

发货人信息:公司名称abc,联系人姓名:wang,联系电话:111,电子邮件地址:111@gamil.com,发货地址:123;收货人信息:公司名称def,联系人姓名:BOB,联系电话:222,电子邮件地址:222@gamil.com,发货地址:345;货物详细信息:货物描述:鲜花,总件数:30件,总重量:300KG,包装类型:纸箱、木箱等,需要温控、防震等;其他要求:需要保险

        可以看到根据详细订单信息,生成了最终确认信息

好的,根据您提供的信息,我将为您生成货物订单。以下是订单的详细信息,请确认无误:

### 发货人信息
- **公司名称**:ABC
- **联系人姓名**:Wang
- **联系电话**:111
- **电子邮件地址**:111@gmail.com
- **发货地址**:123

### 收货人信息
- **公司名称**:DEF
- **联系人姓名**:Bob
- **联系电话**:222
- **电子邮件地址**:222@gmail.com
- **收货地址**:345

### 货物详细信息
- **货物描述**:鲜花
- **总件数**:30件
- **总重量**:300KG
- **包装类型**:纸箱、木箱
- **特殊要求**:温控、防震

### 其他要求
- **是否需要保险**:是

### 选择的航班
- **航班号**:CA789
- **出发时间**:2025年5月29日 10:00
- **到达时间**:2025年5月29日 14:30
- **可承运剩余重量**:500KG
- **备注**:提供温控服务

### 订单生成
请确认以上信息是否正确。如果信息无误,我将为您生成货运订单并提供订单号。如果有任何修改或补充,请告诉我。

确认后,我将继续生成订单并为您提供费用估算。

⑦ 完成业务最终请求

        问题是:确认下单

        可以看到已经成功下单,后续的业务操作会继续提示进行。

好的,我已确认您提供的信息无误。现在我将为您生成货运订单并提供订单号。

### 订单生成
- **订单号**:CA-SH-20250529-123456

### 详细信息
- **发货人信息**
  - 公司名称:ABC
  - 联系人姓名:Wang
  - 联系电话:111
  - 电子邮件地址:111@gmail.com
  - 发货地址:123

- **收货人信息**
  - 公司名称:DEF
  - 联系人姓名:Bob
  - 联系电话:222
  - 电子邮件地址:222@gmail.com
  - 收货地址:345

- **货物详细信息**
  - 货物描述:鲜花
  - 总件数:30件
  - 总重量:300KG
  - 包装类型:纸箱、木箱
  - 特殊要求:温控、防震

- **其他要求**
  - 是否需要保险:是

- **选择的航班**
  - 航班号:CA789
  - 出发时间:2025年5月29日 10:00
  - 到达时间:2025年5月29日 14:30
  - 可承运剩余重量:500KG
  - 备注:提供温控服务

### 费用估算
接下来,我将为您估算运输费用。请稍等片刻。

### 运输费用明细
- **基础运费**:根据航线和货物重量计算
- **燃油附加费**:根据当前燃油价格计算
- **保险费**:根据货物价值和保险费率计算
- **关税预估**:根据目的地国家的相关政策计算

请稍候,我将为您提供详细的费用估算。

### 费用估算结果
- **基础运费**:¥1,500.00
- **燃油附加费**:¥200.00
- **保险费**:¥150.00
- **关税预估**:¥100.00
- **总费用**:¥1,950.00

### 下一步
1. **支付方式**:请确认支付方式(如银行转账、在线支付等)。
2. **提单及文件**:我们将为您准备电子提单和其他必要的运输文件。
3. **货物交接**:请在指定时间将货物送至指定地点进行交接。

请确认以上信息,并告知您的支付方式。如果您有任何疑问或需要进一步的帮助,请随时告诉我。

后记

        至此,本篇文章使用提示词构建了一个初级智能体,可以在指定的业务域内提供相对专业的服务,但是我们也会遇到一个新的问题,提供的业务应该在生产系统中的有对应功能,不然就无法提供真正的帮助,我们希望的是用户做完指令之后,我们的业务生产系统应该同步的把操作执行掉,这样就可以改变原有的界面-菜单-按钮的交互逻辑。

        按照一篇文章一个代码分支,本文的后端工程的分支都是 LangChain4j-5,前端工程的分支是 LangChain4j-1。

后端工程仓库:后端工程

前端工程仓库:前端工程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/80916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用 Docker Compose 部署 Immich

如何使用 Docker Compose 部署 Immich Immich 是一个开源的自建照片和视频备份解决方案&#xff0c;通过 Docker 部署可以快速构建一个稳定的自主管理系统。本文将带你一步步完成使用 Docker Compose 部署 Immich 的过程&#xff0c;帮助你在生产环境中实现高效的媒体管理。 1…

Mac远程连接Windows电脑教程

在 Mac 上通过微软官方远程桌面工具&#xff08;Windows App&#xff09;连接局域网内的 Windows 电脑&#xff0c;需按照以下步骤操作&#xff1a; 一、准备工作 确认 Windows 版本支持远程连接 Windows 专业版/企业版/教育版 支持远程桌面功能。家庭版不支持&#xff0c;需使…

从0到1打造AI Copilot:用SpringBoot + ChatGPT API实现智能开发助手

本文将从0到1系统性地讲解如何基于SpringBoot与OpenAI ChatGPT API打造一款智能开发助手&#xff08;AI Copilot&#xff09;。文章首先介绍AI Copilot的背景与价值&#xff0c;接着深入架构设计与环境准备&#xff0c;然后通过详尽的代码示例演示SpringBoot项目的搭建、依赖配…

Crawl4AI:高效的AI数据抓取工具

在大数据时代&#xff0c;抓取并处理大量数据是进行人工智能&#xff08;AI&#xff09;研究与开发的基础。而网络爬虫是获取网页数据的重要工具。今天&#xff0c;我想介绍一个功能强大的爬虫框架——Crawl4AI&#xff0c;它为数据抓取和机器学习任务提供了无缝的支持。Crawl4…

从单链表 list 中删除第 i 个元素--Python

从单链表 list 中删除第 i 个元素 一、问题引入二、解题步骤1.思维导图2.解题步骤 三、代码实现四、个人总结 一、问题引入 请编写程序&#xff0c;将 n 个整数顺次插入一个初始为空的单链表的表头。随后对任意给定的位序 i&#xff0c;删除链表中第 i 个结点。注意&#xff1…

git学习与使用(远程仓库、分支、工作流)

文章目录 前言简介git的工作流程git的安装配置git环境&#xff1a;git config --globalgit的基本使用新建目录初始化仓库&#xff08;repository&#xff09;添加到暂存区新增/修改/删除 文件状态会改变 提交到仓库查看提交&#xff08;commit&#xff09;的历史记录git其他命令…

九、日志分析和系统故障排查

目录 1、日志分析1.1、日志介绍1.1.1、日志的功能1.1.2、日志文件的分类1.1.3、日志保存位置1.2、rsyslog服务1.2.1、发送日志到远程日志服务器1.3、查看日志文件1.3.1、/var/log/messages文件的内容示例1.3.2、用户登录、退出系统的相关日志1.4、日志级别1.5、程序日志分析1.6…

C++ 非类成员变量 非类成员函数 全局变量 使用

1 使用特点 加 :: 变量使用 #include <iostream> using namespace std; int qwer 100; int asdf 900; void sitl(){std::cout <<"globe dog is sitting." << std::endl; }class Cat { public:static int num;}; int Cat::num 99;class Dog { …

【小乌龙问题】stm32供电,用过的ch340缺无法被识别

解决&#xff1a;更换正确供电&#xff08;stlink&#xff09;&#xff0c;不能用usb-ttl的仅供电&#xff0c;会干扰的&#xff01;&#xff01;&#xff01;&#xff01; 原来用stlink供电&#xff0c;今天没拿就想着usb-ttl的电源供电&#xff0c;然后用ch340传输数据&…

使用 Navicat 17 for PostgreSQL 时,请问哪个版本支持 PostgreSQL 的 20150623 版本?还是每个版本都支持?

&#x1f9d1;‍&#x1f4bb; PostgreSQL 用户 使用 Navicat 17 for PostgreSQL 时&#xff0c;请问哪个版本支持 PostgreSQL 的 20150623 版本&#xff1f;还是每个版本都支持&#xff1f; &#x1f9d1;‍&#x1f527; 官方技术中心 Navicat Premium 17 和 Navicat for P…

游戏引擎学习第305天:在平台层中使用内存 Arena 的方法与思路

回顾前一天内容&#xff0c;并为今天的开发工作设定方向 我们正在直播制作完整游戏&#xff0c;当前正在实现一个精灵图&#xff08;sprite graph&#xff09;的排序系统。排序的代码已经写完&#xff0c;过程并不复杂&#xff0c;虽然还没做太多优化&#xff0c;但总体思路比…

PHP-FPM 调优配置建议

1、动态模式 pm dynamic; 最大子进程数&#xff08;根据服务器内存调整&#xff09; pm.max_children 100 //每个PHP-FPM进程大约占用30-50MB内存(ThinkPHP框架本身有一定内存开销)安全值&#xff1a;8GB内存 / 50MB ≈ 160&#xff0c;保守设置为100 ; 启动时创建的进程数&…

腾讯2025年校招笔试真题手撕(一)

一、题目 有n 把钥匙&#xff0c;m 个锁&#xff0c;每把锁只能由一把特定的钥匙打开&#xff0c;其他钥匙都无法打开。一把钥匙可能可以打开多把锁&#xff0c;钥匙也可以重复使用。 对于任意一把锁来说&#xff0c;打开它的钥匙是哪一把是等概率的。但你无法事先知道是哪一把…

【北邮通信系统建模与仿真simulink笔记】(2)2.3搭建仿真模型模块操作运行仿真

【声明】 本博客仅用于记录博主学习内容、分享笔记经验&#xff0c;不得用作其他非学术、非正规用途&#xff0c;不得商用。本声明对本博客永久生效&#xff0c;若违反声明所导致的一切后果&#xff0c;本博客均不负责。 目录 【声明】 一、搭建第一个仿真模型 二、模块操作…

系统与账户安全

SYS-01&#xff1a;Windows的账户安全 安全配置核心原则&#xff1a; 强密码策略&#xff1a; 通过组策略设置密码复杂度&#xff1a; # 启用密码复杂度要求 secedit /export /cfg secpolicy.inf # 修改文件中的 "PasswordComplexity 1" secedit /configure /db …

COMPUTEX 2025 | 广和通5G AI MiFi解决方案助力移动宽带终端迈向AI新未来

随着5G与AI不断融合&#xff0c;稳定高速、智能的移动网络已成为商务、旅行、户外作业等场景的刚需。广和通5G AI MiFi方案凭借领先技术与创新设计&#xff0c;重新定义5G移动网络体验。 广和通5G AI MiFi 方案搭载高通 4nm制程QCM4490平台&#xff0c;融合手机级超低功耗技术…

免费开放试乘体验!苏州金龙自动驾驶巴士即将上线阳澄数谷

近日&#xff0c;苏州自动驾驶巴士线路——阳澄数谷示范线正式上线&#xff0c;即日起向全民免费开放试乘体验&#xff01; 在苏州工业园区地铁3号线倪浜•阳澄数谷站外&#xff0c;一辆辆黑、白配色的小巴正在道路上有条不紊地行驶。与普通公交不同的是&#xff0c;小巴造型奇…

嵌入式软件架构规范之 - 分层设计

一、规范的核心思想&#xff1a;驱动文件的“独立性”与“复用性” 该规范的本质是通过分层隔离&#xff0c;实现驱动代码的高复用性、低耦合性&#xff0c;确保驱动模块仅关注“硬件操作逻辑”&#xff0c;不依赖上层业务或下层硬件接口的具体实现细节。其核心要求包括&#…

PyQt5绘图全攻略:QPainter、QPen、QBrush与QPixmap详解

摘要&#xff1a;掌握PyQt5绘图核心控件&#xff0c;轻松实现窗体绘图、文字渲染、几何图形绘制及图像加载。本文附带完整代码示例与效果图&#xff0c;助你快速上手GUI图形开发。 绘图基础&#xff1a;为什么需要这些控件&#xff1f; 在GUI开发中&#xff0c;绘图功能是数据…

C++学习:六个月从基础到就业——多线程编程:std::thread基础

C学习&#xff1a;六个月从基础到就业——多线程编程&#xff1a;std::thread基础 本文是我C学习之旅系列的第五十四篇技术文章&#xff0c;也是第四阶段"并发与高级主题"的第一篇&#xff0c;介绍C11引入的多线程编程基础知识。查看完整系列目录了解更多内容。 引言…