Dify快速接入微信

一、Dify简介

项目官网:Dify.AI · 生成式 AI 应用创新引擎

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎以及灵活的 Agent 框架,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。

为什么使用 Dify?

你或许可以把 LangChain 这类的开发库(Library)想象为有着锤子、钉子的工具箱。与之相比,Dify 提供了更接近生产需要的完整方案,Dify 好比是一套脚手架,并且经过了精良的工程设计和软件测试。

重要的是,Dify 是开源的,它由一个专业的全职团队和社区共同打造。你可以基于任何模型自部署类似 Assistants API 和 GPTs 的能力,在灵活的安全的基础上,同时保持对数据的完全控制。

我们的社区用户对 Dify 的产品评价可以归结为简单、克制、迭代迅速。 ——路宇,Dify.AI CEO

希望以上信息和这份指南可以帮助你了解这款产品,我们相信 Dify 是为你而做的(Do It For You)。

Dify 能做什么?

Dify 一词源自 Define + Modify,意指定义并且持续的改进你的 AI 应用,它是为你而做的(Do it for you)。

  • 创业,快速的将你的 AI 应用创意变成现实,无论成功和失败都需要加速。在真实世界,已经有几十个团队通过 Dify 构建 MVP(最小可用产品)获得投资,或通过 POC(概念验证)赢得了客户的订单。
  • 将 LLM 集成至已有业务,通过引入 LLM 增强现有应用的能力,接入 Dify 的 RESTful API 从而实现 Prompt 与业务代码的解耦,在 Dify 的管理界面是跟踪数据、成本和用量,持续改进应用效果。
  • 作为企业级 LLM 基础设施,一些银行和大型互联网公司正在将 Dify 部署为企业内的 LLM 网关,加速 GenAI 技术在企业内的推广,并实现中心化的监管。
  • 探索 LLM 的能力边界,即使你是一个技术爱好者,通过 Dify 也可以轻松的实践 Prompt 工程和 Agent 技术,在 GPTs 推出以前就已经有超过 60,000 开发者在 Dify 上创建了自己的第一个应用。

image-9jkv.png

二、Dify on WeChat

项目地址:https://github.com/hanfangyuan4396/dify-on-wechat.git

项目为 chatgpt-on-wechat下游分支

额外对接了LLMOps平台 Dify,支持Dify智能助手模型,调用工具和知识库,支持Dify工作流。

如果作者的项目对您有帮助请帮助作者点一个star吧~

image-95t6.png

三、部署

前期准备

首先需要一台服务器,推荐浪浪云服务器:高防,稳定,有保障!!!

浪浪云限时活动推荐:

  • 公益免费大模型接口--无需再为api付费 | 浪浪云技术栈 (langlangy.com)
  • 浪浪云白嫖服务器活动 | 浪浪云技术栈 (langlangy.com)

Dify的搭建:

1.可以参考官方的教程:

2.如果不想这么麻烦的话可以使用浪浪云的一键部署Dify知识库可接入全场大模型【一.搭建演示篇】 | 浪浪云技术栈 (langlangy.com)

image-fe3n.png

升级Dify版本

购买完浪浪云的服务器后可能会出现Dify的版本较低,此时我们升级版本即可

1.远程连接浪浪云服务器Linux服务器登陆教程 - 浪浪云:提供高性能、可靠稳定的云服务器解决方案 (langlangy.com)

2.挨个执行命令

# 进入对应的目录
cd #返回根目录
cd dify/docker/ #进入对应的文件夹
vi docker-compose.yaml #编辑对应的文件信息,或者删除文件,新建也可
docker compose down #停止容器
docker compose pull #拉取新的镜像
docker compose up -d #启动容器

docker-compose.yaml文件内容,可能存在一定的时效性,目前2024年5月8日13:59:54[处于最新版],也可到项目的官网进行复制对应的文件

