当前位置: 首页 > news >正文

DSPy101

DSPy 介绍

DSPy(Declarative Self-improved Language Programs in Python) 是一个用于系统化和增强在流水线内使用语言模型的框架,它通过数据驱动和意图驱动的系统来优化大型语言模型(LLM)的使用。

DSPy 的核心是模块化架构,它提供了一套内置模块,这些模块可以组合成更大的程序,以构建复杂的 AI 系统 。

入门 DSPy,你可以遵循以下步骤:

  1. 安装 DSPy:首先需要安装 DSPy 库,可以通过 Python 的包管理工具 pip 进行安装。
  2. 配置语言模型和检索模型:在 DSPy 中配置所需的语言模型(LM)和检索模型(RM)。
  3. 加载数据集:加载用于训练和验证的数据集。
  4. 编写 DSPy 程序:使用 DSPy 的 Signature 和 Modules 定义程序逻辑和组件之间的信息流。
  5. 定义验证逻辑:设置验证逻辑和优化器以优化程序。
  6. 编译 DSPy 程序:DSPy 编译器将考虑训练数据、程序、优化器和验证度量,以优化程序。

DSPy 还引入了优化器的概念,这些优化器可以自动调整 LM 调用的提示和权重,以最大化所需指标,从而提高输出的可靠性和可预测性 。

DSPy 是一个高级的框架,它允许开发者通过编程的方式而不是传统的提示工程技术来使用大型语言模型(LLM)。下面是一个简单的示例,展示了如何使用 DSPy 构建一个问答系统。这个系统将使用一个检索增强的生成模型(RAG),它首先从文档中检索相关信息,然后生成答案。

DSPy 是一个为大型语言模型(LLMs)设计的框架,旨在通过编程方式而非传统的提示工程技术来使用这些模型。以下是 DSPy 的使用方法、目录说明和架构设计分析:

使用方法

  1. 安装

    • 使用 Python 的包管理工具 pip 安装 DSPy。
  2. 配置环境

    • 根据需要配置语言模型(LM)和检索模型(RM)。
  3. 编写程序

    • 使用 DSPy 的模块和签名(Signature)来定义程序逻辑。
  4. 编译程序

    • DSPy 编译器将根据训练数据和优化器来优化程序。
  5. 执行程序

    • 使用编译后的程序进行预测或其他任务。

目录说明

DSPy 的目录结构可能包括以下部分:

  • dspy/:主目录,包含所有 DSPy 的核心模块和类。
    • core.py:包含 DSPy 的核心类和函数。
    • modules/:包含各种模块,用于实现特定的功能,如检索和生成答案。
    • teleprompt/:包含提词器(Teleprompters),用于优化程序。
    • datasets/:包含用于训练和评估的数据集。
    • compiler/:包含编译器相关的代码,用于优化程序。

架构设计特点

DSPy 的架构设计具有以下特点:

  1. 模块化

    • DSPy 采用模块化设计,每个模块负责一个具体的功能,如检索、生成答案等。
  2. 签名(Signature)

    • 签名定义了模块的输入和输出,使得模块的接口清晰明确。
  3. 优化器(Teleprompters)

    • 优化器用于自动调整模块的参数,以优化性能。
  4. 编译器

    • 编译器是 DSPy 的核心组件,它将程序、数据和优化器结合起来,生成优化后的程序。
  5. 数据驱动

    • DSPy 的设计允许从数据中学习,以自动调整程序的行为。
  6. 意图驱动

    • 通过清晰的签名和模块化设计,DSPy 允许开发者以意图驱动的方式构建程序。
  7. 可扩展性

    • 新的模块和优化器可以很容易地集成到现有的架构中。
  8. 灵活性

    • 开发者可以根据需要选择使用 DSPy 的不同组件。
  9. 自动化

    • 自动化优化减少了手动调整提示和模型参数的工作量。
  10. 可靠性

    • 通过系统化的方法,DSPy 提高了 AI 应用的可靠性和预测性。

DSPy 的架构设计使其成为一个强大且灵活的工具,适用于构建和优化基于大型语言模型的 AI 应用。通过模块化和自动化的优化,DSPy 简化了开发过程,并提高了最终应用的性能和可靠性。






