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

构建具备推理与反思能力的高级 Prompt:LLM 智能代理设计指南

在构建强大的 AI 系统,尤其是基于大语言模型(LLM)的智能代理(Agent)时,Prompt 设计的质量决定了系统的智能程度。传统 Prompt 通常是简单的问答或填空式指令,而高级任务需要更具结构性、策略性和思考性的 Prompt。

本文将结合 链式思维(Chain-of-Thought, CoT)反思机制(Reflection)代理执行机制(LLM Agents),分享如何高效构建具备"推理+行动+自检"的高级 Prompt,并结合 Python 代码示例展示如何在实践中使用。

###本文的案例使用三方API为Openrouter:“https://openrouter.ai”

🧠 背景知识回顾

技术概述
链式思维 (CoT)通过让 LLM 逐步推理,提升复杂任务的准确率和可解释性(如数学推理、规划)。
反思/自我反馈 (Reflection)模型对自己的回答进行分析与修正(如 ReAct、Reflexion)。
代理机制 (Agent)LLM 执行有目标的任务,通过观察 → 思考 → 行动 → 再观察的闭环完成复杂目标。

🎯 构建高效 Prompt 的 4 个关键原则

1. 明确角色与任务(Position & Purpose)

指定 LLM 的身份与任务目标,提升上下文对齐效果:

你是一个项目管理专家,专注于软件交付效率优化。你的任务是分析以下项目状态,并输出关键改进建议。

Python 实现示例:

from openai import OpenAI
from dotenv import load_dotenv
import os# 加载环境变量
load_dotenv()# 初始化客户端
client = OpenAI()def create_expert_consultant(expertise, task_description):"""创建一个专家角色的 Prompt"""system_message = f"""你是一个{expertise}专家。你的任务是{task_description}。请基于你的专业知识提供深入、专业的分析和建议。"""return system_message# 使用示例
project_analysis_prompt = create_expert_consultant(expertise="项目管理",task_description="分析以下项目状态,找出延迟原因,并输出关键改进建议"
)# 向 API 发送请求
def get_expert_analysis(prompt, project_data):response = client.chat.completions.create(model="gpt-4",messages=[{"role": "system", "content": prompt},{"role": "user", "content": f"项目状态数据:\n{project_data}"}])return response.choices[0].message.content# 测试使用
project_data = """
项目名称: 电商平台重构
计划周期: 3个月
当前状态: 已延期1个月
团队规模: 5名开发, 2名测试
完成进度: 65%
主要问题: 
- API文档不完整导致集成困难
- 前端组件复用率低
- 测试覆盖率不足
"""analysis = get_expert_analysis(project_analysis_prompt, project_data)
print(analysis)

2. 引导链式推理(Process)

设计多步骤的任务指令,引导 LLM 逐步完成推理与判断:

请按照以下步骤进行:
1. 分析输入信息中存在的问题;
2. 推测可能的原因;
3. 提出改进建议;
4. 总结为清晰的行动计划。

Python 实现示例:

from openai import OpenAI
from dotenv import load_dotenv
import os# 加载环境变量
load_dotenv()
# 初始化客户端
client = OpenAI()def chain_of_thought_prompt(task_description, steps):"""创建一个引导模型逐步思考的 Prompt"""steps_text = "\n".join([f"{i+1}. {step}" for i, step in enumerate(steps)])prompt = f"""任务:{task_description}请按照以下步骤逐一思考并输出结果:
{steps_text}请确保每个步骤都有明确的输出,并标注步骤编号。"""return prompt# 使用示例 - 解决一个数学问题
math_steps = ["理解问题,确定已知条件和求解目标","列出解决问题所需的方程或关系","逐步求解方程","检查答案的合理性","给出最终答案"
]math_cot_prompt = chain_of_thought_prompt("解决以下数学问题:一个水箱以每分钟5升的速度注水,同时以每分钟3升的速度漏水。如果水箱初始有10升水,那么多久后水箱会有25升水?",math_steps
)# 向 API 发送请求
response = client.chat.completions.create(model="qwen/qwen-2.5-72b-instruct",messages=[{"role": "system", "content": "你是一个擅长解决数学问题的助手,请一步步思考。"},{"role": "user", "content": math_cot_prompt}]
)print(response.choices[0].message.content)

3. 加入反思机制(Proofing)

鼓励 LLM 审查自己的输出、找出问题并修正:

请回顾你刚才的回答,思考是否存在逻辑漏洞或遗漏的关键点,并进行修正。输出最终版本的建议。

Python 实现示例:

from openai import OpenAI
from dotenv import load_dotenv
import os# 加载环境变量
load_dotenv()
# 初始化客户端
client = OpenAI()
def self_reflection_prompt(initial_task, response_to_evaluate):"""创建一个让模型自我反思的 Prompt"""reflection_prompt = f"""初始任务:{initial_task}你之前的回答:
{response_to_evaluate}请对你的回答进行自我评估,考虑以下几点:
1. 是否有逻辑漏洞或不一致的地方?
2. 是否遗漏了重要信息或关键点?
3. 推理过程是否足够严谨?
4. 结论是否合理且有力度支持?请指出存在的问题,并提供修正后的完整回答。标记为"最终版本"。"""return reflection_prompt# 使用示例 - 假设这是一个初始回答
initial_response = """
解决方案:实施微服务架构可以提高系统的可扩展性和灵活性。
步骤:
1. 将系统拆分为独立服务
2. 实施 API 网关
3. 部署到云环境
"""# 让模型反思并改进
reflection_prompt = self_reflection_prompt("设计一个高可用的电商系统架构",initial_response
)# 向 API 发送请求
response = client.chat.completions.create(model="qwen/qwen-2.5-72b-instruct",messages=[{"role": "system", "content": "你是一个系统架构专家,请对你的方案进行批判性思考和完善。"},{"role": "user", "content": reflection_prompt}]
)improved_response = response.choices[0].message.content
print(improved_response)

4. 增强行动能力(Agent-style Prompt)

设计具备感知、思考、行动、反思循环的 Prompt:

你将完成以下任务:
1. 读取输入数据(环境感知);
2. 分析目标需求(理解与推理);
3. 拆解任务并规划步骤(任务规划);
4. 输出每个步骤的操作建议;
5. 若任务未完成,则思考失败原因并重新规划(反思+重试)。请开始处理任务:{用户输入}

Python 实现示例:

from openai import OpenAI
import json
import os
from dotenv import load_dotenv# 加载环境变量
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
base_url = os.getenv("OPENAI_BASE_URL")
client = OpenAI(api_key=api_key, base_url=base_url)class ReflectiveAgentQwen:"""适配 Qwen 模型的反思型智能代理"""def __init__(self, system_role):self.system_role = system_roleself.messages = [{"role": "system", "content": system_role}]self.tools = []def register_tool(self, name, description, function):self.tools.append({"name": name,"description": description,"function": function})def _get_tools_prompt(self):if not self.tools:return ""tool_list = "\n".join([f"{tool['name']}: {tool['description']}" for tool in self.tools])return f"\n你可以使用以下工具来辅助完成任务(请在需要时明确说明要调用哪个工具及输入内容):\n{tool_list}"def _call_tool_if_needed(self, response_content):for tool in self.tools:if f"调用工具 {tool['name']}" in response_content:# 提取输入input_start = response_content.find("输入:")if input_start != -1:input_text = response_content[input_start + 3:].strip().splitlines()[0]print(f"\n>>> 调用工具 {tool['name']},输入: {input_text}")return tool["function"](input_text)return Nonedef think_act_reflect(self, user_input, max_cycles=3):intro = self._get_tools_prompt()self.messages.append({"role": "user", "content": user_input + intro})for cycle in range(max_cycles):print(f"\n--- 循环 {cycle + 1}/{max_cycles} ---")# 🧠 思考阶段print("🧠 思考中...")response = client.chat.completions.create(model="qwen/qwen-2.5-72b-instruct",messages=self.messages,)message = response.choices[0].messagecontent = message.contentprint("🤖 输出:", content)self.messages.append({"role": "assistant", "content": content})# 🛠️ 行动阶段(判断是否调用工具)result = self._call_tool_if_needed(content)if result:self.messages.append({"role": "user","content": f"工具调用结果:{result}"})else:print("✅ 没有需要调用工具,任务可能已完成")break# 🔁 反思阶段print("🔍 反思中...")reflection_prompt = ("请反思你刚才的分析与工具使用是否合理,有无遗漏?""如果有改进建议,请继续执行。若任务完成,请明确标注“任务已完成”。")self.messages.append({"role": "user", "content": reflection_prompt})reflection_response = client.chat.completions.create(model="qwen/qwen-2.5-72b-instruct",messages=self.messages)reflection_message = reflection_response.choices[0].messageprint("🪞 反思输出:", reflection_message.content)self.messages.append({"role": "assistant", "content": reflection_message.content})if "任务已完成" in reflection_message.content:break# 📤 最终总结final = client.chat.completions.create(model="qwen/qwen-2.5-72b-instruct",messages=self.messages + [{"role": "user", "content": "请总结你的最终答案:"}])return final.choices[0].message.content# 示例用法
if __name__ == "__main__":agent = ReflectiveAgentQwen(system_role="你是一个研究型智能助手,能够理解任务、调用工具、反思并总结。")# 注册一个模拟搜索工具def web_search(query):if "人工智能" in query:return "人工智能是计算机科学的一个分支,致力于模拟人类智能。"elif "机器学习" in query:return "机器学习是 AI 的一个子领域,专注于让系统从数据中学习。"else:return "未找到相关信息。"agent.register_tool("web_search", "用于网络搜索信息", web_search)# 测试任务question = "请解释人工智能与机器学习的区别,并说明应用领域。"result = agent.think_act_reflect(question)print("\n✅ 最终回答:\n", result)


📦 示例:面向医疗场景的智能代理设计 Prompt