version: '3'
services:# API serviceapi:image: langgenius/dify-api:0.6.6restart: alwaysenvironment:# Startup mode, 'api' starts the API server.MODE: api# The log level for the application. Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`LOG_LEVEL: INFO# A secret key that is used for securely signing the session cookie and encrypting sensitive information on the database. You can generate a strong key using `openssl rand -base64 42`.SECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U# The base URL of console application web frontend, refers to the Console base URL of WEB service if console domain is# different from api or web app domain.# example: http://cloud.dify.aiCONSOLE_WEB_URL: ''# Password for admin user initialization.# If left unset, admin user will not be prompted for a password when creating the initial admin account.INIT_PASSWORD: ''# The base URL of console application api server, refers to the Console base URL of WEB service if console domain is# different from api or web app domain.# example: http://cloud.dify.aiCONSOLE_API_URL: ''# The URL prefix for Service API endpoints, refers to the base URL of the current API service if api domain is# different from console domain.# example: http://api.dify.aiSERVICE_API_URL: ''# The URL prefix for Web APP frontend, refers to the Web App base URL of WEB service if web app domain is different from# console or api domain.# example: http://udify.appAPP_WEB_URL: ''# File preview or download Url prefix.# used to display File preview or download Url to the front-end or as Multi-model inputs;# Url is signed and has expiration time.FILES_URL: ''# When enabled, migrations will be executed prior to application startup and the application will start after the migrations have completed.MIGRATION_ENABLED: 'true'# The configurations of postgres database connection.# It is consistent with the configuration in the 'db' service below.DB_USERNAME: postgresDB_PASSWORD: difyai123456DB_HOST: dbDB_PORT: 5432DB_DATABASE: dify# The configurations of redis connection.# It is consistent with the configuration in the 'redis' service below.REDIS_HOST: redisREDIS_PORT: 6379REDIS_USERNAME: ''REDIS_PASSWORD: difyai123456REDIS_USE_SSL: 'false'# use redis db 0 for redis cacheREDIS_DB: 0# The configurations of celery broker.# Use redis as the broker, and redis db 1 for celery broker.CELERY_BROKER_URL: redis://:difyai123456@redis:6379/1# Specifies the allowed origins for cross-origin requests to the Web API, e.g. https://dify.app or * for all origins.WEB_API_CORS_ALLOW_ORIGINS: '*'# Specifies the allowed origins for cross-origin requests to the console API, e.g. https://cloud.dify.ai or * for all origins.CONSOLE_CORS_ALLOW_ORIGINS: '*'# CSRF Cookie settings# Controls whether a cookie is sent with cross-site requests,# providing some protection against cross-site request forgery attacks## Default: `SameSite=Lax, Secure=false, HttpOnly=true`# This default configuration supports same-origin requests using either HTTP or HTTPS,# but does not support cross-origin requests. It is suitable for local debugging purposes.## If you want to enable cross-origin support,# you must use the HTTPS protocol and set the configuration to `SameSite=None, Secure=true, HttpOnly=true`.## The type of storage to use for storing user files. Supported values are `local` and `s3` and `azure-blob` and `google-storage`, Default: `local`STORAGE_TYPE: local# The path to the local storage directory, the directory relative the root path of API service codes or absolute path. Default: `storage` or `/home/john/storage`.# only available when STORAGE_TYPE is `local`.STORAGE_LOCAL_PATH: storage# The S3 storage configurations, only available when STORAGE_TYPE is `s3`.S3_ENDPOINT: 'https://xxx.r2.cloudflarestorage.com'S3_BUCKET_NAME: 'difyai'S3_ACCESS_KEY: 'ak-difyai'S3_SECRET_KEY: 'sk-difyai'S3_REGION: 'us-east-1'# The Azure Blob storage configurations, only available when STORAGE_TYPE is `azure-blob`.AZURE_BLOB_ACCOUNT_NAME: 'difyai'AZURE_BLOB_ACCOUNT_KEY: 'difyai'AZURE_BLOB_CONTAINER_NAME: 'difyai-container'AZURE_BLOB_ACCOUNT_URL: 'https://<your_account_name>.blob.core.windows.net'# The Google storage configurations, only available when STORAGE_TYPE is `google-storage`.GOOGLE_STORAGE_BUCKET_NAME: 'yout-bucket-name'GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64: 'your-google-service-account-json-base64-string'# The type of vector store to use. Supported values are `weaviate`, `qdrant`, `milvus`, `relyt`.VECTOR_STORE: weaviate# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`.WEAVIATE_ENDPOINT: http://weaviate:8080# The Weaviate API key.WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`.QDRANT_URL: http://qdrant:6333# The Qdrant API key.QDRANT_API_KEY: difyai123456# The Qdrant client timeout setting.QDRANT_CLIENT_TIMEOUT: 20# The Qdrant client enable gRPC mode.QDRANT_GRPC_ENABLED: 'false'# The Qdrant server gRPC mode PORT.QDRANT_GRPC_PORT: 6334# Milvus configuration Only available when VECTOR_STORE is `milvus`.# The milvus host.MILVUS_HOST: 127.0.0.1# The milvus host.MILVUS_PORT: 19530# The milvus username.MILVUS_USER: root# The milvus password.MILVUS_PASSWORD: Milvus# The milvus tls switch.MILVUS_SECURE: 'false'# relyt configurationsRELYT_HOST: dbRELYT_PORT: 5432RELYT_USER: postgresRELYT_PASSWORD: difyai123456RELYT_DATABASE: postgres# Mail configuration, support: resend, smtpMAIL_TYPE: ''# default send from email address, if not specifiedMAIL_DEFAULT_SEND_FROM: 'YOUR EMAIL FROM (eg: no-reply <no-reply@dify.ai>)'SMTP_SERVER: ''SMTP_PORT: 587SMTP_USERNAME: ''SMTP_PASSWORD: ''SMTP_USE_TLS: 'true'# the api-key for resend (https://resend.com)RESEND_API_KEY: ''RESEND_API_URL: https://api.resend.com# The DSN for Sentry error reporting. If not set, Sentry error reporting will be disabled.SENTRY_DSN: ''# The sample rate for Sentry events. Default: `1.0`SENTRY_TRACES_SAMPLE_RATE: 1.0# The sample rate for Sentry profiles. Default: `1.0`SENTRY_PROFILES_SAMPLE_RATE: 1.0# Notion import configuration, support public and internalNOTION_INTEGRATION_TYPE: publicNOTION_CLIENT_SECRET: you-client-secretNOTION_CLIENT_ID: you-client-idNOTION_INTERNAL_SECRET: you-internal-secret# The sandbox service endpoint.CODE_EXECUTION_ENDPOINT: "http://sandbox:8194"CODE_EXECUTION_API_KEY: dify-sandboxCODE_MAX_NUMBER: 9223372036854775807CODE_MIN_NUMBER: -9223372036854775808CODE_MAX_STRING_LENGTH: 80000TEMPLATE_TRANSFORM_MAX_LENGTH: 80000CODE_MAX_STRING_ARRAY_LENGTH: 30CODE_MAX_OBJECT_ARRAY_LENGTH: 30CODE_MAX_NUMBER_ARRAY_LENGTH: 1000depends_on:- db- redisvolumes:# Mount the storage directory to the container, for storing user files.- ./volumes/app/storage:/app/api/storage# uncomment to expose dify-api port to host# ports:#   - "5001:5001"# worker service# The Celery worker for processing the queue.worker:image: langgenius/dify-api:0.6.6restart: alwaysenvironment:# Startup mode, 'worker' starts the Celery worker for processing the queue.MODE: worker# --- All the configurations below are the same as those in the 'api' service. ---# The log level for the application. Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`LOG_LEVEL: INFO# A secret key that is used for securely signing the session cookie and encrypting sensitive information on the database. You can generate a strong key using `openssl rand -base64 42`.# same as the API serviceSECRET_KEY: sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U# The configurations of postgres database connection.# It is consistent with the configuration in the 'db' service below.DB_USERNAME: postgresDB_PASSWORD: difyai123456DB_HOST: dbDB_PORT: 5432DB_DATABASE: dify# The configurations of redis cache connection.REDIS_HOST: redisREDIS_PORT: 6379REDIS_USERNAME: ''REDIS_PASSWORD: difyai123456REDIS_DB: 0REDIS_USE_SSL: 'false'# The configurations of celery broker.CELERY_BROKER_URL: redis://:difyai123456@redis:6379/1# The type of storage to use for storing user files. Supported values are `local` and `s3` and `azure-blob`, Default: `local`STORAGE_TYPE: localSTORAGE_LOCAL_PATH: storage# The S3 storage configurations, only available when STORAGE_TYPE is `s3`.S3_ENDPOINT: 'https://xxx.r2.cloudflarestorage.com'S3_BUCKET_NAME: 'difyai'S3_ACCESS_KEY: 'ak-difyai'S3_SECRET_KEY: 'sk-difyai'S3_REGION: 'us-east-1'# The Azure Blob storage configurations, only available when STORAGE_TYPE is `azure-blob`.AZURE_BLOB_ACCOUNT_NAME: 'difyai'AZURE_BLOB_ACCOUNT_KEY: 'difyai'AZURE_BLOB_CONTAINER_NAME: 'difyai-container'AZURE_BLOB_ACCOUNT_URL: 'https://<your_account_name>.blob.core.windows.net'# The type of vector store to use. Supported values are `weaviate`, `qdrant`, `milvus`, `relyt`.VECTOR_STORE: weaviate# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`.WEAVIATE_ENDPOINT: http://weaviate:8080# The Weaviate API key.WEAVIATE_API_KEY: WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`.QDRANT_URL: http://qdrant:6333# The Qdrant API key.QDRANT_API_KEY: difyai123456# The Qdrant clinet timeout setting.QDRANT_CLIENT_TIMEOUT: 20# The Qdrant client enable gRPC mode.QDRANT_GRPC_ENABLED: 'false'# The Qdrant server gRPC mode PORT.QDRANT_GRPC_PORT: 6334# Milvus configuration Only available when VECTOR_STORE is `milvus`.# The milvus host.MILVUS_HOST: 127.0.0.1# The milvus host.MILVUS_PORT: 19530# The milvus username.MILVUS_USER: root# The milvus password.MILVUS_PASSWORD: Milvus# The milvus tls switch.MILVUS_SECURE: 'false'# Mail configuration, support: resendMAIL_TYPE: ''# default send from email address, if not specifiedMAIL_DEFAULT_SEND_FROM: 'YOUR EMAIL FROM (eg: no-reply <no-reply@dify.ai>)'# the api-key for resend (https://resend.com)RESEND_API_KEY: ''RESEND_API_URL: https://api.resend.com# relyt configurationsRELYT_HOST: dbRELYT_PORT: 5432RELYT_USER: postgresRELYT_PASSWORD: difyai123456RELYT_DATABASE: postgres# Notion import configuration, support public and internalNOTION_INTEGRATION_TYPE: publicNOTION_CLIENT_SECRET: you-client-secretNOTION_CLIENT_ID: you-client-idNOTION_INTERNAL_SECRET: you-internal-secretdepends_on:- db- redisvolumes:# Mount the storage directory to the container, for storing user files.- ./volumes/app/storage:/app/api/storage# Frontend web application.web:image: langgenius/dify-web:0.6.6restart: alwaysenvironment:# The base URL of console application api server, refers to the Console base URL of WEB service if console domain is# different from api or web app domain.# example: http://cloud.dify.aiCONSOLE_API_URL: ''# The URL for Web APP api server, refers to the Web App base URL of WEB service if web app domain is different from# console or api domain.# example: http://udify.appAPP_API_URL: ''# The DSN for Sentry error reporting. If not set, Sentry error reporting will be disabled.SENTRY_DSN: ''# uncomment to expose dify-web port to host# ports:#   - "3000:3000"# The postgres database.db:image: postgres:15-alpinerestart: alwaysenvironment:PGUSER: postgres# The password for the default postgres user.POSTGRES_PASSWORD: difyai123456# The name of the default postgres database.POSTGRES_DB: dify# postgres data directoryPGDATA: /var/lib/postgresql/data/pgdatavolumes:- ./volumes/db/data:/var/lib/postgresql/data# uncomment to expose db(postgresql) port to host# ports:#   - "5432:5432"healthcheck:test: [ "CMD", "pg_isready" ]interval: 1stimeout: 3sretries: 30# The redis cache.redis:image: redis:6-alpinerestart: alwaysvolumes:# Mount the redis data directory to the container.- ./volumes/redis/data:/data# Set the redis password when startup redis server.command: redis-server --requirepass difyai123456healthcheck:test: [ "CMD", "redis-cli", "ping" ]# uncomment to expose redis port to host# ports:#   - "6379:6379"# The Weaviate vector store.weaviate:image: semitechnologies/weaviate:1.19.0restart: alwaysvolumes:# Mount the Weaviate data directory to the container.- ./volumes/weaviate:/var/lib/weaviateenvironment:# The Weaviate configurations# You can refer to the [Weaviate](https://weaviate.io/developers/weaviate/config-refs/env-vars) documentation for more information.QUERY_DEFAULTS_LIMIT: 25AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'PERSISTENCE_DATA_PATH: '/var/lib/weaviate'DEFAULT_VECTORIZER_MODULE: 'none'CLUSTER_HOSTNAME: 'node1'AUTHENTICATION_APIKEY_ENABLED: 'true'AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih'AUTHENTICATION_APIKEY_USERS: 'hello@dify.ai'AUTHORIZATION_ADMINLIST_ENABLED: 'true'AUTHORIZATION_ADMINLIST_USERS: 'hello@dify.ai'# uncomment to expose weaviate port to host# ports:#  - "8080:8080"# The DifySandboxsandbox:image: langgenius/dify-sandbox:0.1.0restart: alwayscap_add:# Why is sys_admin permission needed?# https://docs.dify.ai/getting-started/install-self-hosted/install-faq#id-16.-why-is-sys_admin-permission-needed- SYS_ADMINenvironment:# The DifySandbox configurationsAPI_KEY: dify-sandboxGIN_MODE: releaseWORKER_TIMEOUT: 15# Qdrant vector store.# uncomment to use qdrant as vector store.# (if uncommented, you need to comment out the weaviate service above,# and set VECTOR_STORE to qdrant in the api & worker service.)# qdrant:#   image: langgenius/qdrant:v1.7.3#   restart: always#   volumes:#     - ./volumes/qdrant:/qdrant/storage#   environment:#     QDRANT_API_KEY: 'difyai123456'#   # uncomment to expose qdrant port to host#   # ports:#   #  - "6333:6333"#   #  - "6334:6334"# The nginx reverse proxy.# used for reverse proxying the API service and Web service.nginx:image: nginx:latestrestart: alwaysvolumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf- ./nginx/proxy.conf:/etc/nginx/proxy.conf- ./nginx/conf.d:/etc/nginx/conf.d#- ./nginx/ssl:/etc/ssldepends_on:- api- webports:- "80:80"#- "443:443"

