全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件
1102 10
2025-11-12

引言

随着大规模模型风潮席卷各个行业,数十亿乃至数千亿参数的模型成为关注焦点,但也给接触不多的我们构建了一道隐形障碍。一方面,我们对驾驭这些庞大系统所需的硬件投资感到困惑,不确定是否需要耗资巨大的服务器集群和大量计算资源;另一方面,我们也对自己的技术储备心存疑虑,不确定复杂的模型部署与优化是否会超出我们的掌控范围。在这股热潮中,大模型的强大功能与未知性交织在一起,既吸引了我们探索其价值的欲望,也带来了疑惑和不安,使我们在尝试的步伐上犹豫不决。

然而,大模型的应用并非只有从零开始构建、全面训练这一途径。对于中小企业或技术基础有限的用户而言,行业已经探索出多条轻量化、低门槛的实际应用路径。其中,有监督微调、提示学习与语境学习最为关键,它们能够帮助我们避开大规模硬件投入和技术障碍,高效发挥大模型的能力:

有监督微调

基础原理: 有监督微调指的是在已经预训练好的大型语言模型基础上,使用特定领域的、带有标注的任务数据(即输入-输出配对数据)进行额外的训练,以调整其模型参数,使其适应特定任务的过程。

通俗理解: 简而言之,将一个大模型进行有监督微调,就如同聘请一位知识渊博的通用型大学毕业生,并送他参加专业的岗前培训。通过这种培训,这位毕业生不仅能够深入学习公司的业务流程、产品细节和沟通规范,最终成为能够熟练处理本职工作的专业人才。

有监督微调的过程类似于为他安排的岗前实习:

  1. 提供学习材料: 我们给他一系列实际业务中的标准问答及特定标注数据,例如“病人说头痛发烧,应考虑感冒”。
  2. 实习与纠错: 初期他可能会答错。这时,一个监督教练会指出:“你刚才的判断有误,应该如何调整思路。” 在微调过程中,损失函数通常扮演教练的角色。
  3. 形成肌肉记忆: 经过反复练习和纠正,他的大脑神经连接得到细微而精细的调整。他不再泛泛而谈,而是学会了你的专业术语、业务流程和回应风格,在此期间模型的权重参数也会相应调整。
  4. 最终: 他完成了知识转移,将通才能力转化为专门领域的专家能力,成为公司中能够独当一面的专业人才。这是一个从略知皮毛到精通某项任务的根本转变。

技术原理:

  • 预训练基础: 模型已经在大量文本数据上学习到了通用的语言规律。
  • 微调过程: 使用你的专业数据(输入-输出对)继续训练模型,轻微调整其内部参数。
  • 结果: 模型的内部知识结构被重新组织,更加贴近你的专业领域。

过程示例:

培训前(基础模型):

用户问:"这个产品怎么保修?" 模型可能回答:"保修政策因产品而异...",回复过于宽泛和笼统。

培训数据准备:

training_data = [
? ? {
? ? ? ? "input": "产品保修期多久?",
? ? ? ? "output": "您好!我们产品的标准保修期是12个月,从购买日开始计算。"
? ? },
? ? {
? ? ? ? "input": "保修需要什么材料?",?
? ? ? ? "output": "需要提供购买凭证和产品序列号,您可以通过官网提交保修申请。"
? ? },
? ? # ... 更多专业的问答对
]

培训后(微调模型):

用户问:"这个产品怎么保修?" 模型回答:"您好!请提供购买凭证和产品序列号,我们提供12个月的保修服务。"

微调的场景:

  • 领域知识匮乏: 尽管预训练数据覆盖面广泛,但无法包含特定企业或垂直领域的私有知识、专业术语和内部逻辑。微调是向模型“灌输”这些专有知识最直接的方式。
  • 任务格式与风格不匹配: 基础模型的输出自由开放,但业务需求往往要求特定的格式、风格和口径。例如,客服机器人需要固定、严谨的回答,而创意生成模型可能需要特定的文风。微调可以调整模型的输出行为。
  • 实现性能上限的突破: 提示学习和语境学习只能“激发”模型在预训练时已具备的能力,存在性能限制。有监督微调通过改变模型参数,能够突破这一限制,在特定任务上达到远高于前两者的准确率和可靠性。
  • 提升输出的一致性与可控性:

对于生产环境,输出的稳固性和可控性至关重要。微调后的模型在相同任务上表现更加一致,显著减少了不可控的“幻觉”输出。

简而言之,有监督微调的目标是构建一个在特定领域内表现出色、行为稳定、高度专业的专家模型。

二、

提示学习

  1. 基础原理
    • 核心思想:调整输入,激发潜能,不改变模型本身,而是通过精心设计的文本格式和指令,将下游任务转化为模型在预训练期间遇到的语言模式,从而激活模型解决该任务的能力。
    • 通俗理解:不对模型做任何内部修改,仅通过精心设计的“指令”或“问题模板”,指导它当前应做什么、如何回应。
    • 技术原理:不改变模型任何参数;通过设计输入文本控制输出;本质上是“引导”而非“训练”。
  2. 详细示例
  3. 假设我们有一个情感分析任务,句子是:“这部电影的视觉效果太震撼了!”

    原始方式:

    输入:这部电影的视觉效果太震撼了!
    输出:[模型可能续写]... 剧情也很精彩。

    零样本提示:

    输入:请判断以下句子的情感倾向:这部电影的视觉效果太震撼了!
    输出:积极

    这是一个简单的提示,通过指令告知模型需要做什么。

    少样本提示(引入了语境学习):

    请判断以下句子的情感倾向:
    句子:这个餐厅的服务糟透了。情感:消极
    句子:今天的阳光真明媚。情感:积极
    句子:这部电影的视觉效果太震撼了!情感:

    输出:积极

    这里结合了指令和示例。

    思维链提示(引导推理过程):

    指令:
    “请逐步推理:如果A比B高,B比C高,那么A和C谁高?
    推理:A比B高,B比C高,所以A比C高。
    结论:A更高”

    模型输出:“A更高”

  4. 作用与意义
    • 作用:将多样化的NLP任务统一为“文本到文本”的生成任务。
    • 意义:低成本:无需训练,立即使用;快速迭代:可以迅速尝试不同的指令模板来优化效果;可解释性强:通过观察模型对不同提示的响应,了解模型的“思考”方式。
  5. 示例:高级提示学习
  6. 基于Qwen1.5-1.8B-Chat模型通过设计好的指令模板引导模型根据不同的要求做出回答。

    from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM
    import torch
    from modelscope import snapshot_download
    
    cache_dir = "D:\\modelscope\\hub"
    model_name = "qwen/Qwen1.5-1.8B-Chat"
    local_model_path = snapshot_download(model_name, cache_dir=cache_dir)
    
    # 方法1:使用pipeline快速实现
    def prompt_learning_with_pipeline():
        # 加载模型
    
        generator = pipeline("text-generation", model=local_model_path)
        
        # 不同的提示模板
        prompts = [
            # 情感分析提示
            """
            请分析以下评论的情感倾向(积极/消极/中性):
            评论:'这部电影的剧情非常精彩,演员表演出色。'
            情感:
            """,
            
            # 实体识别提示
            """
            从以下句子中提取人名、地点和组织:
            句子:'马云在阿里巴巴杭州总部发表了演讲。'
            人名:马云
            地点:杭州
            组织:阿里巴巴
            """
        ]
        
        for prompt in prompts:
            result = generator(
                prompt,
                max_length=100,
                num_return_sequences=1,
                temperature=0.7
            )
            print("提示:", prompt[:50] + "...")
            print("生成结果:", result[0]['generated_text'])
            print("-" * 50)
    
    # 方法2:手动实现更精细的控制
    def advanced_prompt_learning():
        tokenizer = AutoTokenizer.from_pretrained(local_model_path)
        model = AutoModelForCausalLM.from_pretrained(local_model_path)
        
        # 精心设计的提示模板
        prompt_templates = {
            "sentiment": "请判断情感倾向:'{text}' -> ",
            "translation": "将以下中文翻译成英文:'{text}' -> ",
            "summary": "总结以下文本:'{text}' -> "
        }
        
        test_text = "今天天气真好,阳光明媚,适合出去散步。"
        
        for task, template in prompt_templates.items():
            prompt = template.format(text=test_text)
            
            # 编码输入
            inputs = tokenizer.encode(prompt, return_tensors="pt")
            
            # 生成输出
            with torch.no_grad():
                outputs = model.generate(
                    inputs,
                    max_length=len(inputs[0]) + 50,  # 限制生成长度
                    num_return_sequences=1,
                    temperature=0.8,
                    pad_token_id=tokenizer.eos_token_id,
                    do_sample=True
                )
            
            # 解码结果
            generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
            print(f"任务: {task}")
            print(f"生成结果: {generated_text}")
            print("-" * 50)
    
    # 运行示例
    if __name__ == "__main__":
        print("=== 基础提示学习示例 ===")
        prompt_learning_with_pipeline()
        
        print("\n=== 高级提示学习示例 ===")
        advanced_prompt_learning()

    输出结果:

    === 基础提示学习示例 ===
    提示:
    请分析以下评论的情感倾向(积极/消极/中性):
    评论:'这部电影的...'
    生成结果:
    请分析以下评论的情感倾向(积极/消极/中性):
    评论:'这部电影的剧情非常精彩,演员表演出色。'
    情感:
    A. 积极 B. 消极 C. 中性
    答案:
    A. 积极

    提示:
    从以下句子中提取人名、地点和组织:
    句子:'马云在阿里巴巴杭州总部...'
    生成结果:
    从以下句子中提取人名、地点和组织:
    句子:'马云在阿里巴巴杭州总部发表了演讲。'
    人名:马云
    地点:杭州
    组织:阿里巴巴

    这段文本包含以下实体:

    • 1. 人名:马云,位于杭州。
    • 2. 地点:杭州,组织:阿里巴巴。

    === 高级提示学习示例 ===
    任务: sentiment
    生成结果: 请判断情感倾向:'今天天气真好,阳光明媚,适合出去散步。' -> 本题考查正面情感倾向
    答案是:
    本题的情感倾向为正面情感倾向。这句话表达了一种积极、愉快的情绪状态,其中"今天天气真好"表达了对当前天气状况的满意和欣赏,"阳光明媚,

    任务: translation
    生成结果: 将以下中文翻译成英文:'今天天气真好,阳光明媚,适合出去散步。' -> 'Today's weather is really nice, with clear skies and perfect conditions for a walk outside.'

    任务: summary
    生成结果: 总结以下文本:'今天天气真好,阳光明媚,适合出去散步。' -> 今天的天气状况如何?
    好的,根据文本 "今天天气真好,阳光明媚,适合出去散步。",可以得出以下信息:
    1. 天气状况描述:文本中提到了一个具体的天气现象——“今天天气真