你是一个 AI 项目设计专家,请你帮助团队分析并设计一个面向医疗场景的 AI 代理。任务如下:
1. 任务目标:分析用户上传的电子病历,抽取关键信息,自动生成初步诊疗建议;
2. 输入格式:包含 PDF、图片、文本等混合文档;
3. 输出格式:结构化 JSON + 建议摘要。请你分步骤完成以下内容:
1. 明确关键需求与挑战;
2. 推理出合适的技术架构与模块;
3. 说明每个模块的功能与关键技术点;
4. 回顾整体设计并输出最终建议。输出后,请你反思是否有遗漏或逻辑漏洞,若有请修正,并标注"最终版本"。

Python 医疗AI代理示例实现:

from openai import OpenAI
import json
import os
from dotenv import load_dotenv
from typing import Dict, List, Any, Optional
import base64
from datetime import datetime# 加载环境变量
load_dotenv()# 初始化 OpenAI 客户端
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))class MedicalDocumentProcessor:"""处理各种格式的医疗文档"""def extract_text_from_image(self, image_path: str) -> str:"""从图片中提取文本(使用Vision模型)"""try:# 读取图片并转为base64with open(image_path, "rb") as image_file:base64_image = base64.b64encode(image_file.read()).decode('utf-8')# 调用OpenAI Vision模型response = client.chat.completions.create(model="gpt-4-vision-preview",messages=[{"role": "user","content": [{"type": "text", "text": "请从这个医疗文档图片中提取所有文本内容,保持原始格式。特别注意提取患者信息、诊断结果、用药情况等医疗关键信息。"},{"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}]}],max_tokens=1000)return response.choices[0].message.contentexcept Exception as e:print(f"图片处理错误: {e}")return "图片处理失败"def extract_text_from_pdf(self, pdf_path: str) -> str:"""从PDF中提取文本(实际应用中使用PyPDF2等库)"""# 这里是简化的示例,实际实现需要使用PDF处理库return f"从PDF {pdf_path} 中提取的文本内容"def process_document(self, document_path: str) -> str:"""处理各类文档并提取文本"""if document_path.lower().endswith(('.png', '.jpg', '.jpeg')):return self.extract_text_from_image(document_path)elif document_path.lower().endswith('.pdf'):return self.extract_text_from_pdf(document_path)elif document_path.lower().endswith(('.txt', '.doc', '.docx')):# 简化示例,实际应用中需使用专门的文本处理方法with open(document_path, 'r', encoding='utf-8') as file:return file.read()else:return "不支持的文档格式"class MedicalInformationExtractor:"""从医疗文本中提取结构化信息"""def extract_key_information(self, text: str) -> Dict[str, Any]:"""提取关键医疗信息并结构化"""# 构建提示词来指导模型提取结构化信息prompt = f"""请从以下医疗文档中提取关键信息,并整理为结构化JSON格式。需要提取的字段包括:- 患者基本信息(姓名、年龄、性别、ID)- 主诉- 现病史- 既往史- 检查结果- 诊断结果- 用药建议仅返回JSON格式,不要包含其他文字。医疗文档内容:{text}"""response = client.chat.completions.create(model="gpt-4",messages=[{"role": "system", "content": "你是一个专业的医疗信息提取工具,能够从医疗文档中准确提取结构化信息。"},{"role": "user", "content": prompt}],response_format={"type": "json_object"})# 尝试解析JSON结果try:return json.loads(response.choices[0].message.content)except json.JSONDecodeError:# 若解析失败,返回空结构return {"error": "无法提取结构化信息","raw_text": text}class MedicalDiagnosisAdvisor:"""生成初步诊疗建议"""def generate_advice(self, patient_info: Dict[str, Any]) -> Dict[str, Any]:"""基于提取的信息生成初步诊疗建议"""# 转换病人信息为JSON字符串patient_json = json.dumps(patient_info, ensure_ascii=False, indent=2)# 构建提示词prompt = f"""基于以下患者信息,生成初步诊疗建议。注意:这只是初步建议,最终诊疗方案应由专业医生确定。患者信息:{patient_json}请提供:1. 初步诊断分析2. 建议进一步检查项目3. 可能的治疗方向4. 生活方式建议返回JSON格式,包含上述四个方面的信息。"""# 调用API生成建议response = client.chat.completions.create(model="gpt-4",messages=[{"role": "system", "content": "你是一个医疗诊断辅助系统,能基于患者信息提供初步诊疗建议。你的建议应严格基于医学知识,同时明确标注这只是初步建议,不能替代专业医生的诊断。"},{"role": "user", "content": prompt}],response_format={"type": "json_object"})# 解析并返回建议try:advice = json.loads(response.choices[0].message.content)# 添加免责声明advice["disclaimer"] = "本建议由AI辅助生成,仅供参考,不构成医疗建议。请咨询专业医生进行正式诊疗。"return adviceexcept json.JSONDecodeError:return {"error": "无法生成诊疗建议","disclaimer": "请咨询专业医生进行诊疗。"}class MedicalAIAgent:"""医疗AI代理总控制器"""def __init__(self):self.document_processor = MedicalDocumentProcessor()self.info_extractor = MedicalInformationExtractor()self.advisor = MedicalDiagnosisAdvisor()def process_medical_documents(self, document_paths: List[str]) -> Dict[str, Any]:"""处理医疗文档并生成诊疗建议"""# 1. 处理所有文档并合并文本combined_text = ""for doc_path in document_paths:text = self.document_processor.process_document(doc_path)combined_text += text + "\n\n"# 2. 提取结构化信息structured_info = self.info_extractor.extract_key_information(combined_text)# 3. 生成诊疗建议diagnosis_advice = self.advisor.generate_advice(structured_info)# 4. 整合结果result = {"patient_info": structured_info,"diagnosis_advice": diagnosis_advice,"summary": self._generate_summary(structured_info, diagnosis_advice)}# 5. 反思和验证结果result = self._validate_and_reflect(result, combined_text)return resultdef _generate_summary(self, patient_info: Dict[str, Any], advice: Dict[str, Any]) -> str:"""生成易读的摘要"""# 构建提示词prompt = f"""基于以下患者信息和诊疗建议,生成一段简洁的摘要,用通俗易懂的语言概括关键信息和建议。患者信息: {json.dumps(patient_info, ensure_ascii=False)}诊疗建议:{json.dumps(advice, ensure_ascii=False)}请用200字左右生成摘要。"""response = client.chat.completions.create(model="gpt-4",messages=[{"role": "system", "content": "你是一个医疗信息总结专家,能将复杂的医疗信息转化为通俗易懂的语言。"},{"role": "user", "content": prompt}])return response.choices[0].message.contentdef _validate_and_reflect(self, result: Dict[str, Any], original_text: str) -> Dict[str, Any]:"""验证结果并进行反思改进"""# 构建验证提示词validation_prompt = f"""请验证以下从医疗文档中提取的信息是否准确、完整,并检查生成的诊疗建议是否合理。原始文档文本:{original_text[:1000]}... (已截断)提取的结构化信息:{json.dumps(result["patient_info"], ensure_ascii=False, indent=2)}生成的诊疗建议:{json.dumps(result["diagnosis_advice"], ensure_ascii=False, indent=2)}请检查:1. 是否有重要信息遗漏或错误?2. 诊疗建议是否与患者情况相符?3. 有无任何不合逻辑或不一致的地方?如有问题,请指出并建议如何修正。"""# 调用API进行验证response = client.chat.completions.create(model="gpt-4",messages=[{"role": "system", "content": "你是一个医疗信息验证专家,能够严格审查从医疗文档中提取的信息和生成的建议,确保其准确性和合理性。"},{"role": "user", "content": validation_prompt}])# 将验证结果添加到输出中result["validation"] = {"reflection": response.choices[0].message.content,"timestamp": "反思时间:" + str(datetime.now())}return result# 使用示例(模拟运行)
if __name__ == "__main__":# 创建医疗AI代理medical_agent = MedicalAIAgent()# 模拟文档路径(实际应用中需要真实路径)document_paths = ["patient_record.pdf","lab_results.jpg","prescription.txt"]print("开始处理医疗文档...")# 这里只是示例,实际运行需要真实文件# result = medical_agent.process_medical_documents(document_paths)# 模拟一个结果进行展示sample_result = {"patient_info": {"name": "张三","age": 45,"gender": "男","id": "P12345","chief_complaint": "胸闷、气短3天","history": "高血压病史5年,服用缬沙坦片控制","examinations": "血压145/95mmHg,心电图显示窦性心律不齐","diagnosis": "1. 高血压 2. 疑似冠心病"},"diagnosis_advice": {"analysis": "患者存在高血压控制不佳,伴有胸闷气短症状,需警惕冠心病可能。","further_examination": ["心脏彩超检查","心肌酶谱检测","冠状动脉CT血管造影","运动心电图"],"treatment_options": ["调整降压药物,控制血压在130/80mmHg以下","考虑加用β受体阻滞剂改善心律不齐","如确诊冠心病,可考虑抗血小板、他汀类药物治疗"],"lifestyle_suggestions": ["限制钠盐摄入(<5g/天)","适量有氧运动(如散步),避免剧烈运动","戒烟限酒","规律作息,避免情绪激动"],"disclaimer": "本建议由AI辅助生成,仅供参考,不构成医疗建议。请咨询专业医生进行正式诊疗。"},"summary": "张三先生,45岁,近期出现胸闷、气短症状,伴有高血压控制不佳(145/95mmHg)和心律不齐情况。建议进行心脏相关检查以排除冠心病可能,同时调整降压方案,注意限盐控制饮食,进行适量运动,保持良好作息。请务必在专业医生指导下进行治疗。","validation": {"reflection": "从提取的信息和建议来看,整体内容合理,符合医学临床实践。针对高血压伴胸闷症状的患者,冠心病的筛查是必要的。建议进一步完善生化检查如血脂、血糖等指标,这些是心血管疾病风险评估的重要参数,但在当前建议中未提及。同时,患者的用药史中提到缬沙坦,但未评估其依从性和剂量是否适当,这也是高血压控制不佳的可能原因之一。","timestamp": "反思时间:2023-08-15 10:23:45"}}print("\n最终结果:")print(json.dumps(sample_result, ensure_ascii=False, indent=2))

