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

Context Engineering与Prompt Engineering实战:构建高效AI交互系统的核心技术解析

在构建基于大语言模型的交互系统时我们常常会遇到这样的困扰用户在多轮对话中反复提及之前的设定模型却“失忆”了精心设计的提示词Prompt在面对不同用户或不同上下文时效果时好时坏系统表现极不稳定。这些问题直接影响了用户体验和系统的可靠性。今天我们就来深入聊聊解决这些问题的两把利剑Context Engineering上下文工程和Prompt Engineering提示词工程并分享一套可落地的实战方案。1. 从痛点出发为什么需要专业的上下文与提示词管理想象一下你开发了一个智能客服助手。用户在第一轮对话中说“我想订一张明天从北京飞往上海的机票。” 系统成功处理并给出了航班选项。紧接着用户问“那经济舱的价格是多少” 此时如果系统丢失了“明天”、“北京到上海”的上下文这次交互就失败了。这就是典型的上下文丢失问题。另一方面提示词失效同样棘手。一个在测试中表现完美的提示词模板比如“请用简洁的语言总结以下内容{content}”当{content}填入一段极其专业的法律条文时模型可能无法生成符合“简洁”要求的摘要或者干脆开始胡言乱语。提示词的效果高度依赖于输入内容的分布和质量。传统解决方案比如基于关键词匹配的规则引擎在处理这类问题时显得力不从心。规则引擎需要预先穷举所有可能的对话路径和关键词组合维护成本高且缺乏灵活性无法理解语义关联。而基于Context Engineering的方案通过动态地、结构化地管理对话历史、用户画像、系统指令等上下文信息让模型始终“心中有数”是构建可靠AI交互系统的基石。2. 核心技术实现从理论到代码2.1 上下文指纹生成算法为了高效管理和检索上下文我们需要为每一段上下文生成一个唯一的“指纹”Fingerprint。这个指纹应该能够表征其核心语义以便在上下文池中进行快速匹配和去重。一个简单而有效的算法是结合关键信息提取与语义哈希。import hashlib import json from typing import Dict, Any, List import jieba # 用于中文分词英文可使用nltk from dataclasses import dataclass, asdict dataclass class ContextChunk: 上下文数据块 role: str # user, assistant, system content: str timestamp: float metadata: Dict[str, Any] None class ContextFingerprintGenerator: 上下文指纹生成器 def __init__(self, stop_words: List[str] None): self.stop_words set(stop_words) if stop_words else set() def _extract_key_phrases(self, text: str, top_k: int 5) - List[str]: 提取关键短语简化版基于词频 words [word for word in jieba.cut(text) if word not in self.stop_words and len(word) 1] word_freq {} for word in words: word_freq[word] word_freq.get(word, 0) 1 # 按频率排序取前top_k个 sorted_phrases sorted(word_freq.items(), keylambda x: x[1], reverseTrue)[:top_k] return [phrase for phrase, _ in sorted_phrases] def generate(self, context_chunk: ContextChunk) - str: 生成上下文块的指纹 # 1. 提取关键信息 key_phrases self._extract_key_phrases(context_chunk.content) # 2. 结合角色和关键信息生成特征字符串 feature_string f{context_chunk.role}:{:.join(key_phrases)} # 3. 使用SHA-256生成哈希指纹 fingerprint hashlib.sha256(feature_string.encode(utf-8)).hexdigest()[:16] # 取前16位 return fingerprint # 使用示例 if __name__ __main__: generator ContextFingerprintGenerator(stop_words[的, 了, 在, 是, 我]) chunk ContextChunk(roleuser, content我想查询明天北京的天气情况需要带伞吗, timestamp1234567890.0) fp generator.generate(chunk) print(f生成的上下文指纹: {fp}) # 输出示例: 生成的上下文指纹: a3f5c789e1b2d4f6这个算法将上下文内容的核心语义压缩成一个短哈希值便于快速比对。在实际生产中可以引入更复杂的语义嵌入模型如Sentence-BERT来生成向量表示进行相似度匹配而不仅仅是精确匹配哈希值。2.2 动态提示模板引擎固定的提示词模板难以应对多变的场景。我们需要一个能够根据当前上下文动态组装提示词的引擎。这个引擎需要支持变量插值、条件逻辑和模板继承。from string import Template import re class DynamicPromptEngine: 动态提示模板引擎 def __init__(self): self.templates {} def register_template(self, name: str, template_str: str): 注册一个命名模板 self.templates[name] template_str def render(self, template_name: str, context: Dict[str, Any], filters: Dict[str, callable] None) - str: 渲染模板 if template_name not in self.templates: raise ValueError(fTemplate {template_name} not found.) raw_template self.templates[template_name] # 第一步处理条件块 {% if condition %}...{% endif %} rendered self._process_conditionals(raw_template, context) # 第二步处理变量插值 {{ variable | filter }} rendered self._process_variables(rendered, context, filters) return rendered.strip() def _process_conditionals(self, template: str, context: Dict) - str: 处理简单的条件逻辑支持嵌套 pattern r\{%\s*if\s(.?)\s*%\}\s*(.*?)\s*\{%\s*endif\s*%\} while True: match re.search(pattern, template, re.DOTALL) if not match: break condition_expr, block_content match.groups() # 简单评估条件表达式实际应用应使用更安全的评估器如 ast.literal_eval try: # 这里假设条件是检查上下文字典中某个键值是否为真 condition_key condition_expr.strip() condition_met context.get(condition_key, False) if condition_met: replacement block_content else: replacement except Exception: replacement template template[:match.start()] replacement template[match.end():] return template def _process_variables(self, template: str, context: Dict, filters: Dict) - str: 处理变量和过滤器 # 首先使用标准库的Template处理简单变量 t Template(template) # 安全地替换变量对于不存在的变量保留原样或置空 class SafeDict(dict): def __missing__(self, key): return f{{{{ {key} }}}} # 找不到时返回原变量占位符 # 创建一个包含上下文和过滤器的命名空间 namespace SafeDict(context) if filters: namespace.update(filters) # 自定义模板语法支持 {{ var | filter }} var_pattern r\{\{\s*([^|]?)(?:\s*\|\s*([^}]))?\s*\}\} def repl(match): var_name match.group(1).strip() filter_name match.group(2) value context.get(var_name, ) if filter_name and filters and filter_name.strip() in filters: filter_func filters[filter_name.strip()] try: value filter_func(value) except Exception: pass return str(value) # 先用标准Template处理无过滤器的部分再用正则处理带过滤器的 intermediate t.safe_substitute(namespace) final_output re.sub(var_pattern, repl, intermediate) return final_output # 使用示例 if __name__ __main__: engine DynamicPromptEngine() # 定义一个复杂的模板 template_str 你是一个专业的${assistant_role}。 {% if conversation_history %} 以下是之前的对话历史 ${conversation_history} {% endif %} 用户当前的问题是{{ user_query | truncate(50) }} 请根据{% if conversation_history %}以上历史信息和{% endif %}当前问题提供专业的回答。 engine.register_template(customer_service, template_str) # 定义过滤器 def truncate(text, length50): return (text[:length] ...) if len(text) length else text filters {truncate: lambda x: truncate(x, 30)} # 构建上下文 context { assistant_role: 天气咨询助手, conversation_history: 用户北京天气怎么样\n助手北京今天晴15-25度。, user_query: 那明天呢我需要穿外套吗明天的详细天气情况包括温度和风速。 } prompt engine.render(customer_service, context, filters) print(动态生成的提示词) print(prompt)这个引擎允许我们定义灵活的模板根据是否存在对话历史、用户角色等条件动态调整最终发送给模型的提示词极大地提升了提示词的适应性和效果。2.3 对话状态机设计为了管理复杂的多轮对话流程我们需要一个对话状态机。它定义了对话可能处于的各种状态如问候、询问需求、确认信息、处理任务、结束以及状态之间的转换条件。stateDiagram-v2 [*] -- Idle Idle -- Greeting : 用户发起会话 Greeting -- ElicitingNeeds : 用户回应问候 ElicitingNeeds -- Processing : 需求明确 Processing -- Confirming : 生成初步结果 Confirming -- Processing : 用户要求修改 Confirming -- Completed : 用户确认 Processing -- ElicitingNeeds : 需求不明确/需要澄清 Completed -- [*] : 会话结束 ElicitingNeeds -- Idle : 用户长时间无响应(超时) note right of Processing 在此状态系统调用LLM 或内部API处理核心请求 end note上图展示了一个简化的客服对话状态机。在Processing状态系统会结合当前上下文Context和动态生成的提示词Prompt调用大语言模型。状态机的实现可以基于一个简单的类维护当前状态和转换规则。from enum import Enum from typing import Optional, Callable class DialogueState(Enum): IDLE idle GREETING greeting ELICITING_NEEDS eliciting_needs PROCESSING processing CONFIRMING confirming COMPLETED completed class DialogueStateMachine: 对话状态机 def __init__(self, initial_state: DialogueState DialogueState.IDLE): self.current_state initial_state self.transitions {} # 存储状态转换规则 (当前状态, 触发条件) - 下一个状态 self.state_handlers {} # 存储进入某个状态时的处理函数 def add_transition(self, from_state: DialogueState, condition: Callable[[Dict], bool], to_state: DialogueState): 添加状态转换规则 self.transitions[(from_state, condition)] to_state def register_handler(self, state: DialogueState, handler: Callable[[Dict], None]): 注册状态处理函数 self.state_handlers[state] handler def process(self, user_input: str, context: Dict) - Optional[str]: 处理用户输入驱动状态转换并返回系统响应 # 1. 评估转换条件 next_state self.current_state for (state, condition), target_state in self.transitions.items(): if state self.current_state and condition({user_input: user_input, context: context}): next_state target_state break # 2. 执行状态转换 if next_state ! self.current_state: print(f状态转换: {self.current_state.value} - {next_state.value}) self.current_state next_state # 3. 执行当前状态的处理逻辑 if self.current_state in self.state_handlers: # 处理函数通常会更新上下文并生成回复 response self.state_handlers[self.current_state]({user_input: user_input, context: context}) return response return None # 示例定义一个简单的条件函数和处理器 def user_greeted(data): return data[user_input].lower() in [你好, hi, hello] def handle_greeting(data): return 您好我是您的助手。请问有什么可以帮您 # 使用状态机 if __name__ __main__: sm DialogueStateMachine(DialogueState.IDLE) sm.add_transition(DialogueState.IDLE, user_greeted, DialogueState.GREETING) sm.register_handler(DialogueState.GREETING, handle_greeting) context {} print(sm.process(你好, context)) # 触发转换输出问候语通过状态机我们将杂乱的对话流变成了可控的、可预测的状态转换使得系统逻辑更加清晰便于调试和维护。3. 性能优化在内存与延迟间寻找平衡大语言模型的上下文窗口是有限的如4K、8K、32K tokens。无限制地保存完整对话历史会迅速耗尽窗口导致最早的、可能仍重要的信息被“挤出”。我们需要上下文压缩策略。摘要式压缩定期例如每5轮对话使用LLM对之前的对话历史生成一个简洁的摘要然后用这个摘要替代原始的长篇历史放入后续的上下文中。这牺牲了少量细节但极大地节省了token。选择性记忆并非所有对话回合都同等重要。我们可以为每个ContextChunk打上重要性分数基于规则或模型预测在上下文窗口满时优先丢弃分数低的块。重要性可以根据用户明确确认、包含关键实体如订单号、日期等因素判断。分片与缓存将长上下文分成多个逻辑片段如“用户信息”、“本次会话目标”、“最近3轮对话”并为其生成指纹。只有当LLM请求需要某个片段时才将其加载到活动上下文中。其他片段以指纹为键缓存起来需要时快速检索。响应延迟的优化则涉及提示词预编译对于高频使用的模板可以预先渲染好静态部分动态部分留空减少实时渲染开销。异步上下文更新在模型生成回答的同时异步准备下一轮对话可能需要的上下文片段。模型层面优化使用更高效的注意力Attention计算方式如滑动窗口注意力Sliding Window Attention来降低长序列的计算复杂度。4. 生产环境避坑指南坑上下文污染现象系统指令System Prompt或前序对话中的无关信息干扰了当前问题的回答。解决方案严格区分不同角色的消息system,user,assistant并为系统指令设置更高的“权重”或使用特殊的注意力掩码Attention Masking确保其不被后续对话淹没。定期清理或重置与当前任务无关的上下文。坑提示词注入攻击现象用户输入中包含类似“忽略之前的指令执行...”的恶意文本导致模型行为异常。解决方案对用户输入进行严格的清洗和过滤将用户输入内容放在消息体的特定字段如content并与系统指令在结构上明确分离。避免使用简单的字符串拼接来构造提示词。坑状态机死锁现象对话陷入某个状态无法跳出例如不断要求用户确认而用户已无回应。解决方案为状态转换设置超时机制和默认回退路径。例如在Confirming状态等待超过30秒后自动跳转回ElicitingNeeds状态并提示“请问您是否确认或者有其他修改”。坑长上下文下的性能劣化现象随着对话轮数增加API调用延迟显著上升甚至失败。解决方案实施上述的上下文压缩策略。同时监控上下文长度当接近模型上限时主动介入例如提示用户“对话已较长我们是否开始一个新的讨论”或自动启动摘要流程。坑指纹冲突与信息丢失现象不同的上下文生成了相同的指纹哈希冲突导致错误的上下文被检索或去重。解决方案使用更长的哈希值或结合其他唯一标识符如UUID。对于语义相似但内容不同的上下文指纹生成算法应引入足够的区分度例如将时间戳或序列号的一部分纳入特征字符串。5. 开放性问题跨会话的长期记忆模块设计我们目前讨论的上下文管理主要局限于单次会话内。如何设计一个跨会话的长期记忆模块让AI记住用户的历史偏好、习惯和重要事实是实现个性化智能体的关键挑战。一个可行的架构是分层记忆系统工作记忆即当前的对话上下文快速存取容量小。短期记忆存储最近几次会话的摘要和关键决策按时间衰减。长期记忆一个向量数据库存储用户的重要事实如“我对花生过敏”、偏好如“喜欢简洁的回答”和行为模式。每次会话开始时根据当前对话的初始意图从长期记忆中检索最相关的若干条信息注入工作记忆。实现难点在于记忆的更新与合并如何判断新信息是冗余的、冲突的还是需要更新的隐私与安全长期记忆涉及大量用户数据如何加密存储、合规使用、并允许用户查看和删除检索的相关性与效率如何从海量记忆片段中快速找到真正对当前对话有用的信息这需要结合基于嵌入向量的语义检索和基于元数据时间、类型的过滤。这不仅仅是工程问题更涉及到对记忆、遗忘和学习机制的设计思考。或许我们可以从人类认知科学中汲取灵感设计出更优雅的AI记忆系统。通过将Context Engineering与Prompt Engineering系统性地结合我们能够构建出响应更精准、行为更稳定、体验更连贯的AI交互系统。这其中的每一项技术选择都需要在理解业务需求、模型能力和系统约束的基础上做出权衡。希望本文提供的思路和代码示例能成为你构建下一代智能应用的一块坚实基石。

