大语言模型基础-与大语言模型交互

与大语言模型交互

提示工程

如果我们把大语言模型比作一个能力极强的"大脑",那么提示 (Prompt) 就是我们与这个"大脑"沟通的语言。

提示工程,就是研究如何设计出精准的提示,从而引导模型产生我们期望输出的回复。

模型采样参数

类似Temperature这类的可配置参数,其本质是通过调整模型对 "概率分布" 的采样策略,让输出匹配具体场景需求,配置合适的参数可以提升Agent在特定场景的性能。

传统的概率分布是由 Softmax 公式计算得到采样参数的本质就是在此基础上,根据不同策略"重新调整"或"截断"分布,从而改变大模型输出的下一个token。

  • Temperature:温度是控制模型输出 "随机性" 与 "确定性" 的关键参数。
  • Top-k:其原理是将所有 token 按概率从高到低排序,取排名前 k 个的 token 组成 "候选集",随后对筛选出的 k 个 token 的概率进行 "归一化"
  • Top-p :其原理是将所有 token 按概率从高到低排序,从排序后的第一个 token 开始,逐步累加概率,直到累积和首次达到或超过阈值 p,此时累加过程中包含的所有 token 组成 "核集合",最后对核集合进行归一化。
零样本、单样本与少样本提示

根据我们给模型提供示例(Exemplar)的数量,提示可以分为三种类型。

零样本提示 (Zero-shot Prompting) 这指的是我们不给模型任何示例

单样本提示 (One-shot Prompting) 我们给模型提供一个完整的示例,向它展示任务的格式和期望的输出风格。

少样本提示 (Few-shot Prompting) 我们提供多个示例,这能让模型更准确地理解任务的细节、边界和细微差别,从而获得更好的性能。

指令调优的影响

早期的 GPT 模型(如 GPT-3)主要是"文本补全"模型,它们擅长根据前面的文本续写,但不一定能很好地理解并执行人类的指令。

指令调优 (Instruction Tuning) 是一种微调技术,它使用大量"指令-回答"格式的数据对预训练模型进行进一步的训练。经过指令调优后,模型能更好地理解并遵循用户的指令。

指令调优的出现,极大地简化了我们与模型交互的方式

基础提示技巧

角色扮演 (Role-playing) 通过赋予模型一个特定的角色,我们可以引导它的回答风格、语气和知识范围,使其输出更符合特定场景的需求。

bash 复制代码
# 案例
你现在是一位资深的Python编程专家。请解释一下Python中的GIL(全局解释器锁)是什么,要让一个初学者也能听懂。

上下文示例 (In-context Example) 这与少样本提示的思想一致,通过在提示中提供清晰的输入输出示例,来"教会"模型如何处理我们的请求,尤其是在处理复杂格式或特定风格的任务时非常有效。

bash 复制代码
# 案例
我需要你从产品评论中提取产品名称和用户情感。请严格按照下面的JSON格式输出。

评论:这款"星尘"笔记本电脑的屏幕显示效果惊人,但我不太喜欢它的键盘手感。
输出:{"product_name": "星尘笔记本电脑", "sentiment": "混合"}

评论:我刚买的"声动"耳机音质很棒,续航也超出了我的预期!
输出:
思维链

思维链 (Chain-of-Thought, CoT) 是一种强大的提示技巧,它通过引导模型"一步一步地思考",提升了模型在复杂任务上的推理能力。

实现 CoT 的关键,是在提示中加入一句简单的引导语,如"请逐步思考"或"Let's think step by step"。

文本分词

在将自然语言文本喂给大语言模型之前,必须先将其转换成模型能够处理的数字格式。这个将文本序列转换为数字序列的过程,就叫做分词 (Tokenization)分词器 (Tokenizer) 的作用,就是定义一套规则,将原始文本切分成一个个最小的单元,我们称之为词元 (Token)

为何需要分词

