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

基于大语言模型的AI Agents

代理(Agent)指能自主感知环境并采取行动实现目标的智能体。基于大语言模型(LLM)的 AI Agent 利用 LLM 进行记忆检索、决策推理和行动顺序选择等,把Agent的智能程度提升到了新的高度。LLM驱动的Agent具体是怎么做的呢?

什么是AI Agent?

代理(Agent)这个词来源于拉丁语“agere”,意为“行动”。现在可以表示在各个领域能够独立思考和行动的人或事物的概念。它强调自主性和主动性 [1][1]。智能代理/智能体是以智能方式行事的代理;Agent感知环境,自主采取行动以实现目标,并可以通过学习或获取知识来提高其性能 [8][8]。

可以把单个Agent看成是某个方面的专家

一个精简的Agent决策流程:

Agent:P(感知)→ P(规划)→ A(行动)

感知(Perception)是指Agent从环境中收集信息并从中提取相关知识的能力。

规划(Planning)是指Agent为了某一目标而作出的决策过程。

行动(Action)是指基于环境和规划做出的动作。

其中,Policy是Agent做出Action的核心决策,而行动又通过观察(Observation)成为进一步Perception的前提和基础,形成自主地闭环学习过程。

LangChain 中的各种概念 [4][4]

  • Models,也就是我们熟悉的调用大模型API。
  • Prompt Templates,在提示词中引入变量以适应用户输入的提示模版。
  • Chains,对模型的链式调用,以上一个输出为下一个输入的一部分。
  • Agent,能自主执行链式调用,以及访问外部工具。
  • Multi-Agent,多个Agent共享一部分记忆,自主分工相互协作。

LangChain 中 Agent 和 Chain 的区别:

The core idea of agents is to use an LLM to choose a sequence of actions to take. In chains, a sequence of actions is hardcoded (in code). In agents, a language model is used as a reasoning engine to determine which actions to take and in which order.

背景知识

做决策的过程中,一个很重要的信息来源是 记忆(Memory)。作为重要的背景知识,下面简单介绍下都有哪些种类的记忆 [2][2]。

记忆(Memory)[2][2]

记忆可以被定义为获取、储存、保留以及后来检索信息的过程。人脑中有几种类型的记忆。

  • 感觉记忆(Sensory Memory):这是记忆的最早阶段,提供在原始刺激结束后保留感官信息(视觉、听觉等)的印象的能力。感觉记忆通常只持续几秒钟。子类别包括视觉记忆(iconic memory)、回声记忆(echoic memory)和触觉记忆(haptic memory)。
  • 短期记忆(Short-Term Memory, STM)或工作记忆(Working Memory):它储存我们当前意识到的信息,以执行复杂的认知任务,如学习和推理。短期记忆被认为有大约7个项目的容量(Miller 1956)并持续20-30秒
  • 长期记忆(Long-Term Memory, LTM):长期记忆可以储存信息很长一段时间,从几天到几十年,其储存容量基本上是无限的。LTM有两个子类型:
    • 显性 / 陈述记忆(Explicit / declarative memory):这是对事实和事件的记忆,指的是那些可以被有意识地回忆的记忆,包括情景记忆(事件和经验)和语义记忆(事实和概念)。
    • 隐性 / 程序记忆(Implicit / procedural memory):这种记忆是无意识的,涉及自动执行的技能和例行程序,如骑自行车或在键盘上打字。

可以大致考虑以下对应关系:

  • 感觉记忆视为学习原始输入(包括文本、图像或其他模式)的嵌入表示
  • 短期记忆视为在上下文中(prompt)学习。它是短暂且有限的,因为它受到Transformer的上下文窗口长度的限制。
  • 长期记忆视为代理在查询时可以注意到的外部向量存储,可以通过快速检索访问。

怎么写好Prompt:ReAct

  • Home: ReAct: Synergizing Reasoning and Acting in Language Models
  • LangChain中的ReAct:https://python.langchain.com/docs/modules/agents/agent_types/react.html

ReAct 指:Reason and Act 。

特色:

  • CoT 只是在prompt加入了静态的 “Let’s think step by step”。ReAct 的prompt是动态变化的。
  • CoT 只调用LLM一次即可,ReAct是多次迭代调用LLM。

ReAct 可能是当前Agent中使用最多的prompt结构:少样本 + Thought, Action, Observation 。也是调用工具推理规划时常用的prompt结构。