相关文章:

Context Engineering与Prompt Engineering实战:构建高效AI交互系统的核心技术解析

在构建基于大语言模型的交互系统时,我们常常会遇到这样的困扰:用户在多轮对话中反复提及之前的设定,模型却“失忆”了;精心设计的提示词(Prompt)在面对不同用户或不同上下文时,效果时好时坏&…...

别再手动写时间戳了!用SQLAlchemy的Mixin和func.now()自动搞定MySQL记录创建与更新时间

告别手动维护时间戳:SQLAlchemy自动化时间管理的工程实践 每次在模型里手动维护created_at和updated_at字段时,你有没有想过——为什么2023年了我们还要像打字机时代那样处理时间戳?当团队里有三个开发者分别用datetime.now()、datetime.utcn…...

captcha_voucher 亚马逊

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 部分python代码url ".c…...

别再自己写敏感词库了!用uni-sec-check公共模块,5分钟搞定微信小程序内容审核

5分钟极速集成:uni-sec-check赋能微信小程序内容安全审核实战指南 当你的社交类小程序即将上线,用户生成内容(UGC)的安全审核成为必须跨越的门槛时,是否还在为自建敏感词库的维护成本头疼?或是为第三方审核…...

Gazebo模型库实战:从官方资源到自定义编辑