如何结合 LangChain 技术使用 DSPy 框架优化语言模型?

结合 LangChain 技术使用 DSPy 框架优化语言模型,可以按照以下步骤进行:

  1. 理解 DSPy 框架:首先,需要了解 DSPy(Declarative Language Model Programming)是一个由斯坦福大学研究人员开发的开源项目,旨在通过声明式编程来优化大型语言模型(LLM)。它将传统提示词工程转变为以编程为中心的方法,用于基于语言模型的应用程序。

  2. 自动化 Prompt 生成和管理:DSPy 作为一个高效的自动化 Prompt 框架,简化了复杂的 Prompt 生成和管理过程。可以通过快速上手教程在短时间内实现自动化 Prompt 的创建和优化。

  3. 编程优先:DSPy 优先考虑编程而非手动调整提示词,以创建更复杂的 LMP 应用。这意味着在使用 DSPy 时,应避免一次性训练或提示模型解决整个问题,而是通过逐步优化和编程来解决问题。

  4. 结合 LangChain 技术:LangChain 技术可以与 DSPy 框架结合,利用 LangChain 提供的工具和库来增强 DSPy 的功能。例如,LangChain 可能提供额外的数据处理、模型集成或后处理功能,这些都可以与 DSPy 的声明式编程和自动化 Prompt 生成相结合,以进一步优化语言模型的性能。

  5. 优化流程:DSPy 引入了一种独特的编译过程,为特定任务优化整个流程。这包括使用 LangChain 技术来优化数据流、模型训练和推理过程,确保语言模型在不同任务中的高效运行。

  6. 综合应用:结合 LangChain 技术和 DSPy 框架,可以实现从数据预处理到模型微调、检索增强生成(RAG)和 Fine-tuning 等多方面的优化。这种综合应用可以提高语言模型的准确性、知识更新速度和答案透明度。

  7. 代码示例

pip install dspy
import dspyllm = dspy.OpenAI(model='gpt-3.5-turbo',api_key=openai_key)dspy.settings.configure(lm=llm)# 实现一个未优化的谎言检测器text = "Barack Obama was not President of the USA"lie_detector = dspy.Predict("text -> veracity")response = lie_detector(text=text)print(response.veracity)# 假设你想控制输出,使其始终为布尔值(True 或 False)
# 之前的简单实现无法保证这一点
# 一种保证方法是使用更精确的签名# 精确签名class LieSignature(dspy.Signature):"""Identify if a statement is True or False"""text = dspy.InputField()veracity = dspy.OutputField(desc="a boolean 1 or 0")lie_detector = dspy.Predict(LieSignature)response = lie_detector(text=text)print(response.veracity)# 生成合成数据from typing import Listfrom langchain.prompts import PromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAImodel = ChatOpenAI(temperature=1, api_key=openai_key)class Data(BaseModel):fact: str = Field(description="A general fact about life or a scientific fact or a historic fact")answer: str = Field(description="The veracity of a fact is a boolean 1 or 0")parser = JsonOutputParser(pydantic_object=Data)prompt = PromptTemplate(template="Answer the user query.\n{format_instructions}\n{query}\n",input_variables=["query"],partial_variables={"format_instructions": parser.get_format_instructions()},
)chain = prompt | model | parserchain.invoke({"query": "Generate data"})# 创建10对事实-答案的列表list_of_facts = [chain.invoke({"query": "Generate data"}) for i in range(10)]few_shot_examples = [dspy.Example(fact) for fact in list_of_facts]print(list_of_facts)# 先前方法存在的问题,数据多样性不足# 访问模式
data_schema = Data.schema()# 访问模式中的属性描述
fact_description = data_schema['properties']['fact']['description']
answer_description = data_schema['properties']['answer']['description']list_of_facts = []for i in range(10):prompt = f"Generate data. Should be different than {list_of_facts}. Answers should be diverse and representative of {answer_description}"example = chain.invoke({"query": prompt })list_of_facts.append(example)few_shot_examples = [dspy.Example(fact) for fact in list_of_facts]print(list_of_facts)# 合成提示优化
from dspy.teleprompt import BootstrapFewShot
from dspy.evaluate import answer_exact_matchtext = "Barack Obama was not President of the USA"# 将事实定义为谎言检测器的输入
trainset = [x.with_inputs('fact') for x in few_shot_examples]# 定义谎言检测器模块使用的签名
# 为了评估,你需要定义一个答案字段
class Veracity(dspy.Signature):"Evaluate the veracity of a statement"fact = dspy.InputField(desc="a statement")answer = dspy.OutputField(desc="an assessment of the veracity of the statement")class lie_detector(dspy.Module):def __init__(self):super().__init__()self.lie_identification = dspy.ChainOfThought(Veracity)def forward(self, fact):return self.lie_identification(fact=fact)teleprompter = BootstrapFewShot(metric=answer_exact_match)compiled_lie_detector = teleprompter.compile(lie_detector(), trainset=trainset)response = compiled_lie_detector(fact=text)print(f"veracity {response.answer}")

