使用工业自动化的功能块实现大语言模型应用

news2024/11/26 18:33:46

 大语言模型无所不能?

         以chatGPT为代表的大语言模型横空出世,在世界范围内掀起了一场AI革命。给人的感觉似乎大模型语言无所不能。它不仅能够生成文章,图片和视频,能够翻译文章,分析科学和医疗数据,甚至可以实现推理,富有情感,控制机器人等等。令人眼花缭乱。

       如果让大模型尽情地发挥想象力,也许它的确能够回答,但是如果指望它准确地回答问题,就要求它富有逻辑性地思考。前提是人类的问题和提示也需要具有逻辑性。加以正确地引导。

事情并非如此

        大模型真的如此神奇么?了解真相的最好办法就是亲手去试试。2024年以来,我先后测试了openai,文心一言,kimi,零一万物,千问,llama-3 等各种大语言模型。同时尝试学习使用langchain 库编写了python和nodeJS 的大语言编程。实现了各种的RAG,Agent ,langGraph 等应用范式。给我的总的印象是:

 与语言相关的应用令人惊艳

        大模型强大的文字生成能力令人映像深刻,写一首诗信手拈来,尽管没有多少绝句,也算是中规中矩。

      文章翻译,润色,总结也表现出色。大模型上知天文地理,下知鸡毛蒜皮。知识渊博令人乍舌。似乎一下子原来感觉高不可攀的搜索引擎公司突然感到背脊骨阵阵寒风,岌岌可危了。

      大模型同时展示了编写程序都表现出非凡的能力。以至于许多认惊呼码农未来要丢饭碗了。

        结合我自己熟悉的领域,我使用大模型生成工业自动化领域的信息模型,例如通过自然语言的描述生成OPC UA 的信息模型,工业4.0 的资产管理壳(AAS) 模型,收到比较好的效果。只要使用自然语言描述一个设备的信息属性,就能够自动生成符合OPCUA 规范的XML OPCUA 模型。这将大幅度地提升构建各种信息模型的效率。

推理,智能体(Agent),工具使用牵强人意

        如果AI 仅仅停留在通用知识对话,生成文本的程度的话,大语言模型的作用就太狭隘了。随着大语言模型的演化,人们惊喜地发现,大模型涌现出了人类智慧的能力,比如推理,使用工具以及构建自主智能体(Agent) 的超强能力。给人们留下了无限的想象空间。但是,这些”涌现“无法使用数学证明其内部的机理。大模型演变成为遵循大力出奇迹原理(scale law )的黑匣子。

     在我看来,大语言模型应用技术越来越基于生物学家的方式在进行。难以解释生命的全部奥秘,只能尝试生命的某些特征。使用各种提示和流程来测试大语言模型的各种潜在特征。给我的感觉是,写大语言模型应用程序很像训练自己家的狗。采用各种各样的语言,身体动作来训练狗做动作。反正变着法子来。有时候晚上训练的不错,明天却又不灵了。

     人们也提出了各种训练秘籍,例如提示工程,zero shot react,Tools 等等方式。其实大多数是训练宠物的方式,大模型不灵也是白瞎。

    近一段时间以来,我也做了一些尝试。编写了基于langchain 的各种大模型方法。它们包括:

  1. memory
  2. Agent
  3. Function Call
  4. React
  5. RAG

        作为一个大模型应用的菜鸟,我依葫芦画瓢地写了基于python 和nodeJS 的应用。同时也分别测试了下面几个大模型:

  1. openai
  2. 本地 llama-3
  3. 文心一言
  4. kimi
  5. 零一万物

初步实验的结果并不理想。主要表现在:

  1.   大模型的推理能力并不强 有时候会不断地在Action Thought  Observation兜圈子。
  2.   工具经常用错
  3.   momory  保存了对话的输入和输出,有时候会干扰大模型的判断。
  4.   对于简短的对话输入往往与矢量数据库中的内容无法进行相似度匹配。

  使用的结果表明 openai (GPT-4)表现最好,但是也还是不理想。

