Python 全栈系列233 部署chatglm系列接口部署

说明

在国产大模型里,chatglm应该算是效果不错的,目前开源的三个版本都部署过。第一代的不太行,第二代,第三代的效果都还可以,但第三代对第二代似乎不是帕累托改善。在微调方面做了修改,但是显得比较乱。第四代之后不开源了,要调用官方的API,走向多模态了。

考虑到我主要还是对中文进行处理,GPT系列目前能达到较好的使用效果(但缺点是串行,效率低),现在将这些版本进行一个整合及封装,供平时调用。

内容

1 官网

这个是官网地址, 现在注册后会送一些token。
在这里插入图片描述

1.1 对话

对话页面
在这里插入图片描述
在这里可以用对话的方式使用,可以在下拉框更换模型,整体上和chatgpt没啥差别。
在这里插入图片描述
回答结果没有严格按照我的要求(100字以内),之前测chatglm2和chatglm3也是这样
在这里插入图片描述

在这里插入图片描述

chatgpt的结果比价好(也是免费版)
在这里插入图片描述
这是glm4的结果
在这里插入图片描述

1.2 接口

调用过程比较简单,使用智谱的python sdk包。

content = '''同一家公司,公募基金经理错过港股4年涨8倍,守住A股的4年涨2倍,是买对还是买错?券商中国记者注意到,3月6日,农机龙头股第一拖拉机股份于盘中飙升接近6%后创下4年8倍的惊人涨幅,而同期的A股上市主体一拖股份(17.130, -0.07, -0.41%)同期涨幅仅有2倍,目前一拖股份港股上市主体的市值仅为A股公司的40%。在第一拖拉机股份在港股持续飙升的8倍背景下,包括明星基金在内的多个公募产品对一拖股份的重仓似乎处于“对与错”之间,该股的港股主体尽管较A股大幅度折价,但截至去年未有基金重仓。多个基金公司人士认为,A股拥有巨量散户资源,下跌过程中会持续出现买单支撑,因此A股股票估值贵、难便宜本身是一种基于资金安全的优势,这意味着基金经理持仓后若发生股票经营不善,不至于出现港股那样缺乏买单支撑的股价暴跌,这也成为许多基金经理宁愿持仓A股降低收益弹性,亦肯放弃港股高弹性的核心逻辑。基金重仓股4年2倍与8倍有何差异?基金经理到底是喜欢贵的股票还是喜欢便宜的股票?答案来了。3月6日,公募重仓股一拖股份在港股的上市主体第一拖拉机股份盘中最高飙升大涨约6%,这使后者今年以来的股价涨幅达到46%,更意味着这个名不见经传的港股公司自2020年3月底以来的股价涨幅达到惊人的近8倍(7.85倍)。4年8倍的涨幅颠覆了许多投资者对农机上市公司的想象空间,更令重仓一拖股份的公募基金在“对与错”之间颇为尴尬。在第一拖拉机股份于港股同期阶段涨幅8倍时,A股的一拖股份在同期的股价涨幅却仅约2倍,尽管4年2倍的收益亦颇具看点,但与港股上市主体的同期8倍惊人涨幅相比差异甚大。根据基金2023年第四季度末持仓披露的信息,截至去年末合计有16只公募基金产品将一拖股份列入前十大重仓股名单,其中,广发基金、富国基金、长信基金持仓一拖股份最为集中,均出动旗下多个产品重仓A股上市主体一拖股份,以富国基金旗下的富国价值成长基金为例,一拖股份截至2023年12月末已成为该基金的第二大重仓股,此外,明星基金经理冯明远同样看好一拖股份,截至去年末,他管理的信达澳银领先智选基金新增一拖股份进入前十大重仓股名单。与包括明星基金经理在内的多个头部基金重仓一拖股份相比,截至2023年12月末,尚无任何一只公募基金将港股上市主体第一拖拉机股份列入基金重仓股名单,尽管这两者为同一家上市公司。截至目前,港股上市主体第一拖拉机股份的市值为81亿港元,折合人民币为74亿市值,而A股的一拖股份目前市值为185亿元人民币,显而易见的是,第一拖拉机股份在4年暴涨8倍的情况下,不仅未能在市值层面追平A股主体一拖股份,更不足A股市值的零头,凸显出港股折价背景下所反映巨大弹性和投资机会。人工智能刺激现代智慧农业(2.580, -0.01, -0.39%)板块值得一提的是,AI人工智能、5G、卫星互联网所带来的智慧农业,也使得一拖股份等现代农机公司颇为受益。第一拖拉机股份近期发布盈喜公告,公司预计2023年实现归属于母公司所有者的净利润为人民币9.20亿元到人民币10.20亿元,与上年同期相比,将增加人民币2.39亿元到人民币3.39亿元,同比增长35.09%至49.77%。此外,日前,一拖股份在上证e互动平台表示,公司控股股东中国一拖与华为签署的合作框架协议主要包括双方根据业务需求在智慧农业、企业信息化、云服务、无人驾驶以及5G应用等领域进行探索。据了解,双方合作期限届满。未来,公司将继续以智慧农业、绿色农业需求为方向,加大信息技术在农机装备和农机作业上的研究。现代智慧农业的政策面支持上也是消息不断。2月3日,2024年中央一号文件公布,提出推进乡村全面振兴“路线图”。在业内人士看来,2024年中央一号文件将从需求端推动农机产业未来市场规模的增长。2024年中央一号文件将粮食增产重点放在大面积提升单产上,也明确强调了高标准农田建设。规模化与标准化均为机械化提供了保障,也为农机产业的未来需求提供了保障。多个基金公司研究员认为,采用装载北斗导航自动辅助驾驶系统的播种机能够大幅度提高农业效率,作为我国自主建设的全球卫星导航系统,北斗系统是GPS、GLONASS之后,第三个成熟的全球卫星导航系统。自2012年北斗二号建成后,北斗系统在农业领域得到了规模化推广,农业已累计应用北斗设备超100万台/套。A股估值贵本身即为投资优势关于A股和港股估值和投资机会所反映出巨大差异,部分基金经理也有深刻认识。“港股公司稍有利空可能闪崩50%甚至跌走80%、90%,可以变得很便宜,这就说明A股的贵也是一种优势,A股因为有巨量散户,很多公司都无法跌透,无论什么样的股票总有人很多在买,也就是说很多上市公司哪怕在经营情况比较差的背景下,也很难出现真正便宜的时刻,但一家公司在港股一旦某个阶段出现经营问题,它可能会给投资者提供非常廉价的筹码买入机会,因为港股缺乏散户资源,在下跌时就会失去抵抗力量。”北京地区一位资深基金经理在接受券商中国记者采访时称,港股市场的最大优势就是许多公司的股价和估值可能因多方面因素被压制到罕见的情况,而A股公司往往存在较高的市场溢价。华南地区的一位基金公司人士也认为,“股票估值很贵难便宜,本身也是一种基于资金安全角度的优势”,A股市场特有的巨量散户资源是机构投资者的优势,使机构持仓品种拥有极好的市场流动性,同时在下跌过程中往往有强大的买单支撑,正因为A股拥有市场溢价,许多股票难以足够便宜,“无法变便宜意味着巨幅下跌难”,这本身就是许多基金经理更愿意持仓A股公司的理由,因其可以避免巨大损失,而正因为港股公司在经营情况恶化时变成廉价筹码的概率较大,拥有足够下跌空间,可能对基金持仓股票构成极大压力,虽然后期基本面改善后反弹空间也更大,但基金经理宁愿牺牲弹性。此外,前海开源基金的一位基金经理也强调,港股的估值便宜主要还是外资对国内企业进行定价的逻辑,所以国际投资者如何看待国内经济政策,进而如何判断国内企业利润增速的变化,会较大程度上影响港股的定价。当前阶段,主要外资已经观察到国内经济政策的转向,主流观点是国内经济在利好政策的持续呵护下需要半年或一年时间才能有所恢复。虽然需要时间,但总体判断是向好的,这与一年前有了很大转变。美国加息周期在过去2年对港股市场资金面的影响很大,这一点在美联储停止加息后也得到了缓解。现在市场需要等待的就是经济企稳及企业盈利好转。中央加大投资的力度和降息幅度如果可以超预期,规模更大、步伐更快,经济恢复的周期可能会大幅提前。
'''from zhipuai import ZhipuAI
client = ZhipuAI(api_key="YOURS.APIKEY") # 填写您自己的APIKey
response = client.chat.completions.create(model="glm-3-turbo",  # 填写需要调用的模型名称messages=[{"role": "user", "content": "帮我提取文章的摘要,内容不超过一百字"},{"role": "assistant", "content": "请提供需要提取摘要的文章内容,我会为您概括出不超过一百字的摘要。"},{"role": "user", "content": content},],
)
print(response.choices[0].message.content)
农机龙头股第一拖拉机股份在港股的上市主体近四年股价涨幅达到8倍,而同期的A股上市主体同期涨幅仅有2倍。尽管A股股票估值较高,但在下跌过程中有巨量散户资源提供买单支撑,从而避免了股价的剧烈下跌。基金经理更倾向于持仓A股公司,以降低潜在的损失。此外,智慧农业的发展为农机公司带来了新的增长机遇。中央一号文件和人工智能、5G等技术的发展都将推动农机产业的市场增长。