DSPy Visualizer






使用场景

以下是 DSPy 适合使用的一些场景以及相应的例子:

  1. 自动化任务优化

    • 场景:自动化地优化 AI 任务,如问答系统、摘要生成等,以提高性能。
    • 例子:使用 DSPy 构建一个问答系统,该系统能够自动调整提示和模型权重,以提高答案的准确性。
  2. 复杂 AI 系统的构建

    • 场景:构建需要多个步骤和组件协同工作的复杂 AI 系统。
    • 例子:开发一个多模态 AI 助手,它结合了图像识别、自然语言处理和知识检索来回答问题。
  3. 提高系统的可靠性和可预测性

    • 场景:在需要高度可靠性的应用中,如医疗咨询或法律分析。
    • 例子:创建一个医疗咨询系统,它使用 DSPy 来确保所有医疗建议都是基于最新和最准确的数据。
  4. 减少对人工干预的依赖

    • 场景:减少在 AI 系统开发和维护过程中对人工干预的需求。
    • 例子:自动化地生成和调整代码文档,减少手动编写和更新的需求。
  5. 教育和研究

    • 场景:在教育和研究中使用 DSPy 来教授和探索 AI 系统的设计和优化。
    • 例子:在大学课程中使用 DSPy 来展示如何构建和优化一个机器翻译系统。
  6. 跨领域应用

    • 场景:在不同领域中应用 AI 技术,如金融、法律、医疗等。
    • 例子:在金融领域,使用 DSPy 构建一个系统,该系统能够分析市场趋势并提供投资建议。
  7. 快速原型开发

    • 场景:快速开发 AI 原型,以验证新想法或解决方案的可行性。
    • 例子:开发一个原型系统,用于自动生成新闻摘要,以评估自动化内容创作的潜力。
  8. 集成和扩展现有系统

    • 场景:将 AI 能力集成到现有的软件系统中,或扩展现有系统的功能。
    • 例子:将 DSPy 集成到客户服务系统中,以自动回答常见问题并提高响应速度。
  9. 优化特定领域的约束

    • 场景:在特定领域中优化 AI 系统,以遵守该领域的特定规则和约束。
    • 例子:在法律领域,使用 DSPy 构建一个合同审查工具,确保所有合同草案都符合法律要求。
  10. 探索新的 AI 应用

    • 场景:探索和实验新的 AI 应用,以发现新的使用场景和解决方案。
    • 例子:使用 DSPy 构建一个创意写作助手,它能够根据用户提供的关键词和主题生成故事。

DSPy 通过其模块化架构和优化器,为上述场景提供了一种系统化和自动化的方法来构建和优化 AI 系统。






大厂案例:腾讯 TiDB 使用 DSPy

https://juejin.cn/post/7394284803748839424






实战,上代码!

请注意,这个示例需要你已经安装了 DSPy 和必要的依赖项。
此外,示例中的代码可能需要根据你的具体环境和 DSPy 的版本进行调整。

示例 1: 文本分类

DSPy 是一个框架,它专注于通过编程方式来使用大型语言模型(LLMs),而不是传统上使用提示工程技术。

虽然 DSPy 的核心优势在于构建复杂的、多步骤的 AI 系统,但它也可以用于更传统的自然语言处理(NLP)任务,比如文本分类或情感分析。以下是使用 DSPy 进行这类任务的一般步骤:

  1. 安装和配置 DSPy
    首先,确保你已经安装了 DSPy 和所需的依赖项。