思考 

          江南的清晨,我坐在窗口,望着烟雨茫茫的太湖。不仅陷入的沉思。。。难道人工智能就这么一个投资巨大,消耗能源惊人的黑匣子么?人类千百年来创造的哲学,科学方法,数学,信息技术的终结目标就是这么一个”怪胎“?显然不应该如此。

        突然顿悟,大语言模型应该与已有的科学技术相融合,而不是取代。人类积累的宝贵技术,科学和经验能够让大语言模型发挥更强的威力。它们将相互成就。

        其实,对于特定的大语言模型应用而言,完全可以由人类预先设定处理的逻辑。就像我们编写应用程序那样处理。类似ReAct 方式,我们完全可以使用传统编程的方式编排出来。何必劳神大模型费力费钱呢?说到这里,不由得想起几年前学习神经网络时的经历,当是我就使用复杂的数学公式训练了一个神经网络模型。好像是一个滤波器。训练了5 万步之后,仿真的值非常出色了。但是既然有了滤波器公式,没有必要额外地训练一个神经网络。

    让大模型做它最擅长的事情,用传统的IT/OT 技术来做其它。这才是正确的方法。

大语言模型与IT/OT技术的融合

        我并没有研究和使用各种LLM 应用架构。主要使用的是langchain。感觉这样的架构过度地依赖大语言模型的能力。尽管langchain 提供了一些语言处理的模块,使用链(chain)连接运行,后来又提出了langGraph ,似乎想导入图形程序设计方法。但是并不像传统IT技术中的图形程序设计方法那么灵活。Agent 的概念也是如此,所谓的ReAct 模式是预先编排好的,完全是依靠大模型的推理能力来实现Action-Thought-Observation和工具的使用,存在很大的不确定性。

        基于本人近年来研究开放自动化系统的经验。我认为完全可以采纳类似与工业领域基于模型的设计思想来构建大语言模型的应用程序。比如工业控制领域的PLC 功能块(IEC61131-3) 和IEC61499 基于事件功能块,功能块网络等建模设计思想。与工业控制领域的功能块不同, 大语言模型的功能块处理的是自然语言为主。并且通过大模型来确定输出的路由。于是,我提出了一套基于功能块的大语言模型应用的概念和架构,实现大模型的应用。

逻辑学和形式逻辑语言的重要性

        人类语言大多数是含糊不清,没有逻辑的。我们也不知道人类是如何相互理解的。为了能够精确地表达思想,人们提出了逻辑学和形式逻辑语言。形式逻辑系统的目的是追求精益求精。数学和计算机程序都是一种形式化语言。

        逻辑学是确定性推理的基础,而形化语言是确定性描述事物的工具。大语言模型是基于自然语言训练出来的。它显然更容易理解具有逻辑的形式化语言。但是这并不代表它能够准确地理解任何自然语言。如果人类能够准确地理解自己的语言,逻辑学和形式语言就没有存在的必要了。

        因此,如果需要让大模型构建确定性AI,做出确定的操作,需要转换成为形式化逻辑语言。

AI与IT /OT 的界面

首先,要判断用户的提问是否与IT/OT 系统相关,如果没有关系,就简单地让大模型做出回答,如果与IT/OT 相关,就提取形式化信息,转向IT/OT 模块处理。在这个过程中,还能够做出正确性检查。如果缺少某些信息,就回答”你没有提供XXX 信息,我无法执行。

     对于特定的大语言模型应用,使用传统形式化技术来验证,推理和处理是可能的。

关于Agent

   “Agent”是一个有着悠久历史的概念,在许多领域都得到了探索和解释。现在泛指具有高度自主性的智能实体。它可能是天然有机的,也可能是人工制造。比如在人类社会中处理法律的Agent,处理房产买卖的Agent等等,正是因为如此,经常将Agent 翻译成代理。

      在人工智能领域提到的Agent,通常是指能够使用传感器感知其周围环境、做出决策、然后使用致动器采取响应行动的人工实体。 Agent 人工智能系统的基本构建块。 

           一群智能体可以理解为一组智能体在单个环境中共同共存,在该环境可以相互协作解决问题。

        在AI 的研究过程中,人们提出了各种智能体模型,比如ReAct ,Zero-shot-React 等等。

最近Agent 的定义

 Lilian Weng在其博文《LLM Powered Autonomous Agents》 中,对基于LLM的AI Agent 做了系统综述。 