项目Dify on WeChat的拉取与部署(改编自作者大佬的教程)

创建Dify基础编排聊天助手应用

登录成功后,进入Dify页面,我们按照下方步骤创建一个基础编排聊天助手应用

image-os7s.png

  1. 点击页面上方的工作室
  2. 创建空白应用
  3. 应用类型选择聊天助手
  4. 聊天助手编排方式选择基础编排
  5. 选择应用图标并为应用填写一个名称,比如基础编排聊天助手
  6. 点击创建

Dify的配置较为多样化,也可以参考官方的教程进行个性化配置

在配置完成后,我们可以在右侧对话框进行测试,在测试完成后,进行如下操作

image-ejuk.png

  1. 发布
  2. 更新
  3. 访问API

我们此时就获得到了api秘钥和服务器地址

Docker进行部署
git clone https://github.com/hanfangyuan4396/dify-on-wechat
cd dify-on-wechat/docker       # 进入docker目录
# 配置dify的API和服务器地址
vi docker-compose.yml
# 我们配置environment字段即可
environment:DIFY_API_BASE: '浪浪云ip+对应的端口地址'DIFY_API_KEY: 'app-api-key'DIFY_APP_TYPE: 'chatbot'MODEL: 'dify'SINGLE_CHAT_PREFIX: '[""]'SINGLE_CHAT_REPLY_PREFIX: '""'GROUP_CHAT_PREFIX: '["@bot"]'GROUP_NAME_WHITE_LIST: '["ALL_GROUP"]'
# 字段详解
# 
{ "dify_api_base": "https://api.dify.ai/v1",    # dify base url"dify_api_key": "app-xxx",                    # dify api key"dify_app_type": "chatbot",                   # dify应用类型 chatbot(对应聊天助手)/agent(对应Agent)/workflow(对应工作流),默认为chatbot"dify_convsersation_max_messages": 5,         # dify目前不支持设置历史消息长度,暂时使用超过最大消息数清空会话的策略,缺点是没有滑动窗口,会突然丢失历史消息, 当前为5"channel_type": "wx",                         # 通道类型,当前为个人微信"model": "dify",                              # 模型名称,当前对应dify平台"single_chat_prefix": [""],                   # 私聊时文本需要包含该前缀才能触发机器人回复"single_chat_reply_prefix": "",               # 私聊时自动回复的前缀,用于区分真人"group_chat_prefix": ["@bot"],                # 群聊时包含该前缀则会触发机器人回复"group_name_white_list": ["ALL_GROUP"]        # 机器人回复的群名称列表
}
docker compose up -d           # 启动docker容器
docker logs -f dify-on-wechat  # 查看二维码并登录