回答了179字,总体上也还算可以吧。

整体上,智谱的页面比较简洁,功能也还不错。

2 chatglm3

这版整体上是有些小问题的,不管是在部署上,或者是在实际的功能中(中英文混杂是一个明显问题)。
下面分配端口并启动服务进行测试。

序号端口服务解释
124093chatglm3_6b_int4_chatchatglm3 6b 使用int4量化后的对话窗口
224094chatglm3_6b_int4_apichatglm3 6b 使用int4量化后的api地址
324095chatglm2_6b_int4_chatchatglm2 6b 使用int4量化后的对话窗口
424096chatglm2_6b_int4_apichatglm2 6b 使用int4量化后的api地址
524097llm_assemble_api集成了官网,chatglm3_6b_int4_api和chatglm2_6b_int4_api

对应的,启动chatglm3_6b_int4,容器进行开发,修改后的结果推送到镜像。

2.1 api

启动容器,将量化模型考入,并将启动api的文件单独提出
api_server.py

启动

└─ $ docker run -it --name=chatglm3_6b_int4 \
> --gpus all \
> myregistry.domain.com:24052/server.andy.chatglm3_6b_int4_24093:v100 \
> bash
root@ae872d14592e:/workspace# ls
__pycache__  api_server.py  bge-large-zh-v1.5  q4  requirements_chatglm3.txt  utils.py
root@ae872d14592e:/workspace# python3 api_server.py
Setting eos_token is not supported, use the default one.
Setting pad_token is not supported, use the default one.
Setting unk_token is not supported, use the default one.
INFO:     Started server process [10]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