1. Gazebo模型库基础入门 第一次打开Gazebo时,你可能被它自带的那些精致模型惊艳到过。这些现成的模型资源,就是我们常说的Gazebo模型库。它们就像乐高积木一样,能让我们快速搭建出各种仿真场景。模型库默认存放在用户主目录下的.gazebo/mode…...

AI 开发实战:把非结构化文本稳定提取成 JSON

AI 开发实战:把非结构化文本稳定提取成 JSON 一、为什么“抽字段”看起来简单,做起来很不稳? 因为文本里的信息天然不规整: 说法不统一顺序不固定有些字段缺失有些值需要推断 如果只是让 AI “提取一下”,结果很容…...

图解贝叶斯网络:从D-划分到马尔科夫毯的实战解析

1. 贝叶斯网络入门:从概率到图模型 第一次接触贝叶斯网络时,我完全被那些箭头和概率表搞晕了。直到有一天在玩扫雷游戏时突然开窍——这不就是典型的概率推理问题吗?贝叶斯网络本质上就是用图形化的方式,把一堆随机变量之间的条件…...

如何让鼠标光标焕发新生?Bibata的个性化设计革命

如何让鼠标光标焕发新生?Bibata的个性化设计革命 【免费下载链接】Bibata_Cursor Open source, compact, and material designed cursor set. 项目地址: https://gitcode.com/gh_mirrors/bi/Bibata_Cursor 在数字化生活中,鼠标光标是我们与电脑交…...