如果作者大佬的项目对您有帮助请帮助大佬点一个star吧~

使用源码部署
#安装依赖
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
#安装扩展依赖
pip3 install -r requirements-optional.txt -i https://mirrors.aliyun.com/pypi/simple
#复制配置文件
cp config-template.json config.json
#启动
python3 app.py

效果演示

1885614c166a66087c38350ae4406d8.jpg

81d875498990f4d9e83c89b701b20f1.jpg

服务器日志大概如下:

image-vmd7.png

四、Q&A

有什么问题可以进行提问,常见的问题我会总结为Q&A

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

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

相关文章

ESP32-C3模组上跑通OTA升级(11)

接前一篇文章&#xff1a;ESP32-C3模组上跑通OTA升级&#xff08;10&#xff09; 本文内容参考&#xff1a; 《ESP3-C3 物联网工程开发实战》 乐鑫科技 特此致谢&#xff01; 上一回说到解决了证书验证的问题&#xff0c;但紧接着又出现了一个新的问题&#xff1a;版本相同无…

QT等比例缩放图片

1、这里使用QLabe控件显示图片&#xff0c;如下&#xff1a; label->setPixmap(QPixmap::fromImage(image_2)); 以上是直接原始大小来显示QImage image_2图片。 label->setAlignment(Qt::AlignCenter); 以上代码&#xff0c;是将显示的图片居中展示&#xff0c;默认…