ReAct 中迭代使用3个元素:Thought, Action, Observation。其中 Thought, Action LLM 生成,Observation 是执行 Action 后获得的返回结果。

  • Step 1 中,LLM基于 Question 先think(reasoning),然后再决定采取什么行动。这样LLM就会生成 Thought 1 Action 1 。执行 Action 1 获得 Observation 1
  • Step 2 中,LLM基于 QuestionThought 1 Action 1 Observation 1,汇总所有信息先think(reasoning),然后再决定采取什么行动。这样LLM就会生成 Thought 2 Action 2 。执行 Action 2 获得 Observation 2
  • Step 3 中,LLM基于 QuestionThought 1 Action 1 Observation 1Thought 2 Action 2 Observation 2,汇总所有信息先think(reasoning),然后再决定采取什么行动。这样LLM就会生成 Thought 3 Action 3 。执行 Action 3 获得 Observation 3
  • 以此类推直到 Action 表示结束。

具体代码可以参考以下:

def webthink(idx=None, prompt=webthink_prompt, to_print=True):question = env.reset(idx=idx)if to_print:print(idx, question)prompt += question + "\n"n_calls, n_badcalls = 0, 0for i in range(1, 8):n_calls += 1thought_action = llm(prompt + f"Thought {i}:", stop=[f"\nObservation {i}:"])try:thought, action = thought_action.strip().split(f"\nAction {i}: ")except:print('ohh...', thought_action)n_badcalls += 1n_calls += 1thought = thought_action.strip().split('\n')[0]action = llm(prompt + f"Thought {i}: {thought}\nAction {i}:", stop=[f"\n"]).strip()obs, r, done, info = step(env, action[0].lower() + action[1:])obs = obs.replace('\\n', '')step_str = f"Thought {i}: {thought}\nAction {i}: {action}\nObservation {i}: {obs}\n"prompt += step_str  # 之前的 Thought, Action, Observation 都加进来了if to_print:print(step_str)if done:breakif not done:obs, r, done, info = step(env, "finish[]")if to_print:print(info, '\n')info.update({'n_calls': n_calls, 'n_badcalls': n_badcalls, 'traj': prompt})return r, info

https://github.com/ysymyth/ReAct/blob/master/hotpotqa.ipynb

上面函数输入的参数 webthink_prompt ,长如下样子:

Solve a question answering task with interleaving Thought, Action, Observation steps. Thought can reason about the current situation, and Action can be three types: 
(1) Search[entity], which searches the exact entity on Wikipedia and returns the first paragraph if it exists. If not, it will return some similar entities to search.
(2) Lookup[keyword], which returns the next sentence containing keyword in the current passage.
(3) Finish[answer], which returns the answer and finishes the task.
Here are some examples.Question: What is the elevation range for the area that the eastern sector of the Colorado orogeny extends into?
Thought 1: I need to search Colorado orogeny, find the area that the eastern sector of the Colorado orogeny extends into, then find the elevation range of the area.
Action 1: Search[Colorado orogeny]
Observation 1: The Colorado orogeny was an episode of mountain building (an orogeny) in Colorado and surrounding areas.
Thought 2: It does not mention the eastern sector. So I need to look up eastern sector.
Action 2: Lookup[eastern sector]
Observation 2: (Result 1 / 1) The eastern sector extends into the High Plains and is called the Central Plains orogeny.
Thought 3: The eastern sector of Colorado orogeny extends into the High Plains. So I need to search High Plains and find its elevation range.
Action 3: Search[High Plains]
Observation 3: High Plains refers to one of two distinct land regions:
Thought 4: I need to instead search High Plains (United States).
Action 4: Search[High Plains (United States)]
Observation 4: The High Plains are a subregion of the Great Plains. From east to west, the High Plains rise in elevation from around 1,800 to 7,000 ft (550 to 2,130 m).[3]
Thought 5: High Plains rise in elevation from around 1,800 to 7,000 ft, so the answer is 1,800 to 7,000 ft.
Action 5: Finish[1,800 to 7,000 ft][More Examples]...

更多prompt结构可以参考 [7][7] 。

有了上面的基本知识后,我接下来会介绍几篇Agent的代表性工作。本文(Part 1)介绍来自斯坦福的工作,其中主要文字都是原论文直译。

来自斯坦福的虚拟小镇

  • Generative Agents: Interactive Simulacra of Human Behavior, 2023.04, Stanford
  • 代码已开源:GitHub - joonspk-research/generative_agents: Generative Agents: Interactive Simulacra of Human Behavior

虚拟小镇,一个agent就是一个虚拟人物,25个agents之间的故事。

架构

代理(Agents)感知他们的环境,当前代理所有的感知(完整的经历记录)都被保存在一个名为"记忆流"(memory stream)中。基于代理的感知,系统检索相关的记忆,然后使用这些检索到的行为来决定下一个行为。这些检索到的记忆也被用来形成长期计划,并创造出更高级的反思,这些都被输入到记忆流中以供未来使用。

1. 记忆流与检索

