创新实训2024.05.28日志:记忆化机制、基于MTPE与CoT技术的混合LLM对话机制

news2024/11/17 15:38:55

1. 带有记忆的会话

1.1. 查询会话历史记录

在利用大模型自身能力进行对话与解答时,最好对用户当前会话的历史记录进行还原,大模型能够更好地联系上下文进行解答。

在langchain chat chat的chat函数中,通过实现langchain框架提供的ChatMemory。就可以建立一个对话记录的缓冲区,随后读取历史会话记录到缓冲区,在对话时作为memory参数传入。

memory = ConversationBufferDBMemory(conversation_id=conversation_id,
                                                llm=model,
                                                message_limit=history_len)
                                                
chain = LLMChain(prompt=chat_prompt, llm=model, memory=memory)

而这个history_len,就会在Buffer初始化时,负责查找id为conversation_id最近的history_len的历史会话记录:

例如,如果history_len = 4,那么就查询前四条记录。

1.2. 与大模型进行对话

我将与大模型对话的过程封装起来,作为一个能够使用http协议进行访问的接口。

async def request_llm_chat(ca: LLMChat) -> dict:
    """
    生成llm对话请求
    包含参数有:
    1. query
    2. conv_id
    3. history_len
    4. model_name
    5. temperature
    6. prompt_name
    """
    request_body = {
        "query": ca.query,
        "conversation_id": ca.conv_id,
        "history_len": CHAT_ARGS["history_len"],
        "model_name": CHAT_ARGS["llm_models"][0],
        "temperature": CHAT_ARGS["temperature"],
        "prompt_name": ca.prompt_name
    }

    return await request(url=CHAT_ARGS["url"], request_body=request_body, prefix="data: ")

这里的参数解释一下:

  1. query:用户询问大模型的内容

  2. conv_id:会话的id

  3. history_len:前向检索的历史会话记录

  4. model_name:请求大模型的名字(因为可以同时部署多个大模型进行对话)

  5. temperature:LLM采样温度,用于控制文本生成的随机性。这个随机性不宜过高,过高大模型会随性发挥导致回答不准确;也不宜过低,过低大模型不敢做出回答。

  6. prompt_name:使用的prompt的模板,例如,with_history的模板如下:

    "with_history":
        'The following is a friendly conversation between a human and an AI. '
        'The AI is talkative and provides lots of specific details from its context. '
        'If the AI does not know the answer to a question, it truthfully says it does not know.\\n\\n'
        'Current conversation:\\n'
        '{history}\\n'
        'Human: {input}\\n'
        'AI:',
    

    提示AI,以下是AI之前与人类的对话记录,现在人类又给了一个输入,AI需要根据历史记录,对这个输入进行回答。

1.3. 记忆功能测试

现在我们来看一下这个大模型的记忆如何,这里我简单做了一个“你能记住我的名字吗”的小测试:

正例测试

先告诉大模型:“我的名字是xxx”

再紧接着在同一个conv_id的会话下问他:“我叫什么名字?”

他记住了我的名字。

反例测试

在看完一个正例后,我们再看一个反例:

现在我换了一个新的conv_id(相当于新创建一个会话),再问他我的名字,他就不知道了,说:“请告诉我你的名字。”

2. 与知识库对话

除了利用大模型本身的能力,我们还可以利用向量知识库检索相关的知识,再生成对应的回答。这和大模型依靠自身能力比对起来,优点是回答更加有依据、更加权威,缺点是如果检索不到相关的知识,那么几乎无法回答问题。

2.1. RAG技术的具体应用场景

检索知识库

首先我们开启一个异步操作,对相关知识库进行检索,返回匹配度最高的top k条相关资料。

        docs = await run_in_threadpool(search_docs,
                                       query=query,
                                       knowledge_base_name=knowledge_base_name,
                                       top_k=top_k,
                                       score_threshold=score_threshold)

词向量嵌入