Vue3-Pinia(大菠萝)附源码

文章目录 Pinia 开源地址Pinia 定义与起源优点与特性Pinia使用准备一个小模块(可参考以下程序)搭建 pinia 环境存储读取数据修改数据(三种方式)storeToRefsgetters$subscribestore组合式写法 更多相关内容可查看 Pinia 开源地址 git地址&#xff1a;https://gitee.com/its-a-l…

干货分享 | 详解TSMaster CAN 与 CANFD 的 CRCE2E 校验方法

面对切换工具链的用户来说&#xff0c;在 TSMaster 上完成总线通讯中的 CRC/E2E 校验处理不是特别熟悉&#xff0c;该文章可以协助客户快速使用 TSMaster 完成 CAN/CAN FD 总线通讯的 CRC/E2E 校验。 本文关键字&#xff1a;TSMaster&#xff0c;CAN/CANFD&#xff0c;CRC 校验…

RK3588平台编译zlog 日志模块

下载zlog之后 解压 进入zlog目录 新建一个build_rk3588.sh脚本 内容如下 make CCaarch64-linux-gcc PREFIX./install_rk3588 将工具链导入环境变量 export PATH/home/QMCY/RK3588/arm64tools/aarch64-buildroot-linux-gnu_sdk-buildroot/bin/:$PATH 编译无问题 产生的…

