Linly-Talker智能数字人实时对话系统如何部署体验

环境:

Linly-Talker

问题描述:

Linly-Talker智能数字人实时对话系统如何部署体验

Linly-Talker 是一个智能 AI 系统,它将大型语言模型 (LLMs) 与视觉模型相结合,创造出一种新颖的人机交互方式。它集成了各种技术,如Whisper,Linly,Microsoft语音服务和SadTalker说话头生成系统。该系统部署在 Gradio 上,允许用户通过提供图像作为提示与 AI 助手交谈。用户可以进行自由形式的对话或根据自己的喜好生成内容。

解决方案:

拉取Linly-Talker项目

1.在e盘新建work文件夹

2.进入文件夹cd /mnt/e/work

git clone https://github.com/Kedreamix/Linly-Talker.git

在这里插入图片描述
3.设置虚拟环境

在Linly-Talker目录下安装venv包,请先安装:

sudo apt install python3-venv

4.创建新的虚拟环境:

python3 -m venv linlyenv

将linlyenv替换为您想要为虚拟环境的名称

5.激活虚拟环境:

source linlyenv/bin/activate
root@1848:/mnt/e/work/Linly-Talker# source linlyenv/bin/activate
(linlyenv) root@261848:/mnt/e/work/Linly-Talker#

安装依赖

配置pip使用清华的镜像源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

1.pytorch安装

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113

2.ubuntu安装ffmpeg

sudo apt install ffmpeg

3.安装requirements_app里面依赖

pip install -r requirements_app.txt

如果要使用语音克隆等模型,可能需要更高版本的 PyTorch。但是,功能将更加多样化。您可能需要使用 CUDA 11.8 作为驱动程序版本,您可以选择该版本。

conda create -n linly python=3.10  
conda activate linly

pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

conda install -q ffmpeg # ffmpeg==4.2.2

pip install -r requirements_app.txt

nltk_data放在

root@ST-202207261848:/mnt/e/work/Linly-Talker# cd /usr/share
root@ST-202207261848:/usr/share# mv /mnt/e/work/Linly-Talker/linlyenv/nltk_data .
root@ST-202207261848:/usr/share# ls

Install dependencies for voice cloning

pip install -r VITS/requirements_gptsovits.txt

报错安装cmake
apt-get install cmake

为了大家的部署使用方便,更新了一个 configs.py 文件,可以对其进行一些超参数修改即可

# 设备运行端口 (Device running port)
port = 7870
# api运行端口及IP (API running port and IP)
ip = '127.0.0.1' 
api_port = 7871
# Linly模型路径 (Linly model path)
mode = 'api' # api 需要先运行Linly-api-fast.py
mode = 'offline'
model_path = 'Linly-AI/Chinese-LLaMA-2-7B-hf'
# ssl证书 (SSL certificate) 麦克风对话需要此参数
ssl_certfile = "/path/to/Linly-Talker/https_cert/cert.pem"
ssl_keyfile = "/path/to/Linly-Talker/https_cert/key.pem"

下载权重一些文件,放入对应目录

### 1.2 权重下载

SadTalker的代码可以从 [Baidu (百度云盘)](https://pan.baidu.com/s/1eF13O-8wyw4B3MtesctQyg?pwd=linl) (Password: `linl`) 下载,也可以直接运行shell文件`bash scripts/sadtalker_download_models.sh  `运行自动下载(比较适用于Linux)。

如果百度网盘下载,记住是放在 checkpoints 文件夹下,百度网盘下载的默认命名为 sadtalker,实际应该重命名为 checkpoints

Wav2Lip的代码模型也可以从One Drive下载,可以只下载第一个或者第二个:

| Model                        | Description                                           | Link to the model                                            |
| ---------------------------- | ----------------------------------------------------- | ------------------------------------------------------------ |
| Wav2Lip                      | Highly accurate lip-sync                              | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/Eb3LEzbfuKlJiR600lQWRxgBIY27JZg80f7V9jtMfbNDaQ?e=TBFBVW) |
| Wav2Lip + GAN                | Slightly inferior lip-sync, but better visual quality | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EdjI7bZlgApMqsVoEUUXpLsBxqXbn5z8VTmoxp55YNDcIA?e=n9ljGW) |
| Expert Discriminator         | Weights of the expert discriminator                   | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EQRvmiZg-HRAjvI6zqN9eTEBP74KefynCwPWVmF57l-AYA?e=ZRPHKP) |
| Visual Quality Discriminator | Weights of the visual disc trained in a GAN setup     | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EQVqH88dTm1HjlK11eNba5gBbn15WMS0B0EZbDBttqrqkg?e=ic0ljo) |