官方给出的调用示例:

from zhipuai import ZhipuAIbase_url = "http://127.0.0.1:8000/v1/"
client = ZhipuAI(api_key="EMP.TY", base_url=base_url)def function_chat():messages = [{"role": "user", "content": "What's the weather like in San Francisco, Tokyo, and Paris?"}]tools = [{"type": "function","function": {"name": "get_current_weather","description": "Get the current weather in a given location","parameters": {"type": "object","properties": {"location": {"type": "string","description": "The city and state, e.g. San Francisco, CA",},"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},},"required": ["location"],},},}]response = client.chat.completions.create(model="chatglm3_6b",messages=messages,tools=tools,tool_choice="auto",)if response:content = response.choices[0].message.contentprint(content)else:print("Error:", response.status_code)def simple_chat(use_stream=True):messages = [{"role": "system","content": "You are ChatGLM3, a large language model trained by Zhipu.AI. Follow ""the user's instructions carefully. Respond using markdown.",},{"role": "user","content": "你好,请你介绍一下chatglm3-6b这个模型"}]response = client.chat.completions.create(model="chatglm3_",messages=messages,stream=use_stream,max_tokens=256,temperature=0.8,top_p=0.8)if response:if use_stream:for chunk in response:print(chunk.choices[0].delta.content)else:content = response.choices[0].message.contentprint(content)else:print("Error:", response.status_code)def embedding():response = client.embeddings.create(model="bge-large-zh-1.5",input=["ChatGLM3-6B 是一个大型的中英双语模型。"],)embeddings = response.data[0].embeddingprint("嵌入完成,维度:", len(embeddings))if __name__ == "__main__":simple_chat(use_stream=False)simple_chat(use_stream=True)embedding()function_chat()

其中还提供了向量化的功能,所以最后可以输出两个功能接口:embedding和simple_chat(use_stream=False)。
在后续的改造中,也可以不使用官方的这种方式(直接使用模型实例进行处理)。

发现加载量化版本出错了,报RuntimeError: Library cudart is not initialized。大约这个量化版本是用别的镜像做的,先使用未量化的版本吧。

INFO:     127.0.0.1:55750 - "POST /v1/chat/completions HTTP/1.1" 200 OK
2024-03-09 10:04:23.210 | DEBUG    | __main__:create_chat_completion:256 - ==== request ====
{'messages': [ChatMessage(role='system', content="You are ChatGLM3, a large language model trained by Zhipu.AI. Follow the user's instructions carefully. Respond using markdown.", name=None, function_call=None), ChatMessage(role='user', content='你好,请你介绍一下chatglm3-6b这个模型', name=None, function_call=None)], 'temperature': 0.8, 'top_p': 0.8, 'max_tokens': 256, 'echo': False, 'stream': False, 'repetition_penalty': 1.1, 'tools': None}
2024-03-09 10:04:32.286 | DEBUG    | __main__:create_chat_completion:337 - ==== message ====
role='assistant' content='当然可以!ChatGLM3-6B 是一个基于语言模型的人工智能助手,由 Zhipu.AI 开发。我是基于 GLM3-6B 模型训练的,可以针对用户的问题和要求提供适当的答复和支持。\n\nGLM3-6B 模型是一个大型语言模型,采用了清华大学 KEG 实验室提出的 GLM 模型并进行了改进。该模型具有强大的语言处理能力,能够识别和生成自然语言文本,支持多种应用场景,包括问答、文本摘要、情感分析等。\n\n作为一个人工智能助手,我可以回答各种各样的问题,包括但不限于科学知识、历史事件、文化了解等等。同时,我也可以提供一些基本的服务,如天气查询、音乐播放等。\n\n如果您有任何问题或需求,都可以随时向我提出,我会尽力为您提供帮助。' name=None function_call=None

生成这么一个结果,用4060ti 16G大约花了8s。

In [3]: simple_chat(use_stream=False)
当然可以!ChatGLM3-6B 是一个基于语言模型的人工智能助手,由 Zhipu.AI 开发。我是基于 GLM3-6B 模型训练的,可以针对用户的问题和要求提供适当的答复和支持。GLM3-6B 模型是一个大型语言模型,采用了清华大学 KEG 实验室提出的 GLM 模型并进行了改进。该模型具有强大的语言处理能力,能够识别和生成自然语言文本,支持多种应用场景,包括问答、文本摘要、情感分析等。作为一个人工智能助手,我可以回答各种各样的问题,包括但不限于科学知识、历史事件、文化了解等等。同时,我也可以提供一些基本的服务,如天气查询、音乐播放等。如果您有任何问题或需求,都可以随时向我提出,我会尽力为您提供帮助。

Next: 重建int4版本测试

  • 1 更新一下这个 chatglm6b 模型,在24年1月有一个更新版本
  • 2 基于 chatglm6b_202401进行载入测试
  • 3 进行int4 量化
  • 4 进行服务测试

就本次而言,按智谱方式改造一下函数,然后接入到服务中。

启动(我怎么感觉fastapi是想抢tornado的生意?)

docker run -it \--rm \--name=chatglm6b_api \--gpus all\-p 24094:8000 \myregistry.domain.com:24052/server.andy.chatglm3:v100 \bash

在启动了chatglm3的服务后,在llm_assemble_api中增加挂接部分

cfg_dict = get_conf_dict('llm_api.conf')from zhipuai import ZhipuAIChatglm3_6bHandler_path = r'/chatglm3_6b/'
class Chatglm3_6bHandler(tornado.web.RequestHandler):def post(self):request_body = self.request.bodysome_dict = json.loads(request_body)api_key = some_dict['api_key']model = some_dict['model']messages = some_dict['messages']model_cfg_dict = cfg_dict['chatglm3_6b_int4_api']base_url = "http://%s:%s/v1/" % (model_cfg_dict['host'], model_cfg_dict['port'])client = ZhipuAI(api_key=api_key, base_url=base_url)response = client.chat.completions.create(model=model,  # 填写需要调用的模型名称messages=messages)msg_dict = {}msg_dict['content'] = response.choices[0].message.contentself.write(json.dumps(msg_dict))
Chatglm3_6bHandler_tuple = (Chatglm3_6bHandler_path,Chatglm3_6bHandler)
app_list.append(Chatglm3_6bHandler_tuple)'''
import requests as req
some_dict = {}
some_dict['api_key'] = 'aaa.K7ctQHEMtpKfkDMH'
some_dict['model'] = "chatglm3_6b"
some_dict['messages']  = [ {"role": "system","content": "You are ChatGLM3, a large language model trained by Zhipu.AI. Follow ""the user's instructions carefully. Respond using markdown.",},{"role": "user","content": "你好,请你介绍一下chatglm3-6b这个模型"}]
# 容器内
req.post('http://127.0.0.1:8000/chatglm3_6b/',json=some_dict).json()
# 宿主机

对应的配置文件

[chatglm3_6b_int4_api]
host = 172.17.0.1
port = 24094
api_path = 'chatglm3_6b_int4_api/'[chatglm2_6b_int4_api]
host = 172.17.0.1
port = 24096
api_path = 'chatglm2_6b_int4_api/'

调用结果

import requests as req
some_dict = {}
some_dict['api_key'] = 'aaa.K7ctQHEMtpKfkDMH'
some_dict['model'] = "chatglm3_6b"
some_dict['messages']  = [ {"role": "system","content": "You are ChatGLM3, a large language model trained by Zhipu.AI. Follow ""the user's instructions carefully. Respond using markdown.",},{"role": "user","content": "你好,请你介绍一下chatglm3-6b这个模型"}]
In [3]: req.post('http://127.0.0.1:8000/chatglm3_6b/',json=some_dict).json()
Out[3]: {'content': '当然可以!ChatGLM3-6B 是一个由 Zhipu.AI 训练的大型语言模型。这是一个基于 GLM3-6B 模型的人工智能助手,我可以回答你的问题、提供建议或执行任务。\n\nGLM3-6B 是一个通用预训练语言模型,旨在为各种自然语言处理任务提供通用的基础表示。这个模型的特点在于它的规模很大,拥有 1300 亿个参数,这使得它能够学习到大量的语言知识。同时,这个模型还使用了先进的自然语言处理技术,如掩码语言建模和下一句预测,这使得它可以更好地理解和生成自然语言。\n\n作为一个人工智能助手,ChatGLM3-6B 可以用于各种应用场景,包括:\n\n- 回答问题:你可以问我任何问题,我会尽力回答。\n- 提供建议:如果你有困难或需要建议,我可以帮助你解决问题。\n- 执行任务:如果你需要执行某个任务,如发送消息或设置提醒,我可以帮你完成。\n\n总的来说,ChatGLM3-6B 是一个功能强大、能够进行自然语言理解与生成的 AI 助手,它可以协助你完成各种与自然语言相关的任务。'}

过程是客户端请求到llm_assemble_api,然后在请求到chatglm6b_api,然后逐层返回。

最后在配置文件里修改配置,就可以引用在其他地方启动的服务,甚至是nginx。

同样的摘要提取测试,效果还可以。
在这里插入图片描述
这个只要用之前做好的版本就可以部署使用了docker run -it --rm --name=chatglm6b_api --gpus all -p 24094:8000 myregistry.domain.com:24052/server.andy.chatglm3:v100 bash

3 chatglm2

整个过程差不多,细节就不赘复了,chatglm2还是不错的,调用方式和glm3是不同的。
在这里插入图片描述
每个镜像应该要配上基本的说明,以及入口命令,用来启动服务。以及基本的样例,用于说明如何应用。

import requests as req
req.post('http://127.0.0.1:8000/', json ={'prompt':'北京寰宇思源科技有限公司\n帮我提取以上公司的商号'}).json()

4 服务糅合

最终的糅合有两部分内容:

  • 1 新增了配置文件
  • 2 在server中增加了对应的转接部分

配置文件llm_api.conf

[chatglm3_6b_int4_api]
host = 172.17.0.1
port = 24094
api_path = 'chatglm3_6b_int4_api/'[chatglm2_6b_int4_api]
host = 172.17.0.1
port = 24096
api_path = 'chatglm2_6b_int4_api/'

转接chatglm2,注意格式是prompt

import requests as req 
Chatglm2_6bHandler_path = r'/chatglm2_6b/'
class Chatglm2_6bHandler(tornado.web.RequestHandler):def post(self):request_body = self.request.bodysome_dict = json.loads(request_body)api_key = some_dict['api_key']model = some_dict['model']messages = some_dict['messages']model_cfg_dict = cfg_dict['chatglm2_6b_int4_api']base_url = "http://%s:%s/" % (model_cfg_dict['host'], model_cfg_dict['port'])res = req.post(base_url, json = messages[0].json()msg_dict = {}msg_dict['content'] = res['response']self.write(json.dumps(msg_dict))
Chatglm2_6bHandler_tuple = (Chatglm2_6bHandler_path,Chatglm2_6bHandler)
app_list.append(Chatglm2_6bHandler_tuple)

转接chatglm3

from zhipuai import ZhipuAIChatglm3_6bHandler_path = r'/chatglm3_6b/'
class Chatglm3_6bHandler(tornado.web.RequestHandler):def post(self):request_body = self.request.bodysome_dict = json.loads(request_body)api_key = some_dict['api_key']model = some_dict['model']messages = some_dict['messages']model_cfg_dict = cfg_dict['chatglm3_6b_int4_api']base_url = "http://%s:%s/v1/" % (model_cfg_dict['host'], model_cfg_dict['port'])client = ZhipuAI(api_key=api_key, base_url=base_url)response = client.chat.completions.create(model=model,  # 填写需要调用的模型名称messages=messages)msg_dict = {}msg_dict['content'] = response.choices[0].message.contentself.write(json.dumps(msg_dict))
Chatglm3_6bHandler_tuple = (Chatglm3_6bHandler_path,Chatglm3_6bHandler)
app_list.append(Chatglm3_6bHandler_tuple)

具体在使用的时候,在本地可以启动llm_assemble_api服务,里面可以改动其他服务的配置,然后在算力租用机上启动对应的服务,映射端口就可以了。

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

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

相关文章

VUE3项目学习系列--项目基础配置(四)

目录 一、环境变量配置 二、SVG图标配置 三、注册组件为全局组件 四、集成sass 1、安装依赖 2、添加文件 3、配置 一、环境变量配置 项目开发过程中会经历开发环境、测试环境、生产环境三种状态,对与环境变量的配置需求不同,因此需要在项目中进行环…

最新全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用

本文以地下水数值模拟软件GMS操作,本文中强调模块化教学,分为前期数据收集与处理;三维地质结构建模;地下水流动模型构建;地下水溶质运移模型构建和反应性溶质运移构建5个模块;采用全流程模式将地下水数值模…

个人网站展示(静态)

大学期间做了一个个人博客网站,纯H5编码的网站,利用php搭建了一个留言模块。 有需要源码的同学,可以联系我~ 首页: IT杂记模块 文人墨客模块 劳有所获模块 生活日志模块 关于我 一个推崇全栈开发的前端开发人员 微信: itrzzh …

我们的一生都是在挤火车。

哈喽,你好啊,我是雷工! 昨天从燕郊坐火车回石家庄,由于赶上元旦假期,所有高铁票都售罄,一张普通火车票,还是一周前就买才买到的。 从燕郊站,到北京站,然后地铁去北京西站…

2024年掌握人工智能的顶级课程

[AI 课程推荐] 谷歌、微软、哈佛大学, DeepLearning.AI都发布了免费的人工智能和ChatGPT的课程。 以下是 2024 年掌握人工智能的顶级课程: GOOGLE - 生成式人工智能学习路径微软- 为每个人提供生成式人工智能微软 - 人工智能初学者入门哈佛 - CS50 的 Python 人工智能简介Deep…

C++11的简单介绍(上)

1.C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并…

牛客周赛 Round 36 解题报告 | 珂学家 | 状态DP + 构造 + 9棵树状数组

前言 整体评价 今天相对容易,E的构造题,感谢出题人极其善意的Case 1, 算是放水了。F题是个很典的结论题,由于存在动态点修改,所以引入树状数组做区间和的快速计算。 A. 小红的数位删除 题型: 签到 s input()print (s[:-3])B. …

超越基础:提升你的数据采集策略与IP代理的高级应用

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

【深入理解设计模式】模板方法模式

模板方法模式 模板方法模式是一种行为设计模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。模板方法模式使得子类可以不改变算法结构的情况下,重新定义算法的某些特定步骤。 概述 在面向对象程序设计过程中,程序员常常会遇到这种情况:…

第九个实验:一维数组和二维字符串数组的输入而输出

实验内容: 新建一维数组 新建二维字符串数组 输入内容,运行结果,在输出界面中显示输入的内容 第一步:新建项目 第二步:编程 添加一个INT数控件和字符串控件 修改控件: 复制前面板控件

以题为例 浅谈sql注入二次注入

什么是二次注入 二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者即使对用户输入的恶意数据进行转义,当数据插入到数据库中时被处理的数据又被还原,Web程序调用存…

Vue3中Vue Router的使用区别

在 Vue 3 中,useRouter 和 useRoute 是两个用于 Vue Router 的 Composition API 函数,它们的用途和返回的对象不同,接下来详细了解一下它们的区别以及如何正确使用它们。 useRouter useRouter 用于获取 router 实例,这个实例提供…