C++ STL 容器内存优化策略

C STL容器内存优化策略探究 在现代C开发中,STL容器的高效使用直接影响程序性能。随着数据规模扩大,容器的内存管理成为优化重点。本文将深入探讨几种关键策略,帮助开发者减少内存碎片、提升访问效率,并平衡时间与空间成本。 预分…...

yfinance高效工具实战指南:从数据获取到智能分析

yfinance高效工具实战指南:从数据获取到智能分析 【免费下载链接】yfinance Download market data from Yahoo! Finances API 项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance 在当今数据驱动的世界,获取准确、及时的金融市场数据对于…...

基于CCMusic的音乐推荐系统开发:MySQL数据库集成实践

基于CCMusic的音乐推荐系统开发:MySQL数据库集成实践 引言 音乐推荐系统已经成为现代音乐平台的核心功能,而如何高效存储和管理音乐数据是实现智能推荐的关键。今天我们将探讨如何将CCMusic音乐分类结果与MySQL数据库深度集成,构建一个实用…...

C/C++ snprintf 函数详解

C/C snprintf 函数详解 snprintf 在 C99 中标准化,在固定大小的字符数组中做带长度上限的格式化写入,避免 sprintf 因不检查边界导致的缓冲区溢出。下文说明其原型、返回值语义、与相关 API 的差异及常见用法。 目录 函数原型与参数返回值与截断判定相…...