其中search_docs依托于不同向量数据库的检索方式,例如在faiss知识库中:

    def do_search(self,
                  query: str,
                  top_k: int,
                  score_threshold: float = SCORE_THRESHOLD,
                  ) -> List[Tuple[Document, float]]:
        embed_func = EmbeddingsFunAdapter(self.embed_model)
        embeddings = embed_func.embed_query(query)
        with self.load_vector_store().acquire() as vs:
            docs = vs.similarity_search_with_score_by_vector(embeddings, k=top_k, score_threshold=score_threshold)
        return docs

我们先通过词嵌入模型(我们实验和部署时使用的词嵌入模型是bge-large-zh这个模型,由BAAI提供:BAAI/bge-large-zh · Hugging Face)将用户的输入嵌入为词向量,随后直接调用langchain封装好的函数检索top_k个相似度大于等于阈值的词向量。

随后我们把文档的内容拼接到上下文中:

context = "\\n".join([doc.page_content for doc in docs])

最终通过Langchain提供的与大模型对话的接口进行对话:

chain = LLMChain(prompt=chat_prompt, llm=model)

# Begin a task that runs in the background.
task = asyncio.create_task(wrap_done(
    chain.acall({"context": context, "question": query}),
    callback.done),
)

知识库问答需不需要带历史会话信息

经过我的实验,最好是不要带。因为优先级上历史会话信息会高于知识库检索出来的知识。用户之前的对话记录可能会影响到知识的客观性(也就是说大模型因为用户的对话舍弃了在回答中包含从知识库中检索出来的信息)。

2.2. Prompt工程

由于知识的客观性,我们需要让大模型尽可能客观地总结提炼知识,而非随意发挥:

"default":
    '<指令>根据已知信息,简洁和专业的来回答问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题”,'
    '不允许在答案中添加编造成分,答案请使用中文。 </指令>\\n'
    '<已知信息>{{ context }}</已知信息>\\n'
    '<问题>{{ question }}</问题>\\n',

例如此处建立的prompt模板就是要求大模型不得随意编造发挥,只能根据检索出来的知识进行回答。

而这个Prompt的模板格式,严格遵守了**(<指令>,(<问题>,<回答>))**的QA方式,其中<回答>是需要大模型给出的。

2.3. 知识库问答测试

存在相关文档

我们先来看一个能够检索得到相关文档/知识的例子:

可以看到大模型结合了知识库检索出来的所有相关知识进行了回答。

不存在相关文档

当然,知识库中可能不具有和用户输入比较相近的知识。但我们总不能不让大模型做出回复,所以此时我们只能转为依靠大模型自身能力作出解答这一模式:

3. 与搜索引擎进行对话

大模型也可以借助网络上能够检索到的一些信息进行解答。不过这里我的服务器代理还没配置好,查询搜索引擎时会出现连接超时的情况:

因此这一部分先放在这,等我把服务器配好再说。

4. 混合机制的对话

4.1. 为什么要把机制混合起来

经过微调的大模型的能力和训练时使用的语料/数据集的规模和质量显著相关。而知识库的知识也不能穷尽这个世界上所有有关易学的知识。搜索引擎检索到的内容也是鱼龙混杂,质量也可能不够高。这三个对话机制单拎出来,可能生成的回答质量都难以得到保证。

但这三种机制,恰好又是可以互为补充的:大模型首先自身要具备对专业性知识的理解和认知基础才能更好地运用知识库中检索出来的知识;知识库可以作为外接的知识来源提升大模型认知的深度和广度;而搜索引擎则能够更好地检索相关专业社区(专业的研究中心、论坛),为前二者提供更多补充。

因此我就想,能不能把这三种机制混合起来,让通过专业数据集进行训练的大模型在基于已有的认知基础上,把知识库和搜索引擎检索出来的知识系统地、有逻辑地整理成一个更加专业的回答?以此来显著提升回答的质量?