【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日内容 二、&#x1f30f;前端页面的改造 2.1新增电子书管理页面 2.2新增路由规则 2.3修改the-header代码 三、&#x1f697;SpringBoot后端Ebook模块改造 3.1增加电子书增/改接口 3.1.…

基于SpringBoot+Vue租房网站设计和实现(源码+LW+部署文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

基于全志T507-H的Igh EtherCAT主站案例分享

基于全志T507-H的Linux-RT IgH EtherCAT主站演示 下文主要介绍基于全志T507-H&#xff08;硬件平台&#xff1a;创龙科技TLT507-EVM评估板&#xff09;案例&#xff0c;按照创龙科技提供的案例用户手册进行操作得出测试结果。 本次演示的开发环境&#xff1a; Windows开发环…

【二进制部署k8s-1.29.4】九、cilium1.15.4安装

文章目录 简介 一.安装helm和cilium 客户端命令二.安装cilium2.1.安装cilium对于系统内核的版本的要求2.2.安装的命令及参数如下&#xff1a;参数注释&#xff1a; 三.确认cilium的安装状态四.访问cilium的监控页面hubble-ui 简介 本章节主要讲解k8s集群网络插件cni的安装&…

react-native运行程序 出现 Application XXX is waiting for the debugger

1.重启adb: adb kill-server、 adb start-server. 2、确定USB调试模式是否开启&#xff0c;如果已经开启了&#xff0c;关闭了重新打开一下 3.选择调试模式并关闭等待调试程序

STM32(十):SPI (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中USART通信协议来串口通信&#xff0c;并向XCOM串口助手发送信息。这篇文章我们来介绍一下如何用STM32单片机中SPI接口来实现LED的闪亮并玩转WS2812B灯带。 一、实验原理 串行通信之前的博客里有所介绍&#xff0c;可以查看以下…

故障预警 vs 故障分类:哪个更有意义,哪个更具挑战性?

故障预警 vs 故障分类&#xff1a;哪个更有意义&#xff0c;哪个更具挑战性&#xff1f; 在现代工业系统中&#xff0c;风力发电机、制造设备等关键装置的可靠性和稳定性对生产效率至关重要。为此&#xff0c;故障预警和故障分类成为保障设备正常运行的重要手段。那么&#xf…

UI案例——登陆系统

UI的登陆界面实例 在学习了UILabel&#xff0c;UIButton&#xff0c;UIView&#xff0c;UITextField的内容之后&#xff0c;我们就可以写一个简单的登陆界面 我们可以通过UILabel来编写我们显示在登陆界面上的文字比方说下面这两行字就是通过UILabel去实现的。 下面给出一下实现…

每日5题Day17 - LeetCode 81 - 85

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;81. 搜索旋转排序数组 II - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean search(int[] nums, int target) {int n nums.length;if (n…

【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)

一、安装软件 Navicat&#xff0c;SQLyog 这些软件都不错&#xff0c;不过都需要收费&#xff0c;当然也有破解版。下面用 MySQL Workbench&#xff0c;它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端&#xff0c;现在要让数据库能够远程登录。不过一般不会远程…

Love-Yi情侣网站3.0存在SQL注入漏洞

目录 1. 前言 2. 网站简介 3. 寻找特征点 3.1 第一次尝试 3.2 第二次尝试 4.资产搜索 5.漏洞复现 5.1 寻找漏洞点 5.2 进行进一步测试 5.2.1 手动测试 1.寻找字段 2.寻找回显位 3.查询当前用户 5.2.2 sqlmap去跑 6.总结 1. 前言 朋友说自己建了一个情侣网站,看到…

Golang省市二级联动实现 从数据收集、清洗到数据存储

1.背景&#xff1a; 最近在写项目&#xff0c;在项目中有一个需求是获取用户的地理位置&#xff0c;一开始是打算让前端使用JSON包的形式去实现&#xff0c;但是考虑到后期可能需要对省市的数据做一些修改和控制操作&#xff0c;所以改为后端实现&#xff0c;并向后台暴露一套…

密码加密及验证

目录 为什么需要加密&#xff1f; 密码算法分类 对称密码算法 非对称密码算法 摘要算法 DigestUtils MD5在线解密工具原理 实现用户密码加密 代码实现 为什么需要加密&#xff1f; 在MySQL数据库中&#xff0c;我们常常需要对用户密码、身份证号、手机号码等敏感信息进…

【数据结构】树与二叉树——树的基本概念

树的基本概念 导读一、树的定义二、树的基本术语2.1 结点之间的关系2.2 基本概念2.3 度为m的树与m叉树 三、树的性质结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 从今天开始&#xff0c;我们将进入第五章的内容——树与二叉树的学…

微服务:Rabbitmq的WorkQueue模型的使用、默认消费方式(消息队列中间件)

文章目录 WorkQueue模型控制预取消息个数 WorkQueue模型 当然&#xff0c;一个队列&#xff0c;可以由多个消费者去监听。 来实现一下. 生产者&#xff1a; Testpublic void testWorkQueue() throws InterruptedException {// 队列名称String queueName "simple.queue…