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

RasaGPT对话系统的工作原理

RasaGPT 结合了 Rasa 和 Langchain 这 2 个开源项目,当超出 Rasa 现有意图(out_of_scope)的时候,就会执行 ActionGPTFallback,本质上就是利用 Langchain 做了一个 RAG,调用 LLM API。RasaGPT 涉及的技术栈比较多而复杂,包括 Rasa、Langchain、LlamaIndex、Telegram、PostgresSQL、PGVector、Ngrok、FastAPI、Docker、docker-compose、Dozzle 等。尽管对项目做了简化[3],删除了不容易实现的部分,但仍是一次失败的实践,各种原因没有完整运行起来。不过 RasaGPT 为结合 Rasa 和 Langchain 提供了一种思路,接下来重点是把 Rasa 和 Langchain-Chatchat 进行对接。

一.RasaGPT 及特点

RasaGPT 是一个建立在 Rasa 和 Langchain 之上的无头 LLM chatbot 平台(无头简单理解就是没有界面)。它是 Rasa 和 Telegram 的样板文件(Boilerplate)和参考实现,利用 LLM 库(如 Langchain)进行索引、检索和上下文注入。RasaGPT 可以直接投入使用,很多实施上的麻烦事都已经被解决了,这样就不必亲自处理,包括:

  • 使用FastAPI创建自己的专有机器人端点,包括文档上传和"训练"管道的设置。
  • 如何集成Langchain/LlamaIndex和Rasa。
  • 与LLM库的库冲突以及传递metadata。
  • 在MacOS上使用Docker支持运行Rasa。
  • 通过ngrok进行与聊天机器人的反向代理。
  • 使用自定义模式而非使用Langchain的高度倾向的PGVector类来实现pgvector。
  • 添加多租户支持(Rasa原生并不支持此功能),在Rasa和后端/应用程序之间进行会话和metadata的传递。

Rasa 是一个开源 (Python) 机器学习框架,用于自动执行基于文本和语音的对话:NLU、对话管理、连接到 Slack、Facebook 等,创建聊天机器人和语音助手。LangChain 主要功能是围绕 LLM 快速构建应用程序和管道,通过与外部数据和知识源的结合,可以提高 LLM 的应用效率和范围。

1.完整应用程序和 API

  • 使用Langchain,LLM在任意语料库上学习
  • 通过FastAPI上传文档并进行训练
  • 支持文档版本控制,上传时自动进行重新训练
  • 通过FastAPI和SQLModel自定义自己的异步端点和数据库模型
  • 机器人确定是否需要进行人工接管
  • 机器人根据用户问题和自动响应自动生成标签
  • 通过Swagger和Redoc提供完整的API文档
  • 包含PGAdmin,以便浏览数据库
  • 在启动时自动生成Ngrok端点,以便机器人始终可以通过https://t.me/yourbotname访问
  • 通过pgvector和Postgres函数嵌入相似性搜索构建到Postgres中
  • 包含虚拟数据供测试和实验
  • 无限的用例,从帮助台、客户支持、测验、e-learning、角色扮演游戏等

2.Rasa 集成

  • 构建在Rasa之上,这是开源聊天平台的黄金标准
  • 支持MacOS M1/M2通过Docker(标准Rasa镜像不支持MacOS架构)
  • 支持Telegram,轻松集成Slack、Whatsapp、Line、短信等
  • 使用Huggingface的NLU模型(如BERT)或使用Keras、Tensorflow等库/框架,备用为OpenAI GPT,建立复杂的对话管道

3.灵活性

  • 使用Langchain扩展主体、记忆等能力
  • 模式支持多租户、会话、数据存储
  • 自定义智能体个性
  • 保存所有聊天历史并从所有交互中创建embeddings,以适应未来的检索策略
  • 从知识库语料库和客户反馈中自动生成embeddings

二.RasaGPT 安装

1.软件要求

  • Python 3.9
  • Docker和Docker compose
  • 开放AI(API密钥)
  • Telegram(机器人凭证)
  • Ngrok(身份验证令牌)
  • Make(MacOS / Windows)
  • SQL模型

2.Docker 安装过程步骤

  • 检查以确保有.env可用的
  • 数据库初始化为pgvector
  • 数据库模型创建数据库模式
  • 训练Rasa模型,使其准备好运行
  • 使用Rasa设置ngrok,以便Telegram有一个返回API服务器的Webhook
  • 设置Rasa操作服务器,以便Rasa可以与RasaGPT API对话
  • 数据库通过seed.py方式填充虚拟数据

3.docker-compose.yml 快速启动

使用 docker-compose.yml 文件快速启动,如果使用的是 Linux 或 Windows,则需要将 docker-compose.yml 文件中的 Dockerfilekhalosa/rasa-aarch64:3.5.2 名称修改为 rasa/rasa:latest。