4.2. MTPE与CoT:渐增式文本生成

MTPE is short for Multi-Turn Prompt Engineering,这是LLM诞生后催生的一种提示工程技术(中文名可以翻译为多步提示工程)。他是基于CoT这一idea的技术,而后者是LLM领域内的一篇经典论文提出的:

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

这篇有谷歌的AI团队发表的论文中首先提到了一个简单的示例:

  1. 在Standard Prompting技术中,大模型有时会给出错误的解答,例如23-20+6=27这种错误。
  2. 在CoT技术中,大模型会详细给出每个问题的推理以及计算过程,且正确率大大提升。

这是怎么做到的?

CoT:引导式文本生成

这篇论文解释了"思维链提示"(chain-of thought prompting)对LLM尤其是大型LLM的提升作用。

思维链(Chain of Thought)是一种提示工具,用于帮助语言模型进行复杂的推理和思考过程。它通过引导模型逐步解决问题,以一系列连贯的步骤展示推理的思路和逻辑关系。

思维链提示的基本思想是将推理过程分解为多个步骤,并在每个步骤中指导模型逐步进行推理。每个步骤都通过自然语言描述,使模型能够理解和执行每个推理阶段所需的操作。

具体而言,思维链提示通常由多个中间步骤组成,每个中间步骤都解释了问题的一个方面或子问题。模型需要根据前一个步骤的结果和当前问题的要求来推断下一个步骤。通过这种逐步推理的方式,模型可以逐渐获得更多信息,并在整个推理过程中累积正确的推断。

这里Google团队给出了一张图,在GSM8K标准的benchmark中,CoT技术的Sr(Solve Rate)提升至57%,远超微调的GPT3以及标准提示工程技术,略胜之前历史最佳的表现。

在进行思维链提示时,需要将思维过程、推理过程告知大模型,随后大模型生成解答:

例如,在StrategyQA类下的问题:是还是否:梨会沉到水里吗?

引导过程如下:

  1. 为了解决这个问题,我们需要明确一个物理上的公式:

    $$ F_{buoyant} = \rho_{liquid} \cdot g \cdot V_{displaced} $$

  2. 当物体完全沉到水中时,有:

    $$ F_{buoyant} = \rho_{liquid} \cdot g \cdot V_{item} $$

  3. 因为物体完全沉到水中,所以浮力小于等于重力,也就是说:

    $$ F_{buoyant} ≤ G_{item} $$

  4. 我们知道物体的重力等于质量乘以重力加速度g,也就是:

    $$ G_{item} = m_{item} \cdot g $$

  5. 不等式两边展开得到:

    $$ \rho_{liquid} \cdot g \cdot V_{item} ≤ m_{item} \cdot g $$

  6. g≥0,两边约去,又因为:

    $$ m_{item} = \rho_{item} \cdot V_{item} $$

    因此我们得到:

    $$ \rho_{liquid} \cdot V_{item} ≤ \rho_{item} \cdot V_{item} $$

  7. 物体体积大于0,所以可以约去,最终我们得到:

    $$ \rho_{liquid} ≤ \rho_{item} $$

    则物体会沉于水中,反之不会。

  8. 现在请利用你的知识,获取梨和水的密度进行比较,根据第7.步的结论,给出回答

最终,大模型根据他的知识,得出梨会漂浮在水上的结论。并且他列出了获取梨的密度的过程以及与水的密度比较的过程

MTPE:CoT的具体应用

多步提示工程(Multi-turn Prompt Engineering)是指在人机交互或人工智能系统中,设计和使用一系列连贯的提示(prompts)来引导用户或AI通过多个步骤完成任务或获取信息的过程。这种方法在自然语言处理(NLP)和对话系统设计中尤其重要,因为它可以帮助系统更有效地理解和响应复杂的用户需求。