记忆流(Memory Stream)记录了代理(Agent)的所有经历。它是一个内存对象列表,其中每个对象包含自然语言描述,创建时间戳和最近访问时间戳。记忆流的最基本元素是观察(Observation),这是代理直接感知的事件。常见的观察包括代理自己执行的行为,或者代理感知到的其他代理或非代理对象执行的行为(每个Agent都有自己独立的记忆流)

检索功能以代理的当前情况作为输入,检索出一部分记忆流,以传递给语言模型。

排序打分包括三个部分:

  • 近期性(Recency)为最近访问的记忆对象分配更高的分数,因此刚刚发生的事件或今天早上的事件可能会保留在代理的注意力范围内。在作者的实现中,将近期性视为一个指数衰减函数,衰减的对象是自上次检索记忆以来的沙盒游戏小时数。衰减因子是0.99。
  • 重要性(Importance)通过为代理认为重要的记忆对象分配更高的分数,区分了平凡记忆和核心记忆。例如,一个平凡的事件,如在房间里吃早餐,会产生一个低重要性分数,而与重要的他人分手则会产生一个高分。重要性分数的实现方式有很多种;作者直接使用LLM打分,输出一个整数分数。
    • prompt:
      On the scale of 1 to 10, where 1 is purely mundane (e.g., brushing teeth, making bed) and 10 is extremely poignant (e.g., a break up, college acceptance), rate the likely poignancy of the following piece of memory.Memory: buying groceries at The Willows Market and Pharmacy Rating: <fill in>
  • 相关性(Relevance)为与当前情况相关的记忆对象分配更高的分数。使用常见的向量检索引擎即可。

最终的检索分数是上面三项的加权平均:

2. 反思(Reflection)

挑战:仅配备原始观察记忆的代理,往往难以进行概括或推理示例:用户问 Klaus Mueller:“If you had to choose one person of those you know to spend an hour with, who would it be?” 仅通过观察记忆,代理简单地选择 Klaus 交互最频繁的人:Wolfgang,他的大学宿舍邻居。但是,Wolfgang 和 Klaus 只是偶尔见面,没有深入的互动。一个更理想的回答需要代理从 Klaus 花费数小时在研究项目上的记忆中概括出 Klaus 对研究的热情,并同样认识到 Maria 也在她自己的研究中付出努力(尽管是在不同的领域),从而反映出他们有共同的兴趣。使用下面的方法,当问 Klaus 要与谁共度时间时,Klaus 会选择 Maria 而不是 Wolfgang。

作者引入了第二种类型的记忆,称之为反思(Reflection)反思是由代理生成的更高级别、更抽象的思考。因为反思也是一种记忆,所以在检索时,它们会与其他观察结果一起被包含在内。反思是周期性生成的;在作者的实现中,当代理感知到的最新事件的重要性评分之和超过一定阈值时,就会生成反思。在实践中,代理大约每天反思两到三次(一日三省吾身)

反思的第一步是让代理确定要反思什么,通过确定代理最近的经历可以提出哪些问题。作者用代理记忆流中最近的100条记录(例如,“Klaus Mueller is reading a book on gentrification”, “Klaus Mueller is conversing with a librarian about his research project”, “desk at the library is currently unoccupied”)查询LLM,使用prompt:“Given only the information above, what are 3 most salient high-level questions we can answer about the subjects in the statements?”,生成候选问题:例如,“What topic is Klaus Mueller passionate about?” 和 “What is the relationship between Klaus Mueller and Maria Lopez?”

第二步,将这些生成的问题作为检索的查询,收集每个问题的相关记忆(包括其他反思)。然后使用LLM从中提取洞见(insight),并引用生成洞见对应的特定记录。下面是完整的提示:

这个过程生成了一些洞见,比如“Klaus Mueller is dedicated to his research on gentrification (because of 1, 2, 8, 15).”。解析并将这个洞见存储为记忆流中的一个反思,包括指向被引用的内存对象的指针

反思(Reflection)明确允许代理不仅反思他们的观察结果,还可以反思其他的反思:例如,上面关于Klaus Mueller的第二个陈述是Klaus之前的反思,而不是他从环境中得到的观察。因此,代理生成了反思树树的叶节点代表基础观察,非叶节点代表的思考越往树上越抽象和高级。

图中包含了3种 MemoryObservation、Reflection、Plan

3. 计划与响应

计划(Plan)是为了做更长时间的规划。

像反思一样,计划也被储存在记忆流中(第三种记忆),并被包含在检索过程中。这使得代理能够在决定如何行动时,同时考虑观察、反思和计划。如果需要,代理可能在中途改变他们的计划(即响应,reacting)。

为了创建这样的计划,作者的方法是从上到下,递归地生成更多的细节

第一步是创建一个大致概述一天行程的计划。为了创建初始计划,使用代理的摘要描述(例如,名字,特征,和他们最近经历的总结)和他们前一天的总结来提示语言模型。下面是一个完整的示例提示,底部未完成,由LLM完成:

Name: Eddy Lin (age: 19) 
Innate traits: friendly, outgoing, hospitable Eddy Lin is a student at Oak Hill College studying music theory and composition. He loves to explore different musical styles and is always looking for ways to expand his knowledge. Eddy Lin is working on a composition project for his college class. He is also taking classes to learn more about music theory. Eddy Lin is excited about the new composition he is working on but he wants to dedicate more hours in the day to work on it in the coming days. 
On Tuesday February 12, Eddy 1) woke up and completed the morning routine at 7:00 am, [. . . ] 6) got ready to sleep around 10 pm.Today is Wednesday February 13. Here is Eddy’s plan today in broad strokes: 1)

这会生成代理一天计划的大致草图,分为五到八个部分:

1) wake up and complete the morning routine at 8:00 am, 
2) go to Oak Hill College to take classes starting 10:00 am, 
[. . . ] 
5) work on his new music composition from 1:00 pm to 5:00 pm, 
6) have dinner at 5:30 pm, 
7) finish school assignments and go to bed by 11:00 pm.

代理将此计划保存在记忆流中,然后递归分解它以创建更细粒度的动作,首先是一小时长的动作块——例如,Eddy从下午1点到5点的工作计划 “work on his new music composition” 变成:“1:00 pm: start by brainstorming some ideas for his music composition [...] 4:00 pm: take a quick break and recharge his creative energy before reviewing and polishing his composition”。然后我们再次递归分解这个计划,变成5-15分钟的动作块:例如,“4:00 pm: grab a light snack, such as a piece of fruit, a granola bar, or some nuts. 4:05 pm: take a short walk around his workspace [...] 4:50 pm: take a few minutes to clean up his workspace.”。这个过程可以根据需要的粒度进行调整。

3.1 响应和更新计划(Reacting and Updating Plans)。代理执行动作循环中的动作,每个时间步骤,它们感知周围的世界,这些感知到的观察结果被存储在它们的记忆流中。这些观察结果输入到LLM,让LLM决定代理是否应该继续他们现有的计划,或者做出响应(reacting)。例如,站在画架前画画可能会触发对画架的观察,不太可能引发响应。然而,如果艾迪的父亲约翰记录下他看见艾迪在房子的花园里短暂散步,结果就不同了。下面是prompt,其中 [Agent’s Summary Description] 代表了一个动态生成的、长达一段落的对代理总体目标和性情的总结:

[Agent’s Summary Description] It is February 13, 2023, 4:56 pm.John Lin’s status: John is back home early from work.Observation: John saw Eddy taking a short walk around his workplace.Summary of relevant context from John’s memory: Eddy Lin is John’s Lin’s son. Eddy Lin has been working on a music composition for his class. Eddy Lin likes to walk around the garden when he is thinking about or listening to music.Should John react to the observation, and if so, what would be an appropriate reaction?

通过两个prompts “What is [observer]’s relationship with the [observed entity]?”和“[Observed entity] is [action status of the observed entity]”来生成上下文摘要,并将它们的答案一起总结。输出建议 “John could consider asking Eddy about his music composition project”。然后,从响应发生的时间开始,重新生成代理的现有计划。最后,如果行动指示了代理之间需要互动,使用以下方式生成他们的对话。

3.2 对话。代理在互动时进行对话。根据它们对彼此的记忆来生成代理的对话。例如,当John开始和Eddy对话时,通过使用他对Eddy的总结记忆以及他决定询问Eddy关于他的"composition project"时的预期响应来生成John的第一句话。

[Agent’s Summary Description]It is February 13, 2023, 4:56 pm.John Lin’s status: John is back home early from work.Observation: John saw Eddy taking a short walk around his workplace.Summary of relevant context from John’s memory: Eddy Lin is John’s Lin’s son. Eddy Lin has been working on a music composition for his class. Eddy Lin likes to walk around the garden when he is thinking about or listening to music.John is asking Eddy about his music composition project. What would he say to Eddy?

结果:“Hey Eddy, how’s the music composition project for your class coming along?”

从Eddy的角度看,John发起的对话被视为一个他可能想要回应的事件。因此,就像John做的那样,Eddy检索并总结了他与John的关系记忆,以及可能与John在对话中的最后一句话相关的记忆。如果他决定回应,我们会使用他的总结记忆和当前的对话历史来生成Eddy的话语:

[Agent’s Summary Description] It is February 13, 2023, 4:56 pm.Eddy Lin’s status: Eddy is taking a short walk around his workplace.Observation: John is initiating a conversation with Eddy.Summary of relevant context from Eddy’s memory: Jonn Lin is Eddy Lin’s father. John Lin is caring and is interested to learn more about Eddy Lin’s school work. John Lin knows that Eddy Lin is working on a music composition.Here is the dialogue history:John: Hey Eddy, how’s the music composition project for your class coming along?How would Eddy respond to John?