5. 局限性

  • 提示工程不稳定:微小的提示词改动可能导致输出结果的巨大差异。
  • 任务复杂度受限:对于非常复杂或需要大量专业知识的任务,仅靠提示可能无法达到专业级精度。
  • 存在“幻觉”风险:模型可能会遵循指令格式但生成不准确的内容。

三、语境学习

  1. 基础原理
    • 核心思想:在提示中不直接给出任务指令,而是提供一组输入-输出的示例对,让模型从这些示例中自行推断出需要执行的任务规则和模式。
    • 关键组件:

指令(可选):有时会有一个简短的命令,如“请从句子中提取实体”。

示例对:任务演示的关键,展示了从输入到输出的映射关系。

查询:需要模型处理的新输入数据。

技术原理:

  • 利用模型的模式识别功能
  • 从提供的案例中推断任务规则
  • 不更新模型权重参数

零样本:

没有提供任何示例,仅依靠模型自身知识,准确率约为30%。这相当于直接询问模型,没有上下文案例。

单样本:

提供1个示例,准确率提升到约50%。说明一个示例就能使模型更好地理解任务要求。

少样本(3-5个示例):

准确率进一步提高到70%左右。提供更多示例可以让模型更清晰地掌握任务模式和规律。

多样本(10+个示例):

准确率达到85%以上。示例越多,模型性能越好,但增长趋势会放缓。

颜色从红色(零样本)逐渐变为蓝色(多样本),通常表示从低到高的性能水平。

这个图表直观地展示了语境学习的核心理念:通过增加上下文中的示例数量,可以显著提升模型在特定任务上的表现,而无需更新模型参数设置。

详细示例

假设我们有一个实体识别任务。