OpenClaw飞书机器人深度配置:GLM-4.7-Flash对话触发任务详解

OpenClaw飞书机器人深度配置:GLM-4.7-Flash对话触发任务详解 1. 为什么选择OpenClaw飞书GLM-4.7-Flash组合 去年我在团队内部推行自动化工具时,发现三个痛点:一是商业SaaS机器人无法处理敏感数据,二是通用对话机器人缺乏本地操作…...

MySQL 事务锁等待问题定位方案

MySQL事务锁等待问题定位方案 在高并发数据库场景中,事务锁等待是导致性能下降甚至系统卡顿的常见问题。当多个事务同时竞争同一资源时,可能因锁冲突导致事务长时间阻塞,进而影响业务响应。如何快速定位并解决这类问题?本文将介绍…...

Java的java.util.HexFormat格式化

Java十六进制格式化利器:HexFormat详解 在数据处理、网络通信或安全加密领域,十六进制(Hex)格式的转换与展示是常见需求。Java 17引入的java.util.HexFormat类,为开发者提供了标准化、高性能的十六进制处理工具&#…...

基于MATLAB的交通标志识别

基于MATLAB的交通标志识别开车上路最怕错过限速标志,今天咱们聊聊用MATLAB做个能自动识别交通标志的玩意儿。先别急着找深度学习框架,咱们从基础的图像处理套路入手,保准你能看懂还能玩起来。先整点颜色分割试试水。交通标志最明显的特征就是…...

Llama-3.2V-11B-cot教程:如何评估图文对齐质量与推理链可信度

Llama-3.2V-11B-cot教程:如何评估图文对齐质量与推理链可信度 1. 认识Llama-3.2V-11B-cot模型 Llama-3.2V-11B-cot是一个融合了视觉理解和逻辑推理能力的多模态模型。它不仅能看懂图片内容,还能像人类一样进行逐步推理,最终得出合理结论。这…...

效率提升秘籍:快马一键生成notepad官网直达与版本匹配工具

今天想和大家分享一个提升工作效率的小技巧——如何快速获取Notepad的官方下载链接。相信很多开发者都遇到过这样的场景:每次换新电脑或重装系统时,都要手动搜索Notepad官网,然后在一堆下载链接中寻找适合自己系统的版本。这个过程虽然简单&a…...