这生成了Eddy的回应:“Hey Dad, it’s going well. I’ve been taking walks around the garden to clear my head and get some inspiration.”

这个对话的延续是使用同样的机制生成的,直到两个代理中的一个决定结束对话。

分享视频

Youtube

Bilibili

References

  • 大模型下半场,关于Agent的几个疑问
  • LLM Powered Autonomous Agents | Lil'Log
  • Generative Agents: Interactive Simulacra of Human Behavior
  • Agent:OpenAI的下一步,亚马逊云科技站在第5层
  • ReAct: https://react-lm.github.io
  • Generative Agents: Interactive Simulacra of Human Behavior
  • 2023年新生代大模型Agents技术,ReAct,Self-Ask,Plan-and-execute,以及AutoGPT, HuggingGPT等应用
  • LLM-based Agents survey 基于大语言模型多智能代理简单综述及展望

原文地址:基于大语言模型的AI Agents—Part 1 | Breezedeus.com

相关文章:

基于大语言模型的AI Agents

代理&#xff08;Agent&#xff09;指能自主感知环境并采取行动实现目标的智能体。基于大语言模型&#xff08;LLM&#xff09;的 AI Agent 利用 LLM 进行记忆检索、决策推理和行动顺序选择等&#xff0c;把Agent的智能程度提升到了新的高度。LLM驱动的Agent具体是怎么做的呢&a…...

23种设计模式之抽象工厂模式

目录 什么是抽象工厂模式 基本结构 基本实现步骤 实现代码&#xff08;有注释&#xff09; 应用场景 简单工厂、工厂方法、抽象工厂的区别 什么是抽象工厂模式 抽象工厂模式也是一种创建型设计模式&#xff0c;提供了一系列相关或相互依赖对象的接口&#xff0c;而无需…...

飞天使-linux操作的一些技巧与知识点9-zabbix6.0 容器之纸飞机告警设置

文章目录 zabbix 告警纸飞机方式webhook 方式 告警设置 zabbix 告警纸飞机方式 第一种方式参考 https://blog.csdn.net/yetugeng/article/details/99682432bash-4.4$ cat telegram.sh #!/bin/bashMSG$1TOKEN"61231432278:AAsdfsdfsdfsdHUxBwPSINc2kfOGhVik" CHAT_I…...

京东组件移动端库的使用 Nut-UI

1.介绍 NutUI NutUI-Vue 组件库&#xff0c;基于 Taro&#xff0c;使用 Vue 技术栈开发小程序应用&#xff0c;开箱即用&#xff0c;帮助研发快速开发用户界面&#xff0c;提升开发效率&#xff0c;改善开发体验。 特性 &#x1f680; 80 高质量组件&#xff0c;覆盖移动端主…...

用Python来实现2024年春晚刘谦魔术

简介 这是新春的第一篇&#xff0c;今天早上睡到了自然醒&#xff0c;打开手机刷视频就被刘谦的魔术所吸引&#xff0c;忍不住用编程去模拟一下这个过程。 首先&#xff0c;声明的一点&#xff0c;大年初一不学习&#xff0c;所以这其中涉及的数学原理约瑟夫环大家可以找找其…...

TestNG基础教程

TestNG基础教程 一、常用断言二、执行顺序三、依赖测试四、参数化测试1、通过dataProvider实现2、通过xml配置&#xff08;这里是直接跑xml&#xff09; 五、testng.xml常用配置方式1、分组维度控制2、类维度配置3、包维度配置 六、TestNG并发测试1、通过注解来实现2、通过xml来…...

###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 一. 两个主要软件的介绍 1.KeiluVision5软件 Keil uVision5是一款集成开发…...

Android 9.0 任务栏中清除掉播放器的进程,状态栏仍有音乐播放器状态问题的解决

1.概述 在9.0的rom定制化开发中,在点击系统自带的播放器以后,播放音乐的时候,在最近任务栏recents列表中,点击全部清除,发现音乐播放器还在播放音乐,导致出现bug,完整的 解决方法,肯定是需要点击全部清除以后,音乐播放器也被杀掉进程,接下来分析下这个移除任务栏流程…...

【笔记】Helm-5 Chart模板指南-13 调是模版

调试模板 调试模板可能很棘手&#xff0c;因为渲染后的模板发送了kubernetes API server&#xff0c;可能会以格式化以外的原因拒绝YAML文件。 以下命令有助于调试&#xff1a; 1、helm lint 是验证chart是否遵循最佳实践的首选工具。 2、helm template --debug在本地测试渲…...

Gateway反向代理配置