# 获取源码
git clone https://github.com/paulpierre/RasaGPT.git
cd RasaGPT# 根据需要配置.env文件
cp .env-example .env# 自动安装和运行RasaGPT
make install

说明:可以输入 make 查看更多选项列表,安装完成后再次执行命令 make run 运行。完整安装日志参考: https://app.warp.dev/block/vflua6Eue29EPk8EVvW8Kd

4.所有容器列表

chat_api
chat_ngrok
chat_rasa_core
chat_rasa_actions
chat_rasa_credentials
chat_db
chat_pgadmin
chat_dozzle

简化后的 RasaGPT 项目[3]包括:chat_rasa_core(模型)、chat_api(LLM 接口)、chat_db(数据库)、chat_rasa_actions(action 服务)、chat_rasa_credentials(凭证)。如下所示:

三.操作说明

1.对话操作

2.查看日志

可以通过访问 https://localhost:9999/查看所有日志,它将显示所有 Docker 容器的实时日志。如下所示:

3.API 文档

可以通过访问 https://localhost:8888/docs 查看 API 端点文档。在这个页面上,可以创建和更新实体,以及将文档上传到知识库。如下所示:

3.1.Organization(组织)

这可以被认为是 SaaS/多租户中的客户公司。默认情况下,已提供虚拟组织列表。如下所示:

[{"id": 1,"uuid": "d2a642e6-c81a-4a43-83e2-22cee3562452","display_name": "Pepe Corp.","namespace": "pepe","bot_url": null,"created_at": "2023-05-05T10:42:45.933976","updated_at": "2023-05-05T10:42:45.933979"},{"id": 2,"uuid": "7d574f88-6c0b-4c1f-9368-367956b0e90f","display_name": "Umbrella Corp","namespace": "acme","bot_url": null,"created_at": "2023-05-05T10:43:03.555484","updated_at": "2023-05-05T10:43:03.555488"},{"id": 3,"uuid": "65105a15-2ef0-4898-ac7a-8eafee0b283d","display_name": "Cyberdine Systems","namespace": "cyberdine","bot_url": null,"created_at": "2023-05-05T10:43:04.175424","updated_at": "2023-05-05T10:43:04.175428"},{"id": 4,"uuid": "b7fb966d-7845-4581-a537-818da62645b5","display_name": "Bluth Companies","namespace": "bluth","bot_url": null,"created_at": "2023-05-05T10:43:04.697801","updated_at": "2023-05-05T10:43:04.697804"},{"id": 5,"uuid": "9283d017-b24b-4ecd-bf35-808b45e258cf","display_name": "Evil Corp","namespace": "evil","bot_url": null,"created_at": "2023-05-05T10:43:05.102546","updated_at": "2023-05-05T10:43:05.102549"}
]

3.2.Project(项目)

这可以被视为属于公司的产品。可以查看属于组织的项目列表。如下所示:

[{"id": 1,"documents": [{"id": 1,"uuid": "92604623-e37c-4935-bf08-0e9efa8b62f7","display_name": "project-pepetamine.md","node_count": 3}],"document_count": 1,"uuid": "44a4b60b-9280-4b21-a676-00612be9aa87","display_name": "Pepetamine","created_at": "2023-05-05T10:42:46.060930","updated_at": "2023-05-05T10:42:46.060934"},{"id": 2,"documents": [{"id": 2,"uuid": "b408595a-3426-4011-9b9b-8e260b244f74","display_name": "project-frogonil.md","node_count": 3}],"document_count": 1,"uuid": "5ba6b812-de37-451d-83a3-8ccccadabd69","display_name": "Frogonil","created_at": "2023-05-05T10:42:48.043936","updated_at": "2023-05-05T10:42:48.043940"},{"id": 3,"documents": [{"id": 3,"uuid": "b99d373a-3317-4699-a89e-90897ba00db6","display_name": "project-kekzal.md","node_count": 3}],"document_count": 1,"uuid": "1be4360c-f06e-4494-bf20-e7c73a56f003","display_name": "Kekzal","created_at": "2023-05-05T10:42:49.092675","updated_at": "2023-05-05T10:42:49.092678"},{"id": 4,"documents": [{"id": 4,"uuid": "94da307b-5993-4ddd-a852-3d8c12f95f3f","display_name": "project-memetrex.md","node_count": 3}],"document_count": 1,"uuid": "1fd7e772-365c-451b-a7eb-4d529b0927f0","display_name": "Memetrex","created_at": "2023-05-05T10:42:50.184817","updated_at": "2023-05-05T10:42:50.184821"},{"id": 5,"documents": [{"id": 5,"uuid": "6deff180-3e3e-4b09-ae5a-6502d031914a","display_name": "project-pepetrak.md","node_count": 4}],"document_count": 1,"uuid": "a389eb58-b504-48b4-9bc3-d3c93d2fbeaa","display_name": "PepeTrak","created_at": "2023-05-05T10:42:51.293352","updated_at": "2023-05-05T10:42:51.293355"},{"id": 6,"documents": [{"id": 6,"uuid": "2e3c2155-cafa-4c6b-b7cc-02bb5156715b","display_name": "project-memegen.md","node_count": 5}],"document_count": 1,"uuid": "cec4154f-5d73-41a5-a764-eaf62fc3db2c","display_name": "MemeGen","created_at": "2023-05-05T10:42:52.562037","updated_at": "2023-05-05T10:42:52.562040"},{"id": 7,"documents": [{"id": 7,"uuid": "baabcb6f-e14c-4d59-a019-ce29973b9f5c","display_name": "project-neurokek.md","node_count": 5}],"document_count": 1,"uuid": "4a1a0542-e314-4ae7-9961-720c2d092f04","display_name": "Neuro-kek","created_at": "2023-05-05T10:42:53.689537","updated_at": "2023-05-05T10:42:53.689539"},{"id": 8,"documents": [{"id": 8,"uuid": "5be007ec-5c89-4bc4-8bfd-448a3659c03c","display_name": "org-about_the_company.md","node_count": 5},{"id": 9,"uuid": "c2b3fb39-18c0-4f3e-9c21-749b86942cba","display_name": "org-board_of_directors.md","node_count": 3},{"id": 10,"uuid": "41aa81a9-13a9-4527-a439-c2ac0215593f","display_name": "org-company_story.md","node_count": 4},{"id": 11,"uuid": "91c59eb8-8c05-4f1f-b09d-fcd9b44b5a20","display_name": "org-corporate_philosophy.md","node_count": 4},{"id": 12,"uuid": "631fc3a9-7f5f-4415-8283-78ff582be483","display_name": "org-customer_support.md","node_count": 3},{"id": 13,"uuid": "d4c3d3db-6f24-433e-b2aa-52a70a0af976","display_name": "org-earnings_fy2023.md","node_count": 5},{"id": 14,"uuid": "08dd478b-414b-46c4-95c0-4d96e2089e90","display_name": "org-management_team.md","node_count": 3}],"document_count": 7,"uuid": "1d2849b4-2715-4dcf-aa68-090a221942ba","display_name": "Pepe Corp. (company)","created_at": "2023-05-05T10:42:55.258902","updated_at": "2023-05-05T10:42:55.258904"}
]

3.3.Document(文档)

这可以被视为与产品相关的工件,例如 FAQ 页面或财务报表收益 PDF。可以查看与组织项目相关的所有文档。如下所示:

{"id": 1,"uuid": "44a4b60b-9280-4b21-a676-00612be9aa87","organization": {"id": 1,"uuid": "d2a642e6-c81a-4a43-83e2-22cee3562452","display_name": "Pepe Corp.","bot_url": null,"status": 2,"created_at": "2023-05-05T10:42:45.933976","updated_at": "2023-05-05T10:42:45.933979","namespace": "pepe"},"document_count": 1,"documents": [{"id": 1,"uuid": "92604623-e37c-4935-bf08-0e9efa8b62f7","organization_id": 1,"project_id": 1,"display_name": "project-pepetamine.md","url": "","data": "# Pepetamine\n\nProduct Name: Pepetamine\n\nPurpose: Increases cognitive focus just like the Limitless movie\n\n**How to Use**\n\nPepetamine is available in the form of rare Pepe-coated tablets. The recommended dosage is one tablet per day, taken orally with a glass of water, preferably while browsing your favorite meme forum for maximum cognitive enhancement. For optimal results, take Pepetamine 30 minutes before engaging in mentally demanding tasks, such as decoding ancient Pepe hieroglyphics or creating your next viral meme masterpiece.\n\n**Side Effects**\n\nSome potential side effects of Pepetamine may include:\n\n1. Uncontrollable laughter and a sudden appreciation for dank memes\n2. An inexplicable desire to collect rare Pepes\n3. Enhanced meme creation skills, potentially leading to internet fame\n4. Temporary green skin pigmentation, resembling the legendary Pepe himself\n5. Spontaneously speaking in \"feels good man\" language\n\nWhile most side effects are generally harmless, consult your memologist if side effects persist or become bothersome.\n\n**Precautions**\n\nBefore taking Pepetamine, please consider the following precautions:\n\n1. Do not use Pepetamine if you have a known allergy to rare Pepes or dank memes.\n2. Pepetamine may not be suitable for individuals with a history of humor deficiency or meme intolerance.\n3. Exercise caution when driving or operating heavy machinery, as Pepetamine may cause sudden fits of laughter or intense meme ideation.\n\n**Interactions**\n\nPepetamine may interact with other substances, including:\n\n1. Normie supplements: Combining Pepetamine with normie supplements may result in meme conflicts and a decreased sense of humor.\n2. Caffeine: The combination of Pepetamine and caffeine may cause an overload of energy, resulting in hyperactive meme creation and potential internet overload.\n\nConsult your memologist if you are taking any other medications or substances to ensure compatibility with Pepetamine.\n\n**Overdose**\n\nIn case of an overdose, symptoms may include:\n\n1. Uncontrollable meme creation\n2. Delusions of grandeur as the ultimate meme lord\n3. Time warps into the world of Pepe\n\nIf you suspect an overdose, contact your local meme emergency service or visit the nearest meme treatment facility. Remember, the key to enjoying Pepetamine is to use it responsibly, and always keep in mind the wise words of our legendary Pepe: \"Feels good man.\"","hash": "fdee6da2b5441080dd78e7850d3d2e1403bae71b9e0526b9dcae4c0782d95a78","version": 1,"status": 2,"created_at": "2023-05-05T10:42:46.755428","updated_at": "2023-05-05T10:42:46.755431"}],"display_name": "Pepetamine","created_at": "2023-05-05T10:42:46.060930","updated_at": "2023-05-05T10:42:46.060934"
}