📝 结语:高级Prompt工程的未来展望

随着大语言模型能力的不断提升,构建具备推理与反思能力的高级Prompt已成为充分发挥LLM潜力的关键。本文介绍的四个关键原则—明确角色与任务、引导链式推理、加入反思机制和增强行动能力,为开发者提供了系统化的Prompt设计框架。

这些技术正在改变我们与AI系统的交互方式。未来的发展趋势包括:

  1. 多模态智能代理:结合图像、音频等多种输入形式,实现更全面的场景理解和决策
  2. 记忆增强代理:通过外部知识库和长期记忆机制,实现更连贯的对话和任务执行
  3. 自我完善系统:代理能够从经验中学习,自动优化自身的推理流程和反思能力
  4. 协作型智能网络:多个专业化代理协同工作,处理复杂任务流程

在实际应用中,高级Prompt设计需要注意以下几点:

  • 平衡指导与自由:提供足够的框架引导模型思考,但也留出创新空间
  • 迭代优化:通过分析模型输出,持续改进Prompt设计
  • 注重反馈机制:让模型能够接收和整合外部反馈,动态调整其行为

希望本文介绍的技术和理念能够帮助开发者构建更智能、更可靠的AI系统,让大语言模型真正成为人类的得力助手,而不仅仅是简单的问答工具。