前言 一般而言&#xff0c;反向代理都是在Nginx中来实现的&#xff0c;其实Gateway也可以作为反向代理服务&#xff0c;不过一般不会这么做&#xff0c;只不过最近的项目&#xff0c;在通过Nginx反向代理之后&#xff0c;iPhone手机访问接口代理地址会异常&#xff0c;安卓手机…...

HiveSQL——共同使用ip的用户检测问题【自关联问题】

注&#xff1a;参考文章&#xff1a; SQL 之共同使用ip用户检测问题【自关联问题】-HQL面试题48【拼多多面试题】_hive sql 自关联-CSDN博客文章浏览阅读810次。0 问题描述create table log( uid char(10), ip char(15), time timestamp);insert into log valuesinsert into l…...

猫头虎分享已解决Bug ‍ || 修改mongodb3.0副本集用户密码遇到 BeanDefinitionParsingException

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …...

如何将ChatGPT升级到4.0版本?如何充值?

如何将ChatGPT升级到4.0版本&#xff1f; 在人工智能的世界里&#xff0c;每一个升级都可能带来革命性的变革。ChatGPT的4.0版本无疑是当前最炙手可热的话题之一&#xff0c;那么如何进行升级&#xff0c;体验到这一版所带来的全新特性呢&#xff1f;以下是一步一步的指南。 …...

conda 相关命令

创建并激活环境&#xff1a;打开终端&#xff0c;并创建一个新的conda环境&#xff0c;以确保安装的软件与M1芯片兼容。运行以下命令&#xff1a; conda create -n myenv python这将创建一个名为"myenv"的新环境&#xff0c;并安装Python。然后&#xff0c;激活该环境…...

探索现代Web前端开发框架:选择最适合你的工具

在当今快速发展的Web开发领域&#xff0c;前端开发框架的选择显得尤为关键。这些框架可以帮助我们更高效地构建出交互性强、性能卓越的用户界面。本文将带你了解几个当前最受欢迎的Web前端开发框架&#xff0c;并帮助你根据自己的需求选择最合适的工具。 1. React React由Fac…...

记录一下,我使用stm32实现pwm波输入,以及对频率和占空比的计算,同时通过串口输出(实现-重要)

1&#xff0c;首先看下半物理仿真 看下我的配置&#xff1a; 看下计算方法以及matlab的仿真输出的数据&#xff1a; timer3的ch2是选择高电平&#xff0c;计算频率 timer3的ch1是选择的是低电平&#xff0c;用来计算周期 其中TemPIpre表示的是CH2输出的值&#xff0c; TemPI…...

Spring Cloud使用ZooKeeper作为注册中心的示例

简单的Spring Cloud应用程序使用ZooKeeper作为注册中心的示例&#xff1a; 1.新建模块&#xff1a; 2.勾选依赖&#xff1a; 3.在pom.xml文件中做出部分修改及添加Spring Cloud Zookeeper 依赖版本&#xff1a; 完整pom文件 <?xml version"1.0" encoding&q…...

【项目日记(九)】项目整体测试,优化以及缺陷分析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:项目日记-高并发内存池⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你做项目   &#x1f51d;&#x1f51d; 开发环境: Visual Studio 2022 项目日…...

JavaScript 设计模式之外观模式

外观模式 我们为啥要使用外观模式呢&#xff0c;其实我们在使用各种 js 库的时候常常会看到很多的外观者模式&#xff0c;也正是这些库的大量使用&#xff0c;所以使得兼容性更广泛&#xff0c;通过外观者模式来封装多个功能&#xff0c;简化底层操作方法 const A {g: functi…...

一、基础数据结构——2.队列——3.双端队列和单调队列2

参考资料&#xff1a;《算法竞赛》&#xff0c;罗勇军 郭卫斌 著 本博客作为阅读本书的学习笔记&#xff0c;仅供交流学习。 建议关注 罗勇军老师博客 3. 单调队列与最大子序和问题 不限制子序列长度问题——贪心法或动态规划 HDOJ 1003 MAX SUM Max Sum Time Limit: 2000/10…...

Stable Diffusion 模型下载:Samaritan 3d Cartoon(撒玛利亚人 3d 卡通)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十...

【软件工程导论】实验二——编制数据字典(数字化校园系统案例分析)

数字化校园系统案例分析 问题定义实验内容编制内容1数据项数据流处理逻辑数据存储 2外部实体 问题定义 数字化校园系统期望以数字化信息和网络为基础&#xff0c;在计算机和网络技术上建立起对教学、科研、管理、技术服务、生活服务等校园信息的收集、处理、整合、存储、传输和…...

耳机壳UV树脂制作私模定制耳塞适合什么样的人使用呢?

耳机壳UV树脂制作私模定制耳塞适合以下人群使用&#xff1a; 对音质要求高的人&#xff1a;私模定制耳塞能够完美契合用户的耳朵形状&#xff0c;减少漏音和外部噪音的干扰&#xff0c;提供更好的音质体验。需要长时间佩戴耳机的人&#xff1a;私模定制耳塞能够提高佩戴舒适度…...