pip install dspy
  1. 选择或配置语言模型
    选择一个适合文本分类或情感分析任务的语言模型。DSPy 支持多种语言模型,你可以选择一个预训练的模型,或者使用自己的模型。

  2. 准备数据集
    准备你的训练和测试数据集。数据集应该包含文本样本及其对应的标签。

  3. 定义任务签名
    使用 DSPy 的Signature来定义任务的输入和输出。例如,对于文本分类任务,输入是文本,输出是类别标签。

from dspy import SignatureTextClassification = Signature('text -> label')
  1. 创建模块
    创建一个或多个模块来处理文本。这可能包括数据预处理、特征提取、模型预测等步骤。
from dspy import Moduleclass TextClassifier(Module):def __init__(self, language_model):super().__init__()self.language_model = language_modeldef forward(self, text):# 这里可以添加预处理步骤preprocessed_text = self.preprocess(text)# 使用语言模型进行预测prediction = self.language_model(preprocessed_text)return prediction
  1. 编写优化逻辑
    使用 DSPy 的优化器来调整模型参数,以提高任务性能。这可能涉及到调整提示、模型权重等。

  2. 编译程序
    使用 DSPy 编译器来编译你的程序,这将包括优化步骤。

from dspy import compilecompiled_classifier = compile(TextClassifier, optimizer)
  1. 训练和评估模型
    使用训练数据集来训练模型,并在测试数据集上评估其性能。

  2. 进行预测
    使用编译后的模型对新的文本样本进行分类或情感分析。

new_text = "这里是需要分类或分析情感的文本。"
prediction = compiled_classifier(new_text)
print(f"预测结果: {prediction}")

注意事项

  • DSPy 的设计初衷是为了处理更复杂的多步骤任务,因此对于简单的文本分类或情感分析任务,可能存在更简单、更直接的工具和库,如 scikit-learn、Hugging Face 的 Transformers 等。
  • DSPy 的优势在于能够将复杂的多步骤 NLP 任务自动化和优化,例如结合检索和生成的问答系统。

使用 DSPy 进行自然语言处理任务时,你可能需要根据任务的具体需求来调整上述步骤,包括数据预处理、模型选择、优化策略等。

示例 2:问答系统

它包括了检索相关信息和生成答案的过程,并通过编译器进行了优化。

这只是一个基础示例,实际应用中可能需要更复杂的数据处理、模型配置和优化策略。

# 导入DSPy库和相关组件
import dspy
from dspy import Signature, Module, Predict, ChainOfThought, Retrieve# 配置语言模型和检索模型
# 假设我们使用的是OpenAI的模型和一些示例检索模型
turbo = dspy.OpenAI(model='gpt-3.5-turbo')
dspy.settings.configure(lm=turbo, rm='some-retriever-model')# 加载数据集,这里使用一个假设的数据集加载函数
# 实际使用时需要根据你的数据集进行调整
from dspy.datasets import load_dataset
dataset = load_dataset('your-dataset-name')# 定义一个Signature,描述输入和输出
GenerateAnswer = Signature('context, question -> answer')# 创建一个Retrieve模块,用于从文档中检索相关信息
class RAGRetrieve(Module):def __init__(self, k=3):super().__init__()self.retrieve = Retrieve(k=k)def forward(self, question):return self.retrieve(question)# 创建一个ChainOfThought模块,用于生成答案
class RAGGenerateAnswer(Module):def __init__(self):super().__init__()self.generate_answer = ChainOfThought(GenerateAnswer)def forward(self, context, question):return self.generate_answer(context=context, question=question)# 创建一个RAG模型,组合检索和生成答案的模块
class RAG(Module):def __init__(self, num_passages=3):super().__init__()self.retrieve = RAGRetrieve(k=num_passages)self.generate_answer = RAGGenerateAnswer()def forward(self, question):context = self.retrieve(question)['passages']prediction = self.generate_answer(context=context, question=question)return prediction# 实例化RAG模型
rag = RAG()# 定义优化器,这里使用一个简单的优化器作为示例
# 实际使用时可能需要更复杂的优化策略
from dspy.teleprompt import LabeledFewShot
optimizer = LabeledFewShot(metric=dspy.evaluate.answer_exact_match)# 编译模型,这里简化了编译过程
compiled_rag = dspy.compile(rag, optimizer=optimizer)# 使用模型进行预测
question = "What is the capital of France?"
prediction = compiled_rag(question)# 打印预测结果
print(f"Question: {question}")
print(f"Answer: {prediction.answer}")