原文地址:https://lilianweng.github.io/posts/2023-06-23-agent/

        她将Agents定义为LLM、记忆(Memory)、任务规划(Planning Skills)以及工具使用(Tool Use) 的集合,其中 LLM 是核心大脑,Memory、Planning Skills 以及 Tool Use 等则是 Agents 系统实现的三个关键组件,并对每个模块下实现路径进行了细致的梳理和说明。

智能体工作流 Agnetic Workflow

     在今年的Sequoia Capital AI Ascent 2024大会上,著名人工智能专家Andrew N提出了一个很有趣的新概念——”代理工作流程(Agentic Workflow)”。

        智能体工作流(Agentic Workflow)是与大型语言模型(LLM)交互和完成任务的一种新方法。传统上,我们与LLM交互时,会直接输入一个提示(prompt),LLM然后会基于这个提示直接生成一个输出结果。这种做法有点像让一个人一次性从头到尾写出一篇文章,没有反复修改和迭代的机会。

        代理工作流则更像是将写作过程分解为多个步骤:首先是根据主题大纲写一个草稿,然后是对草稿进行分析、修改和补充,之后是进一步完善和润色,如此反复迭代,直到最终生成期望的结果。

        在这个过程中,我们不是直接向LLM提出”写一篇文章”这样的指令,而是将任务分解为多个子任务,引导LLM按步骤完成每个子任务。每个子任务的输出将作为下一步的输入,以此循环往复。   

         Andrew 给出了四种常见的agent 设计模式。分别是Reflection、Tool use、Planning和Multiagent collaboration。

      即使是较低版本的大型语言模型(如GPT-3.5),通过将任务分解为多个步骤并进行反复迭代优化,也能在解决复杂问题上达到超越一次性直接生成输出的卓越性能。

        笔者看来,智能体工作流绝非这么几种,事实上设计智能体工作流,与我们编写程序非常地十分相似,应该具有许多的方式。使用传统程序设计方式会更灵活。我们可以借鉴工业自动化行业编写工业控制软件的方式来编排智能体工作流,比如IEC61499,IEC61131-3 功能可的方式。

智能体推理设计模式

 

Agent 的本质 

        Agent 的本质是一种自主地完成某一项任务的单元。它与IT领域的“微服务”十分类似,它们可以独立编程,独立部署,运行和维护。

    如果Agent内部包含AI 的能力,则被称为智能体。

我们提出的系统架构

      我的观点是,智能体应该由多种形式。而不是简单的几种形式。不是简单地将一个复杂的问题全部指望大模型来解决。而应该将复杂的问题预先加以分解,变成一系列小问题,由大模型解决。这样做的好处在于:

  •       大模型回答简单的问题,有利于保证其确定性
  •       融入了人类的思维方式,更具有针对性。推理的速度更快
  •       使提示工程变得简单
  •       有利于与物理模型相结合
  •       有利于采纳本地小模型与远程大模型相结合  ,降低使用大模型的成本,提高响应时间
  •       有利于对大模型的回答做确定性判断
  •       有利于独立地调试和验证大模型回答的正确性

     于是我们打算另辟蹊径,采纳工业控制领域模块化设计思想来构建智能体程序。基于我们的经验,决定借用IEC61499 事件功能块的概念和方法,这样做的另一个意图是实现语言功能块和IEC61499 功能块的融合。

IEC61499 的基本概念包括:

  • 基本功能块
  • 复合功能块
  • 功能块网络

  IEC61499 基于图形化编程,可以系统化设计分布式系统。可以将设计的功能块网络转换成为XML 语言,部署到运行时中执行。有关IEC61499 的进一步知识,可以查看我写的相关博文。

与IEC61499 系统架构的区别

       系统中保留了一个环境信息(Environment Information)这是一个全局变量区,大模型功能块会输出信息到该区域,由不同功能块共享访问。

        在上述观点下,一个大语言模型应用程序是由由功能块网络和环境信息构建而成的。在langFunctionBlock 运行时(runtime)执行。 

    大语言功能块内部访问大语言模型,返回的结果可以做一些验证,保证回答的确定性。

        环境信息包含了所有的系统信息,可以被多个功能块共享。功能块也能够在环境信息中更新和添加信息。具体如何实现,需要进一步的研究。

    对于跨网络的Agent 可以通过网络访问环境信息。