第三百一十回

我们在上一章回中介绍了"再谈ListView中的分隔线"&#xff0c;本章回中将介绍showMenu的用法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在第一百六十三回中介绍了showMenu相关的内容&#xff0c;它主要用来显示移动PopupMenu在页面中的位置…...

海量数据处理商用短链接生成器平台 - 4

第六章 架构核心技术-池化思想-异步结合 性能优化最佳实践 第1集 RestTemplate里面的存在的问题你知道多少- Broken pipe错误 项目就更新到第六章了&#xff0c;剩下的内容 放百度网盘里面了&#xff0c;需要的来取。 链接&#xff1a;https://pan.baidu.com/s/19LHPw36dsxPB7…...

基于CNN+LSTM深度学习网络的时间序列预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 长短时记忆网络&#xff08;LSTM&#xff09; 4.3 CNNLSTM网络结构 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MA…...

如何控制系统安全 或 控制流氓软件

电脑 出入数据的地方是安全保障的最后一关 比如 网络 , usb 等等 控制联网流氓软件 1 在虚拟机里测试软件是否有恶意行为 恶意行为非常容易发现 比如 破坏文件 修改文件 系统不正常 像蓝屏 等等 2 网络防火墙 这是系统最关键的部分之一 像 windows 一定使用他…...

【Docker】Docker Container(容器)

文章目录 一、什么是容器&#xff1f;二、为什么需要容器&#xff1f;三、容器的生命周期容器OOM容器异常退出容器暂停 四、容器命令详解docker createdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker cont…...

Amazon CodeWhisperer 免费 AI 代码生成助手体验分享

今年上半年&#xff0c;亚马逊云科技正式推出了实时AI编程助手 Amazon CodeWhisperer&#xff0c;还提供了供所有开发人员免费使用的个人版版本。经过一段时间的体验&#xff0c;我觉得 CodeWhisperer 可以处理编程工作中遇到的很多问题&#xff0c;并且帮助开发人员提高编程效…...

Spring Cloud Gateway 网关路由

一、路由断言 路由断言就是判断路由转发的规则 二、路由过滤器 1. 路由过滤器可以实现对网关请求的处理&#xff0c;可以使用 Gateway 提供的&#xff0c;也可以自定义过滤器 2. 路由过滤器 GatewayFilter&#xff08;默认不生效&#xff0c;只有配置到路由后才会生效&#x…...

【Spring学习】Spring Data Redis:RedisTemplate、Repository、Cache注解

1&#xff0c;spring-data-redis官网 1&#xff09;特点 提供了对不同Redis客户端的整合&#xff08;Lettuce和Jedis&#xff09;提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符…...

C语言:内存函数

创作不易&#xff0c;友友们给个三连吧&#xff01;&#xff01; C语言标准库中有这样一些内存函数&#xff0c;让我们一起学习吧&#xff01;&#xff01; 一、memcpy函数的使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 1.1 使…...

Go+:一种简单而强大的编程语言

Go是一种简单而强大的编程语言&#xff0c;它是在Go语言之上构建的&#xff0c;旨在提供更加强大、灵活和易于使用的编程体验。Go与Go语言共享大部分语法和语义&#xff0c;因此Go开发人员可以很快上手Go&#xff0c;同时也可以使用Go来编写更加简洁和高效的代码。在本文中&…...

【开源】SpringBoot框架开发数字化社区网格管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5.1 查询企事业单位5.2 查询流动人口5.3 查询精准扶贫5.4 查询案件5.5 查询人口 六、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数字化社区网格管理系统&#xf…...

Lua可变参数函数

基础规则 lua传入参数给一个function时采用的是“多余部分被忽略&#xff0c;缺少部分有nil补足”的形式&#xff1a; function f(a, b)return a or b endCALL PARAMETERS f(3) a3, bnil f(3, 4) a3, b4 f(3, 4, 5) a3, b4 (5 is discarded) unpack/pack…...

Nginx实战:3-日志按天分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、方式1&#xff1a;定时任务执行分割脚本 1.分割日志脚本 2.添加定时任务 二、方式2&#xff1a;logrotate配置分割 1.logrotate简单介绍 2.新增切割ngi…...

springmvc中的数据提交方式

一、单个数据提交数据 jsp代码&#xff1a; <h2>1单个数据提交</h2> <form action"${pageContext.request.contextPath}/one.action">name<input name"myname"/><br>age<input name"age"><input type&…...

unity2017 遇到visual studio 2017(社区版) 30日试用期到了

安装unity2017 遇到visual studio 2017 30日试用期到了&#xff0c;网上百度搜了好多方法都没有成功。 最后用了这个方法&#xff1a; 1)启动vs2017&#xff0c;在弹出要登录的窗口之前&#xff0c;迅速的点击工具-》选项-》账户&#xff0c;勾选在添加账户或对账户重新进行身…...