3.4.Node(节点)

尽管在 API 中没有公开,但节点是为其生成 embedding 的文档块。节点用于检索搜索以及上下文注入。节点属于文档。

3.5.User(用户)

用户代表与机器人交谈的人。用户不一定属于组织或产品,但这种关系在下面的 ChatSession 中被捕获。

3.6.ChatSession(会话 Session)

不通过 API 公开,但这表示用户和机器人之间的问答。这些对象中的每一个都可以由自动生成的 session_id 灵活识别。Chat Session 包含丰富的 metadata,可用于训练和优化。通过 /chat 端点的 ChatSession 实际上与组织相关联(出于多租户安全目的)。

4.对话例子

这个机器人只是一个概念验证,并且尚未进行检索方面的优化。目前,它使用 1000 个字符长度的分块进行索引,使用基本的欧几里得距离进行检索,质量时好时坏。可以在 RESULTS.MD 文件中查看机器人的示例命中和未命中。总体而言,估计通过进行索引优化和 LLM 配置更改,输出质量可以提高超过 70%。单击查看演示数据的 Q&A 结果在 RESULTS.MD 文件中。

四.RasaGPT 工作原理

1.Rasa

  • Rasa 处理与通信 channel 的集成,在本例中为 Telegram。

    • 它专门处理用户反馈应该通过的目标网络钩子(target webhook)的提交。在本例子中,它是 FastAPI 服务器,通过 /webhooks/{channel}/webhook
  • Rasa 有两个组件,核心Rasa app和单独运行的actions server

  • Rasa 必须通过一些 yaml 文件进行配置(已经完成):

    • config.yml:包含 NLU 管道和策略配置。重要的是设置 FallbackClassifier 阈值
    • credentials.yml:包含 webhook 和 Telegram 凭据的路径。这将由辅助服务 rasa-credentials 通过app/rasa-credentials/main.py进行更新
    • domain.yml:这包含聊天入口点逻辑配置,如意图和针对意图采取的操作。在这里,添加 action_gpt_fallback 操作,它将触发actions server
    • endpoints.yml:这是为 Rasa 设置自定义操作端点以触发 fallback 的地方
    • nlu.yml:这是设置意图 out_of_scope 的地方
    • rules.yml:为这个意图设置了一个规则,它应该触发动作 action_gpt_fallback
    • actions.py:这是通过 ActionGPTFallback 定义和表达 action 的地方。方法名返回为上面意图定义的动作
  • Rasa 的 NLU 模型必须经过训练,这可以通过 CLI 命令 rasa train 来完成。当运行 make install 时,这会自动完成。

  • 训练后必须通过 rasa run 运行 Rasa Core。

  • Rasa 的 action server 必须用 rasa run actions 单独运行。

2.Telegram

  • Rasa 会自动使用 credentials.yml 中的回调 webhook 更新 Telegram Bot API。
  • 默认情况下这是静态的。由于在本地运行,利用 Ngrok 生成一个公开访问的 URL,并反向隧道进入 Docker 容器。
  • rasa-credentials 服务会处理这个过程。Ngrok 作为一个服务运行,一旦准备就绪,rasa-credentials 将调用本地的 Ngrok API 来检索隧道 URL,并更新 credentials.yml 文件,然后重新启动 Rasa。
  • Telegram 将发送消息的 webhook 将是我们的 FastAPI 服务器。为什么不使用 Rasa?因为希望灵活地捕获 metadata,而 Rasa 使这变得复杂,集中到 API server 是理想的。
  • FastAPI 服务器将消息转发到 Rasa webhook。
  • Rasa 然后将根据用户意图确定要采取的操作。由于这个演示中的意图被弱化,它将进入到 actions.py 中运行的 fallback action。
  • 自定义操作将捕获 metadata,并将来自 FastAPI 的响应转发给用户。