相关文章:

DSPy101

DSPy 介绍 DSPy(Declarative Self-improved Language Programs in Python) 是一个用于系统化和增强在流水线内使用语言模型的框架,它通过数据驱动和意图驱动的系统来优化大型语言模型(LLM)的使用。 DSPy 的核心是模块…...

网格交易策略:从原理、应用到实战Python回测

01 引言 随着金融市场的快速发展,量化交易成为投资者追求收益的一种重要手段。在众多的量化交易策略中,网格交易策略(Grid Trading Strategy)因其简单易用、风险控制灵活等优点而备受青睐。网格交易策略的核心思想是“低买高卖”&…...

软考论文《论大数据处理架构及其应用》精选试读

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…...

fatfs API使用手册

配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…...

9.23作业

仿照string类&#xff0c;自己手动实现 My_string 代码如下 MyString.h #ifndef MYSTRING_H #define MYSTRING_H #include <iostream> #include <cstring>using namespace std;class My_string { private:char *ptr; //指向字符数组的指针int size; …...

Unity3D 房间去重叠化算法详解

前言 在Unity3D游戏开发中&#xff0c;经常需要生成和处理多个房间的场景&#xff0c;特别是在地牢生成、房屋布局或迷宫设计等应用中。为了确保生成的房间不会重叠&#xff0c;我们需要一种有效的去重叠化算法。以下将详细介绍该算法的原理和代码实现。 对惹&#xff0c;这里有…...

mybatis 配置文件完成增删改查(五) :单条件 动态sql查询,相当于switch

文章目录 单条件 动态sql查询写测试方法 疑问总结 单条件 动态sql查询 <select id"selectByConditionBySingle" resultMap"brandResultMap">.select *from tb_brandwhere<choose>/*相当于switch*/<when test"status ! null">…...

全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口

IP地址城市版查询接口 API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍 1. 快证 IP归属地查询API 特点&#xff1a;支持IPv4 提供高精版、…...

Vue3+FastAPI中Token的刷新机制(含代码示例)

在Vue3和FastAPI的应用中&#xff0c;token刷新机制通常涉及以下几个步骤&#xff1a; 登录过程&#xff1a;用户登录时&#xff0c;后端FastAPI验证用户信息&#xff0c;验证通过后生成一个访问令牌&#xff08;access token&#xff09;和一个刷新令牌&#xff08;refresh t…...

【GAN 图像生成】

理论知识学习&#xff1a; PART 1&#xff1a; 生成对抗网络GAN 深度学习模型&#xff0c;用于生成数据 对抗式训练&#xff0c;生成器v判别器 DCGAN>WGAN>StyleGAN技术不断进化 GAN在艺术创作。数据增强领域应用越来越广泛 应用&#xff1a; GAN在图像合成&#x…...

【自然语言处理】词嵌入模型

词嵌入&#xff08;Word Embedding&#xff09; 是一种将词汇表示为实数向量的技术&#xff0c;通常是低维度的连续向量。这些向量被设计为捕捉词汇之间的语义相似性&#xff0c;使得语义相似的词在嵌入空间中的距离也更近。词嵌入可以看作是将离散的语言符号&#xff08;如单词…...

了解针对基座大语言模型(类似 ChatGPT 的架构,Decoder-only)的重头预训练和微调训练

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着自然语言处理&#xff08;NLP&#xff09;技术的飞速进步&#xff0c;基于 Transformer 架构的大语言模型在众多任务中取得了显著成就。特别是 Decoder-only 架构&#xff0c;如 GPT 系列模型&…...

cmake如何在编译时区分-std=c++17和-std=gnu++17?检查宏

如何在编译时区分-stdc17和-stdgnu17&#xff1f;检查宏&#xff1f;-腾讯云开发者社区-腾讯云 我正在使用__int128扩展的g。-stdc17的问题是&#xff0c;一些C库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-stdgnu17时&#xff0c;它工作得很好。 我…...

