LangChain-2-Model

news2026/3/13 18:13:45
可以把对模型的使用过程拆解成三块: 输入提示(Format)、调用模型(Predict)、输出解析(Parse)1.提示模板: LangChain的模板允许动态选择输入根据实际需求调整输入内容适用于各种特定任务和应用。2.语言模型: LangChain 提供通用接口调用不同类型的语言模型提升了灵活性和使用便利性。3.输出解析: 利用 LangChain 的输出解析功能精准提取模型输出中所需信息避免处理冗余数据同时将非结构化文本转换为可处理的结构化数据提高信息处理效率。这三块形成了一个整体在LangChain中这个过程被统称为Model I/O。针对每块环节LangChain都提供了模板和工具可以帮助快捷的调用各种语言模型的接口大模型按照模型功能的不同非对话模型LLMs、Text Model对话模型Chat Models嵌入模型Embedding ModelsLLMs(非对话模型)LLMs也叫Text Model、非对话模型是许多语言模型应用程序的支柱。主要特点如下 输入接受文本字符串或 PromptValue 对象 输出总是返回文本字符串Chat Models(对话模型)ChatModels也叫聊天模型、对话模型底层使用LLMs。 大语言模型调用以 ChatModel 为主 主要特点如下 输入接收消息列表 List[BaseMessage] 或 PromptValue 每条消息需指定角色如 SystemMessage、HumanMessage、AIMessage 输出总是返回带角色的 消息对象 BaseMessage 子类通常是 AIMessageLangChain有一些内置的消息类型SystemMessage 设定AI行为规则或背景信息。比如设定AI的初始状态、行为模式或对话的总 体目标。比如“作为一个代码专家”或者“返回json格式”。通常作为输入消息序列中的第一个 传递。HumanMessage 表示来自用户输入。比如“实现 一个快速排序方法”AIMessage 存储AI回复的内容。这可以是文本也可以是调用工具的请求ChatMessage 可以自定义角色的通用消息类型FunctionMessage/ToolMessage 函数调用/工具消息用于函数调用结果的消息类型Embedding Model(嵌入模型)Embedding Model也叫文本嵌入模型这些模型将文本作为输入并返回浮点数列表 也就是 Embedding。常配合向量数据库使用这里不做多解释RAG部分会重点说明模型调用OpenAI的GPT系列奠定了大模型的技术范式与接口标准。因此无论是Qwen还是ChatGLM等模型在调用方式与函数设计上都基本遵循OpenAI的规范差异很小。这使得各类开源项目可以通过统一的接口兼容并调用不同模型例如利用LangChain实现通用API接入推荐此方式提示词模板在LangChain的Model I/O中提示模板是其组成之一,语言模型的提示是用户提供的一组指令或输入用于指导模型的响应帮助模型理解上下文并生成相关且连贯的基于语言的输出例如回答问题、完成句子或参与某项活动、对话1.PromptTemplate定义这是最基础的提示词模板类允许你定义带有变量的提示模板然后通过填充这些变量来生成具体的提示。特点简单灵活适用于大多数需要动态生成提示的场景。使用场景当你有一个固定结构的提示只是其中某些部分需要根据不同情况进行替换时可以使用PromptTemplate。2.ChatPromptTemplate定义专门为聊天场景设计的提示词模板。它可以处理多轮对话中的不同角色如人类、AI的消息并根据这些消息生成适合聊天模型的提示。特点能够自然地处理对话上下文适合构建聊天机器人等交互性应用。使用场景在构建基于聊天模型的应用如智能客服、聊天助手时使用ChatPromptTemplate可以方便地管理对话流程。消息模板包括ChatMessagePromptTemplate、HumanMessagePromptTemplate、AIlMessagePromptTemplate、SystemMessagePromptTemplate等3.FewShotPromptTemplate定义用于提供少量示例few - shot的提示模板。它允许你在提示中包含一些示例输入和输出帮助模型更好地理解任务要求。特点通过示例引导模型能让模型更好地学习任务模式提高生成结果的质量。使用场景当任务比较复杂需要向模型展示一些示例来明确任务的执行方式时使用FewShotPromptTemplate很合适比如文本分类、问答等任务。4. FewShotChatMessagePromptTemplate定义它是结合了少样本学习和聊天场景特点的提示词模板类。该模板在为聊天模型构建提示时不仅能像FewShotPromptTemplate那样提供少量示例输入输出还能以符合聊天交互的消息格式呈现这些示例以及用户输入专门用于模拟多轮对话的上下文。特点通过少样本引导以聊天消息对象如HumanMessage和AIMessage的形式组织提示内容能够很好地处理多轮对话的上下文信息使用场景复杂聊天任务特定风格对话多轮对话引导。PromptTemplatePromptTemplate是一个基础类用于创建带有可替换变量的提示模板。它允许你定义一个包含占位符的字符串模板然后在运行时将这些占位符替换为实际的值。代码示例from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI llm ChatOpenAI( api_key, base_urlhttps://api.baichuan-ai.com/v1, modelBaichuan3-Turbo ) prompt PromptTemplate.from_template(你是一个广告标语专家请帮我写一个关于{product}的广告语) #链式调佣 chain prompt | llm resp chain.invoke({product: 橘子酒店}) print(resp) #得到输入提示 input prompt.format(product苹果) print(input) #直接使用 output llm.invoke(input) print(output)可以使用字符串拼接的方式构建提示词from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI llm ChatOpenAI( api_key, base_urlhttps://api.baichuan-ai.com/v1, modelBaichuan3-Turbo ) prompt (PromptTemplate.from_template(你是一个开场白专家请帮我写一个{topic}的开场白) 要求简单一些不要超过{maxLength}个字 需要激情一些能带动大家情绪) chain prompt | llm result chain.invoke({topic: 公司年会, maxLength: 200}) print(result.content)ChatPromptTemplateChatPromptTemplate是专门为聊天场景设计的提示模板。它考虑了不同角色如用户、系统、助手的消息格式能够更方便地构建多轮对话的提示。ChatPromptTemplate有两个重要的方法from_template该方法接收一个字符串模板模板中可以包含变量占位符用于后续填充具体的值。它通常适用于单个模板的情况将整个提示信息以一个字符串的形式进行定义。和PromptTemplate使用方式一样from_messages此方法接收一个消息模板列表列表中的每个元素通常是SystemMessagePromptTemplate、FunctionCallMessage、HumanMessagePromptTemplate或AIMessagePromptTemplate等消息模板实例。这种方式允许你分别定义不同角色如系统、方法调用、人类、AI的消息模板更适合处理多轮对话和复杂的聊天场景。LangChain有一些内置的消息类型SystemMessage 设定AI行为规则或背景信息。比如设定AI的初始状态、行为模式或对话的总 体目标。比如“作为一个代码专家”或者“返回json格式”。通常作为输入消息序列中的第一个 传递。HumanMessage 表示来自用户输入。比如“实现 一个快速排序方法”AIMessage 存储AI回复的内容。这可以是文本也可以是调用工具的请求 ChatMessage 可以自定义角色的通用消息类型FunctionMessage/ToolMessage 函数调用/工具消息用于函数调用结果的消息类型注意 FunctionMessage和ToolMessage分别是在函数调⽤和⼯具调⽤场景下才会使⽤的特殊消息类 型HumanMessage、AIMessage和SystemMessage才是最常⽤的消息类型。示例1from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI llm ChatOpenAI( api_key, base_urlhttps://api.baichuan-ai.com/v1, modelBaichuan3-Turbo ) prompt ChatPromptTemplate.from_messages([ {role: system, content: 你是一个广告标语专家}, {role: user, content: 请帮我写一个关于{product}的广告标语} ]) chain prompt | llm result chain.invoke({product: 苹果}) print(result.content)当调⽤此 ChatPromptTemplate 时将构造两个消息。 第⼀个是系统消息没有变量需要格式化。 第⼆个是 用户消息将由⽤⼾传⼊的 product变量进⾏格式化。示例2也可以写成元组from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI llm ChatOpenAI( api_key, base_urlhttps://api.baichuan-ai.com/v1, modelBaichuan3-Turbo ) prompt ChatPromptTemplate.from_messages([ (system, 你是一个会讲笑话的人), (user, 请帮给我讲一个关于{product}的笑话) ]) chain prompt | llm result chain.invoke({product: 狗}) print(result.content)当调⽤此 ChatPromptTemplate 时将构造两个消息。 第⼀个是系统消息没有变量需要格式化。 第⼆个是 用户消息将由⽤⼾传⼊的 topic 变量进⾏格式化。示例3guiji_llm ChatOpenAI( modelQwen/Qwen3-14B, #使用硅基流动千问大模型 api_keyGUIJI_API_KEY, #使用自己的api key base_urlGUIJI_BASE_URL # ) prompt_template ChatPromptTemplate.from_messages([你是一个翻译专家能将用户输入{input}翻译成{lang}]) chain prompt_template | guiji_llm | StrOutputParser() input_str input(要翻译的内容) lang input(要翻译成) resp chain.invoke({input: input_str, lang: lang})简化写法直接通过字符串构建消息示例4guiji_llm ChatOpenAI( modelQwen/Qwen3-14B, #使用硅基流动千问大模型 api_keyGUIJI_API_KEY, #使用自己的api key base_urlGUIJI_BASE_URL # ) human_prompt HumanMessagePromptTemplate.from_template({input}) system_prompt SystemMessagePromptTemplate.from_template(你是一个翻译助手能将用户输入的内容翻译成{lang}) prompt_template ChatPromptTemplate.from_messages([system_prompt, human_prompt]) chain prompt_template | guiji_llm | StrOutputParser() input_str input(要翻译的内容) lang input(要翻译成) resp chain.invoke({input: input_str, lang: lang})HumanMessagePromptTemplate这是 LangChain 中的一个类用于定义​​用户消息​​的提示模板。SystemMessagePromptTemplate这是 LangChain 中的一个类用于定义​​系统消息​​的提示模板。常见消息模板及区别1.HumanMessage定义代表人类用户发送的消息。在对话模拟中用于传递用户输入的内容。作用向模型提供用户的问题、指令或对话内容作为模型生成回复的依据。2.AIMessage定义代表AI模型生成的回复消息。在对话交互中存储模型针对用户消息给出的响应内容。作用记录模型的输出结果可用于后续的对话流程处理或展示给用户。3.SystemMessage定义用于设置对话的初始指令或背景信息对AI模型的回复风格、任务范围等进行全局的引导和约束。作用可以让模型在特定的语境和规则下进行回复例如要求模型以特定语言风格、特定身份进行回复等。4.FunctionCallMessage定义表示模型调用外部函数的请求消息。当模型认为需要调用特定函数来完成任务时会生成此类消息。作用实现模型与外部工具或服务的交互扩展模型的能力如查询数据库、调用API等。示例5human_prompt1 HumanMessagePromptTemplate.from_template(我对{topic}很感兴趣) human_prompt2 HumanMessagePromptTemplate.from_template(你能给我推荐一些相关书籍吗) #多条用户信息 prompt_template ChatPromptTemplate.from_messages([ human_prompt1, human_prompt2, ]) chain prompt_template | guiji_llm | StrOutputParser() topic input(请输入感兴趣的学科) resp chain.invoke({topic: topic}) print(翻译结果, resp)多条用户信息消息占位符在上⾯的 ChatPromptTemplate 中我们看到如何格式化两个消息每个消息都是⼀个字符串。 但是如果我们希望⽤⼾传⼊⼀个消息列表历史消息并将其插⼊到特定位置呢 这就是需要使⽤ MessagesPlaceholder。from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.messages import HumanMessage prompt_template ChatPromptTemplate.from_messages([ (system, 你是⼀个电视台⾼端访谈节⽬的主持⼈), MessagesPlaceholder(msgs) ]) prompt_template.invoke({msgs: [HumanMessage(content你好主持⼈!)]})使用占位符携带对话历史实现多轮对话案例from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain_core.messages import HumanMessage, AIMessage deepseek_llm ChatOpenAI(modeldeepseek-reasoner, api_key”“, base_url”“) # 定义 Prompt 模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个计算助手能够回答数学问题。), MessagesPlaceholder(variable_namechat_history, optionalTrue), (human, {input}) ]) # 初始化聊天历史 chat_history [] # 构建链式调用 chain prompt | deepseek_llm # 多轮对话循环 while True: user_input input(你: ) if user_input.lower() in [退出, exit, q]: print(助手: 再见) break # 调用模型生成回复 response chain.invoke({ chat_history: chat_history, input: user_input }) # 将用户输入和助手回复添加到聊天历史中 chat_history.append(HumanMessage(contentuser_input)) chat_history.append(AIMessage(contentresponse.content)) print(f助手: {response.content})FewShotPromptTemplateFewShotPromptTemplate用于提供少量示例few-shot来引导语言模型的输出。它允许你在提示中包含一些输入 - 输出对让模型学习如何根据这些示例生成类似的结果。示例from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder, FewShotPromptTemplate, PromptTemplate from langchain_openai import ChatOpenAI llm ChatOpenAI( api_key, base_urlhttps://api.baichuan-ai.com/v1, modelBaichuan3-Turbo ) examples [ { question: 乾隆和曹操谁活得更久, answer: 这里是否需要跟进问题是的。 追问乾隆去世时几岁 中间答案乾隆去世时87岁。 追问曹操去世时几岁 中间答案曹操去世时66岁。 所以最终答案是乾隆 , }, { question: 小米手机的创始人什么时候出生, answer: 这里是否需要跟进问题是的。 追问小米手机的创始人是谁 中间答案小米手机由雷军创立。 跟进雷军什么时候出生 中间答案雷军出生于1969年12月16日。 所以最终的答案是1969年12月16日。 , }, { question: 乔治·华盛顿的外祖父是谁, answer: 这里是否需要跟进问题是的。 追问乔治·华盛顿的母亲是谁 中间答案乔治·华盛顿的母亲是玛丽·鲍尔·华盛顿。 追问玛丽·鲍尔·华盛顿的父亲是谁 中间答案玛丽·鲍尔·华盛顿的父亲是约瑟夫·鲍尔 , } ] prompt FewShotPromptTemplate( examplesexamples, #示例样本 example_promptPromptTemplate.from_template( question: {question}\nanswer: {answer}, ), # 示例的格式 prefix你是一个问答机器人你需要根据问题来回答。, #示例前置内容 suffix请根据以上的例子来回答问题{question}, #示例后置内容 input_variables[question]) #输入变量 chain prompt | llm result chain.invoke({question: 华为的创始人什么时候出生的}) print(result.content)FewShotChatMessagePromptTemplateFewShotChatMessagePromptTemplate是 LangChain 库中的一个类用于创建少样本Few - Shot提示模板专门处理聊天消息的提示。FewShotPromptTemplate适用于传统的文本生成任务例如文本摘要、问答系统等这些任务通常以单一的文本输入和输出为主不涉及多轮对话的交互场景。FewShotChatMessagePromptTemplate专门为聊天场景设计适用于处理多轮对话的情况。它可以更好地处理不同角色如用户和助手之间的消息交互模拟真实的聊天过程。示例from langchain_core.messages import HumanMessage from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate, MessagesPlaceholder, \ PromptTemplate deepseek_llm ChatOpenAI(modeldeepseek-reasoner, api_key”“, base_url”“) examples [ {input: 2 2, output: 4}, {input: 2 3, output: 6}, ] example_prompt ChatPromptTemplate.from_messages([ (human,{input}), (ai,{output}) ]) few_shot_prompt FewShotChatMessagePromptTemplate( examplesexamples, example_promptexample_prompt ) example_prompt ChatPromptTemplate.from_messages([ (system,你是智能机器人AI助手), few_shot_prompt, MessagesPlaceholder(msgs) ]) chain example_prompt | deepseek_llm print(chain.invoke({msgs:[HumanMessage(2 9 的结果是多少)]}))示例选择器当示例过多时为避免超出模型的上下文长度限制可以通过示例选择器选择较短的示例以此优化提示词并提升与大型语言模型交互的效果。以下是 LangChain 中一些常见的示例选择器LengthBasedExampleSelectorLengthBasedExampleSelector 会根据输入的长度以及预设的最大长度限制动态地选择合适长度的示例。当输入较长时它会倾向于选择较短的示例当输入较短时则可以选择更多或更长的示例。SemanticSimilarityExampleSelector此选择器借助向量数据库如 Chroma、FAISS 等和嵌入模型如 OpenAIEmbeddings来计算示例与输入之间的语义相似度。它会先将示例和输入文本转换为向量表示然后通过计算向量之间的距离如余弦相似度来确定它们的语义相似程度。最后选择与输入语义最相似的示例。MaxMarginalRelevanceExampleSelectorMaxMarginalRelevanceExampleSelector 结合了语义相似度和多样性的考量。它的目标是在选择与输入语义相似的示例的同时保证所选示例之间具有一定的多样性。具体做法是首先选择与输入语义最相似的示例然后在后续选择中会尽量选择既与输入相似又和已选示例有一定差异的示例。示例1from langchain_core.example_selectors import LengthBasedExampleSelector from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate from model.deepseek import deepseek_llm examples [ {input: happy, output: sad}, {input: tall, output: short}, {input: energetic, output: lethargic}, {input: sunny, output: cloudy}, {input: windy, output: calm} ] example_prompt PromptTemplate( input_variables[input, output], template原词: {input}\n反义词: {output}, ) example_selector LengthBasedExampleSelector( examplesexamples, example_promptexample_prompt, max_length10,# 最大长度 ) dynamic_prompt FewShotPromptTemplate( example_selectorexample_selector, example_promptexample_prompt, prefix给出输入词的反义词, suffix原词: {adjective}\n反义词: , input_variables[adjective], ) print(dynamic_prompt.format(adjectivebig)) chain dynamic_prompt | deepseek_llm result chain.invoke({adjective: big}) print(result.content)给出输入词的反义词 原词: happy 反义词: sad 原词: tall 反义词: short 原词: big 反义词: small Process finished with exit code 0示例2from langchain_community.vectorstores import Chroma from langchain_core.example_selectors import SemanticSimilarityExampleSelector from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate from langchain_openai import OpenAIEmbeddings from model.deepseek import deepseek_llm examples [ {input: happy, output: sad}, {input: tall, output: short}, {input: energetic, output: lethargic}, {input: sunny, output: cloudy}, {input: windy, output: calm} ] example_selector SemanticSimilarityExampleSelector.from_examples( examples, OpenAIEmbeddings(openai_api_key, openai_api_basehttps://api.34ku.com/v1/), Chroma, k1 #选择示例数量 ) example_prompt PromptTemplate( input_variables[input, output], template原词: {input}\n反义词: {output}, ) similar_example FewShotPromptTemplate( example_selectorexample_selector, example_promptexample_prompt, prefix给出每个输入词的反义词, suffix原词: {adjective}\n反义词: , input_variables[adjective], ) print(similar_example.format(adjectivebig)) chain similar_example | deepseek_llm result chain.invoke({adjective: big}) print(result.content)示例3from langchain_community.vectorstores import FAISS from langchain_core.example_selectors import MaxMarginalRelevanceExampleSelector from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate from langchain_openai import OpenAIEmbeddings from model.deepseek import deepseek_llm examples [ {input: happy, output: sad}, {input: tall, output: short}, {input: energetic, output: lethargic}, {input: sunny, output: cloudy}, {input: windy, output: calm} ] example_selector MaxMarginalRelevanceExampleSelector.from_examples( examples, OpenAIEmbeddings(openai_api_key, openai_api_basehttps://api.34ku.com/v1/), FAISS, k2 # 选择的示例数量 ) example_prompt PromptTemplate( input_variables[input, output], template原词: {input}\n反义词: {output}, ) similar_example FewShotPromptTemplate( example_selectorexample_selector, example_promptexample_prompt, prefix给出每个输入词的反义词, suffix原词: {adjective}\n反义词: , input_variables[adjective], ) print(similar_example.format(adjectivebig)) chain similar_example | deepseek_llm result chain.invoke({adjective: big}) print(result.content)给出每个输入词的反义词 原词: tall 反义词: short 原词: windy 反义词: calm 原词: big 反义词: smallhub提示词LangSmith Hub 是 LangChain 推出的一个用于存储和共享提示模板、链chains、代理agents等语言模型相关资源的平台。可以使用hub上一些开源的提示词模板也可以把自己的提示词模板上传到hub上import os from langchain import hub from langchain_core.prompts import PromptTemplate #使用langSmith os.environ[LANGCHAIN_TRACING_V2] true os.environ[LANGCHAIN_API_KEY] #获取hub上的模板 prompt hub.pull(hwchase17/react) print(prompt.template) prompt_template PromptTemplate.from_template( 你是一个非常有帮助的助手。 请用以下格式回答用户的问题 问题用户的问题 回答用中文回答用户的问题 示例 问题你好 回答你好我是一个非常有帮助的助手。 问题{input} 回答 ) #上传提示词模板到hub hub.push(my_assistant, prompt_template) #拉取提示词模板 my hub.pull(my_assistant) print(my.template)Chain的基本概念Chain链用于将多个组件提示模板、LLM模型、记忆、工具等连接起来形成可复用的 工作 流 完成复杂的任务。 Chain 的核心思想是通过组合不同的模块化单元实现比单一组件更强大的功能。比如 将 LLM 与 Prompt Template 提示模板结合 将 LLM 与 输出解析器 结合 将 LLM 与 外部数据 结合例如用于问答 将 LLM 与 长期记忆 结合例如用于聊天历史记录 通过将 第一个LLM 的输出作为 第二个LLM 的输入...将多个LLM按顺序结合在一起使用LCEL可以构造出结构最简单的Chain。 LangChain表达式语言LCELLangChain Expression Language是一种声明式方法可以轻松地 将多个组件链接成 AI 工作流。它通过Python原生操作符如管道符 | 将组件连接成可执行流程显 著简化了AI应用的开发。 LCEL的基本构成提示Prompt 模型Model 输出解析器OutputParserRunnableRunnable是LangChain定义的一个抽象接口Protocol它强制要求所有LCEL组件实现一组标准方法class Runnable(Protocol): def invoke(self, input: Any) - Any: ... # 单输入单输出 def batch(self, inputs: List[Any]) - List[Any]: ... # 批量处理 def stream(self, input: Any) - Iterator[Any]: ... # 流式输出 # 还有其他方法如 ainvoke异步等任何实现了这些方法的对象都被视为LCEL兼容组件。比如聊天模型、提示词模板、输出解析器、检索 器、代理(智能体)等。 每个 LCEL 对象都实现了 Runnable 接口该接口定义了一组公共的调用方法。这使得 LCEL 对象链也 自动支持这些调用成为可能。#分步调用 prompt_text prompt.invoke({topic: 猫}) # 方法1 model_out model.invoke(prompt_text) # 方法2 result parser.invoke(model_out) # 方法3 #LCEL管道式 chain prompt | model | parser # 用管道符组合 result chain.invoke({topic: 猫}) # 所有组件统一用invoke案例1没有使用chainfrom langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI template PromptTemplate.from_template(template给我讲一个关于{topic}话题的简短笑话) template_invoke template.invoke({topic: 蛤蟆}) llm ChatOpenAI( modelgpt-3.5-turbo, api_keysk-, base_urlhttps://api.34ku.com/v1/, temperature0.7, max_tokens200 ) out llm.invoke(template_invoke) parser StrOutputParser() resp parser.invoke(out) print(resp)案例2使用chainfrom langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import PromptTemplate from langchain_openai import ChatOpenAI template PromptTemplate.from_template(template给我讲一个关于{topic}话题的简短笑话) llm ChatOpenAI( modelgpt-3.5-turbo, api_keysk-, base_urlhttps://api.34ku.com/v1/, temperature0.7, max_tokens200 ) parser StrOutputParser() chain template | llm | parser resp chain.invoke({topic: 蛤蟆}) print(resp)

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…