3.PGVector

PGVector 是 Postgres 的插件,可以自动安装,能够存储和计算向量数据类型。有自己的实现,因为 Langchain PGVector 类不灵活,无法适应模式,需要灵活性。

  • 默认情况下,在 postgres 中,如果数据库尚未初始化,容器路径 /docker-entry-initdb.d 中的任何文件都运行。在postgres Dockerfile中,复制 create_db.sh 创建数据库和用户。
  • Makefile中的 models 命令中,在 API 容器中运行 models.py,该容器从 models 中创建表。
  • enable_vector 方法在数据库中启用 pgvector 扩展。

4.Langchain

  • 训练数据被加载到数据库中
  • 如果索引不存在,则对数据进行索引并存储在名为 index.json 的文件中
  • LlamaIndex 使用基本 GPTSimpleVectorIndex 查找相关数据并将其注入 prompt。
  • 通过 prompt 的保护栏用于保持对话的集中。

5.Bot flow

  • 用户将在 Telegram 中聊天,消息将被过滤为现有意图

  • 如果它检测到没有意图匹配,而是匹配 out_of_scope,它将根据 rule.yml 触发 action_gpt_fallback 操作

  • ActionGPTFallback 函数然后将调用 FastAPI API Server

  • 使用 LlamaIndex 的 API 会找到相关的索引内容,并将其注入到 prompt 中发送给 OpenAI 进行推理

  • prompt 包含对话护栏,包括:

    • 请求数据 JSON 返回
    • 根据用户的问题创建分类标签
    • 如果对话应该升级到人工(如果没有上下文匹配),则返回布尔值

参考文献

[1] https://github.com/paulpierre/RasaGPT

[2] https://youtu.be/GAPnQ0qf1-E

[3] https://github.com/ai408/RasaGPT

相关文章:

RasaGPT对话系统的工作原理

RasaGPT 结合了 Rasa 和 Langchain 这 2 个开源项目,当超出 Rasa 现有意图(out_of_scope)的时候,就会执行 ActionGPTFallback,本质上就是利用 Langchain 做了一个 RAG,调用 LLM API。RasaGPT 涉及的技术栈比较多而复杂&#xff0c…...

C++设计模式 #7 工厂方法(Factory Method)

“对象创建”模式 通过“对象创建”模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持创建的稳定。它是接口抽象之后的第一步工作。 动机 在软件系统中,经常面临着创…...

信息网络协议基础-接入网技术

文章目录 概述***基于ATM架构虚电路PVC和SVC信元格式为什么信元格式由AAL决定?网络架构传统电信网络:点对点链路PPP协议协议内容消息过程多协议封装功能电话网接入Internet(DSL 数字用户线路)主要接入技术ADSL关键技术DMTDSLAM体系结构PPPOE帧格式过程特点局域网定义参考模型L…...

springboot 自动装配原理

在理解springboot自动装配之前需要了解spring的Configuration原理和Conditional两个注解原理。可以看下以前写的这两篇文章 spring 源码阅读之Configuration解析 spring使用Conditional进行条件装配 spring的SPI机制之使用SpringFactoriesLoader加载服务实现 SpringBootApp…...

前端---表格标签

1. 表格的结构 表格是由行和列组成&#xff0c;好比一个excel文件 2. 表格标签 <table>标签&#xff1a;表示一个表格 <tr>标签&#xff1a;表示表格中的一行 <td>标签&#xff1a;表示表格中的列<th>标签&#xff1a;表示表格中的表头 示例代码: &l…...

【软件工程】可执行文件和数据分离

一、概述 可执行文件和数据分离是一种软件设计策略&#xff0c;旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性&#xff0c;以及方便软件的管理和维护。 在可执行文件和数据分离中&#xff0c;程序代码通常以可执行文件的形式存储&a…...

Linux dirs命令

Linux dirs命令用于显示目录记录。 显示目录堆叠中的记录。 语法 dirs [/-n -l]参数&#xff1a; n 显示从左边算起第n笔的目录。-n 显示从右边算起第n笔的目录。-l 显示目录完整的记录。 实例 列出"/home/cc/Ruijie"里所有内容的详细信息。可用如下命令。 dir…...

有什么好用的C/C++源代码混淆工具?

​ 有什么好用的C/C源代码混淆工具&#xff1f; 开始使用ipaguard 前言 iOS加固保护是直接针对ios ipa二进制文件的保护技术&#xff0c;可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护&#xff0c;防止应用…...