在设计多步提示时,需要考虑以下几个方面:

  • 上下文管理:系统需要能够理解和跟踪对话的上下文,以便提供相关的后续提示。
  • 用户意图识别:系统需要准确识别用户的意图,并根据意图提供相应的提示。
  • 灵活性和适应性:系统应该能够适应用户的不同回答,并灵活调整提示策略。
  • 用户体验:设计提示时要考虑用户体验,确保对话流畅自然,避免让用户感到困惑或沮丧。

假设我们现在已经获得了大模型分别利用自身能力、知识库、搜索引擎给出的解答,现在我们就可以构造出一个Prompt模板,来进行多步提示:

"mix_chat": """
    你是一个知无不言言无不尽的易学(周易)专家。先前我问了你一个易学方面的问题,你通过自身的能力、知识库检索以及搜索引擎检索的方式,给出了三个答案。\\n
    现在请你将这三个答案系统地整理成一篇针对原始问题的中文回答。\\n
    请你直接了当地给出回答,请一定不要添加任何诸如:\\n
    '根据您的要求,我将这三个答案系统地整理成一篇针对原始问题的中文回答。'、'好的,以下是xxx的回答’、'非常抱歉,我刚刚没有理解您的问题。'、'根据您的对话和我所掌握的资料,我为您整理了以下回答'等\\n
    这样与实际答案无关紧要的话!\\n
    此外,给出回答时,你一定不要重复原始问题!请务必记住,任何与答案正文无关的文本,均不要出现在回答中。\\n
    原始问题:\\n
    {question}\\n
    先前与你的对话如下:\\n
    {history}\\n
    你通过自身能力给出的解答如下:\\n
    {answer1}\\n
    你通过知识库检索给出的解答如下:\\n
    {answer2}\\n
    你通过搜索引擎检索给出的解答如下:\\n
    {answer3}\\n
    
    现在请你给出针对原始问题的中文回答。\\n
    AI:
"""
  1. 首先,我们告知大模型他的认知基础:你是一个知无不言言无不尽的易学(周易)专家。
  2. 其次,我们告知大模型上下文的metaData:先前我问了你一个易学方面的问题,你通过自身的能力、知识库检索以及搜索引擎检索的方式,给出了三个答案。
  3. 随后,我们规定,大模型给出的回答中,不得出现令实际用户迷惑的语句:例如 '根据您的要求,我将这三个答案系统地整理成一篇针对原始问题的中文回答。',因为用户原始的问题并没有**“三个问题”**。
  4. 我们把之前大模型三种机制下给出的解答附在对话中: 原始问题:\\n {question}\\n 先前与你的对话如下:\\n {history}\\n 你通过自身能力给出的解答如下:\\n {answer1}\\n 你通过知识库检索给出的解答如下:\\n {answer2}\\n 你通过搜索引擎检索给出的解答如下:\\n {answer3}\\n
  5. 最终,要求大模型给出解答:现在请你给出针对原始问题的中文回答。\\n

这就是一个MTPE在混合机制对话中的实际应用。

4.3. 接口实现