大模型与IT/OT 的接口

        大语言模型的输出如何与IT/OT 程序的正确接口对于保证系统的确定性是非常重要的,我们尝试        在系统中引入了Tag 和关键字机制。首先通过大模型判断输入信息的Tag 或者关键字(Keyword)。对于简单的语句而言,大模型理解后输出Tag 或者Keyword 是十分轻松的。IT程序通过Tag来决定程序的转移。例如(使用kimi 的结果)

判断问题的类型

:请问下面的内容是询问,还是描述? 我喜欢吃番茄,简单地用“询问”或者“描述” 回答。

:描述

:请问下面的内容是询问,还是描述? 我喜欢吃番茄吗?,简单地用“询问”或者“描述” 回答。

:询问

        同样地,我们也可以从信息中提取关键词,IT 程序能够通过关键词查询数据库或者跳转程序。就现在大语言模型的能力而言,这是非常可靠和确定的了。  

提取问题中的关键词

:提供你下面几个关键词:当前,时间 ,事件。请简单列出下面内容中包含的关键字。现在正在下雨。以数组形式输出

:["当前", "事件"]

        对于更复杂的情形,我们可以从自然语言中提取出一个json 或者XML 信息模型,供IT程序进一步处理,比如写入数据库。

调用工具 

问:有一个工具ControlLight,当需要控制灯光时时调用, 回答下面的问题,需要调用该工具吗? 请打开灯。简单回答YES 或者NO

答:YES

问:工具ControlLight,当需要控制灯光时时调用。工具ControlAirCondition ,当需要控制空调时调用。 回答下面的问题,需要调用该工具吗? 请开空调。简单回答应该使用哪一种工具

答:ControlAirCondition

语言功能块(langFunctionBlock)

        语言功能块是一种基于大语言模型的处理自然语言的功能块。这里我们借用了IEC61499 事件功能块的概念,这样做的另一个意图是实现语言功能块和IEC61499 功能块的融合。实现AI/IT/OT 的相互融合。也可以认为

主要属性
  • 名称(Name)
  • 类型(Type)
  • 状态(Status)
  • 大语言模型类型(LLM Model)
  • 大模型提示(LLM Prompt)
    • 针对不同的状态,可以定义不同的提示。
输入/输出 :
  • 事件输入
  • 事件输出
  • 数据输入
  • 数据输出

事件IO

用于程序执行流程的引导,最基本的事件包括:

  • Excution
  • Finish
  • Error

数据IO

    我们在IEC61499 功能块的基础上做了一些扩展,可以传递JSON 结构化数据类型。

状态机 

功能块内部维护一个状态机。可以实现更复杂的功能。

功能块内部的程序结构

语言功能块网络

        多个语言功能块连接成一个功能块网络,完成大语言应用程序

复合语言功能块

        多个语言功能块能够构成一个复合功能块。其内部是一个功能块网络。

AI与IT/OT 的融合

        基于LangFunctionBlock 的系统架构的另一个优点是实现AI/IT/OT 的融合。我们完全可以将langFunctionBlock 和IEC61499 Event FunctionBlock 相结合,构成一个AI/IT/OT 结合的网络,实现AI/OT 应用。比如图像识别,机器人控制等复杂的场景。

实验平台

   为了实验langFunctionblock 的想法,我们简单地搭建列一个实验平台:

  • 基于Nodejs/Javascript
  • 基于langchain库
  • 一个Javascript 实现的功能块运行时
  • 一组基于大模型的功能块
  • 不依赖大模型的API
App架构

实验-1 在零一万物大模型下实现工具调用。

  为此我们构建了下面的功能块网络(以IEC61499 4Diac IDE 设计)

设计的功能块

InputMessage

输入用户提问的功能块,当用户输入消息时。该功能块产生:

  • Output 事件
  • OutMessage 数据

应用程序通过 WriteData 和Execution  调用该功能块。

设置InputMessage和OutMessage功能块的主要目的是使功能块具有一个统一的入口和出口。

Basic

  这是一个基本的功能块,将InMessage 询问大模型,回答输出到OutMessage