速通数据结构与算法第七站 排序

系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 3 速通数据结构与算法第三站 单链表 http://t.csdnimg.cn/cDpcC 4 速通…...

灵当CRM index.php接口SQL注入漏洞复现 [附POC]

文章目录 灵当CRM index.php接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 灵当CRM index.php接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技…...

修复: Flux女生脸不再油光满面, 屁股下巴 -- 超实用Comfyui小技巧

ComfyUI上目前最强画图模型公认为Flux. 初次用Flux基础模型画真实的女生时, 和SD比起来, 会觉得画出来细节更多, 更真实. 但是当画多了, 就会觉得画出来的女生总是似曾相识. 仔细观察, 会发现一些共同的特征. 人偏老气, 像30~50的女生. 改了提示词也效果不大. 颧骨凸起, 嘴…...

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱&#xff0c;让它出来见见世面。。。后续空了持续更新 文章目录 1.Background2.Related works2.1 典型推荐模型2.1.1 DIN2.1.2 DIEN2.1.3 SIM2.1.4 MMoE2.1.5 其他 2.2. 生成式推荐 3.Method3.1 统一特征空间3.2 重塑召回排序模型3.…...

金智维KRPA之Excel自动化

Excel自动化操作概述 Excel自动化主要用于帮助各种类型的企业用户实现Excel数据处理自动化&#xff0c;Excel自动化是可以从单元格、列、行或范围中读取数据&#xff0c;向其他电子表格或工作簿写入数据等活动。 通过相关命令&#xff0c;还可以对数据进行排序、进行格式…...

哪款宠物空气净化器能有效去除浮毛?希喂、352实测分享

你是否曾经站在家电卖场里&#xff0c;面对琳琅满目的宠物空气净化器产品而感到无所适从&#xff1f;或者在浏览网上商城时&#xff0c;被海量的参数和功能描述搞得头晕眼花&#xff1f;别担心&#xff0c;你不是一个人。在这个科技飞速发展的时代&#xff0c;选择一台既能满足…...

2024.9.28更换启辰R30汽车火花塞

2024.9.28周六汽车跑了11万公里&#xff0c;实在加速肉&#xff0c;起步顿挫&#xff0c;油耗在8个&#xff0c;决定更换火花塞。第一个火花塞要拆掉进气歧管。第二和第三个可以直接换。打开第二个火花塞一看电极都被打成深坑&#xff0c;针电极都被打凸。我有两个旧的火花塞&a…...

2024上海网站建设公司哪家比较好TOP3

判断一家网建公司的好坏&#xff0c;第一是看公司背景&#xff0c;包括成立时间&#xff0c;工商注册信息等&#xff0c;第二可以去看看建站公司做的案例&#xff0c;例如&#xff0c;网站开发、设计、引流等等的以往案例&#xff0c;了解清楚具体的业务流程。 一、公司背景 …...

TDesign组件库+vue3+ts 如何视觉上合并相同内容的table列?(自定义合并table列)

背景 当table的某一列的某些内容相同时&#xff0c;需要在视觉上合并这一部分的内容为同个单元格 如上图所示&#xff0c;比如需要合并当申请人为同个字段的列。 解决代码 <t-table:data"filteredData":columns"columns":rowspan-and-colspan"…...

BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下&#xff1a; 2、使用yet another bacnet explorer 用作服务&#xff0c;用于发现设备&#xff0c;界面如下&#xff1a; 3、通过wireshark 抓包如下&#xff1a; &#xff08;1&#xff09;、整体包如下&#xff1a; &#xff08;2&#xff09;、m…...

android 根据公历日期准确节气计算年月日时天干地支 四柱八字