相关文章:

构建具备推理与反思能力的高级 Prompt:LLM 智能代理设计指南

在构建强大的 AI 系统&#xff0c;尤其是基于大语言模型&#xff08;LLM&#xff09;的智能代理&#xff08;Agent&#xff09;时&#xff0c;Prompt 设计的质量决定了系统的智能程度。传统 Prompt 通常是简单的问答或填空式指令&#xff0c;而高级任务需要更具结构性、策略性和…...

NLP 梳理03 — 停用词删除和规范化

一、说明 前文我们介绍了标点符号删除、文本的大小写统一&#xff0c;本文介绍英文文章的另一些删除内容&#xff0c;停用词删除。还有规范化处理。 二、什么是停用词&#xff0c;为什么删除它们&#xff1f; 2.1 停用词的定义 停用词是语言中的常用词&#xff0c;通常语义…...

算法—插入排序—js(小数据或基本有序数据)

插入排序原理&#xff1a;&#xff08;适合小规模数据&#xff09; 将数组分为“已排序”和“未排序”两部分&#xff0c;逐个将未排序元素插入到已排序部分的正确位置。 特点&#xff1a; 时间复杂度&#xff1a;平均 O(n)&#xff0c;最优&#xff08;已有序&#xff09;O(n…...

家庭电脑隐身后台自动截屏软件,可远程查看

7-4 本文介绍一个小软件&#xff0c;可以在电脑后台运行&#xff0c;并且记录电脑的屏幕画面保存下来&#xff0c;并且可以远程提取查看。 可以用于记录长时间运行的软件的执行画面过程&#xff0c;或者用于记录家庭中小孩使用电脑的过程&#xff0c;如果没有好好上网课&…...

【Agent】AI智能体评测基座AgentCLUE-General

note AgentCLUE-General将题目划分为“联网检索”、“数据分析”、“多模态理解”和“多场景组合”任务AgentCLUE-General为每个题目都提供一个标准答案&#xff0c;将Agent智能体的答案与标准答案进行规则匹配判断对错 文章目录 note一、任务划分和场景划分二、答案提取的pro…...

最新iOS性能测试方法与教程

一、工具instrument介绍 使用Xcode的instrument进行测试&#xff0c;instrument自带了很多性能方面的测试工具&#xff0c;如图所示&#xff1a; 二、常见性能测试内容 不管是安卓还是iOS的性能测试&#xff0c;常见的性能测试都要包含这五个方面&#xff1a; 1、内存&#xff…...

多模态大语言模型arxiv论文略读(三十)

Mastering Text-to-Image Diffusion: Recaptioning, Planning, and Generating with Multimodal LLMs ➡️ 论文标题&#xff1a;Mastering Text-to-Image Diffusion: Recaptioning, Planning, and Generating with Multimodal LLMs ➡️ 论文作者&#xff1a;Ling Yang, Zhao…...

【AI论文】CLIMB:基于聚类的迭代数据混合自举语言模型预训练

摘要&#xff1a;预训练数据集通常是从网络内容中收集的&#xff0c;缺乏固有的领域划分。 例如&#xff0c;像 Common Crawl 这样广泛使用的数据集并不包含明确的领域标签&#xff0c;而手动整理标记数据集&#xff08;如 The Pile&#xff09;则是一项劳动密集型工作。 因此&…...

AI大模型发展现状与MCP协议诞生的技术演进

1. 大模型能力边界与用户痛点&#xff08;2023年&#xff09; 代表模型&#xff1a;GPT-4&#xff08;OpenAI&#xff09;、Claude 3&#xff08;Anthropic&#xff09;、通义千问&#xff08;阿里云&#xff09;等展现出强大的生成能力&#xff0c;但存在明显局限&#xff1a…...

从malloc到free:动态内存管理全解析

1.为什么要有动态内存管理 我们已经掌握的内存开辟方法有&#xff1a; int main() {int val 20;//在栈空间上开辟四个字节char arr[20] { 0 };//在栈空间上开辟10个字节的连续空间return 0; }上述开辟的内存空间有两个特点&#xff1a; 1.空间开辟的时候大小已经固定 2.数组…...