Tools

    这是一个工具功能块,判断用户的输入信息和是否要调用两个工具 ControlLight 和 ControlAirCondition。然后调用相关的工具功能块。

ControlLight

        这是一个普通的功能块,实现对灯光的控制。

ControlAirCondition

        这是一个普通的功能块,实现对空调的控制。

OutputMessage 

        向用户回复消息。

从这个实验表明,即便是大模型没有支持Function Call 的功能(据我了解,到目前为止,零一万物大模型没有支持Function Call 的API)

处理流程
  • 前端输入的用户提问,通过Post 发送给NodeJS 后端。
  • 将用户消息写入InMessage 功能块,调用InMessage 功能块的Excution。
  • InMessage 将用户消息直接发送给Tools
  • Tools 判断是否要使用两个工具,ControlAirCondition 和ControlLight 如果需要的话,就转向相关工具的功能块,如果不需要调用工具,就调用基本功能块Basic 回答问题。
  • 最好通过OutMessage 返回结果信息。
用户界面

代码示例

Tools功能块源代码

export class ToolsType{
    constructor() {    
        this.Type = "ToolsType";
      }
    CreateInstance(Parameters){
     //   console.log("Create BasicType Instance")
        return new Tools(Parameters)
    }
}

 class Tools {
  
    constructor(Parameters) {
       
      this.Name = Parameters.Name;
      this.Type = "ToolsType";
      this.model=Parameters.Model
      this.ModelType=Parameters.ModelType 
    }
    static Prompt = "Point";
    async   Executive(runtime,EventType){
        if (EventType=="Invoke"){
              //  console.log("Invoke:---------"+this.ModelType)
                console.log(this.InMessage)
                const Prefix=`工具:ControlLight:当需要控制灯光时时调用。该工具有2个操作,Open 和Close。
                              工具:ControlAirCondition ,当需要控制空调时调用。该该工具有2个操作,Open 和Close。 
                              回答下面的问题,需要调用该工具吗?`
                const Suffix=`判断是否应该使用哪一种工具,要求直接输出结构化JSON 对象。JSON 格式为:
                              {
                                  ToolName:"The Tool Name"
                                  Operation:"The Operation of the tool"
                              }
                              如果判断不需要使用工具,直接回答: {"ToolName":"NotUseTools"`
                const Prompt=Prefix+this.InMessage+Suffix
                const completion = await this.model.chat.completions.create({
                  messages: [
                      {
                          "role": "user",
                          "content": Prompt,
                      }],
                  model: this.ModelType,
                });
            
               const Content=await completion.choices[0].message.content
               
                 console.log(Content)                    
               const JSonContent=JSON.parse( Content.replace("```json\n","").replace("```",""))
            //   console.log(JSonContent)
               if (JSonContent.ToolName=="ControlAirCondition")
                  { 
                    this.Operation=JSonContent.Operation
                    await runtime.WriteOutputData({FBName:this.Name,DataName:"Operation",Value:this.Operation})
                    runtime.EventNotify({FBName:this.Name,EventName:"ControlAirCondition"})
                    
                }
               else if  (JSonContent.ToolName=="ControlLight")
               {
                this.Operation=JSonContent.Operation
                await runtime.WriteOutputData({FBName:this.Name,DataName:"Operation",Value:this.Operation})    
                runtime.EventNotify({FBName:this.Name,EventName:"ControlLight"}) 
               
            }  else if  (JSonContent.ToolName=="NotUseTools"){
              console.log("NotUseTools======"+this.InMessage)
              this.OutMessage=this.InMessage;
              await runtime.WriteOutputData({FBName:this.Name,DataName:"OutMessage",Value:this.OutMessage})
              await runtime.EventNotify({FBName:this.Name,EventName:"NotUseTools"})
              
            }
               else {

                this.OutMessage="抱歉,无法判断!"
                runtime.EventNotify({FBName:this.Name,EventName:"Finish"})
               }  
        
    }
}
    async WriteData(Name,Value){
      //  console.log(this.Name+" WriteData:"+Value)
        if (Name=="InMessage"){
            this.InMessage=Value;
          //  console.log(this.InMessag)
        }
    }
    async ReadData(Name){
        if (Name=="OutMessage")
           return this.OutputMessage;
    }
}