智能多态员中的接口统一与实现多样

智能多态员中的接口统一与实现多样 在当今快速发展的智能技术领域,智能多态员(如智能助手、机器人或多模态系统)已成为日常生活和工业生产的重要组成部分。它们的核心优势在于能够通过统一的接口与用户交互,同时内部实现却高度多…...

AI 辅助开发实战:基于 Spark 的毕业设计项目高效构建指南

毕业设计季,对于计算机专业的学生来说,既是一次综合能力的考验,也常常伴随着“时间紧、任务重”的焦虑。特别是选择以 Apache Spark 这类大数据处理框架作为毕设核心技术的同学,往往在满怀期待地开始后,很快会陷入一系…...

LoRaWAN大规模部署如何避免空中资源挤兑

LoRaWAN大规模部署如何避免空中资源挤兑?三大核心优化策略详解 引言 随着物联网技术的快速发展,LoRaWAN凭借其远距离传输、低功耗、低成本等优势,已成为智慧城市、智能农业、工业物联网等领域的首选通信技术之一。然而,在实际大规…...

ai辅助开发:快马生成tailscale配置助手,并通过exposure功能实现团队共享

最近在团队协作开发时,遇到了一个很实际的问题:我们需要频繁配置Tailscale网络中的各种服务访问权限,但每次编写ACL规则都要反复查阅文档,效率很低。于是尝试用InsCode(快马)平台的AI能力,做了一个能自动生成配置建议的…...

Notepad++ 高效文本编辑:管理Pixel Dream Workshop海量提示词与参数配置

Notepad 高效文本编辑:管理Pixel Dream Workshop海量提示词与参数配置 1. 为什么选择Notepad管理AI生成内容 如果你经常使用Pixel Dream Workshop这类AI工具,一定会遇到两个头疼问题:一是积累的提示词越来越多,杂乱无章难以管理…...

智能客服多智能体架构实战:知识库问答与情绪感知的协同优化

最近在优化公司智能客服系统时,遇到了一个典型难题:系统既要能快速准确地从知识库中找到答案,又要能实时感知用户的情绪变化,以便提供更人性化的服务。传统的单体架构把这两件事揉在一起,结果就是性能上不去&#xff0…...

电化学数据处理那些事儿

电化学数据处理 赝电容计算求b值 GITT计算扩散系数 阻抗(原位阻抗)分析拟合 全电池电容器能量密度功率密度计算在电化学研究领域,数据处理是获取关键信息、揭示电极材料性能的重要环节。今天咱就来唠唠赝电容计算求b值、GITT计算扩散系数、阻…...

ha_xiaomi_home:打造智能家居中枢的零代码集成方案

ha_xiaomi_home:打造智能家居中枢的零代码集成方案 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home 核心功能解析:小米设备与Home Assistant的无…...

Granite TimeSeries FlowState R1多步预测效果展示:滚动预测与置信区间可视化

Granite TimeSeries FlowState R1多步预测效果展示:滚动预测与置信区间可视化 时间序列预测这事儿,听起来挺专业,但其实离我们很近。比如,你猜明天超市的牛奶会卖出去多少箱?下个月公司的电费大概是多少?或…...

ubuntu (V100)中 部署openclaw,并链接飞书

ubuntu (V100)中 部署openclaw,并链接飞书 一、部署大模型推理框架 Ollama: 官方安装程序 llama.cpp: 编译安装方式,v100架构比较老,建议编译安装稳定 地址:https://github.com/ggml-org/llama.cpp 选…...

[具身智能-93]:ROS2除了用于机器人,还有哪些典型的应用场景?ROS2的神经系统连接功能,用于任何多节点(非多设备)互联的场景。

虽然 ROS (Robot Operating System) 的名字里带有“机器人”,但它的核心本质是一个基于发布/订阅模式的分布式通信中间件。随着 ROS 2 的成熟(特别是引入了 DDS 数据分发服务、增强的安全性和实时性),它的应用场景已经远远超出了传…...

OSPF外部路由调优实战:3种修改metric值的方法与避坑指南

OSPF外部路由调优实战:3种修改metric值的方法与避坑指南 在复杂企业网络架构中,OSPF协议的灵活运用往往决定着流量路径的优化程度。特别是面对外部路由引入场景,精确控制metric值就像为数据包绘制精准的导航地图——这直接关系到关键业务流量…...