CSS值和单位

CSS值和单位 CSS 中的值和单位是构建样式的基础&#xff0c;它们定义了属性的具体表现方式。值用于定义样式属性的具体取值&#xff0c;而单位用于指定这些值的度量方式。CSS中常用的值和单位如下&#xff1a; 1.长度单位 px : 像素&#xff0c;绝对单位 em : 相对于元素的字…...

Redis高级篇之I/O多路复用的引入解析

文章目录 一、问题背景1. 高并发连接的管理2. 避免阻塞和延迟3. 减少上下文切换开销4. 高效的事件通知机制5. 简化编程模型6. 低延迟响应本章小节 二、I/O多路复用高性能的本质1. 避免无意义的轮询&#xff1a;O(1) 事件检测2. 非阻塞 I/O 零拷贝&#xff1a;最大化 CPU 利用率…...

FTP协议命令和响应码

文章目录 &#x1f4e6; 一、什么是 FTP 协议&#xff1f;&#x1f9fe; 二、FTP 常见命令&#xff08;客户端发送&#xff09;&#x1f4e1; 三、FTP 响应码&#xff08;服务端返回&#xff09;&#x1f4cc; 响应码分类&#xff08;第一位&#xff09;✅ 常见成功响应码&…...

在win上安装Ubuntu安装Anaconda(linx环境)

一&#xff0c;安装Ubuntu 1. 在 Microsoft 商城去下载Ubuntu(LTS:是长期维护的版本) 2.安装完之后启动程序&#xff0c;再重新打开一个黑窗口&#xff1a; wsl --list --verbose 3.关闭Ubuntu wsl --shutdown Ubuntu-22.04 WSL2 Ubuntu-20.04文件太占c盘空间&#xff0c;…...

【Elasticsearch入门到落地】11、RestClient初始化索引库

接上篇《10、初始化RestClient》 上一篇我们已经完成了RestHighLevelClient的初始化工作&#xff0c;本篇将正式进入索引库的创建阶段。我们将使用Java代码来创建酒店数据的索引库。 一、准备工作 1. 创建常量类 首先&#xff0c;我们需要定义一个常量类来存放索引库的mappi…...

远程服务调用的一些注意事项

引言 最近工作中&#xff0c;遇到了一些关于远程服务调用的问题&#xff0c;背景是调用三方接口获取某些特征数据&#xff0c;但由于调用出现了超时&#xff0c;导致业务本身的接口的可用行降低。因此整理一些远程服务调用时的注意事项&#xff0c;通过不同维度的考虑来提高系…...

QML 样式库

在 QML 中&#xff0c;样式库&#xff08;或 UI 框架&#xff09;用于快速构建一致且美观的界面。Qt/QML 本身不提供内置的完整样式库&#xff0c;但可以通过以下方式实现样式管理或使用第三方库。 1. Qt Quick Controls 2 样式系统 Qt Quick Controls 2 是官方提供的 UI 组件…...

[RHEL8] 指定rpm软件包的更高版本模块流

背景&#xff1a;挂载RHEL ISO使用kickstart安装操作系统&#xff0c;安装包未指定安装perl&#xff0c;但是安装完可以查到其版本&#xff0c;且安装的是ISO中多个版本中的最低版本。 原因&#xff1a;&#xff08;1&#xff09;为什么没有装perl&#xff0c;perl -v可以看到版…...

使用Python可视化洛伦兹变换

引言 大家好!今天我们将探讨一个非常有趣且重要的物理概念—洛伦兹变换。它是相对论的核心内容之一,描述了在高速运动下,时间、长度以及其他物理量是如何发生变化的。通过使用 Python 进行可视化,我们不仅可以更好地理解这个概念,还能感受到物理世界中的奇妙之处。 什么…...

【二叉树专题】一道深入浅出的 DFS 题:求二叉树的直径(含通俗易懂讲解)

题目&#xff1a; 给你一棵二叉树的根节点&#xff0c;返回这棵树的 直径。 直径 是任意两个节点路径中&#xff0c;最长的一条路径所经过的边数。 比如下面这棵树&#xff1a; 1/ \2 3/ \ 4 5它的最长路径是&#xff1a;4 → 2 → 5 或者 4 → 2 → 1 → 3&#xff0c…...

考研系列-计算机网络-第三章、数据链路层

一、数据链路层的功能 1.知识点总结 2.习题总结...

医药采购系统平台第10天02:按药品分类的统计按供货商统计按医院统计统计数据的导出DWR的配置和应用

如果想要获取相关的源码&#xff0c;笔记&#xff0c;和相关工具&#xff0c;对项目需求的二次开发&#xff0c;可以关注我并私信&#xff01;&#xff01;&#xff01; 一 按药品分类的统计实现 1 按药品分类统计的需求 按药品统计&#xff1a;在指定时间段中采购量、采购金…...

Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”