1 年柱 判断当前日期是否超过本年的立春 未超过年份-1 已超过按当前年份计算 2月柱 当前日期是否超过当月的第一个节气 未超过-1 超过当前月份计算 节气对日柱时柱没影响。 获取某年某月第一个节气的准确日期 private int sTerm(int y, int n) {int[] sTermInfo…...

VMware虚拟机连接公网,和WindTerm

一、项目名称 vmware虚拟机连接公网和windterm 二、项目背景 需求1&#xff1a;windows物理机&#xff0c;安装了vmware虚拟机&#xff0c;需要访问公网资源&#xff0c;比如云服务商的yum仓库&#xff0c;国内镜像加速站的容器镜像&#xff0c;http/https资源。 需求2&#xf…...

游戏盾SDK真的能无视攻击吗

游戏盾SDK真的能无视攻击吗&#xff1f;在当今的互联网环境中&#xff0c;游戏行业蓬勃发展&#xff0c;但同时也面临着日益严峻的安全挑战。DDoS攻击、CC攻击、外挂作弊等恶意行为频发&#xff0c;不仅威胁着游戏的稳定性和公平性&#xff0c;也严重影响了玩家的游戏体验。为了…...

【QT】亲测有效:“生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量”错误的解决方案

在使用dlib开发人脸对齐功能时&#xff0c;出现了”生成的目标文件包含了过多的段&#xff0c;超出了编译器或链接器允许的最大数量的错误“。 主要功能代码如下&#xff1a; #include <QApplication> #include <QImage> #include <QDebug>#include <dlib…...

什么是 Apache Ingress

Apache Ingress 主要用于管理来自外部的 HTTP 和 HTTPS 流量&#xff0c;并将其路由到合适的 Kubernetes 服务。 容器化与 Kubernetes 是现代云原生应用程序的基础。Kubernetes 的主要职责是管理容器集群&#xff0c;确保它们的高可用性和可扩展性&#xff0c;同时还提供自动化…...

SpringBoot助力墙绘艺术市场创新

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…...

Antlr的使用

概念 ANTLR&#xff08;ANother Tool for Language Recognition&#xff09;是一个强大的解析器生成工具&#xff0c;用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR通过定义文法&#xff08;grammar&#xff09;来识别、构建和访问语言中的元素。 ANTLR为包括Jav…...

佛山网站建设no.1/千万不要做手游推广员

摘要 腾兴网为您分享:PHP定时执行程序脚本的例子总结&#xff0c;中邮网院&#xff0c;智宽生活&#xff0c;指南针&#xff0c;弈客围棋等软件知识&#xff0c;以及包牛牛&#xff0c;幼儿园报名表&#xff0c;药品营销策划方案&#xff0c;excel乱码&#xff0c;家年华&#…...

网站找谁做/美国新冠疫情最新消息

Maven 进阶Maven 依赖机制传统方式Maven 的方式解释说明Maven POMPOM 的例子Maven 插件插件类型Maven 快照什么是快照&#xff1f;快照与版本Maven 依赖机制 在 Maven 依赖机制的帮助下自动下载所有必需的依赖库&#xff0c;并保持版本升级。让我们看一个案例研究&#xff0c;…...

网站制作百度/营销型网站的公司

跟着官网的教程学lvgl&#xff0c;在画圆弧的时候发现不知道怎么设置圆弧的粗细。 官网教程没用到&#xff0c;查百度半天也没找着。最后翻函数手册发现原来 lv_style_set_arc_width() 这个函数就是用来设置圆弧的粗细的。&#xff08;我以为是用来设置宽度的&#xff09; LV…...

app网站公司名称/哔哩哔哩b站在线看免费

前言Excel是很多公司非常流行的工具&#xff0c;数据分析师和数据科学家经常发现他们把它作为数据分析和可视化工具的一部分&#xff0c;但这并不总是最好的选择。尤其是在数据量很大的时候&#xff0c;Excel容易让我们无法使用其他应用程序&#xff0c;而且有些报告需要30分钟…...

岳阳政府网站建设公司/外贸推广平台哪家好

这里需要升级docker版本,因为centos7 yum源默认自带的docker版本无法使用compose&#xff0c;详情见: http://nanguawu.me/container/5013.html容器部署目录结构&#xff1a;[rootvm2 web_django]# tree -L 2.├── db│ ├── auto.cnf│ ├── ca-key.pem│ ├── ca.pem…...

网站用自己的电脑做服务器吗/谷歌seo快速排名优化方法

with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能&#xff08;2.5 版本中要通过 from __future__ import with_statement 导入后才可以使用&#xff09;&#xff0c;从 2.6 版本开始缺省可用&#xff08;参考 What’s new in python 2.6? 中 with 语句相…...