async def request_mix_chat(mc: MixChat) -> BaseResponse:
    """
    混合对话
    1. 先请求大模型以自身能力给出解答
    2. 再请求大模型检索知识库给出解答
    3. 最后请求大模型通过询问搜索引擎给出解答
    4. 最终将解答融合在一起返回
    """
    # 先请求大模型以自身能力给出解答
    llm_response = await request_llm_chat(LLMChat(query=mc.query, conv_id=mc.conv_id))
    if not llm_response["success"]:
        return BaseResponse(code=200, message="大模型请求失败", data={"error": f'{llm_response["error"]}'})

    # 请求知识库
    kb_response = await request_knowledge_base_chat(KBChat(query=mc.query, conv_id=mc.conv_id))
    if not kb_response["success"]:
        return BaseResponse(code=200, message="知识库请求失败", data={"error": f'{kb_response["error"]}'})

    # 请求搜索引擎
    search_response = await request_search_engine_chat(SEChat(query=mc.query, conv_id=mc.conv_id))
    if not search_response["success"]:
        return BaseResponse(code=200, message="搜索引擎请求失败", data={"error": f'{search_response["error"]}'})

    # 生成prompt
    prompt = get_mix_chat_prompt(question=mc.query, history=await gen_history(mc.conv_id),
                                 answer1=llm_response["data"]["text"], answer2=kb_response["data"]["answer"],
                                 answer3="")

    # 请求大模型
    response = await request_llm_chat(LLMChat(query=prompt, conv_id=mc.conv_id, prompt_name=mc.prompt_name))

    # 确保问题和回答原子性地入库
    with record_lock:
        add_record_to_conversation(mc.conv_id, mc.query, False)
        add_record_to_conversation(mc.conv_id, response["data"]["text"], True)

    return BaseResponse(code=200, message="混合对话请求成功", data={"answer": response["data"]["text"]})
  1. 首先,请求大模型以自身能力给出解答
  2. 请求大模型根据知识库的知识给出解答
  3. 请求大模型根据搜索引擎的检索结果给出解答
  4. 根据prompt模板生成多步prompt
  5. 请求大模型根据该上下文信息综合性地给出解答
  6. 返回该最终解答

4.4. 混合机制对话测试

这里我问了大模型一个周易中“逆向格义”这个概念相关示例的问题:

他给出的解答如下:

历史上有哪些在日常生活中运用逆向格义的例子?

逆向格义是一种思维方式,它强调从相反的角度来理解事物,从而得出更深刻的理解和解决问题的方法。在周易中,逆向格义被认为是一种有效的思维方式,可以帮助人们更全面地理解事物。以下是几个关于逆向格义的例子:

1. 卦象分析:在周易中,每个卦象都代表了一种特定的元素、方向和能量。通过逆向格义,我们可以从相反的角度来分析卦象,从而得出更全面的含义。例如,乾卦代表天、刚强、积极等,如果我们将乾卦的内涵 reversed,它就变成了坤卦,象征地、柔弱、消极。这种分析方法可以帮助我们更全面地理解卦象所代表的意义。

2. 爻辞解读:在周易的卦辞中,每一卦的爻(即阳爻和阴爻)都有特定的含义。通过逆向格义,我们可以从相反的角度来解读爻辞,从而得出更深刻的理解。例如,在一卦中,阳爻表示事物的发展,阴爻表示事物的衰退。如果我们将这个观念 reversed,那么阳爻就代表了事物的衰退,阴爻就代表了事物的发展。这种解读方法可以帮助我们更全面地理解爻辞所要传达的信息。

3. 人事决策:在周易预测中,我们常常需要根据卦象来判断事物的发展趋势和解决方案。通过逆向格义,我们可以从相反的角度来分析卦象所代表的意义,从而得出更全面的解决方案。例如,如果卦象显示事物发展趋势不利,那么我们可以考虑采取相反的行动,如增加投资、增加风险等,从而避免不利的结果。

4. 互传:在周易中,互传是一种特殊的卦象组合,它反映了事物之间的相互影响和变化。通过逆向格义,我们可以从互传中找到事物发展中的矛盾和问题,从而找到更好的解决方案。例如,在互传中,两个卦象相互影响,一个卦象代表了正面的力量,另一个卦象代表了负面的力量。我们可以通过逆向格义来理解互传中的矛盾,并找到解决问题的方法。

这些例子说明,逆向格义在周易中的运用可以帮助我们更全面地理解事物的发展趋势和变化,从而更好地解决问题。这种思维方式不仅限于周易,还可以应用于其他领域,帮助我们更好地理解问题并找到更好的解决方案。

而中间过程给出的解答如下:

其中第一段是大模型自身能力的,第二段是知识库的(搜索引擎在我做实验的时候还不可用)