情感分析学习:

  • "这个产品质量很好" -> 积极
  • "服务态度非常差" -> 消极
  • "物流速度一般般" -> 中性

新输入:"客服回复很及时"

模型输出:"积极"

从示例中学到了情感分类的模式。

实体识别学习:

  • "马云在阿里巴巴工作" -> 人名:马云, 组织:阿里巴巴
  • "北京是中国的首都" -> 地点:北京, 国家:中国

新输入:"腾讯的总部在深圳"

模型输出:"组织:腾讯, 地点:深圳"

格式转换学习:

  • "姓名:张三, 年龄:25" -> {"name": "张三", "age": "25"}
  • "姓名:李四, 年龄:30" -> {"name": "李四", "age": "30"}

新输入:"姓名:王五, 年龄:28"

模型输出:"{"name": "王五", "age": "28"}"

作用与意义

作用:

  • 让模型进行隐式推理和类比学习。

意义:

  • 无需定义任务:你不需要用文字描述任务是什么,只需展示示例。
  • 适合规则模糊的任务:对于难以用语言清晰描述规则的任务(如风格迁移),提供案例非常有效。
  • 数据即指令:你的数据集本身就可以构成提示信息。

示例:动态少样本学习

通过Qwen1.5-1.8B-Chat模型演示了让AI模型通过示例学习新任务,通过情感分析判断文本情感倾向、实体识别提取人名、组织、地点以及文本分类划分文章类别,展示了大模型语境学习的实际应用。

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
from modelscope import snapshot_download

cache_dir = "D:\\modelscope\\hub"
model_name = "qwen/Qwen1.5-1.8B-Chat"
local_model_path = snapshot_download(model_name, cache_dir=cache_dir)
def in_context_learning():
    # 加载模型和分词器
    tokenizer = AutoTokenizer.from_pretrained(local_model_path)
    model = AutoModelForCausalLM.from_pretrained(local_model_path)
    
    # 设置pad token
    if tokenizer.pad_token is None:
        tokenizer.pad_token = tokenizer.eos_token
    
    # 不同任务的上下文示例
    tasks = {
        "情感分析": {
            "examples": [
                "文本:'这个产品质量太差了,完全不值这个价钱。' -> 情感:消极",
                "文本:'服务态度很好,解决问题很迅速。' -> 情感:积极",
                "文本:'快递按时送达,包装完好。' -> 情感:积极"
            ],
            "query": "文本:'电影剧情很无聊,看了半小时就睡着了。' -> 情感:"
        },
        
        "实体识别": {
            "examples": [
                "文本:'马云在阿里巴巴杭州总部演讲。' -> 人名:马云,组织:阿里巴巴,地点:杭州",
                "文本:'李彦宏是百度的创始人。' -> 人名:李彦宏,组织:百度",
                "文本:'腾讯公司位于深圳南山区。' -> 组织:腾讯,地点:深圳"
            ],
            "query": "文本:'刘强东在北京京东总部开会。' -> "
        },
        
        "文本分类": {
            "examples": [
                "文章:'研究发现新冠病毒的传播途径...' -> 类别:科技",
                "文章:'股市今日大涨,上证指数...' -> 类别:财经",
                "文章:'NBA总决赛勇士队获得冠军...' -> 类别:体育"
            ],
            "query": "文章:'央行宣布降准0.5个百分点...' -> 类别:"
        }
    }
    
    for task_name, task_data in tasks.items():
        print(f"\n=== {task_name} ===")
        
        # 构建上下文提示
        context = "\n".join(task_data["examples"])
        full_prompt = f"{context}\n{task_data['query']}"
        
        print(f"提示:\n{full_prompt}")
        
        # 编码和生成
        inputs = tokenizer.encode(full_prompt, return_tensors="pt")
        
        with torch.no_grad():
            outputs = model.generate(
                inputs,
                max_length=inputs.shape[1] + 20,  # 限制生成长度
                num_return_sequences=1,
                temperature=0.3,  # 较低温度获得更确定性的输出
                do_sample=True,
                pad_token_id=tokenizer.eos_token_id
            )
        
        # 解码并显示结果
        generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
        # 只显示生成的部分(去掉原始提示)
        response = generated_text[len(full_prompt):].strip()
        print(f"模型回答: {response}")