GPT-SoVITS的代码模型可以从以下链接下载,具体可看[https://github.com/RVC-Boss/GPT-SoVITS/blob/main/docs/cn/README.md#预训练模型](https://github.com/RVC-Boss/GPT-SoVITS/blob/main/docs/cn/README.md#预训练模型)[GPT-SoVITS Models](https://huggingface.co/lj1995/GPT-SoVITS) 下载预训练模型,并将它们放置在 `GPT_SoVITS\pretrained_models` 中。

中国地区用户可以进入以下链接并点击“下载副本”下载以上两个模型:

- [GPT-SoVITS Models](https://www.icloud.com.cn/iclouddrive/056y_Xog_HXpALuVUjscIwTtg#GPT-SoVITS_Models)
- [UVR5 Weights](https://www.icloud.com.cn/iclouddrive/0bekRKDiJXboFhbfm3lM2fVbA#UVR5_Weights)
pip install -U openai-whisper


FunASR

阿里的 FunASR 的语音识别效果也是相当不错,而且时间也是比 whisper 更快的,更能达到实时的效果,所以也将 FunASR 添加进去了,在 ASR 文件夹下的 FunASR 文件里可以进行体验,需要注意的是,在第一次运行的时候,需要安装以下库,参考 https://github.com/alibaba-damo-academy/FunASR

pip install funasr
pip install modelscope
pip install -U rotary_embedding_torch

LLM - Conversation
Linly-AI

Linly 来自深圳大学数据工程国家重点实验室,参考 https://github.com/CVI-SZU/Linly

下载 Linly 模型:https://huggingface.co/Linly-AI/Chinese-LLaMA-2-7B-hf

可以使用 git 下载

apt-get install git-lfs
git lfs install
git clone https://huggingface.co/Linly-AI/Chinese-LLaMA-2-7B-hf

出错
(linlyenv) root@261848:/mnt/e/work/Linly-Talker# git lfs install
Error: failed to call git rev-parse --git-dir: exit status 128 : fatal: detected dubious ownership in repository at '/mnt/e/work/Linly-Talker'
To add an exception for this directory, call:

        git config --global --add safe.directory /mnt/e/work/Linly-Talker

Git LFS initialized.

(linlyenv) root@02207261848:/mnt/e/work/Linly-Talker# git config --global --add safe.directory /mnt/e/work/Linly-Talker

(linlyenv) root@261848:/mnt/e/work/Linly-Talker# git lfs install
Updated git hooks.
Git LFS initialized.

或者使用 huggingface 的下载工具 huggingface-cli

pip install -U huggingface_hub

# 设置镜像加速
# Linux
export HF_ENDPOINT="https://hf-mirror.com"
# windows powershell
$env:HF_ENDPOINT="https://hf-mirror.com"

huggingface-cli download --resume-download Linly-AI/Chinese-LLaMA-2-7B-hf --local-dir Linly-AI/Chinese-LLaMA-2-7B-hf

或使用 API:

# 命令行
curl -X POST -H "Content-Type: application/json" -d '{"question": "北京有什么好玩的地方?"}' http://url:port  

# Python
import requests

url = "http://url:port"
headers = {
  "Content-Type": "application/json"
}

data = {
  "question": "北京有什么好玩的地方?" 
}

response = requests.post(url, headers=headers, json=data)
# response_text = response.content.decode("utf-8")
answer, tag = response.json()
# print(answer)
if tag == 'success':
    response_text =  answer[0]
else:
    print("fail")
print(response_text)

API 部署推荐 FastAPI,现在更新了 FastAPI 的 API 使用版本,FastAPI 是一个高性能、易用且现代的 Python Web 框架,它通过使用最新的 Python 特性和异步编程,提供了快速开发 Web API 的能力。 该框架不仅易于学习和使用,还具有自动生成文档、数据验证等强大功能。 无论是构建小型项目还是大型应用程序,FastAPI 都是一个强大而有效的工具。

首先安装部署 API 所使用的库

pip install fastapi==0.104.1
pip install uvicorn==0.24.0.post1

其他使用方法大致相同,主要是不同代码实现方式,会更加简单边界,并且处理并发也会更好

from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig
import uvicorn
import json
import datetime
import torch
from configs import model_path, api_port
# 设置设备参数
DEVICE = "cuda"  # 使用CUDA
DEVICE_ID = "0"  # CUDA设备ID,如果未设置则为空
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE  # 组合CUDA设备信息

# 清理GPU内存函数
def torch_gc():
    if torch.cuda.is_available():  # 检查是否可用CUDA
        with torch.cuda.device(CUDA_DEVICE):  # 指定CUDA设备
            torch.cuda.empty_cache()  # 清空CUDA缓存
            torch.cuda.ipc_collect()  # 收集CUDA内存碎片

# 创建FastAPI应用
app = FastAPI()

# 处理POST请求的端点
@app.post("/")
async def create_item(request: Request):
    global model, tokenizer  # 声明全局变量以便在函数内部使用模型和分词器
    json_post_raw = await request.json()  # 获取POST请求的JSON数据
    json_post = json.dumps(json_post_raw)  # 将JSON数据转换为字符串
    json_post_list = json.loads(json_post)  # 将字符串转换为Python对象
    prompt = json_post_list.get('prompt')  # 获取请求中的提示
    history = json_post_list.get('history')  # 获取请求中的历史记录
    max_length = json_post_list.get('max_length')  # 获取请求中的最大长度
    top_p = json_post_list.get('top_p')  # 获取请求中的top_p参数
    temperature = json_post_list.get('temperature')  # 获取请求中的温度参数
    
    # 调用模型进行对话生成
    prompt = f"请用少于25个字回答以下问题 ### Instruction:{prompt}  ### Response:"
    inputs = tokenizer(prompt, return_tensors="pt").to("cuda:0")
    generate_ids = model.generate(inputs.input_ids, 
                                  max_new_tokens=max_length if max_length else 2048,
                                  do_sample=True, 
                                  top_k=20,
                                  top_p=top_p,
                                  temperature=temperature if temperature else 0.84,
                                  repetition_penalty=1.15, eos_token_id=2, bos_token_id=1,pad_token_id=0)
    response = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
    response = response.split("### Response:")[-1]
    now = datetime.datetime.now()  # 获取当前时间
    time = now.strftime("%Y-%m-%d %H:%M:%S")  # 格式化时间为字符串
    # 构建响应JSON
    answer = {
        "response": response,
        # "history": history,
        "status": 200,
        "time": time
    }
    # 构建日志信息
    log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'
    print(log)  # 打印日志
    torch_gc()  # 执行GPU内存清理
    return answer  # 返回响应

# 主函数入口
if __name__ == '__main__':
    # 加载预训练的分词器和模型
    model = AutoModelForCausalLM.from_pretrained(model_path, device_map="cuda:0",
                                                    torch_dtype=torch.bfloat16, trust_remote_code=True)
    tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False, trust_remote_code=True)
    model.eval()  # 设置模型为评估模式
    # 启动FastAPI应用
    uvicorn.run(app, host='0.0.0.0', port=api_port, workers=1)  # 在指定端口和主机上启动应用

默认部署在 7871 端口,通过 POST 方法进行调用,可以使用 curl 调用,如下所示:

curl -X POST "http://127.0.0.1:7871" \
     -H 'Content-Type: application/json' \
     -d '{"prompt": "如何应对压力"}'

也可以使用 python 中的 requests 库进行调用,如下所示:

import requests
import json

def get_completion(prompt):
    headers = {'Content-Type': 'application/json'}
    data = {"prompt": prompt}
    response = requests.post(url='http://127.0.0.1:7871', headers=headers, data=json.dumps(data))
    return response.json()['response']

if __name__ == '__main__':
    print(get_completion('你好如何应对压力'))

得到的返回值如下所示:

{
  "response":"寻求支持和放松,并采取积极的措施解决问题。",
  "status":200,
  "time":"2024-01-12 01:43:37"
}

Qwen(前面已下忽略)

来自阿里云的 Qwen,查看 https://github.com/QwenLM/Qwen

下载 Qwen 模型: https://huggingface.co/Qwen/Qwen-1_8B-Chat

可以使用 git 下载

git lfs install
git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat

或者使用 huggingface 的下载工具 huggingface-cli

pip install -U huggingface_hub

# 设置镜像加速
# Linux
export HF_ENDPOINT="https://hf-mirror.com"
# windows powershell
$env:HF_ENDPOINT="https://hf-mirror.com"

huggingface-cli download --resume-download Qwen/Qwen-1_8B-Chat --local-dir Qwen/Qwen-1_8B-Chat

Gemini-Pro

来自 Google 的 Gemini-Pro,了解更多请访问 https://deepmind.google/technologies/gemini/

请求 API 密钥: https://makersuite.google.com/
LLM 模型选择

在 app.py 文件中,轻松选择您需要的模型。

# 取消注释并设置您选择的模型:

# llm = Gemini(model_path='gemini-pro', api_key=None, proxy_url=None) # 不要忘记加入您自己的 Google API 密钥
# llm = Qwen(mode='offline', model_path="Qwen/Qwen-1_8B-Chat")
# 自动下载
# llm = Linly(mode='offline', model_path="Linly-AI/Chinese-LLaMA-2-7B-hf")
# 手动下载到指定路径
llm = Linly(mode='offline', model_path="Linly-AI/Chinese-LLaMA-2-7B-hf")

pip3 install gradio



Gradio

Gradio 是一个 Python 库,提供了一种简单的方式将机器学习模型作为交互式 Web 应用程序来部署。

对 Linly-Talker 而言,使用 Gradio 有两个主要目的:

    可视化与演示:Gradio 为模型提供一个简单的 Web GUI, 上传图片和文本后可以直观地看到结果。这是展示系统能力的有效方式。

    用户交互:Gradio 的 GUI 可以作为前端,允许用户与 Linly-Talker 进行交互对话。用户可以上传自己的图片并输入问题,实时获取回答。这提供了更自然的语音交互方式。

具体来说,我们在 app.py 中创建了一个 Gradio 的 Interface, 接收图片和文本输入,调用函数生成回应视频,在 GUI 中显示出来。这样就实现了浏览器交互而不需要编写复杂的前端。

总之,Gradio 为 Linly-Talker 提供了可视化和用户交互的接口,是展示系统功能和让最终用户使用系统的有效途径。
启动

现在的启动一共有几种模式,可以选择特定的场景进行设置

第一种只有固定了人物问答,设置好了人物,省去了预处理时间

python app.py

第二种是可以任意上传图片进行对话

python app_img.py

第三种是在第一种的基础上加入了大语言模型,加入了多轮的 GPT 对话

python app_multi.py


报错



(linlyenv) root@ST-202207261848:/mnt/e/work/Linly-Talker# python app_multi.py
Command 'python' not found, did you mean:
  command 'python3' from deb python3
  command 'python' from deb python-is-python3


ln -s /usr/bin/python3 /usr/bin/python


如报错多

在安装一遍、
pip install -r requirements_app.txt

pip3 install zhconv

pip3 install transformers

pip install -U google-generativeai

apt install ffmpeg

pip3 install ffmpeg-python opencv-python-headless

出现下面报错

While copying the parameter named "decoder.blocks.5.mlp.0.weight", whose dimensions in the model are torch.Size([2048, 512]) and whose dimensions in the checkpoint are torch.Size([2048, 512]), an exception occurred : ('CUDA error: no kernel image is available for execution on the device',).
        While copying the parameter named "decoder.blocks.5.mlp.2.weight", whose dimensions in the model are torch.Size([512, 2048]) and whose dimensions in the checkpoint are torch.Size([512, 2048]), an exception occurred : ('CUDA error: no kernel image is available for execution on the device',).   


在安装一次
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113


sadtalk报错

https://github.com/xinntao/facexlib/releases

在这里插入图片描述
最后运行成功

在这里插入图片描述

文件夹结构如下

权重部分可以从这下载:Baidu (百度云盘) (Password: linl)

Linly-Talker/ 
├── app.py
├── scripts
│   └── download_models.sh
├──	src
│   ├── audio2exp_models
│   ├── audio2pose_models
│   ├── config
│   ├── cost_time.py
│   ├── face3d
│   ├── facerender
│   ├── generate_batch.py
│   ├── generate_facerender_batch.py
│   ├── Record.py
│   ├── test_audio2coeff.py
│   └── utils
├── inputs
│   ├── example.png
│   └── first_frame_dir
│       ├── example_landmarks.txt
│       ├── example.mat
│       └── example.png
├── examples
│   └── source_image
│       ├── art_0.png
│       ├── ......
│       └── sad.png
├── TFG
│   ├── __init__.py
│   ├── Wav2Lip.py
│   └── SadTalker.py
└── TTS
│   ├── __init__.py
│   ├── EdgeTTS.py
│   └── TTS_app.py
├── ASR
│   ├── __init__.py
│   ├── FunASR.py
│   └── Whisper.py
├── LLM
│   ├── __init__.py
│   ├── Gemini.py
│   ├── Linly.py
│   └── Qwen.py
....... // 以下是需要下载的权重路径(可选)
├── checkpoints // SadTalker 权重路径
│   ├── mapping_00109-model.pth.tar
│   ├── mapping_00229-model.pth.tar
│   ├── SadTalker_V0.0.2_256.safetensors
│   └── SadTalker_V0.0.2_512.safetensors
│   ├── lipsync_expert.pth
│   ├── visual_quality_disc.pth
│   ├── wav2lip_gan.pth
│   └── wav2lip.pth // Wav2Lip 权重路径
├── gfpgan // GFPGAN 权重路径
│   └── weights
│       ├── alignment_WFLW_4HG.pth
│       └── detection_Resnet50_Final.pth
├── Linly-AI // Linly 权重路径
│   └── Chinese-LLaMA-2-7B-hf 
│       ├── config.json
│       ├── generation_config.json
│       ├── pytorch_model-00001-of-00002.bin
│       ├── pytorch_model-00002-of-00002.bin
│       ├── pytorch_model.bin.index.json
│       ├── README.md
│       ├── special_tokens_map.json
│       ├── tokenizer_config.json
│       └── tokenizer.model
├── Qwen // Qwen 权重路径
│   └── Qwen-1_8B-Chat
│       ├── cache_autogptq_cuda_256.cpp
│       ├── cache_autogptq_cuda_kernel_256.cu
│       ├── config.json
│       ├── configuration_qwen.py
│       ├── cpp_kernels.py
│       ├── examples
│       │   └── react_prompt.md
│       ├── generation_config.json
│       ├── LICENSE
│       ├── model-00001-of-00002.safetensors
│       ├── model-00002-of-00002.safetensors
│       ├── modeling_qwen.py
│       ├── model.safetensors.index.json
│       ├── NOTICE
│       ├── qwen_generation_utils.py
│       ├── qwen.tiktoken
│       ├── README.md
│       ├── tokenization_qwen.py
│       └── tokenizer_config.json`

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【HTML】1px边框与1px分割线

对比图 箭头标注的是处理过的 1px分割线 使用transform的scaleY进行缩小 码 <div class"mini-heriz"></div><br><div style"border: solid 1px black; width: 300px;height: 1px;"></div> <style> .mini-heriz {wi…

Linux编程4.2 网络编程-协议

1、为什么要有协议&#xff1f; 计算机网络中实现通信必须有一些约定&#xff0c;如对速率、传输代码、代码结构、传输控制步骤和出错控制等约定&#xff0c;这些约定即被称为通信协议。在两个节点之间要成功地进得通信&#xff0c;两个节点之间必须约定使用共同的“语言”&am…

MySQL用法---MySQL Workbench创建数据库和表

1. 连接数据库 打开软件&#xff0c;点击左下角卡片&#xff0c;输入设置的数据库密码&#xff0c;勾选单选框 2. 了解主页面的组成部分 3. 创建数据库 先点击工具栏的创建按钮 再输入数据库名称 点击 Apply 创建 4. 创建数据表 展开数据库&#xff0c;在Tables上右键&…

如何在WordPress网站上设置多语言展示

在今天的全球化世界中&#xff0c;拥有多语言网站对于吸引更广泛的受众至关重要。前不就我们遇到Hostease的客户咨询我们的在线客服&#xff0c;他想要对他的wordpress网站支持多语言。我们提供给客户可以尝试以下的插件来支持多语言。 在本教程中&#xff0c;我们将逐步介绍如…

cpp qt 一个奇怪的bug

今天在用cpp qt的时候发现了一个奇怪的东西 这是我的源代码 #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) {QPushButton * btn1 new QPushButton;btn1->show();btn1->setParent(this);btn1-&g…

冥想与AI:打造定制的放松体验

如今&#xff0c;在浏览网页或社交网络时&#xff0c;您似乎很难对一条条心理健康信息无动于衷。遇到这种情况的可不只是您。当今不断变化的时代给人们平添压力&#xff0c;企业纷纷利用智能技术满足人们的减压需求&#xff0c;让人们的生活多一些平和从容。 冥想就是一种练习呼…

低代码开发能否降低程序员门槛?技能需求分析与优势评估揭秘!

一&#xff0e;什么是低代码开发平台 低代码开发平台和零代码开发平台是近几年时兴的一种新的程序开发方法。该模式的特征是可以使用用户界面、拖拽操作等方式快速构建应用软件软件&#xff0c;从而减少开发者的学习标准&#xff0c;使每个人都能变成开发者。 但它仍然是基于…

别再写传统简历了!AI简历5个超实用的功能,助你求职一臂之力(强烈建议收藏)

你们在制作简历时,是不是基本只关注两件事:简历模板,还有基本信息的填写。 当你再次坐下来更新你的简历时,可能会发现自己不自觉地选择了那个“看起来最好看的模板”,填写基本信息,却没有深入思考如何使简历更具吸引力。这其实是一个普遍现象:许多求职者仍停留在传统简历…

在使用qml的qmldir文件创建常用组件报错unknow component

解决方法&#xff1a;Qt Creator中的工具-->QML/JS-->重置代码模型 参考博文:QML自定义模块及qmldir的使用_同一资源文件目录下的qml模块使用-CSDN博客 不一样的地方是我给我的文件起了别名 以及我的qrc文件路径有前缀/qml 总体操作&#xff1a; 1.使用模块中的组件时…

ChatGPT提问技巧:可解释的软提示

ChatGPT提问技巧&#xff1a;可解释的软提示 可解释的软提示是一种既能控制模型生成的文本&#xff0c;又能为模型提供一定灵活性的技术。 具体做法是为模型提供一组受控输入和一些有关所需输出的附加信息。这种技术可以使生成的文本更具可解释性和可控性。 提示示例及其公式…

Mysql 学习(十七)事务隔离级别和MVCC

前提准备 首先创建一个表&#xff1a; CREATE TABLE hero (number INT,name VARCHAR(100),country varchar(100),PRIMARY KEY (number) ) EngineInnoDB CHARSETutf8;INSERT INTO hero VALUES(1, 刘备, 蜀);事务隔离级别 mysql 是一个 客户端 和 服务器架构的软件&#xff0c…

【Linux操作系统】:Linux进程概念(2)

一、Z(zombie)-僵尸进程 1.僵尸进程概念 故事 张三每天都有跑步的习惯&#xff0c;这一天他和往常一样跑步&#xff0c;跑了两三圈&#xff0c;突然跑在它前面的一个人倒在地上不动了&#xff0c;作为热心市民张三赶紧报警并且拨打120。很快120就来了&#xff0c;但是没过几分…

C#、C++、Java、Python 选择哪个好?

作者&#xff1a;网博汇智 链接&#xff1a;https://www.zhihu.com/question/298323023/answer/2789627224 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 一个好的程序员不能把自己绑定在一种语言上&#xff0c;不…

摄像机内存卡删除的视频如何恢复?恢复指南来袭

在现代社会&#xff0c;摄像机已成为记录生活、工作和学习的重要设备。然而&#xff0c;随着使用频率的增加&#xff0c;误删或意外丢失视频的情况也时有发生。面对这样的情况&#xff0c;许多用户可能会感到无助和困惑。那么&#xff0c;摄像机内存卡删除的视频真的无法恢复吗…

X小蓝鸟,已破!支持批量下载且速度飞快

从马斯克把小蓝鸟改名之后&#xff0c;最大的感觉就是域名更好记了&#xff0c;对于软件爱好者来说&#xff0c;可以关注软件最新消息&#xff0c;许多软件开发者都是在上面更新动态。 本期给大家分享一款可以下载X上的图片/视频工具X-Spider&#xff0c;它的特点是开源免费&am…

愿原力与您同在:电影魔术背后的AI

在《星球大战》系列影视作品的经典配乐中&#xff0c;无论您喜欢《酒吧乐队》还是喜欢《帝国进行曲》&#xff0c;我们都想说“愿原力与您同在”。5月4日“星战日”是个非正式节日&#xff0c;旨在纪念《星球大战》系列影视作品留给我们的遗产及其对现代电影制作不可磨灭的影响…

使用webpack打包ts代码

通常情况下&#xff0c;实际开发中需要使用构建工具对代码进行打包&#xff0c;TS也可以结合构建工具进行使用&#xff0c;以webpack为例&#xff0c;介绍如何结合构建工具使用TS。 基本功能实现步骤&#xff1a; 项目初始化&#xff0c;生成package.json&#xff1a;npm ini…

汉诺塔问题代码写法的详细解析

汉诺塔游戏规则&#xff1a; 规则&#xff1a; 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着…

自动化运维工具 ---------------Ansible

一、Ansible 发展史及功能 作者&#xff1a;Michael DeHaan&#xff08; Cobbler pxe kikstar 与 Func 作者&#xff09;ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具&#xff0c;使用它可以在相距数光年的距离&#xff0c;远程实时控制前线的舰队战斗2…

Linux:好用的Linux指令

进程的Linux指令 1.查看进程信息 ​​​​ps ajx | head -1 && ps ajx | grep 进程名创建一个进程后输入上述代码&#xff0c;会打印进程信息&#xff0c;当我们在code.exe中写入打印pid&#xff0c;ppid&#xff0c;这里也和进程信息一致。 while :; do ps ajx | he…