大模型发现知识库的知识偏向于商业应用而非周易,因此大部分的解答来自于第一段。当知识库的知识与对话的topic相关性更大之后,将会更多的融合知识库的知识到最终回答中。

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

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

相关文章

XGIS引擎上线曲折历史

演示地址&#xff1a;threelab首页 其实在一年前甚至更早&#xff0c;已经完整了初版的XGIS三维引擎开发&#xff0c;完成了基本的操作。 但是很多原因导致我一直没有上线&#xff0c;也不是没有上线&#xff0c;上线了&#xff0c;又下掉了。总感觉自己写的欠缺&#xff0c;或…

Easy-laser激光对中仪维修D505激光测平仪维修

Easylaser激光对中仪多应用于风力发电业的塔架、机架、轮毂、偏航轴承和变桨轴承的几何指标测量中。此系列常见维修型号包括D450&#xff1b;D480&#xff1b;D505&#xff1b;D525&#xff1b;D550等。 Easy-Laser对中仪维修注意事项&#xff1a; 测量功能包括&#xff1a; …

虚拟化技术 分布式资源调度

一、实验内容 实现分布式资源调度 二、实验主要仪器设备及材料 安装有64位Windows操作系统的台式电脑或笔记本电脑&#xff0c;建议4C8G或以上配置已安装VMware Workstation Pro已安装Windows Server 2008 R2 x64已安装vCenter Server 三、实验步骤 将主机esxi1和esxi2加入…

JVM-之GC日志

一、 开启gc 日志 在项目中开启GC 日志打印后会查看gc 日志如下 nohup java -Xms768m -Xmx768m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath./dumplog/dumplog.log -Xloggc:./dumplog/gc.log -XX:PrintGCDetails -XX:PrintGCDateStamps -XX:PrintHeapAtGC -jar xxxx…

小易大数据:大数据报告查询领域的黑马,这些优势让你无法忽视!

随着大数据技术被运用到各行各业&#xff0c;风控领域也不例外&#xff0c;形成了基于大数据技术的大数据信用&#xff0c;也就是我们常说的大数据报告或者网贷大数据&#xff0c;在众多的查询平台中&#xff0c;小易大数据平台在市面上是比较受欢迎的&#xff0c;那在小易平台…

使用华为快传同步文件至电脑

使用华为快传同步文件至电脑&#xff0c;电脑端未发现设备解决办法 1、手机和电脑连同一网络 2、打开手机华为分享&#xff0c;打开电脑网络 3、网络中找到设备&#xff0c;输入账户密码进行连接&#xff08;未找到设备往下继续看&#xff09; 未找到设备解决办法&#xff1…

电脑如何在网页上下载视频 浏览器如何下载网页视频

对于现代职场人士而言&#xff0c;在日常生活中难免需要下载各种短视频&#xff0c;IDM下载加速器可以轻松获取抖音、快手等平台的无水印短视频文件。 Internet Download Manager&#xff0c;简称IDM。功能强大的网络下载器。您不需要多余的操作&#xff0c;IDM 能捕获您的下载…

阿里云获取nginx头部

k8s 配置 可以修改kube-system/nginx-configuration configmap的方式&#xff0c; compute-full-forwarded-for: “true” forwarded-for-header: “X-Forwarded-For” use-forwarded-headers: “true” https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-g…

Day01-01-git

Day01-01-git Content List0. 运维发展过程1. ci-cd-co基础1.1 软件的生命周期1&#xff09;软件的声明周期&#xff1a;软件从0-->1-->0过程2&#xff09;ci/cd3&#xff09;Devops4) 小结 1.2 什么是环境1.3 什么是代码部署1.4 代码发布方式 3. DevSecOpt之Git极速入门…

INTERCONNECT 中使用库中器件制作一个损耗为 3 dB /m 的直波导