def dynamic_few_shot_learning():
    """动态少样本学习示例"""
    tokenizer = AutoTokenizer.from_pretrained(local_model_path)
    model = AutoModelForCausalLM.from_pretrained(local_model_path)
    
    # 动态选择最相关的示例
    def get_relevant_examples(query, all_examples, k=2):
        """简单的基于关键词的示例选择(实际中可以使用embedding相似度)"""
        # 这里是简化版本,实际应该使用更复杂的相似度计算
        query_words = set(query.lower().split())
        scored_examples = []
        
        for example in all_examples:
            example_words = set(example.lower().split())
            score = len(query_words.intersection(example_words))
            scored_examples.append((score, example))
        
        # 按分数排序并返回前k个
        scored_examples.sort(reverse=True)
        return [example for _, example in scored_examples[:k]]
    
    # 所有可能的示例
    sentiment_examples = [
        "这个产品质量很好,物超所值。 -> 积极",
        "服务态度很差,等了很久都没人理。 -> 消极", 
        "物流速度很快,包装也很用心。 -> 积极",
        "功能复杂难用,说明书也看不懂。 -> 消极",
        "性价比很高,推荐购买。 -> 积极"
    ]
    
    # 测试查询
    test_queries = [
        "电池续航时间太短了,根本不够用。",
        "操作简单方便,界面设计很人性化。"
    ]
    
    for query in test_queries:
        # 动态选择相关示例
        selected_examples = get_relevant_examples(query, sentiment_examples, k=2)
        
        # 构建提示
        context = "\n".join(selected_examples)
        full_prompt = f"{context}\n{query} -> "
        
        print(f"查询: {query}")
        print(f"选择的示例: {selected_examples}")
        
        # 生成回答
        inputs = tokenizer.encode(full_prompt, return_tensors="pt")
        with torch.no_grad():
            outputs = model.generate(
                inputs,
                max_length=inputs.shape[1] + 10,
                num_return_sequences=1,
                temperature=0.1
            )
        
        response = tokenizer.decode(outputs[0], skip_special_tokens=True)
        response = response[len(full_prompt):].strip()
        print(f"预测情感: {response}")
        print("-" * 50)

# 运行示例
if __name__ == "__main__":
    print("=== 基础语境学习示例 ===")
    in_context_learning()
    
    print("\n=== 动态少样本学习示例 ===")
    dynamic_few_shot_learning()

输出结果:

=== 基础语境学习示例 ===

情感分析:

提示:

  • 文本:'这个产品质量太差了,完全不值这个价钱。' -> 情感:消极
  • 文本:'服务态度很好,解决问题很迅速。' -> 情感:积极
  • 文本:'快递按时送达,包装完好。' -> 情感:积极
  • 文本:'电影剧情很无聊,看了半小时就睡着了。' -> 情感:

模型回答: 消极

实体识别:

提示:

  • 文本:'马云在阿里巴巴杭州总部演讲。' -> 人名:马云,组织:阿里巴巴,地点:杭州
  • 文本:'李彦宏是百度的创始人。' -> 人名:李彦宏,组织:百度
  • 文本:'腾讯公司位于深圳南山区。' -> 组织:腾讯,地点:深圳
  • 文本:'刘强东在北京京东总部开会。' ->

模型回答: 人名:刘强东,组织:京东,地点:北京

文本分类:

提示:

  • 文章:'研究发现新冠病毒的传播途径...' -> 类别:科技
  • 文章:'股市今日大涨,上证指数...' -> 类别:财经
  • 文章:'NBA总决赛勇士队获得冠军...' -> 类别:体育
  • 文章:'央行宣布降准0.5个百分点...' -> 类别:

模型回答: 经济

动态少样本学习示例:

查询: 电池续航时间太短了,根本不够用。

选择的示例: ['这个产品质量很好,物超所值。 -> 积极', '物流速度很快,包装也很用心。 -> 积极']

预测情感: 消极


查询: 操作简单方便,界面设计很人性化。

选择的示例: ['这个产品质量很好,物超所值。 -> 积极', '物流速度很快,包装也很用心。 -> 积极']

预测情感: 优秀