文章目录 前言✅ 为什么 Boolean 字段显示为 [ ]&#xff1f;✅ 如何验证实际数据类型&#xff1f;✅ 小结 前言 看到的 deleted: [ ] 并不是 Prisma 的问题&#xff0c;而是数据库客户端&#xff08;如 Navicat、DataGrip、DBeaver&#xff09;在渲染 BOOLEAN 类型字段时的一种…...

(undone) 吴恩达版提示词工程 2. 指南

url: https://www.bilibili.com/video/BV1Z14y1Z7LJ?spm_id_from333.788.videopod.episodes&vd_source7a1a0bc74158c6993c7355c5490fc600&p2 别人的笔记 url: https://zhuanlan.zhihu.com/p/626966526 指导原则&#xff08;Guidelines&#xff09; 编写提示词有两个…...

VLC搭建本机的rtsp直播推流和拉流

媒体---流---捕获设备&#xff0c;选择摄像头&#xff0c;点击串流 x下一步 选择rtsp&#xff0c;点击添加 看到了端口&#xff0c;并设置路径&#xff1a; 选择Video -H 264 mp3(TS) 点击下一个&#xff0c; 点击流&#xff0c;就开始推流了 拉流&#xff0c;观看端&#x…...

Rocky Linux 9.1 修改网卡和DNS

在 Rocky Linux 9.1 中修改网卡和 DNS 配置可以通过 NetworkManager 工具实现(推荐)或直接编辑配置文件。以下是两种方法的详细步骤: 方法一:使用 nmcli 命令行工具(动态生效) 查看当前网络连接nmcli connection show # 输出示例: # NAME UUID …...

Web前端:常用的布局属性

常见的布局方式有哪些&#xff1f; float&#xff1a;浮动布局 ​position 定位布局 ​flex 弹性布局&#xff08;display&#xff09; ​table 表格布局&#xff08;弃用&#xff09; 一、HTML5 语义化布局标签 这些标签本身不提供布局能力&#xff0c;但能增强页面结构…...

XSS学习2

一、客户端的Cookie 1. 无状态的影响 无状态问题: HTTP协议的无状态特性导致每次请求都是独立的&#xff0c;无法保持会话。例如&#xff0c;在银行办理业务时&#xff0c;柜员不需要重复询问客户信息&#xff0c;但在计算机网络中&#xff0c;每次HTTP请求都需要重新认证用户…...

软件设计师/系统架构师---计算机网络

概要 什么是计算机网络&#xff1f; 计算机网络是指将多台计算机和其他设备通过通信线路互联&#xff0c;以便共享资源和信息的系统。计算机网络可以有不同的规模&#xff0c;从家庭网络到全球互联网。它们可以通过有线&#xff08;如以太网&#xff09;或无线&#xff08;如W…...

Kubernetes(k8s)学习笔记(二)--k8s 集群安装

1、kubeadm kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。这个工具能通过两条指令完成一个 kubernetes 集群的部署&#xff1a; 1.1 创建一个 Master 节点$ kubeadm init 1.2 将一个 Node 节点加入到当前集群中$ kubeadm join <Master 节点的 IP 和…...

线性DP:最长上升子序列(子序列可不连续,子数组必须连续)

目录 Q1&#xff1a;简单遍历 Q2&#xff1a;变式&#xff08;加大数据量&#xff09; Q1&#xff1a;简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 &#xff08;其实质是集合的划分&#xff09;…...

SpringBoot 基本原理

SpringBoot 为我们做的自动配置&#xff0c;确实方便快捷&#xff0c;但一直搞不明白它的内部启动原理&#xff0c;这次就来一步步解开 SpringBoot 的神秘面纱&#xff0c;让它不再神秘。 目录 SpringBootApplication 背后的秘密 Configuration ComponentScan EnableAutoC…...

LeetCode第158题_用Read4读取N个字符 II

LeetCode 第158题&#xff1a;用Read4读取N个字符 II 题目描述 给你一个文件&#xff0c;并且该文件只能通过给定的 read4 方法来读取&#xff0c;请实现一个方法来读取 n 个字符。 read4 方法&#xff1a; API read4 可以从文件中读取 4 个连续的字符&#xff0c;并且将它…...

webgl入门实例-矩阵在图形学中的作用

矩阵在图形学中扮演着核心角色&#xff0c;几乎所有图形变换、投影和空间转换都依赖矩阵运算来实现高效计算。以下是矩阵在图形学中的主要作用及具体应用&#xff1a; 1. 几何变换 矩阵乘法可以高效表示物体的平移、旋转、缩放等基本变换&#xff0c;并通过矩阵连乘实现复合变…...

基于Matlab求解矩阵电容等效容值

1需求 仿真测试8*10阶举证电容等效容值。 2模型搭建 2.1打开simscape 在打开simulink之后打开simscape库&#xff0c;Simscape库位置如下 2.2搭建模型 在库中寻找需要的元件搭建电路。 2.2.1基本元件 电阻电容电感等基础器件&#xff0c;搭建电路之后需要对其进行幅值&…...

铅酸电池充电器方案EG1253+EG4321