早期的自然语言处理任务可能会采用简单的分词策略:按词分词 (Word-based)按字符分词 (Character-based) ,为了兼顾词表大小和语义表达,现代大语言模型普遍采用子词分词 (Subword Tokenization) 算法。它的核心思想是:将常见的词(如 "agent")保留为完整的词元,同时将不常见的词(如 "Tokenization")拆分成多个有意义的子词片段(如 "Token" 和 "ization")。这样既控制了词表的大小,又能让模型通过组合子词来理解和生成新词。

字节对编码算法解析

字节对编码 (Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一,其核心思想非常简洁,可以理解为一个"贪心"的合并过程:

  • 初始化:将词表初始化为所有在语料库中出现过的基本字符。
  • 迭代合并:在语料库上,统计所有相邻词元对的出现频率,找到频率最高的一对,将它们合并成一个新的词元,并加入词表。
  • 重复 :重复第 2 步,直到词表大小达到预设的阈值。

    训练结束后,词表大小达到 10,我们就得到了新的分词规则。现在,对于一个未见过的词 "bug",分词器会先查找 "bug" 是否在词表中,发现不在;然后查找 "bu",发现不在;最后查找 "b" 和 "ug",发现都在,于是将其切分为 'b', 'ug'
    后续的许多算法都是在BPE的基础上进行优化的。其中,Google 开发的 WordPiece 和 SentencePiece 是影响力最大的两种。
  • WordPiece:Google BERT 模型采用的算法,合并词元的标准不是"最高频率",而是"能最大化提升语料库的语言模型概率"。
  • SentencePiece:Google 开源的一款分词工具,最大的特点是,将空格也视作一个普通字符(通常用下划线 _ 表示)
分词器对开发者的意义

上下文窗口限制 :模型的上下文窗口(如 8K, 128K)是以 Token 数量计算的,而不是字符数或单词数。精确管理输入长度、避免超出上下文限制是构建长时记忆智能体的基础。

API 成本 :大多数模型 API 都是按 Token 数量计费的。

模型表现的异常:有时模型的奇怪表现根源在于分词。模型可能很擅长计算 2 + 2,但对于 2+2(没有空格)就可能出错

调用开源大语言模型

通过 API 来与大语言模型进行交互,以此驱动我们的智能体。

Hugging Face Transformers 是一个强大的开源库,它提供了标准化的接口来加载和使用数以万计的预训练模型。

配置环境与选择模型Qwen/Qwen1.5-0.5B-Chat是一个由阿里巴巴达摩院开源的拥有约 5 亿参数的对话模型,它体积小、性能优异,非常适合入门学习和本地部署。

  1. 在 transformers 库中,我们通常使用 AutoModelForCausalLM 和 AutoTokenizer 这两个类来自动加载与模型匹配的权重和分词器。
python 复制代码
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# 指定模型ID
model_id = "Qwen/Qwen1.5-0.5B-Chat"

# 设置设备,优先使用GPU
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using device: {device}")

# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_id)

# 加载模型,并将其移动到指定设备
model = AutoModelForCausalLM.from_pretrained(model_id).to(device)

print("模型和分词器加载完成!")
  1. Qwen1.5-Chat 模型遵循特定的对话模板。然后,可以使用上一步加载的 tokenizer 将文本提示转换为模型能够理解的数字 ID(即 Token ID)。
python 复制代码
# 准备对话输入
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "你好,请介绍你自己。"}
]

# 使用分词器的模板格式化输入
text = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True
)

# 编码输入文本
model_inputs = tokenizer([text], return_tensors="pt").to(device)

print("编码后的输入文本:")
print(model_inputs)

>>>
{'input_ids': tensor([[151644, 8948, 198, 2610, 525, 264,  10950, 17847, 13,151645, 198, 151644, 872, 198, 108386, 37945, 100157, 107828,1773, 151645, 198, 151644, 77091, 198]], device='cuda:0'), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]],
       device='cuda:0')}
  1. 调用模型的 generate() 方法来生成回答,模型会输出一系列 Token ID,这代表了它的回答。使用分词器的 decode() 方法,将这些数字 ID 翻译回人类可以阅读的文本。