INTERCONNECT 中使用库中器件制作一个损耗为 3 dB /m 的直波导 正文 正文 首先&#xff0c;插入以下器件并连接。 其次&#xff0c;设置直波导 WGD_1 的器件参数&#xff0c;如下图所示&#xff1a; 运行仿真&#xff0c;在 ONA 中查看 gain 值。 可以看到&#xff0c;对应…

C++入门——日期类的实现

前言 生活中&#xff0c;我们时不时会遇到算天数的问题&#xff1a;高考倒计时、考研倒计时、过年倒计时...... 想解决这些问题无非就是实现一个年月日的计算器&#xff0c;那要怎么来实现呢&#xff1f; 下面就让我们来探究一下。 1.了解日期计算器的需求 1.1 表面需求 …

Java实现链表

链表 前言一、链表的概念及结构二、链表的分类三、链表的实现无头单向非循环链表实现无头双向链表实现具体代码 四、链表习题五、顺序表和链表的区别 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&#xff0c;对我…

Linux shell编程学习笔记50:who命令

0 前言 2024年的网络安全检查又开始了&#xff0c;对于使用基于Linux的国产电脑&#xff0c;我们可以编写一个脚本来收集系统的有关信息。比如&#xff0c;我们可以使用who命令来收集当前已登陆系统的用户信息&#xff0c;当前运行级别等信息。 1. who命令 的功能、格式和选项…

再论任何图≌自己这一几何最最起码常识推翻平面公理

黄小宁 有了解析几何使人类对直线和射线的认识有革命性的飞跃。几何学有史2300年来一直认定起点和射出的方向都相同的射线必重合&#xff0c;任两异射线必有全等关系&#xff1b;解析几何使我发现这是2300年肉眼直观错觉。 h定理&#xff08;参考文献中的定理&#xff09;&am…

中国自动分拣行业TOP5玩家:大盘点(年收入开局12亿……)

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 随着物流行业的迅猛发展&#xff0c;自动分拣技术正成为提升物流效率的关键。中国自动分拣行业的几家领军企业在2023年展现了各自的战略…

1+x(Java)中级题库易混淆理论题(二)

冷备份实质就是数据库相关文件的复制 System.in是字节流 Map集合中的key是无序的 protected不能用于修饰类 接口中所有抽象方法默认使用public修饰 DML操作有&#xff1a;INSERT UPDATE DELETE SQL 语句中进行 group by 分组时&#xff0c;可以不写 where 子句 使…

【Web】2024 京麒CTF ezjvav题解

目录 step 0 step 1 step 2 EXP1 EXP2 step 0 进来是一个登录框 admin/admin成功登录 访问./source jwt伪造 带着伪造的jwt访问./source&#xff0c;拿到题目源码jar包 step 1 pom依赖有spring、fj、rome 反序列化入口在./Jsrc路由 有两层waf&#xff0c;一个是明…

【Docker】docker-compose 常用命令

启动服务&#xff1a; docker-compose up 如果你想在后台运行服务&#xff0c;可以添加 -d 标志&#xff1a; docker-compose up -d 开启所有服务 docker-compose start 停止服务&#xff1a; docker-compose down 查看服务状态&#xff1a; docker-compose ps 查看…

mumu 模拟器安装

1.下载安装 下载地址 Win 历史版本&#xff1a;http://mumu.163.com/update/win/Mac 历史 版本&#xff1a;http://mumu.163.com/20200515/25905_880858.html 2.设置为竖屏 在设置中心--界面设置页面设置宽720&#xff0c;高1280&#xff0c;DPI为240&#xff0c;如下图所示。…

读人工智能时代与人类未来笔记16_科学发现

1. 科学发现 1.1. 科学认识的发展往往涉及理论和实验之间的巨大差距以及大量的试错 1.2. 模型不是像传统的那样来自理论理解&#xff0c;而是来自基于实验结果得出结论的人工智能 1.2.1. 这种方法需要的专业知识不同于开发理论模型或传统计…