结论

        对于大多数特定的AI 项目,能够使用IT 程序设计的方式来决定大模型应用的流程编排。

        使用OT 领域的功能块实现大模型应用,有利于AI 与IT,OT 的融合,在机器人控制,物联网的到应用。

        工业控制领域的功能块有利于将复杂的问题划分成小问题,一步一步地解决。小问题更容易回答正确。   同时小问题的Prompt 能够表述更明确。

     将复杂问题分解成为小问题,功能块只是回答单一的问题,这有利于使用本地小模型解决复杂的应用。不同的功能块可以调用不同的大语言模型。 

        本文只是记录了我的一些初步的尝试。还需要不断进一步实验和研究。感兴趣的读者可以共同探讨。

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

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

相关文章

矩阵键盘与密码锁

目录 1.矩阵键盘介绍​编辑 2.扫描的概念 3.代码演示(读取矩阵键盘键码) 4.矩阵键盘密码锁 1.矩阵键盘介绍 为了减少I/O口的占用,通常将按键排列成矩阵形式,采用逐行或逐列的 “扫描”,就可以读出任何位置按键的状态…

C++ 视觉开发 六.特征值匹配

以图片识别匹配的案例来分析特征值检测与匹配方法。 目录 一.感知哈希算法(Perceptual Hash Algorithm) 二.特征值检测步骤 1.减小尺寸 2.简化色彩 3.计算像素点均值 4.构造感知哈希位信息 5.构造一维感知哈希值 三.实现程序 1.感知哈希值计算函数 2.计算距离函数 3…

Transformer和Mamba强强结合!最新混合架构全面开源,推理速度狂飙8倍

最近发现,将Mamba和Transformer模块混合使用,效果会比单独使用好很多,这是因为该方法结合了Mamba的长序列处理能力和Transformer的建模能力,可以显著提升计算效率和模型性能。 典型案例如大名鼎鼎的Jamba:Jamba利用Tr…

自定义流程表单开发优势体现在什么地方?

提质、增效、降本,应该是很多职场办公需要实现的发展目标。那么,应用什么样的软件平台可以实现?低代码技术平台、自定义流程表单开发是目前流行于职场行业中的软件产品,可视化操作界面、够灵活、易维护等优势特点明显,…

考到PMP证书后 如何获得PDU?

目前仅续证一次,也是在威班PMP考试后免费积攒的。其实获取PMP的渠道很多,网上也有很多售卖的,积攒起来也挺容易,不过在续证的时候千万不要找不明渠道来源的人去搞,不靠谱。续证期有三年的,三年时间积攒60PD…

理解机器学习中的潜在空间(Understanding Latent Space in Machine Learning)