python 复制代码
# 使用模型生成回答
# max_new_tokens 控制了模型最多能生成多少个新的Token
generated_ids = model.generate(
    model_inputs.input_ids,
    max_new_tokens=512
)

# 将生成的 Token ID 截取掉输入部分
# 这样我们只解码模型新生成的部分
generated_ids = [
    output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

# 解码生成的 Token ID
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print("\n模型的回答:")
print(response)

>>>
我叫通义千问,是由阿里云研发的预训练语言模型,可以回答问题、创作文字,还能表达观点、撰写代码。我主要的功能是在多个领域提
供帮助,包括但不限于:语言理解、文本生成、机器翻译、问答系统等。有什么我可以帮到你的吗?

模型的选择

选择语言模型并非简单地追求"最大、最强",而是一个在性能、成本、速度和部署方式之间进行权衡的决策过程。

大语言模型的缩放法则与局限性

缩放法则

缩放法则(Scaling Laws)是近年来大语言模型领域最重要的发现之一。它揭示了模型性能与模型参数量、训练数据量以及计算资源之间存在着可预测的幂律关系。阐明了增加资源投入能够系统性提升模型性能的底层逻辑。

缩放法则最令人惊奇的产物是"能力的涌现"。所谓能力涌现,是指当模型规模达到一定阈值后,会突然展现出在小规模模型中完全不存在或表现不佳的全新能力。例如,链式思考 (Chain-of-Thought) 、指令遵循 (Instruction Following) 、多步推理、代码生成等能力,都是在模型参数量达到数百亿甚至千亿级别后才显著出现的。

模型幻觉

模型幻觉(Hallucination)通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。

幻觉的产生是多方面因素共同作用的结果。首先,训练数据中可能包含错误或矛盾的信息。其次,**模型的自回归生成机制决定了它只是在预测下一个最可能的词元,而没有内置的事实核查模块。**最后,在面对需要复杂推理的任务时,模型可能会在逻辑链条中出错,从而"编造"出错误的结论。此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。

检测和缓解幻觉的方法:

  • 数据层面:高质量数据清洗、引入事实性知识
  • 模型层面: 探索新的模型架构
  • 推理与生成层面:
    • 检索增强生成 (Retrieval-Augmented Generation, RAG) :RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
    • 多步推理与验证:引导模型进行多步推理,并在每一步进行自我检查或外部验证。
    • 引入外部工具:允许模型调用外部工具(如搜索引擎、计算器、代码解释器)来获取实时信息或进行精确计算。
相关推荐
渡码桑2 小时前
英伟达与SK海力士合作,下一代AI内存技术路线解析
大数据·人工智能·音视频
搞科研的小刘选手2 小时前
【国家电网省科学研究院支持】第七届物联网、人工智能与电气能源国际学术会议(IoTAIEE 2026)
人工智能·物联网·机器学习·计算机视觉·自动化·能源·电气
小雨下雨的雨2 小时前
数独算法与求解器鸿蒙PC Electron框架完成深度解析
javascript·人工智能·算法·游戏·华为·electron·鸿蒙系统
沐曦股份MetaX2 小时前
沐曦芯生,开源共创 | 沐曦股份 × SGLang联合举办技术交流Meetup,共同探索AI推理落地新路径
人工智能·开源·sglang
叫我:松哥2 小时前
基于deepseek大语言模型的项目架构图设计与绘制系统
人工智能·语言模型·自然语言处理·架构·flask·bootstrap
ouliten2 小时前
[Triton笔记7]融合注意力 (Fused Attention)
人工智能·笔记·算法
人工智能培训2 小时前
用知识图谱重构搜索引擎
大数据·人工智能·3d·重构·知识图谱·agent
Aipollo2 小时前
【知识图谱】语义本体的演进之路:从严谨到敏捷的范式转变
人工智能·知识图谱
制造业的搬运工2 小时前
低价PCB板藏隐患,如何选对线路板厂家?
人工智能·制造·pcb工艺·pcb