AI智能体业务规则管理:用rulespec告别提示词泥潭

news2026/5/7 5:59:54
1. 项目概述为AI智能体构建可管理的业务规则引擎在AI应用开发尤其是基于大语言模型LLM构建智能体Agent的过程中一个长期存在的痛点是如何系统化地管理那些驱动智能体行为的“业务规则”。这些规则可能来自公司政策、合规要求、业务流程或用户体验设计例如“退款必须在30天内处理”、“超过5000美元的订单需要主管审批”、“与客户沟通时必须使用尊称”。传统的做法是开发者将这些规则以自然语言的形式直接编写或拼接进给AI的“系统提示词”System Prompt里。这种做法在初期简单直接但随着规则数量增长、参与方增多产品、法务、运营、开发很快就会陷入混乱。想象一下法务部门更新了退款条款你需要在一大段提示词文本中定位所有相关描述并修改同时还要确保不会误删或影响其他规则。更糟糕的是如果多个团队同时修改同一个提示词文件版本冲突和规则覆盖几乎不可避免。这不再是简单的“提示工程”而是演变成了一个缺乏版本控制、难以审计、维护成本高昂的“提示泥潭”。rulespec 正是为了解决这一问题而生。它不是一个庞大的规则引擎而是一个轻量、专注的“规则说明书”生成与管理工具。其核心思想是“规则即数据”。它将每一条业务规则视为一个独立的、结构化的数据单元存储在清晰的YAML配置文件中。通过配套的CLI工具你可以像管理代码一样管理这些规则增、删、改、查并且每一次操作都只影响目标规则本身。最终rulespec 会将所有规则编译、整合成一个结构化的SKILL.md文件这个文件可以被任何AI智能体直接加载和使用作为其系统提示词中关于“规则”的部分。简单来说rulespec 在“人类可读的业务规则”和“AI可执行的提示词”之间架起了一座标准化、可维护的桥梁。它让业务规则的变更变得可追溯、可测试、可独立部署从而在AI智能体日益复杂的应用场景中为开发团队提供了至关重要的可控性和秩序。2. 核心设计理念与架构解析2.1 为何选择“规则与提示词分离”的架构在深入使用 rulespec 之前理解其背后的设计哲学至关重要。这决定了它是否适合你的项目以及如何最大限度地发挥其价值。核心理念一关注点分离传统的提示词编写是“一锅烩”业务逻辑、行为指令、知识背景、格式要求全部混杂在一个文本块中。rulespec 强制实行了关注点分离业务方产品、运营、法务只关心“规则是什么”rule字段和“在什么情况下适用”context字段。他们用自然语言描述无需理解提示工程。工程师负责定义规则的结构id,intent、数据源sources并确保整个规则集能正确编译和集成到智能体系统中。工程师还可以通过intent字段来控制规则在最终提示词中的强调程度。这种分离使得沟通效率大幅提升。业务方可以独立审查和更新规则文本而工程师可以专注于规则的技术实现和系统集成。核心理念二规则作为独立实体每一条规则都拥有唯一的id。这意味着独立变更修改退款政策不会意外影响到问候语的规则。独立版本控制git blame可以清晰地告诉你是谁在什么时候修改了“escalation”这条规则。独立测试与验证可以为单条规则添加测试用例examples确保其修改不会破坏特定场景下的预期行为。独立启用/禁用虽然 rulespec CLI 未直接提供禁用功能但基于此架构你可以很容易地通过注释或外部配置来管理规则的生效状态。核心理念三意图驱动输出intent字段enforce,inform,suggest是一个精妙的设计。它不是一个简单的标签而是一个“编译指令”。它决定了同一条规则文本在最终生成的SKILL.md中会以何种语气和权重呈现enforce强制编译为**You must follow this rule.**的强调格式。这直接对应了提示工程中“通过加粗、强调句式来提升LLM对特定指令的遵从度”的最佳实践。inform告知以中性、陈述的语气输出。用于提供背景信息或标准操作流程。suggest建议编译为Consider the following:的开头。用于提供非强制性的最佳实践或可选方案。这个设计将“业务意图”直接映射到了“提示词优化策略”省去了工程师手动调整语气和格式的重复劳动。2.2 Rulespec 文件结构深度解读一个完整的rulespec.yaml文件是项目的核心。我们来逐部分拆解其设计用意和最佳实践。# rulespec.yaml schema: rulespec/v1 domain: invoice processingschema: 声明版本确保未来 rulespec 升级时CLI工具能正确解析旧格式文件保障向前兼容性。domain: 定义规则所属的业务领域。它直接决定了输出SKILL.md文件的存放路径skills/{domain}/。一个项目可以包含多个rulespec.yaml文件分别对应不同的domain实现规则的分域管理。sources: - id: invoice type: document format: pdf description: Incoming vendor invoice schema: number: string vendor: string amount: number currency: stringsources数据源定义: 这是 rulespec 超越简单规则管理迈向“可验证规则”的关键。它定义了规则所操作的数据对象的形态。目的不是为了运行时数据接入而是为了定义契约。它让规则描述从“对虚无缥缈的对话内容生效”变为“对结构化的、有明确 schema 的数据对象生效”。schema字段虽然 rulespec 本身不执行数据验证但这个 schema 提供了无价的上下文。当AI智能体或后续的测试工具处理数据时可以参照此 schema 来理解“invoice”对象应该有哪些字段。它也是生成高质量测试用例examples的蓝图。实践建议即使初期觉得麻烦也尽量为每个核心数据实体定义 source。这会在后续编写规则和示例时极大提升清晰度和一致性。rules: - id: duplicate-check rule: Reject invoices with duplicate invoice numbers context: Before processing any invoice intent: enforcerules规则集: 主体部分。id: 使用 kebab-case短横线连接如refund-policy。这不仅是标识符在CLI操作中也是定位符。命名应清晰、唯一、具有业务含义。rule: 用祈使句或陈述句清晰描述规则。避免模糊词汇如“尽快”、“酌情”。应使用“在30天内”、“当失败次数大于2时”等明确表述。context: 定义规则的触发条件或适用范围。这是避免规则冲突和误用的关键。例如“当用户询问退款流程时” vs. “当系统检测到欺诈交易时”。好的context能帮助AI准确判断何时该应用此规则。intent: 根据规则的重要性选择。核心合规、安全规则用enforce一般性流程用inform优化建议用suggest。examples: - note: Foreign currency invoice requiring approval input: invoice: { number: INV-1001, vendor: Acme GmbH, amount: 7200, currency: EUR } output: action: require-approval approver: finance-mgrexamples示例: 规则的“单元测试”。全局示例如上所示在examples节点下模拟端到端的场景涉及多条规则的共同作用。规则级示例通过rulespec add-rule-example添加绑定到特定规则ID。用于验证单条规则在特定输入下的输出。输入/输出格式支持内联JSON、JSON文件路径、任意文件路径。将实际文件如PDF发票作为输入是连接规则与现实业务数据的强大方式。这些示例是未来实现自动化规则测试的基石。2.3 与现有AI开发工作流的整合定位rulespec 并非要取代 LangChain、LlamaIndex 或自定义的智能体框架。它定位为一个上游的、声明式的规则管理层。开发阶段产品经理在 rulespec 中编写和维护业务规则。工程师通过CLI工具将其编译为SKILL.md。集成阶段在构建智能体系统时工程师通过loadRules()函数读取SKILL.md内容并将其作为系统提示词的一部分注入到LLM调用中。运维阶段规则变更时只需更新rulespec.yaml重新emit生成SKILL.md然后部署智能体应用。整个过程可以通过CI/CD流水线自动化。它与你现有的提示词模板是互补关系。你可以有一个基础的系统提示词模板其中包含智能体的角色、通用能力描述等然后使用{{RULES}}这样的占位符。在运行时用 rulespec 生成的规则内容替换这个占位符。这样基础模板保持稳定而频繁变化的业务规则被隔离和管理起来。3. 从零开始完整实战操作指南3.1 环境初始化与项目搭建首先确保你的开发环境已安装 Node.js ( 16)。rulespec 被设计为通过npx运行这意味着你不需要进行全局安装npm install -g避免了版本冲突和环境污染。这是现代Node.js CLI工具的最佳实践。我们将为一个“电商客服智能体”创建规则库。# 1. 创建一个新的项目目录如果尚未有项目 mkdir ecommerce-support-agent cd ecommerce-support-agent # 2. 初始化规则库指定领域为“customer-support” npx rulespec init --domain customer-support执行后会在当前目录生成一个rulespec.yaml文件其内容大致如下schema: rulespec/v1 domain: customer-support sources: [] rules: [] examples: []现在这个文件就是你的“单一事实来源”。所有规则的变更都将基于此文件。实操心得即使你是单人开发也强烈建议将rulespec.yaml纳入 Git 版本控制。rulespec init生成的文件非常简洁你可以立即提交一个初始版本。这为后续的规则变更追溯奠定了基础。3.2 定义数据源让规则“有的放矢”在添加具体规则前先定义智能体会处理哪些类型的数据。这能帮助你和你的团队包括未来的AI更好地理解规则上下文。# 添加“用户订单”作为数据源 npx rulespec add-source \ --id customer-order \ --type structured \ --description The customers current or historical order information \ --format json # 添加“客服对话记录”作为数据源 npx rulespec add-source \ --id support-conversation \ --type message \ --description The ongoing chat history between the customer and the support agent # 添加“公司退款政策文档”作为参考数据源 npx rulespec add-source \ --id refund-policy-doc \ --type document \ --format pdf \ --description The official company refund policy document for reference执行这些命令后你的rulespec.yaml中的sources部分会被更新。你可以随时使用cat rulespec.yaml查看当前状态。注意事项--type参数是预定义的枚举document, api, database, message, structured。选择最贴合数据本质的类型。例如message类型暗示了这是一系列时序性的对话消息而structured类型则代表了一个固定的JSON数据结构。这个类型信息在后期生成文档或进行规则分析时可能有潜在用途。3.3 逐条添加与管理业务规则现在开始添加核心业务规则。我们遵循从核心合规规则到一般性指导规则的顺序。# 1. 添加一条强制性的退款政策规则 npx rulespec add \ --id refund-timeframe \ --rule Refunds are only allowed for items returned within 30 days of delivery, with the original packaging intact and proof of purchase. \ --context When a customer inquires about or requests a refund for a purchased item \ --intent enforce # 2. 添加一条强制性的升级规则 npx rulespec add \ --id escalate-to-human \ --rule If the customers issue cannot be resolved after two clear attempts by the automated agent, or if the customer expresses strong frustration, immediately transfer the conversation to a human support representative. \ --context During an automated support conversation when resolution is not achieved \ --intent enforce # 3. 添加一条信息性的问候规则 npx rulespec add \ --id personalized-greeting \ --rule Address the customer by their first name (if available in the order data) at the beginning of the conversation. \ --context At the start of a new customer support interaction \ --intent inform # 4. 添加一条建议性的追加销售规则 npx rulespec add \ --id suggest-loyalty-program \ --rule If a customer has completed a refund successfully and their overall sentiment is neutral or positive, consider informing them about the benefits of our loyalty program. \ --context After successfully concluding a refund process \ --intent suggest添加完成后使用npx rulespec list可以查看所有规则的ID和简要信息。规则编辑与更新 业务是变化的。假设法务部门将退款期限从30天延长到了45天。# 使用 edit 命令只更新 --rule 部分 npx rulespec edit refund-timeframe --rule Refunds are only allowed for items returned within 45 days of delivery, with the original packaging intact and proof of purchase.这个操作只会修改id为refund-timeframe的规则文本其他所有规则保持不变。你可以通过git diff rulespec.yaml清晰地看到这次原子性的变更。规则查找与替换 如果你需要批量更新某个术语例如将品牌名从“WidgetPro”改为“WidgetMax”可以使用安全替换命令。npx rulespec replace --old WidgetPro --new WidgetMax这个命令会在所有rule和context字段中查找并替换并在替换后自动执行rulespec validate以确保YAML结构仍然有效最后重新编译所有提示词。这比手动在文本编辑器中查找替换要安全得多。3.4 为规则注入灵魂编写测试用例规则写好了但你怎么知道AI智能体是否能正确理解并应用它们examples就是你的验证手段。添加全局端到端示例 模拟一个完整的客服场景。npx rulespec add-example \ --note Customer requests refund for a 20-day-old order \ --input {customer-order: {order_id: ORD-789, delivery_date: 2023-10-01, items: [{name: T-Shirt, return_packaging: original}]}, support-conversation: [{role: customer, content: Hi, Id like to return this T-Shirt I got last month.}]} \ --output {action: provide_refund_instructions, message_includes: [eligible for refund, 30-day, original packaging]}这个示例描述了一个符合退款条件的场景。output中定义的message_includes是一个灵活的断言用于检查AI的回复中是否应包含这些关键词。在实际的自动化测试中你可以用程序来检查这个条件。添加针对单条规则的示例 专门测试“升级规则”。npx rulespec add-rule-example escalate-to-human \ --note Customer is frustrated after multiple failed solutions \ --input {support-conversation: [{role: agent, content: Have you tried restarting the device?}, {role: customer, content: Yes, I did that already. It didnt work! This is so annoying.}, {role: agent, content: Okay, please check the cable connection.}, {role: customer, content: Checked that too! Nothing works! I need real help!}]} \ --output {action: escalate, reason: customer frustration and multiple resolution attempts failed}核心技巧input字段的结构应尽量与你定义的sources相匹配。这不仅能验证规则也在无形中为AI智能体提供了“如何理解这些数据”的示例。output字段不必是AI的完整回复而是描述期望的系统行为或决策。这更符合“规则”被验证的本质。3.5 编译、验证与输出最终技能文件在将规则交付给智能体使用前必须进行编译和验证。# 1. 验证规则文件语法和结构是否正确 npx rulespec validate # 如果一切正常不会有输出Unix哲学没有消息就是好消息。如果有错误会明确提示。 # 2. 预览某条规则编译后的提示词样子 npx rulespec compile refund-timeframe # 输出 # **You must follow this rule.** When a customer inquires about or requests a refund for a purchased item: Refunds are only allowed for items returned within 45 days of delivery, with the original packaging intact and proof of purchase. # 3. 生成最终的 SKILL.md 文件 npx rulespec emit执行emit后查看生成的skills/customer-support/SKILL.md文件。你会看到所有规则被整洁地格式化并根据intent加上了相应的标签[enforce],[inform],[suggest]。这个文件就是可以直接被AI智能体加载的“技能包”。高级输出选项# 将示例也包含在输出中例如用于提供给AI作为少样本学习示例 npx rulespec emit --include-examples true # 自定义输出目录 npx rulespec emit --outdir ./agent-skills4. 集成到AI智能体编程化使用详解SKILL.md文件是给人读和给一些特定Agent框架如OpenClaw用的。而在你自己的Node.js/TypeScript智能体应用中你可以通过编程API更灵活地集成rulespec。4.1 安装与基础集成首先在你的智能体项目中将 rulespec 作为依赖安装。npm install rulespec # 或 yarn add rulespec假设你有一个基于某个AI SDK如 OpenAI SDK, LangChain.js的简单客服机器人。// agent.ts import { loadRules } from rulespec; import OpenAI from openai; const openai new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); async function getAgentResponse(userMessage: string, orderData: any) { // 1. 加载并编译业务规则 const businessRulesMarkdown await loadRules(./path/to/your/rulespec.yaml); // 2. 构建系统提示词将规则注入其中 const systemPrompt You are a helpful and professional e-commerce customer support agent. Your primary goal is to solve customer issues accurately and efficiently, while adhering strictly to company policies. # COMPANY POLICIES BUSINESS RULES The following rules define how you must operate. Pay close attention to the tags: - **[enforce]** means you MUST follow the rule. - **[inform]** means this is standard operating procedure. - **[suggest]** means you may consider this recommendation. ${businessRulesMarkdown} # CONVERSATION GUIDELINES - Be empathetic and patient. - Ask clarifying questions if needed. - Provide clear, step-by-step instructions. - If you need to transfer to a human, clearly state so and explain why. ; // 3. 将用户消息和上下文如订单数据组合成对话历史 const messages [ { role: system, content: systemPrompt }, { role: user, content: Here is the current order information: ${JSON.stringify(orderData)} }, { role: user, content: userMessage } ]; // 4. 调用LLM const completion await openai.chat.completions.create({ model: gpt-4, messages: messages, temperature: 0.7, // 保持一定的创造性以处理复杂情况但规则是硬性的 }); return completion.choices[0].message.content; } // 使用示例 const orderContext { orderId: ORD-789, deliveryDate: 2023-10-01, customerName: Alice }; const userQuery Hi, I want to return the T-Shirt I received on October 1st. Its still in the original bag.; const response await getAgentResponse(userQuery, orderContext); console.log(response);在这个例子中loadRules函数异步读取rulespec.yaml将其编译成Markdown字符串然后我们将其嵌入到一个更完整的系统提示词模板中。这样LLM在生成回复时就会受到我们明确定义的业务规则的约束。4.2 动态规则加载与热重载对于长期运行的智能体服务如一个聊天机器人API你可能希望在不重启服务的情况下更新规则。// advanced-agent.ts import { loadRules, watchRules } from rulespec; import { EventEmitter } from events; class RuleAwareAgent extends EventEmitter { private currentRules: string ; constructor(private ruleFilePath: string) { super(); this.initializeRules(); this.setupRuleWatcher(); } private async initializeRules() { try { this.currentRules await loadRules(this.ruleFilePath); console.log(Business rules loaded successfully.); this.emit(rules:loaded, this.currentRules); } catch (error) { console.error(Failed to load initial rules:, error); // 可以加载一个默认的或缓存的规则集 } } private setupRuleWatcher() { // 注意rulespec 的 watchRules 是一个辅助函数可能需要自己用 chokidar 等库实现文件监听 // 这里展示概念。实际实现中watchRules 可能返回一个清理函数。 const stopWatching watchRules(this.ruleFilePath, async (newRules) { console.log(Business rules file changed. Reloading...); this.currentRules newRules; this.emit(rules:updated, this.currentRules); // 可以在这里触发一个规则变更的钩子例如刷新所有活跃会话的上下文 }); // 在服务关闭时调用 stopWatching() } public getSystemPrompt(basePrompt: string): string { return ${basePrompt}\n\n${this.currentRules}; } // ... 其他智能体逻辑 }这种模式允许运营团队在后台修改rulespec.yaml并触发emit可以通过文件系统监听或API调用智能体服务能近乎实时地感知到规则变化并在下一次LLM调用中应用新规则。这对于需要快速响应政策变化的场景如促销活动、紧急合规要求至关重要。4.3 与现有Agent框架结合rulespec 是框架无关的。以下是如何与一些流行框架结合的思路LangChain.js:import { loadRules } from rulespec; import { ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate } from langchain/prompts; const businessRules await loadRules(./rulespec.yaml); const systemTemplate You are a support agent. Follow these rules:\n${businessRules}; const systemMessagePrompt SystemMessagePromptTemplate.fromTemplate(systemTemplate); const humanMessagePrompt HumanMessagePromptTemplate.fromTemplate({user_input}); const chatPrompt ChatPromptTemplate.fromMessages([systemMessagePrompt, humanMessagePrompt]); // ... 后续使用 chatPrompt 和 LLMChainVercel AI SDK:import { loadRules } from rulespec; import { OpenAIStream, StreamingTextResponse } from ai; export async function POST(req: Request) { const { messages } await req.json(); const businessRules await loadRules(./rulespec.yaml); const systemMessage { role: system, content: You are a support agent. Adhere to these policies:\n${businessRules} }; const response await openai.chat.completions.create({ model: gpt-4, stream: true, messages: [systemMessage, ...messages], }); const stream OpenAIStream(response); return new StreamingTextResponse(stream); }5. 高级应用、问题排查与最佳实践5.1 规则冲突检测与解决策略当规则数量增多时可能会出现隐含的冲突。例如规则Acontext: When a customer asks about shippingrule: Always quote standard shipping (5-7 days).规则Bcontext: When a customer is a premium memberrule: Offer free express shipping (2 days).如果一个高级会员询问运费两条规则上下文都匹配但给出的指引不同。rulespec 目前不提供自动的冲突检测这需要人工设计时规避。解决策略精细化context将规则B的上下文修改为When a customer is a premium member AND asks about shipping options。更具体的上下文优先级更高。使用intent区分优先级将核心规则如“必须给高级会员免费快递”设为enforce将一般性规则如“标准运费报价”设为inform或suggest。在系统提示词中可以额外说明[enforce]规则优先于其他。在规则文本中显式说明例外在规则A中增加例外条款“...除非客户是高级会员则提供免费快递”。建立规则管理流程在团队中新增或修改规则时需要进行简单的“冲突评审”快速扫描其他规则的context是否有重叠。5.2 常见CLI操作问题与排查问题npx rulespec add时报错Validation failed。排查检查必填字段--id,--rule,--context,--intent是否齐全。确保--intent的值是enforce、inform、suggest中的一个。检查--id是否已存在ID必须唯一。问题npx rulespec emit后生成的SKILL.md文件是空的或缺少规则。排查首先运行npx rulespec validate检查YAML语法。最常见的原因是YAML格式错误比如缩进使用了Tab键而不是空格或者列表项格式不正确。使用在线YAML校验器粘贴你的rulespec.yaml内容进行检查。问题通过CLI添加的示例在YAML文件中看起来格式很奇怪比如多行字符串被折叠。解决rulespec 的CLI在处理包含复杂JSON或换行符的输入时可能会使用YAML的块标量样式如|或。这是正常的YAML格式化行为不影响功能。如果你希望手动编辑示例使其更易读可以学习基础YAML多行字符串语法。问题loadRules()函数在Node.js中报错Cannot find module。排查确保是通过npm install rulespec安装的依赖而不是仅用npx。npx用于运行CLI命令而编程化导入需要本地安装包。5.3 版本控制与团队协作工作流rulespec 与Git是天作之合。建议采用以下工作流主分支保护将rulespec.yaml视为重要的配置文件对其合并请求Pull Request设置要求至少需要一名核心成员如产品负责人或资深工程师的审查。变更说明每次提交修改rulespec.yaml时在提交信息中清晰说明变更原因如“根据法务部要求将退款期限从30天延长至45天更新规则refund-timeframe”。基于特性的规则分支如果正在开发一个涉及多项规则变更的新功能如“推出会员等级体系”可以创建一个特性分支在该分支上添加和修改相关规则member-tier-pricing,premium-shipping等。开发完成后通过合并请求一次性集成所有相关规则变更。发布标签当智能体应用发布新版本时为对应的rulespec.yaml状态打上Git标签如v1.2.0-rules。这样你可以随时回滚到任何发布版本所对应的规则集。5.4 性能与规模化考量文件大小对于绝大多数业务场景一个包含几十甚至上百条规则的rulespec.yaml文件体积仍然很小KB级别加载和编译速度极快无需担心性能。规则数量当规则数量超过几百条时可能会影响最终系统提示词的长度从而增加LLM的令牌消耗和成本。此时需要考虑规则分组按业务模块拆分成多个rulespec.yaml文件如refund-rules.yaml,shipping-rules.yaml。智能体可以根据对话上下文动态加载最相关的一组规则。规则摘要在系统提示词中不直接注入所有规则全文而是先注入一个“规则目录”或“关键规则摘要”并指示AI在需要时可以查询详细的规则库通过RAG或函数调用。动态规则rulespec 本身管理的是静态规则。对于需要根据实时数据计算的规则如“如果当前库存小于10则提示缺货”这部分逻辑仍然需要在你自己的应用程序代码中实现。rulespec 可以管理这条规则的文本描述和触发条件context: When recommending a product to a customer但具体的库存判断需要代码来完成。5.5 超越CLI探索未来的可能性rulespec 的YAML格式是其优势所在——它是机器可读且相对人性化的。这为扩展功能打开了大门可视化规则编辑器可以构建一个简单的Web界面让非技术同事通过表单来添加、编辑规则后台调用 rulespec CLI 或库来更新YAML文件。规则影响分析编写一个脚本分析某条规则修改后会影响哪些历史测试用例examples从而自动运行相关的回归测试。与LLM协同编写结合AI SDK你可以尝试让一个LLM来帮助你起草或优化规则文本。例如输入一段模糊的业务需求让LLM根据已有的规则格式和风格生成一条候选规则再由人工审核和确认。多语言输出目前SKILL.md是英文的。你可以修改编译逻辑或者编写一个后处理脚本将规则翻译成其他语言为不同地区的智能体提供本地化的规则提示。rulespec 作为一个精炼的工具其价值在于它确立了一个清晰、可操作的管理范式。它可能不是你AI智能体项目的全部但它为解决“如何管理AI的行为规则”这个棘手问题提供了一个极其优雅且实用的起点。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…