参考&#xff1a; 基于EG1253EG4321铅酸电池(48V20AH)三段式充电器 屹晶微高性价比的电瓶车充电器方案——EG1253 电瓶电压 48V电瓶锂电池&#xff0c;其充满约为55V~56V&#xff0c;因此充电器输出电压为55V~56V&#xff1b; 若是48V铅酸电池&#xff0c;标称电压为48V&…...

每天学一个 Linux 命令(26):less

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/26/index.html less 是 Linux 中一个强大的文件内容查看工具,用于分页显示文件内容,支持快速搜索、滚动浏览、跳转等操作。相比 more,less 功能更丰富且支持向前和向后翻页,适合查看大文件或日志。 命令格式 les…...

【网络】数据链路层知识梳理

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的笔记吧~ 自己写自己的八股&#xff01;让未来的自己看懂&#xff01; &#xff08;全文手敲&#xff0c;受益良多&#xff09; 数据链路层 我们来重新理解一下这个图&#xff1a;…...

2.2 BackgroundWorker的使用介绍

BackgroundWorker 是 .NET Framework 中一个简化异步操作的组件&#xff0c;它位于 System.ComponentModel 命名空间下。它为开发人员提供了一种简单的方式在后台执行耗时操作&#xff0c;同时保持与 UI 线程的交互 主要属性以及任务如下&#xff1a; DoWork 事件&#xff1a;…...

Java从入门到“放弃”(精通)之旅——类和对象全面解析⑦

Java从入门到“放弃”&#xff08;精通&#xff09;之旅&#x1f680;——类和对象全面解析⑦ 一、面向对象初探 1.1 什么是面向对象&#xff1f; Java是一门纯面向对象的语言(OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面向对象是解决问题的一种思想&a…...

无回显RCE

在CTF和实战渗透中&#xff0c;不是每一个命令执行点都有回显&#xff0c;有时我们审了半天代码&#xff0c;却发现好不容易找到的命令执行没有回显&#xff0c;但是这并不代表这段代码不能被我们利用&#xff0c;在无回显的情况下也是可以利用的 首先我们来写一个最简单的php…...

DQN在Gym的MountainCar环境的实现

DQN on MountainCar 引言 在本次实验里&#xff0c;我构建了DQN和Dueling DQN&#xff0c;并在Gymnasium库的MountainCar环境中对它们展开测试。我通过调整训练任务的超参数&#xff0c;同时设计不同的奖励函数及其对应参数&#xff0c;致力于获取更优的训练效果。最后&#…...

typescript判断是否为空

1 判断数据类型 1.1 基础数据类型 比如number&#xff0c;string&#xff0c;boolean&#xff0c;使用typeof&#xff0c;返回值是string类型&#xff1a; 例如&#xff1a; if("number" typeof(item)) {egret.log("item的类型是number"); } else if(&…...

JavaScript forEach介绍(JS forEach、JS for循环)

文章目录 JavaScript forEach 方法全面解析基本概念语法详解参数说明 工作原理与其他循环方法的比较forEach vs for循环forEach vs map 实际应用场景DOM元素批量操作数据处理 性能考量常见陷阱与解决方案无法中断循环异步操作问题 高级技巧链式调用&#xff08;不使用 forEach …...

C语言之图像文件的属性

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 图像文件属性提取系统设计与实现 目录 设计题目设计内容系统分析总体设计详细设计程序实现…...

Java链表反转方法详解

一、理解链表结构 假设链表节点定义为&#xff1a; class ListNode {int val;ListNode next;ListNode(int x) { val x; } } 二、迭代法反转链表 核心思路 逐步反转每个节点的指针方向&#xff0c;最终使整个链表反向。 步骤拆解 初始化三个指针&#xff1a; prev&#xf…...

lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练,用于在多模态任务上重现 DeepSeek-R1

一、软件介绍 文末提供程序和源码下载学习 lmm-r1开源程序是扩展 OpenRLHF 以支持 LMM RL 训练&#xff0c;用于在多模态任务上重现 DeepSeek-R1。 二、简介 小型 3B 大型多模态模型&#xff08;LMMs&#xff09;由于参数容量有限以及将视觉感知与逻辑推理相结合的固有复杂性…...

Java学习笔记(数组,方法)

一&#xff0c;数组 1.数组初始化 1.1动态初始化 格式&#xff1a;数据类型[] 数组名 new 数据类型[数组长度]; int[] arr new int[3]; // 定义长度为3的int数组&#xff0c;元素默认值为0 double[] scores new double[5]; // 长度5&#xff0c;元素默认0.0 String[…...

嵌入式---零点漂移(Zero Drift)

一、零点漂移的定义与本质 零点漂移&#xff08;简称“零漂”&#xff09;指传感器在输入信号为零&#xff08;或理论上应输出固定零值&#xff09;时&#xff0c;输出信号随时间、温度、环境等因素变化而偏离初始零点的现象。 核心特征&#xff1a;无输入时输出非零且缓慢变…...

健身房管理系统设计与实现(springboot+ssm+vue+mysql)含万字详细文档

健身房管理系统设计与实现(springbootssmvuemysql)含万字详细文档 健身房管理系统是一个全面的解决方案&#xff0c;旨在帮助健身房高效管理日常运营。系统主要功能模块包括个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、…...