1. 从文本到矩阵:大语言模型的输入处理
作为一名长期从事AI应用开发的工程师,我经常需要向非技术背景的同事解释大语言模型的工作原理。今天我就用最通俗的方式,带大家了解大语言模型是如何处理输入的。
1.1 输入文本的组成结构
很多人以为大模型只接收用户当前的问题,实际上它的输入要复杂得多。典型的输入包含以下几个部分:
- 系统提示词:相当于给模型"设定角色"。比如"你是一个专业的法律顾问",或者"请用幽默风趣的方式回答"。
- 工具描述:定义模型可以调用的外部功能,比如天气查询、计算器等。
- 历史对话:之前的问答记录,让模型保持上下文连贯。
- 最新提问:用户当前的问题。
用代码表示的话,大概长这样:
python复制messages = [
{"role": "system", "content": "你是一个专业的医疗助手"},
{"role": "user", "content": "感冒了怎么办"},
{"role": "assistant", "content": "建议多休息、多喝水..."},
{"role": "user", "content": "需要吃药吗"}
]
重要提示:每次调用模型时,这些内容都会被完整发送。随着对话进行,输入文本会越来越长。
1.2 文本到数字的转换过程
模型内部处理的是数字而非文字,所以需要把文本转换成数学模型能理解的格式。这个过程分为两步:
分词(Tokenization)
把句子拆分成更小的单元(token)。例如:
- "北京天气" → ["北京", "天气"]
- "unhappy" → ["un", "happy"]
不同模型的分词规则不同。中文通常一个字对应1-2个token,英文单词可能被拆分成多个token。
嵌入(Embedding)
把token转换成固定长度的数字向量。比如:
- "猫" → [0.1, -0.3, ..., 0.8]
- "狗" → [0.2, -0.25, ..., 0.75]
这些向量不仅表示词义,还能体现词与词之间的关系。相似的词会有相似的向量表示。
1.3 上下文长度的限制
所有大模型都有输入长度限制,比如4k