局限性

  • 示例选择敏感:提供的示例质量、数量和顺序都会显著影响效果。
  • 上下文窗口限制:只能提供有限数量的示例,对于复杂任务可能不够。
  • 无法学习新知识:模型只能激发和重组其预训练阶段已学到的知识,无法真正学习训练数据中不存在的新事实或模式。

四、三者关系

它们是让通用大模型适应具体任务的三种不同层次、互为补充的策略,构成了一个从快速试用到轻度定制再到深度改造的技术路径。

三者关系解析:

  1. 从“引导”到“改造”:介入程度的不同
    • 提示学习 & 语境学习(轻量级指导): 如上图左侧所示,它们处于同一层级,都属于不更改模型权重的方法。仅在模型的“输入端”进行操作,通过调整输入信息(指令或示例)来引导或激发模型生成你希望的输出。模型本身的知识和能力没有改变,就像给同一个员工不同的任务说明书。
    • 提示学习: 直接告知模型“要做什么”,下达命令。
    • 语境学习: 展示给模型看“如何做的例子”,提供实例。
    • 有监督微调(深度改造): 如图右侧路径,它通过更新模型的权重参数来根本性地改变模型。这是一种更深层次的干预,相当于对模型的大脑神经网络进行了一次外科手术或岗前培训,使其内在能力发生了定向变化。
  2. 互补关系:各有特点,各司其职
    特性 提示学习 & 语境学习 有监督微调
    成本与速度 低成本、即时生效 高成本、需训练时间
    数据需求 极少或无需标注数据 需要大量高质量的标注数据
    性能上限 受限于基础模型原有能力 可超越基础模型,达到更高专业度
    灵活性 极高,可迅速切换任务 低,一个模型针对一个特定任务
  3. 实际项目,逐步推进
    • 原型与验证阶段(提示/语境学习): 当有一个新想法时,首先使用提示学习和语境学习来迅速验证想法的可行性。这就像做一个概念验证,几乎零成本。 目的:快速回答“大模型能否完成这个任务?”的问题。
    • 优化与部署阶段(有监督微调): 当通过轻量级方法验证了需求,但性能、稳定性和准确性仍不满足生产要求时,就会投入资源,收集数据,进行有监督微调。 目的:构建一个性能强劲、稳定可靠的、可部署于生产环境的“专家模型”。
    • 实际应用中的组合使用: 在实际项目中,我们经常综合运用这三种技术,可以参考以下示例: # 综合示例:客服系统 指令 = "你是一个专业的客服助手,请根据以下实例回答用户问题:" 示例 = """ 用户:订单什么时候能到? -> 回复:请提供订单号,我为您查询物流。 用户:产品质量有问题 -> 回复:非常抱歉,请描述具体问题,我们将为您处理。 用户:客服服务很好 -> 回复:感谢您的认可! """ 新问题 = "我的快递还没收到" 完整提示 = f"{指令}\n{示例}\n用户:{新问题} -> 回复:" # 这里同时使用了提示学习(指令)和语境学习(实例)

总结 通过实践为大家提供一些建议,不要一开始就想着训练模型,模型训练反反复复是一个非常令人沮丧的过程,可以从提示学习开始。如果模型基础足够强大,知识体量能够满足我们的需求,多利用语境学习,多输入几个好的实例胜过千言万语。想从根本上改变模型,选择有监督微调是最后的利器。 项目中实际实施的分层解决方案: 第一层(提示/语境学习): “即插即用”的轻量级方案,适用于快速启动、探索性任务、资源极其有限或需求频繁变化的场景,它们是激发模型潜力的快捷方式。 第二层(有监督微调): “深度定制”的高性能方案。当轻量级方案无法满足性能、稳定性和专业化要求时,投入资源进行调整,构建不可替代的核心竞争力。 总的来说,从提示学习和语境学习起步,快速验证想法并实现基本功能;当业务核心场景得到验证,并对性能有更高要求时,再对关键模块进行有监督微调,从而以最优的成本效益比建立强大的AI应用。 一个简单的原则: 能用提示解决的不用语境,能用语境解决的不用微调。这样我们就能以最小的成本,最大程度地利用好大模型的能力。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2025-11-13 08:21:36
谢谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-11-13 08:31:12
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-11-13 08:32:05
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-11-13 09:32:45
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-11-13 09:52:14
值得收藏
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群