ChatGLM-6B详细学习实践记录与资料分享

随着年初chatGPT产品的退出和迭代发展,凭借一己之力将大模型带火,国产很多厂商后续也陆续跟进开始投入研发属于自己的大模型产品,在这段时间里面陆陆续续出来了很多不同的产品,比如:文心一言、星火大模型、通义千问、商量、360智脑、MOSS等等,这些大都是排队申请注册,迟迟等不到体验通过的结果,在开源层面比较能打的基本就是清华大学开源的chatGLM产品了,目前已经经过数个版本的迭代开发了,因为实际项目的需要,我也陆续接触了这个开源项目,本文并不是要去深入剖析,我也没有那个能力,毕竟本身并不是主要做大模型和NLP这个方向的,这里主要的目的就是详细记录自己学习过程中的学习资料已经问题等等, 会持续更新,也欢迎有同道的朋友补充。

ChatGLM-6B官方项目地址在这里,截图如下所示:

 目前已经有超过3w的star量了。

就官方介绍说明可知chatGLM-6B是一个开源双语对话语言模型,支持中文和英文。

ChatGLM-6B大模型是基于清华大学开源的GLM (General Language Model)项目开发构建的,GLM架构官方项目地址在这里,截图如下所示:

 如果想要进一步学习了解GLM架构详情,可以详细研读论文《GLM: General Language Model Pretraining with Autoregressive Blank Infilling》如下所示:

 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

官方也有相应的介绍博客,地址在这里,如下所示:

 对话机器人 ChatGLM(alpha内测版:QAGLM)地址在这里,如下所示:

 2022年11月,斯坦福大学大模型中心对全球30个主流大模型进行了全方位的评测2,GLM-130B 是亚洲唯一入选的大模型。在与 OpenAI、谷歌大脑、微软、英伟达、脸书的各大模型对比中,评测报告显示 GLM-130B 在准确性和恶意性指标上与 GPT-3 175B (davinci) 接近或持平,鲁棒性和校准误差在所有千亿规模的基座大模型(作为公平对比,只对比无指令提示微调模型)中表现不错(下图)。

 关于 GLM-130B 的学术文章已被国际深度学习会议 ICLR'23 接收。自2022年8月开放以来,收到53个国家369个研究机构(截至2023年2月1日)的下载使用需求,包括谷歌、微软、脸书、AI2、华为、阿里巴巴、百度、腾讯、头条、小冰、小度、小米以及斯坦福、麻省理工、伯克利、卡耐基梅隆、哈佛、剑桥、牛津、北大、浙大、上交、复旦、中科大、国科大等国内外人工智能研究机构和高校。

 为了方便下游开发者针对自己的应用场景定制模型,官方同时实现了基于 P-Tuning v2 的高效参数微调方法 (使用指南) ,INT4 量化级别下最低只需 7GB 显存即可启动微调。

P-tuning-v2官方项目地址在这里,如下所示:

 如果想要基于 P-Tuning v2 的高效参数微调方法来微调开发构建自己的大模型,不需要单独下载 P-Tuning v2 项目,在chatGLM-6B项目中就包含了所需要的微调项目代码了。

如果想要很详细的微调开发大模型教程的话可以参考这里,如下所示:

 官方提供了直接可用的广告生成语料数据集,在最初体验学习阶段可以直接使用这个数据集即可,下载地址在这里,如下所示:

 官方项目中提供了train.bat和train.sh支持window下和linux下自由选择使用进行微调训练开发大模型。

训练完成的模型实例推理样例如下所示:

示例1
Input: 类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞
Label: 简约而不简单的牛仔外套,白色的衣身十分百搭。衣身多处有做旧破洞设计,打破单调乏味,增加一丝造型看点。衣身后背处有趣味刺绣装饰,丰富层次感,彰显别样时尚。
Output[微调前]: 这件上衣的材质是牛仔布,颜色是白色,风格是简约,图案是刺绣,衣样式是外套,衣款式是破洞。
Output[微调后]: 这是一款简约的牛仔外套,破洞设计,将牛仔布破洞,带来一种随意与个性。破洞的牛仔外套,展现出时尚气息,带来一种休闲感。同时,刺绣图案,让整件外套更加立体。
示例2
Input: 类型#裙*版型#显瘦*风格#文艺*风格#简约*图案#印花*图案#撞色*裙下摆#压褶*裙长#连衣裙*裙领型#圆领
Label: 文艺个性的印花连衣裙,藏青色底蕴,低调又大气,撞色太阳花分布整个裙身,绚丽而美好,带来时尚减龄的气质。基础款的舒适圆领,简约不失大方,勾勒精致脸庞。领后是一粒包布扣固定,穿脱十分方便。前片立体的打褶设计,搭配后片压褶的做工,增添层次和空间感,显瘦又有型。
Output[微调前]: 类型#裙版型#显瘦风格#文艺风格#简约图案#印花图案#撞色裙下摆#压褶裙长#连衣裙裙领型#圆领 1. 连衣裙:简约风格,裙长为膝盖以上,裙领型为圆领。2. 裙下摆:压褶设计,使裙摆呈现出流畅的褶皱效果。3. 裙领型:裙领型为圆领,使穿上连衣裙后更加有型。4. 版型:采用显瘦设计,让连衣裙看起来更加苗条。5. 风格:文艺风格,让连衣裙更加有内涵和品味。6. 图案:印花设计,在连衣裙上印有独特的图案。7. 撞色:采用撞色设计,让连衣裙在色彩上更加鲜明、富有层次感。
Output[微调后]: 这是一款文艺范的连衣裙,以印花为元素,采用简约的印花,既能够突出文艺气质,又能够展现简约风。在印花的同时又有领子和裙摆的压褶设计,更加凸显文艺气质。简约而不会过于单调,搭配出街,穿着十分舒适。

评估对比结果如下所示:

 可以看到:在小参数量微调计算对比下P-tuning v2方法要优于LORA方法。

详细实验参数对比如下:

max_source_length=64
max_target_length=64
max_steps=3000
【P-tuning v2】
pre_seq_len=128
learning_rate=2e-2
quantization_bit=4
per_device_train_batch_size=16
gradient_accumulation_steps=1
【Finetune】
learning_rate=1e-4
fp16
num_gpus=4
per_device_train_batch_size=4
gradient_accumulation_steps=1
【LoRA】实现采用的是 simple_thu_chatglm6b
learning_rate=5e-4
per_device_train_batch_size=16
gradient_accumulation_steps=1

微调后的模型实例部署推理使用代码实现如下所示:

首先载入Tokenizer:
from transformers import AutoConfig, AutoModel, AutoTokenizer
# 载入Tokenizer
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
如果需要加载的是新 Checkpoint(只包含 PrefixEncoder 参数):
config = AutoConfig.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True, pre_seq_len=128)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", config=config, trust_remote_code=True)
prefix_state_dict = torch.load(os.path.join(CHECKPOINT_PATH, "pytorch_model.bin"))
new_prefix_state_dict = {}
for k, v in prefix_state_dict.items():if k.startswith("transformer.prefix_encoder."):new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
注意你可能需要将 pre_seq_len 改成你训练时的实际值。如果你是从本地加载模型的话,需要将 THUDM/chatglm-6b 改成本地的模型路径(注意不是checkpoint路径)。
如果需要加载的是旧 Checkpoint(包含 ChatGLM-6B 以及 PrefixEncoder 参数),或者进行的是全参数微调,则直接加载整个 Checkpoint:
model = AutoModel.from_pretrained(CHECKPOINT_PATH, trust_remote_code=True)
之后根据需求可以进行量化,也可以直接使用:
# Comment out the following line if you don't use quantization
model = model.quantize(4)
model = model.half().cuda()
model.transformer.prefix_encoder.float()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print("response: ", response)

可以看到:模型的加载使用还是很简单的,基于统一框架开发的模型好处就是这样。

当然了除了使用官方提供的广告生成语料数据集也是可以使用多轮对话语料数据集的,这里简单给出实例,如下所示:

{"prompt": "长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "response": "用电脑能读数据流吗?水温多少", "history": []}
{"prompt": "95", "response": "上下水管温差怎么样啊?空气是不是都排干净了呢?", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"]]}
{"prompt": "是的。上下水管都好的", "response": "那就要检查线路了,一般风扇继电器是由电脑控制吸合的,如果电路存在断路,或者电脑坏了的话会出现继电器不吸合的情况!", "history": [["长城h3风扇不转。继电器好的。保险丝好的传感器新的风扇也新的这是为什么。就是继电器缺一个信号线", "用电脑能读数据流吗?水温多少"], ["95", "上下水管温差怎么样啊?空气是不是都排干净了呢?"]]}

训练时需要指定 --history_column 为数据中聊天历史的 key(在此例子中是 history),将自动把聊天历史拼接。要注意超过输入长度 max_source_length 的内容会被截断。

ChatGLM-6B 和相关应用在线训练的示例项目《chatGLM-6B的部署与微调开发详细教程》、《ChatGLM-6B 结合 langchain 实现本地知识库 QA Bot》

第三方评测结果详情地址在这里,如下所示:

 对 ChatGLM 进行加速或者重新实现的开源项目:

  • SwissArmyTransformer:一个Transformer统一编程框架,ChatGLM-6B已经在SAT中进行实现并可以进行P-tuning微调。
  • ChatGLM-MNN:一个基于 MNN 的 ChatGLM-6B C++ 推理实现,支持根据显存大小自动分配计算任务给 GPU 和 CPU
  • JittorLLMs:最低3G显存或者没有显卡都可运行 ChatGLM-6B FP16, 支持Linux、windows、Mac部署

基于或使用了 ChatGLM-6B 的开源项目:

  • chatgpt_academic:支持ChatGLM-6B的学术写作与编程工具箱,具有模块化和多线程调用LLM的特点,可并行调用多种LLM。
  • 闻达:大型语言模型调用平台,基于 ChatGLM-6B 实现了类 ChatPDF 功能
  • glm-bot:将ChatGLM接入Koishi可在各大聊天平台上调用ChatGLM
  • Chinese-LangChain:中文langchain项目,基于ChatGLM-6b+langchain实现本地化知识库检索与智能答案生成,增加web search功能、知识库选择功能和支持知识增量更新
  • bibliothecarius:快速构建服务以集成您的本地数据和AI模型,支持ChatGLM等本地化模型接入。
  • langchain-ChatGLM:基于 langchain 的 ChatGLM 应用,实现基于可扩展知识库的问答
  • ChatGLM-web:基于FastAPI和Vue3搭建的ChatGLM演示网站(支持chatglm流式输出、前端调整模型参数、上下文选择、保存图片、知识库问答等功能)
  • ChatGLM-6B-Engineering:基于 ChatGLM-6B 后期调教,网络爬虫及 Stable Diffusion 实现的网络搜索及图片生成
  • ChatGLM-OpenAI-API:将 ChatGLM-6B 封装为 OpenAI API 风格,并通过 ngrok/cloudflare 对外提供服务,从而将 ChatGLM 快速集成到 OpenAI 的各种生态中。

对 ChatGLM-6B 进行微调的开源项目:

  • InstructGLM:基于ChatGLM-6B进行指令学习,汇总开源中英文指令数据,基于Lora进行指令数据微调,开放了Alpaca、Belle微调后的Lora权重,修复web_demo重复问题
  • ChatGLM-Efficient-Tuning:基于ChatGLM-6B模型进行定制化微调,汇总10余种指令数据集和3种微调方案,实现了4/8比特量化和模型权重融合,提供微调模型快速部署方法。
  • ChatGLM-Finetuning:基于ChatGLM-6B模型,进行下游具体任务微调,涉及Freeze、Lora、P-tuning等,并进行实验效果对比。
  • ChatGLM-Tuning:基于 LoRA 对 ChatGLM-6B 进行微调。类似的项目还包括 Humanable ChatGLM/GPT Fine-tuning | ChatGLM 微调

针对 ChatGLM-6B 的教程/文档:

  • Windows部署文档
  • 搭建深度学习docker容器以运行 ChatGLM-6B - Luck_zy

 chatGLM-6B官方项目提供了三种可供调用的方式如下所示:

 分别是:API接口形式调用、终端命令行交互调用以及web页面端调用,为了直观使用方便这里一般都会选择web页面端调用这种形式,web页面服务是基于Gradio框架开发实现,官方提供的实现详情如下所示:

from transformers import AutoModel, AutoTokenizer
import gradio as gr
import mdtex2htmltokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()"""Override Chatbot.postprocess"""def postprocess(self, y):if y is None:return []for i, (message, response) in enumerate(y):y[i] = (None if message is None else mdtex2html.convert((message)),None if response is None else mdtex2html.convert(response),)return ygr.Chatbot.postprocess = postprocessdef parse_text(text):"""copy from https://github.com/GaiZhenbiao/ChuanhuChatGPT/"""lines = text.split("\n")lines = [line for line in lines if line != ""]count = 0for i, line in enumerate(lines):if "```" in line:count += 1items = line.split('`')if count % 2 == 1:lines[i] = f'<pre><code class="language-{items[-1]}">'else:lines[i] = f'<br></code></pre>'else:if i > 0:if count % 2 == 1:line = line.replace("`", "\`")line = line.replace("<", "&lt;")line = line.replace(">", "&gt;")line = line.replace(" ", "&nbsp;")line = line.replace("*", "&ast;")line = line.replace("_", "&lowbar;")line = line.replace("-", "&#45;")line = line.replace(".", "&#46;")line = line.replace("!", "&#33;")line = line.replace("(", "&#40;")line = line.replace(")", "&#41;")line = line.replace("$", "&#36;")lines[i] = "<br>"+linetext = "".join(lines)return textdef predict(input, chatbot, max_length, top_p, temperature, history):chatbot.append((parse_text(input), ""))for response, history in model.stream_chat(tokenizer, input, history, max_length=max_length, top_p=top_p,temperature=temperature):chatbot[-1] = (parse_text(input), parse_text(response))       yield chatbot, historydef reset_user_input():return gr.update(value='')def reset_state():return [], []with gr.Blocks() as demo:gr.HTML("""<h1 align="center">ChatGLM</h1>""")chatbot = gr.Chatbot()with gr.Row():with gr.Column(scale=4):with gr.Column(scale=12):user_input = gr.Textbox(show_label=False, placeholder="Input...", lines=10).style(container=False)with gr.Column(min_width=32, scale=1):submitBtn = gr.Button("Submit", variant="primary")with gr.Column(scale=1):emptyBtn = gr.Button("Clear History")max_length = gr.Slider(0, 4096, value=2048, step=1.0, label="Maximum length", interactive=True)top_p = gr.Slider(0, 1, value=0.7, step=0.01, label="Top P", interactive=True)temperature = gr.Slider(0, 1, value=0.95, step=0.01, label="Temperature", interactive=True)history = gr.State([])submitBtn.click(predict, [user_input, chatbot, max_length, top_p, temperature, history], [chatbot, history],show_progress=True)submitBtn.click(reset_user_input, [], [user_input])emptyBtn.click(reset_state, outputs=[chatbot, history], show_progress=True)demo.queue().launch(share=False, inbrowser=True)

如果想要生成公网都可以访问的链接的话可以把最后一行代码修改如下:

demo.queue().launch(share=True, inbrowser=True)

默认启动项目会自动从线上远程下载模型文件,但是20GB左右的体积加上网络各种魔法等问题,大概率是无法正常启动的,所以最合理的方式就是自己先提前下载下载所有的模型文件然后再修改模型加载方式为本地文件加载读取,之后就可以顺利启动了。

官方可以下载的模型文件地址在这里,如下所示:

 所有模型文件如下所示:

 下载好存储到本地指定目录chatglm-6b即可,代码修改如下:

from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()
response, history = model.chat(tokenizer, "你好", history=[])
print(response)
你好👋!我是人工智能助手 ChatGLM-6B,很高兴见到你,欢迎问我任何问题。
response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history)
print(response)
晚上睡不着可能会让你感到焦虑或不舒服,但以下是一些可以帮助你入睡的方法:1. 制定规律的睡眠时间表:保持规律的睡眠时间表可以帮助你建立健康的睡眠习惯,使你更容易入睡。尽量在每天的相同时间上床,并在同一时间起床。
2. 创造一个舒适的睡眠环境:确保睡眠环境舒适,安静,黑暗且温度适宜。可以使用舒适的床上用品,并保持房间通风。
3. 放松身心:在睡前做些放松的活动,例如泡个热水澡,听些轻柔的音乐,阅读一些有趣的书籍等,有助于缓解紧张和焦虑,使你更容易入睡。
4. 避免饮用含有咖啡因的饮料:咖啡因是一种刺激性物质,会影响你的睡眠质量。尽量避免在睡前饮用含有咖啡因的饮料,例如咖啡,茶和可乐。
5. 避免在床上做与睡眠无关的事情:在床上做些与睡眠无关的事情,例如看电影,玩游戏或工作等,可能会干扰你的睡眠。
6. 尝试呼吸技巧:深呼吸是一种放松技巧,可以帮助你缓解紧张和焦虑,使你更容易入睡。试着慢慢吸气,保持几秒钟,然后缓慢呼气。如果这些方法无法帮助你入睡,你可以考虑咨询医生或睡眠专家,寻求进一步的建议。

如果访问不了上面的链接也可以选择从清华大学提供的云盘服务中进行下载,地址在这里,如下所示:

 下载的时候切记不要一次性全部勾选为了省事一次性下载,这样清华云会报错文件过大无法下载的,还是得一个一个去下载才可以的。

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

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

相关文章

RISC-V给异构计算带来新活力

来源: EEWORLD ChatGPT的火热&#xff0c;持续催生着包括人工智能、大数据等应用的火热。在不断兴起的新应用的背后&#xff0c;需要更复杂的计算方式&#xff0c;而异构计算概念也因此诞生。将不同的计算任务进行分解&#xff0c;利用包括GPU、CPU、NPU等不同的架构及指令集处…

chatgpt赋能python:Python字符串截断-解决方式及实现方法

Python字符串截断-解决方式及实现方法 在Python编程中&#xff0c;处理字符串是一个非常常见的任务。其中&#xff0c;字符串截断也是在许多场景下必不可少的功能之一。Python不仅提供了许多内置函数来处理字符串&#xff0c;而且还有许多方法来截断字符串。 什么是字符串截断…

《知识变现》

为什么你的知识不能变现&#xff1f; 博客中添加了书写人生一个栏目,回顾过去曾经读过的好书,以及自己的感悟. 今天推举的一本书是来自萧秋水/剽悍一只猫(笔名) 联合写的. 一看标题, 该书是如何将教人走上自由职业知识变现的道路. 如何成为一个斜杠青年. 作者背景 萧秋水: …

给软件测试加满ChatGPT Buff

各位测试小伙伴大家好呀~自从ChatGPT问世&#xff0c;有关它的讨论可谓是铺天盖地&#xff0c;国内的类GPT大模型如文心一言、通义千问等也开始内测&#xff0c;AI俨然成为了热门话题。 根据现在的新闻报道&#xff0c;ChatGPT 4已经可以自己写代码&#xff0c;甚至比得上谷歌…

思腾合力「IW2211-4GR/2GR」专业双路机架式服务器

随着5G时代到来&#xff0c;数字技术与实体经济相融合&#xff0c;人工智能技术迅速发展。 伴随大数据时代的到来&#xff0c;实时、大量、多来源的数据纷纷涌现。云计算通过将大数据挖掘的海量数据进行存储和计算&#xff0c;让数据发挥最大的作用。 大数据和云计算为人工智能…

海思hi3531d音频外接codec (tlv320aic32x4)

前言 为了在海思平台上使用tlv320aic3254&#xff0c;花了大概2个星期研究海思音频部分的手册、3254的用户手册&#xff0c;最终参考tlv320aic31的代码&#xff0c;实现了3254的驱动&#xff0c;同时在mpp的sample中&#xff0c;增加了3254对应的宏&#xff0c;以及相应的初始…

Python监控股价并通过微信提醒

01 Python监控股价并通过微信提醒 炒股盯盘太累&#xff0c;能在设置的买卖点进行智能提醒吗&#xff1f; 没错&#xff0c;python可以帮你实现&#xff1a;通过python编程实现股价实时监控&#xff0c;并在买卖点通过微信发送信息自动提醒&#xff01; 今天&#xff0c;梅朵…

海思烧录工具Hitool使用方法

海思有自己一套独立的烧写工具具Hitool.exe&#xff0c;这是优于国内其他芯片厂家的地方&#xff0c;不会在烧录问题上&#xff0c;耽误您太多时间。 海思的SDK文档放置的很规整&#xff0c;目录清晰&#xff0c;但是对于新手&#xff0c;感觉文档放置路径过深&#xff0c;不好…

海思HI35xx语音识别方案

前言 语音识别是智能化应用的一个重要分支&#xff0c;也是语音交互功能的基础。语音识别基于神经网络算法&#xff0c;借助大数据进行模型训练&#xff0c;据科大讯飞相关数据报道&#xff0c;它们已经能够实现98%以上的准确识别率&#xff0c;同时支持多种外语及国内的一些方…

海思Hi3798MV200机顶盒芯片处理器简介

Hi3798MV200是用于IPTV/OTT机顶盒市场的支持4KP60解码的全4K高性能SOC芯片。集成4核64位高性能Cortex A53处理器和多核高性能2D/3D加速引擎&#xff1b;支持H.265 4Kx2KP60 10bit超高清视频解码&#xff0c;高性能的H.265高清视频编码&#xff0c;HDR视频解码及显示&#xff0c…

TTS语音播报模块UNV6288的使用方法

TTS即text to sound&#xff0c; 输入字符它可以帮你转化为语音输出。 UNV6288可以实现中文、英文、数字的语音合成。用户也可以定义语音大小速度等参数。 这个模块的控制方式很简单&#xff0c;只要通过 TTL 串口向模块发送GBK编码&#xff0c;串口发送什么就播放什么。 另…

基于STM32 + SYN6288语音播报

完整代码下载 https://download.csdn.net/download/zhouml_msn/85592868 一、接线示例&#xff1a; 二、模块重点&#xff1a; 1&#xff1a;5V供电 &#xff0c;功耗约120mA (带图中小喇叭)&#xff1b; 2&#xff1a;最少接3根线&#xff1a;5V, GND, RXD&#xff0c;TXD…

5.32 综合案例2.0 - TTS语音云播报(支持M320开发板)

HaaS506 - TTS语音云播报 简介准备硬件接口代码流程功能实现1、物联网平台开发2、设备端开发代码调试 3.应用平台开发3.1新建‘普通项目’3.2关联产品和设备3.3新建移动应用 简介 用python开发板写的云喇叭&#xff0c;文字转语音&#xff0c;附教程源码 手机端发送文字&#x…

深圳知名语音ic品牌,语音芯片方案公司,多功能语音芯片,WTV890

随着人工智能技术的不断发展&#xff0c;语音交互已成为智能家居、智能医疗、消费类电子等领域的主流趋势。WTV890作为深圳知名的语音IC品牌&#xff0c;凭借着卓越的性能、丰富的扩展功能和灵活的应用&#xff0c;已成为众多需要语音交互的智能设备的首选方案。 WTV890-32N 有…

chatgpt赋能python:用Python生成动画:带你深入了解Python动画生成技术

用Python生成动画&#xff1a;带你深入了解Python动画生成技术 Python作为一门高效的编程语言&#xff0c;已经被广泛应用于各个领域&#xff0c;包括数据分析、机器学习、自动化测试等。除此之外&#xff0c;Python还可以用于生成动画&#xff0c;帮助我们更直观地理解一些复…

银联AID

应用标识 application identifier&#xff1b;AID 由注册的应用提供商标识&#xff08;RID&#xff09;以及专用应用标识符扩展&#xff08;PIX&#xff09;组成 AID:即唯一标识一个应用&#xff0c;分为两部分&#xff0c;RID(5字节)PIX&#xff08;最多11字节&#xff09; …

信用卡的支付清算

一、分享背景 Hi 大家好&#xff0c;我今天给大家分享是信用卡清算方面的内容&#xff0c;今天的分享主要分四块来讲&#xff1a; 定价模式 业务流程 清算流程 常见问题 二、分享内容 1、定价模式 首先给大家分享一下关于信用卡定价方面的内容&#xff0c;信用卡的定价…

金融支付-银联卡支付系统产品介绍

一、系统概述 银联卡支付业务是中国现代化支付方式中最重要的一种&#xff0c;村镇银行作为金融支付机构&#xff0c;银联卡支付业务在其日常经营活动中&#xff0c;占有很大的比重。金电银联卡支付系统正是着眼于村镇银行业务需求&#xff0c;结合村镇银行业务特点&#xff0c…

SpringBoot使用银联支付

目录 前言 一、银联支付java sdk 二、官方DEMO 三、springboot项目使用银联支付 3.1、新建项目 3.2、配置 3.3、封装客户端 写在后面 前言 项目里使用了微信支付&#xff0c;支付宝支付。但是还不满足&#xff01;我们还需要银联支付&#xff01;&#xff01;那就去看…

银联银行卡卡号java_编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类...

编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类 编写Java程序,使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位的数字,卡号以“62”开头,如图所示。 使用单例模式,创建可以生成银联借记卡号的工具类,银联借记卡号是一个 19 位…