1、什么是潜在空间? If I have to describe latent space in one sentence, it simply means a representation of compressed data. 如果我必须用一句话来描述潜在空间,它只是意味着压缩数据的表示。 想象一个像上面所示的手写数字(0-9&…

天猫超市卡怎么用

猫超卡是在天猫超市里面消费用的卡 但是我们现在买东西都喜欢货比三家,肯定是哪家划算在哪买,要是淘宝其他店铺或京东卖的更便宜,猫超卡自然就用不上了 这种情况的话,还不如直接把猫超卡的余额提出来,买东西也不受限…

RPMBUILD从入门到放弃

前言 为什么会产生这篇文章?促使我写出这片文章的背景是:前几周出差至客户现场部署服务,由于客户是zf,底层物理机都是浪潮品牌,且内网涉密。由于没有提前告知此情况,我误以为还是之前的安装方式一套流程就能部署完成,但没想到的是中间件的安…

Pandas 入门 15 题

Pandas 入门 15 题 1. 相关知识点1.1 修改DataFrame列名1.2 获取行列数1.3 显示前n行1.4 条件数据选取值1.5 创建新列1.6 删去重复的行1.7 删除空值的数据1.9 修改列名1.10 修改数据类型1.11 填充缺失值1.12 数据上下合并1.13 pivot_table透视表的使用1.14 melt透视表的使用1.1…

精准调整:数控切割机导轨的水平与垂直度校准!

滚柱导轨因其具有高承载、高精度、高稳定性和长寿命等特点,被广泛应用在重型设备、精密设备、自动化生产线、航空航天和半导体设备等领域。尤其是在数控切割机中的应用,最为广泛。 对于数控切割机来说,滚柱导轨的调整非常重要,是数…

在 Baklib Experience 中实现混合 CMS 架构

“还记得 CMS 主要用于在网页上布局内容吗?当时,这满足了网站管理需求。然而,行业正在发生变化,数字体验平台 Baklib Digital Content Experience 正在引领潮流。继续阅读以了解如何以及详细了解可用于确保全渠道成功的两个原则。…

[go-zero] 简单微服务调用

文章目录 1.注意事项2.服务划分及创建2.1 用户微服务2.2 订单微服务 3.启动服务3.1 etcd 服务启动3.2 微服务启动3.3 测试访问 1.注意事项 go-zero微服务的注册中心默认使用的是Etcd。 本小节将以一个订单服务调用用户服务来简单演示一下,其实订单服务是api服务&a…

【二】Ubuntu24虚拟机在Mac OS的VMware Fusion下无法联网问题

文章目录 1.环境背景2. 需求背景3. 解决方法3.1 在mac的终端查看虚拟机NAT网络3.2 查看unbuntu节点2的网络配置3.3 问题定位与解决3.3.1 检查是否有冲突3.3.2 冲突解决方法 4. 总结4.1 NAT 网关的原理4.2 VMware Fusion 的 NAT 模式4.3 为什么网关冲突会引起问题4.4 理解配置冲…

龙迅#LT8642UXE适用于四路HDMI转两路HDMI切换应用功能,分辨率高达4K60HZ!

1. 概述 LT8642UXE HD-DVI2.0/1.4 交换机具有符合 HD-DVI2.0/1.4 规范的 4:2 交换机、最大 6Gbps 高速数据速率、自适应均衡接收输入和预加重 TX 输出,以支持长电缆应用。 LT8642UXE HD-DVI2.0/1.4 开关自动检测电缆损耗,并自适应优化均衡设置…

web Worker学习笔记 | 浏览器切换标签,定时器失效的解决办法

文章目录 web Workerweb Worker介绍 - 多线程解决方案浏览器多进程架构 web workers 的使用关闭worker引用其他js文件 浏览器切换标签,定时器失效的解决办法窗口可见性 API解决定时器失效的方案 web Worker web Worker介绍 - 多线程解决方案 Web Workers 是Html5提…

《中国品牌网》揭秘格行品牌崛起之路:如何从混乱市场中杀出重围,领跑未来?

在随身WiFi行业乱象丛生的背景下,格行品牌凭借其独特的经营理念和长期主义的精神,逐渐崭露头角,成为行业的领跑者。近日,《中国品牌网》记者专访了格行品牌的创始人刘永先先生,就他的经营理念、市场策略以及未来展望进…

TCP的pop网络模式

TCP的pop网络模式 1、tcp连接的状态有以下11种 CLOSED:关闭状态LISTEN:服务端状态,等待客户端发起连接请求SYN_SENT:客户端已发送同步连接请求,等待服务端相应SYN_RECEIVED:服务器收到客户端的SYN请请求&…

sql注入问题批量处理

问题:SQL注入修改,历史代码全是${};无法修改的比如表名,列名,动态排序之类的不改,其他的都要修改完成 背景:新公司第一个任务就是SQL注入的修改,历史sql全部都是${},一个个调整不太合适只能批量…

JDBC 学习笔记+代码整理

Tip Idea自带可视界面👉MySQL 图形化界面-CSDN博客 Idea2022无add Framework support选项👉最新版IDEA:Add web Framework Support步骤/构建JavaWeb项目步骤_idea add framework support-CSDN博客 基本步骤 1.加载驱动包Driver 2.建立与数据库的连接C…

[TensorFlow-Lite][深度学习]【快速简介-1】

前言: 很多场景下面我们需要需要把我们的深度学习模型部署到Android,IOS 手机上面. Google 通过TensorFlow Lite 提供了对应的解决方案. 目录: 端侧部署优点 硬件支持 性能 应用案例 一 端侧部署优点 1; 很多场景下面: 无网络,数据无法…