Netty应用(六) 之 异步 Channel

目录 12.Netty异步的相关概念 12.1 异步编程的概念 12.2 方式1&#xff1a;主线程阻塞&#xff0c;等待异步线程完成调用&#xff0c;然后主线程发起请求IO 12.3 方式2&#xff1a;主线程注册异步线程&#xff0c;异步线程去回调发起请求IO 12.4 细节注释 12.5 异步的好处…...

STM32CubeMx+MATLAB Simulink串口输出实验,UART/USART串口测试实验

STM32CubeMxMATLAB Simulink串口输出实验...

【51单片机】串口通信实验(包括波特率如何计算)

目录 串口通信实验通信的基本概念串行通信与并行通信异步通信与同步通信单工、 半双工与全双工通信通信速率 51单片机串口介绍串口介绍串口通信简介串口相关寄存器串口工作方式方式0方式1方式 2 和方式 3 串口的使用方法&#xff08;计算波特率&#xff09; 硬件设计软件设计1、…...

Kafka零拷贝技术与传统数据复制次数比较

读Kafka技术书遇到困惑: "对比传统的数据复制和“零拷贝技术”这两种方案。假设有10个消费者&#xff0c;传统复制方式的数据复制次数是41040次&#xff0c;而“零拷贝技术”只需110 11次&#xff08;一次表示从磁盘复制到页面缓存&#xff0c;另外10次表示10个消费者各自…...

npm ERR! network This is a problem related to network connectivity.

遇到 ETIMEDOUT 错误时&#xff0c;这表明npm尝试连接到npm仓库时超时了&#xff0c;这通常是由网络连接问题引起的。这可能是因为网络不稳定、连接速度慢、或者你的网络配置阻止了对npm仓库的访问。以下是一些解决这个问题的步骤&#xff1a; 1. 检查网络连接 首先&#xff…...

【SQL高频基础题】619.只出现一次的最大数字

题目&#xff1a; MyNumbers 表&#xff1a; ------------------- | Column Name | Type | ------------------- | num | int | ------------------- 该表可能包含重复项&#xff08;换句话说&#xff0c;在SQL中&#xff0c;该表没有主键&#xff09;。 这张表的每…...

STM32F1 - GPIO外设

GPIO 1> 硬件框图2> 工作模式 1> 硬件框图 2> 工作模式 C语言描述 /** * brief Configuration Mode enumeration */typedef enum { GPIO_Mode_AIN 0x0, // Analog Input 模拟输入 GPIO_Mode_IN_FLOATING 0x04, // input floating 浮空输入GPIO_Mode_I…...

新增同步管理、操作日志模块,支持公共链接分享,DataEase开源数据可视化分析平台v2.3.0发布

2024年2月5日&#xff0c;DataEase开源数据可视化分析平台正式发布v2.3.0版本。 这一版本的功能升级包括&#xff1a;新增“同步管理”功能模块&#xff0c;用户可通过此模块&#xff0c;将传统数据库中的数据定时同步到Apache Doris中&#xff0c;让数据分析更快速&#xff1…...

跟着pink老师前端入门教程-day19

一、移动WEB开发之流式布局 1、 移动端基础 1.1 浏览器现状 PC端常见浏览器&#xff1a;360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器、搜狗浏览器、IE浏览器。 移动端常见浏览器&#xff1a;UC浏览器&#xff0c;QQ浏览器&#xff0c;欧朋浏览器&#xff0…...

ChatGPT学习第一周

&#x1f4d6; 学习目标 掌握ChatGPT基础知识 理解ChatGPT的基本功能和工作原理。认识到ChatGPT在日常生活和业务中的潜在应用。 了解AI和机器学习的基本概念 获取人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;的初步了解。理解这些技术是如何支撑…...

爬爬爬——今天是浏览器窗口切换和给所选人打钩(自动化)

学习爬虫路还很长&#xff0c;第一阶段花了好多天了&#xff0c;还在底层&#xff0c;虽然不是我专业要学习的语言&#xff0c;和必备的知识&#xff0c;但是我感觉还挺有意思的。加油&#xff0c;这两天把建模和ai也不学了&#xff0c;唉过年了懒了&#xff01; 加油坚持就是…...

Netty应用(五) 之 Netty引入 EventLoop

目录 第三章 Netty 1.什么是Netty&#xff1f; 2.为什么需要使用Netty&#xff1f; 3.Netty的发展历程 4.谁在使用Netty&#xff1f; 5.为什么上述这些分布式产品都使用Netty&#xff1f; 6.第一个Netty应用 7.如何理解Netty是NIO的封装 8.logback日志使用的加强 9.Ev…...