iOS设备信息详解

文章目录 ID 体系iOS设备信息详解IDFA介绍特点IDFA新政前世今生获取方式 IDFV介绍获取方式 UUID介绍特点获取方式 UDID介绍获取方式 OpenUDID介绍 Bundle ID介绍分类其他 IP地址介绍获取方式 MAC地址介绍获取方式正常获取MAC地址获取对应Wi-Fi的MAC地址 系统版本获取方式 设备型…...

如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…...

[EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Dell Latitude-7400 处理器Intel Core i7-8665U已驱动内存16GB DDR4 RAM已驱动硬盘Toshiba KIOXIA 512GB SSD已驱动显卡Intel UHD 620 Graphics已驱动声卡Realtek ALC256已驱动有线网卡 无 无无线网卡蓝牙Intel Wireless-AC 9560已驱动 支持系统版本 maco…...

用芯片SIC8833可开发电子秤方案

SIC8833作为一款高性能的电子秤方案芯片&#xff0c;这款芯片是一个带24bitADC的8位RISC MCU&#xff0c;内置8k16位OTP程序存储器。具体24位双向I/O口的特性&#xff0c;广泛应用于电子衡器和精密测量及控制系统&#xff0c;能满足用户的不同需求和应用场景。 以下是电子秤方案…...

【Qt-QFile-QDir】

Qt编程指南 ■ Stream■ QTextStream■ QDataStream ■ QDial■ QDir■ QFile■■ ■ Stream ■ QTextStream /* 获取文件的路径 */ QString fileName QFileDialog::getOpenFileName(this);/* 指向文件 */ file.setFileName(fileName);/* 判断文件是否存在 */ if (!file.exi…...

设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点

系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式&#xff0c;5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式&#xff0c;每一种模式的概念、使用…...

Android 13 - Media框架(25)- OMXNodeInstance(二)

上一节我们了解了 OMXNodeInstance 的创建过程&#xff0c;以及 IOmx 服务和 OMXNodeInstance、OMX组件之间的联系。接下来我们将一起了解 ACodec 是如何通过 OMXNodeInstance 这个中间层进行端口定义设置&#xff0c;以及端口Buffer分配的。 OMXNodeInstance 的代码还是比较长…...

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用

V.PhyloMaker2是一个R语言的工具包&#xff0c;专门用于构建和分析生物系统学中的进化树&#xff08;也称为系统发育树或phylogenetic tree&#xff09;。以下是对V.PhyloMaker2的一些基本介绍和使用说明&#xff1a; 论文介绍&#xff1a;V.PhyloMaker2: An updated and enla…...

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建 修复建议总结 漏洞名称 漏洞描述 在Unmarshalling Time处包含用于重新创建前一对象的类型信息。XStream基于这些类型的信息创建新实例。攻击者可以控制输入流并替换或注入对象&am…...

深入剖析LinkedList:揭秘底层原理

文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作&#xff08;增删改查&#xff09;2.4 LinkedList的遍历方式 三、 …...

计算机网络复习-OSI TCP/IP 物理层

我膨胀了&#xff0c;挂我啊~ 作者简介&#xff1a; 每年都吐槽吉师网安奇怪的课程安排、全校正经学网络安全不超20人情景以及割韭菜企业合作的FW&#xff0c;今年是第一年。。 TCP/IP模型 先做两道题&#xff1a; TCP/IP协议模型由高层到低层分为哪几层&#xff1a; 这题…...

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤

网络技术的不断发展也为网络威胁带来了安全隐患&#xff0c;近期&#xff0c;对于许多大型企业来说&#xff0c;许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击&#xff0c;导致企业所有计算机系统瘫痪&#xff0c;无法正常工作&#xff0c;严重影响了企业的正常…...

【MATLAB】 RGB和YCbCr互转

前言 在视频、图像处理领域经常会遇到不同色域图像的转换&#xff0c;比如RGB、YUV、YCbCr色域间的转换&#xff0c;这里提供一组转换公式&#xff0c;供大家参考。 色彩模型 RGB RGB色彩模型是一种用于表示数字图像的颜色空间&#xff0c;其中"RGB"代表红色&…...

【线性代数】决定张成空间的最少向量线性无关吗?

答1&#xff1a; 是的&#xff0c;张成空间的最少向量是线性无关的。 在数学中&#xff0c;张成空间&#xff08;span space&#xff09;是一个向量空间&#xff0c;它由一组向量通过线性组合&#xff08;即每个向量乘以一个标量&#xff09;生成。如果这组向量是线性无关的&…...

暴力破解(Pikachu)

基于表单的暴力破解 先随便输入一下&#xff0c;然后抓包&#xff0c;进行字典爆破 验证码绕过(on server) server服务端要输入正确的验证码后进行爆破 之后的操作没什么不一样 验证码绕过(on client) 这个也需要输入验证码&#xff0c;但是后面进行字典爆破的时候&#xf…...

如何使用CMake查看opencv封装好的函数

当我们有时想查看opencv自带的函数的源代码&#xff0c;比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义&#xff0c;我们会很惊讶的发现为什么只看到了cvCreateImage的一个简单声明&#xff0c;而没有源代码呢&#xff1f;这是因为openCV将很多…...

微盛·企微管家:用户运营API集成,电商无代码解决方案

连接电商平台的新纪元&#xff1a;微盛企微管家 随着电子商务的蓬勃发展&#xff0c;电商平台的高效运营已经成为企业成功的关键。在这个新纪元里&#xff0c;微盛企微管家以其创新的无代码开发连接方案&#xff0c;成为企业之间连接电商平台的强大工具。它允许企业轻松集成电…...

Hive 部署

一、介绍 Apache Hive是一个分布式、容错的数据仓库系统&#xff0c;支持大规模的分析。Hive Metastore&#xff08;HMS&#xff09;提供了一个中央元数据存储库&#xff0c;可以轻松地进行分析&#xff0c;以做出明智的数据驱动决策&#xff0c;因此它是许多数据湖架构的关键组…...

CopyOnWriteArrayList源码阅读

1、构造方法 无参构造函数 //创建一个空数组&#xff0c;赋值给array引用 public CopyOnWriteArrayList() {setArray(new Object[0]); }//仅通过getArray / setArray访问的数组。 private transient volatile Object[] array;//设置数组 final void setArray(Object[] a) {arra…...

Windows操作系统:共享文件夹,防火墙的设置

1.共享文件夹 1.1 共享文件夹的优点 1.2 共享文件夹的优缺点 1.3 实例操作 ​编辑 2.防火墙设置 2.1 8080端口设置 3.思维导图 1.共享文件夹 1.1 共享文件夹的优点 优点 协作和团队合作&#xff1a;共享文件夹使多个用户能够在同一文件夹中协作和编辑文件。这促进了团…...

STM32独立看门狗

时钟频率 40KHZ 看门狗简介 STM32F10xxx 内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看 门狗设备 ( 独立看门狗和窗口看门狗 ) 可用来检测和解决由软件错误引起的故障&#xff1b;当计数器达到给 定的超时值时&#xff0c;触发一个中…...

财务数据智能化:用AI工具高效制作财务分析PPT报告

Step1: 文章内容提取 WPS AI 直接打开文件&#xff0c;在AI对话框里输入下面指令&#xff1a; 假设你是财务总监&#xff0c;公司考虑与茅台进行业务合作、投资或收购&#xff0c;请整合下面茅台2021年和2022年的财务报告信息。整理有关茅台财务状况和潜在投资回报的信息&…...

vue3中使用three.js记录

记录一下three.js配合vitevue3的使用。 安装three.js 使用npm安装&#xff1a; npm install --save three开始使用 1.定义一个div <template><div ref"threeContainer" class"w-full h-full"></div> </template>可以给这个di…...

MySQL——表的内外连接

目录 一.内连接 二.外连接 1.左外连接 2.右外连接 一.内连接 表的连接分为内连和外连 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选&#xff0c;我们前面学习的查询都是内连接&#xff0c;也是在开发过程中使用的最多的连接查询。 语法&#xff1a; s…...

基于IPP-FFT的线性调频Z(Chirp-Z,CZT)的C++类库封装并导出为dll(固定接口支持更新)

上一篇分析了三种不同导出C++类方法的优缺点,同时也讲了如何基于IPP库将FFT函数封装为C++类库,并导出为支持更新的dll库供他人调用。 在此基础上,结合前面的CZT的原理及代码实现,可以很容易将CZT变换也封装为C++类库并导出为dll,关于CZT的原理和实现,如有问题请参考: …...

【C语言】指针

基本概念 在C语言中&#xff0c;指针是一种非常重要的数据类型&#xff0c;它用于存储变量的内存地址。指针提供了对内存中数据的直接访问&#xff0c;使得在C语言中可以进行灵活的内存操作和数据传递。以下是关于C语言指针的一些基本概念&#xff1a; 1. 指针的声明&#xff…...

PostgreSql 索引使用技巧

索引种类详情可参考《PostgreSql 索引》 一、适合创建索引的场景 经常与其他表进行连接的表&#xff0c;在连接字段上应该建索引。经常出现在 WHERE 子句中的字段&#xff0c;特别是大表的字段&#xff0c;应该建索引。经常出现在 ORDER BY 子句中的字段&#xff0c;应该建索…...

【华为数据之道学习笔记】6-7打造业务自助分析的关键能力

华为公司将自助分析作为一种公共能力&#xff0c;在企业层面进行了统一构建。一方面&#xff0c;面向不同的消费用户提供了差异性的能力和工具支撑&#xff1b;另一方面&#xff0c;引入了“租户”概念&#xff0c;不同类型的用户可以在一定范围内分析数据、共享数据结果。 1. …...

K8S从harbor中拉取镜像的规则imagePullPolicy

1、参数 配制参数为&#xff1a;imagePullPolicy&#xff1a; 可以选择的值有&#xff1a;Always&#xff0c;IfNotPresent&#xff0c;Never 2、参数结果 如果pod的镜像拉取策略为imagePullPolicy: Always&#xff1a;当harbor不能运行后&#xff0c;pod会一直从harbor上拉…...

LeetCode刷题--- 优美的排列

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​​​http://t.cs…...

关于edge浏览器以及插件推荐【亲测好用】

一.edge浏览器介绍 Edge 浏览器是由微软公司开发的一款新一代网络浏览器。它最初于2015年发布&#xff0c;是微软Windows 10 操作系统的默认浏览器&#xff0c;后来还推出了适用于 Android 和 iOS 等移动设备的版本。Edge 浏览器采用了全新的浏览器内核&#xff0c;称为 Micros…...

关于“Python”的核心知识点整理大全43

目录 ​编辑 15.2.3 使2散点图并设置其样式 scatter_squares.py 15.2.4 使用 scatter()绘制一系列点 scatter_squares.py 15.2.5 自动计算数据 scatter_squares.py 15.2.6 删除数据点的轮廓 15.2.7 自定义颜色 15.2.8 使用颜色映射 scatter_squares.py 注意 15.2.9…...

Android Framework一些问题思考

一&#xff0c;zygote通信为什么用socket&#xff0c;而不是binder? 1&#xff0c;binder通信依赖用户空间进程Servicemanager&#xff0c;socket通信不依赖用户空间进程。zygote与servicemanager, surfaceflinger等都是通过各自init.rc文件被init进程解析加载&#xff0c;时…...

2024年安全员-C证证考试题库及安全员-C证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年安全员-C证证考试题库及安全员-C证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机出的…...

推广主要指标及定义

推广主要指标以直通车为例解释&#xff0c;如图所示 1.展示量&#xff1a;当消费者搜索某个词&#xff0c;推广计划在天猫直通车展示位上被买家看到的次数&#xff08;去掉被消费者快进划过、主图未完金展现等情况产生的曝光)&#xff1b; 2.点击量&#xff1a;消费者看到广告…...

【Proteus仿真】【Arduino单片机】水质监测报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、ADC、PH传感器、浑浊度传感器、DS18B20温度传感器、继电器模块等。 主要功能&#xff1a; 系统运行后&#xf…...

随机问卷调查数据的处理(uniapp)

需求&#xff1a;问卷调查 1.返回的数据中包含单选、多选、多项文本框、单文本框、图片上传 2.需要对必填的选项进行校验 3.非必填的多项文本框内容 如果不填写 不提交 表单数据格式 res{"code": 0,"msg": null,"data": [{"executeDay&…...

开源分布式搜索引擎ElasticSearch结合内网穿透远程连接

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar 内网穿透工具实现Java 远程连接操作本地分布式搜索和数据分析引擎Elasticsearch。 Cpolar内网穿透提供了更高的安全性和隐私保…...

Leetcode2928. 给小朋友们分糖果 I

Every day a Leetcode 题目来源&#xff1a;2928. 给小朋友们分糖果 I 解法1&#xff1a;暴力 枚举 3 位小朋友的糖果数&#xff0c;范围为 [0, limit]&#xff0c;分别记为 i、j、k。 当满足 i j k n 时&#xff0c;答案 1。 代码&#xff1a; /** lc appleetcode.c…...

go-zero开发入门之网关往rpc服务传递数据2

go-zero 的网关服务实际是个 go-zero 的 API 服务&#xff0c;也就是一个 http 服务&#xff0c;或者说 rest 服务。http 转 grpc 使用了开源的 grpcurl 库&#xff0c;当网关需要往 rpc 服务传递额外的数据&#xff0c;比如鉴权数据的时候&#xff0c;通过 http 的 header 进行…...

Cron介绍,以及常见的cron表达式

目录 一.cron介绍 1.什么是Cron&#xff1f; 2.Cron语法 时间字段的取值范围如下&#xff1a; 时间字段支持以下特殊字符&#xff1a; 下面是一些示例&#xff1a; 3.虚拟机安装cron(centos7展示) 二.常见的cron表达式 一.cron介绍 1.什么是Cron&#xff1f; Cron是一个…...

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.协作搜索算法4.实验参数设定5.算法结果6.…...