系列导读:上一篇我们了解了生成式AI,今天深入探讨当前最热门的AI技术——大语言模型,揭开ChatGPT等应用背后的秘密。
一、什么是大语言模型?
1.1 定义
大语言模型(Large Language Model,简称LLM)= 参数量巨大、在大规模文本数据上训练的语言模型。
1.2 "大"在哪里?
参数量大: GPT-3:1750亿参数 GPT-4:估计万亿级参数 Claude 3:参数量未公开 数据量大: 训练数据:数万亿词 涵盖:网页、书籍、论文、代码... 计算量大: 训练成本:数百万美元 训练时间:数周到数月1.3 发展历程
2017:Transformer架构提出 2018:BERT(3.4亿)、GPT-1(1.17亿) 2019:GPT-2(15亿) 2020:GPT-3(1750亿) 2022:ChatGPT发布 2023:GPT-4、Claude 2、Llama 2 2024:GPT-4o、Claude 3、Llama 3二、Transformer架构
2.1 Transformer的核心
自注意力机制(Self-Attention)
计算序列中每个位置与其他位置的相关性 输入序列:"我 爱 你" 位置1:"我" 关注 "我"、"爱"、"你" 位置2:"爱" 关注 "我"、"爱"、"你" 位置3:"你" 关注 "我"、"爱"、"你" 每个位置根据相关性聚合信息2.2 注意力计算
Attention(Q, K, V) = softmax(QK^T / √d) V Q(Query):查询向量 K(Key):键向量 V(Value):值向量 直观理解: Q:我想找什么 K:这里有什么 V:内容是什么 softmax:计算相关性权重2.3 多头注意力
多个注意力头并行计算 头1:关注语法关系 头2:关注语义关系 头3:关注指代关系 ... 最后拼接所有头的输出2.4 Transformer结构
输入嵌入 + 位置编码 ↓ ┌──────────────────┐ │ 多头自注意力 │ │ 前馈网络 │ × N层 │ 层归一化 │ │ 残差连接 │ └──────────────────┘ ↓ 输出层三、GPT系列
3.1 GPT的架构
GPT = Transformer解码器
单向注意力:只看到当前位置之前的内容 自回归生成:逐词生成 生成过程: 输入:"今天天气" 预测:"很" 输入:"今天天气很" 预测:"好" ...3.2 GPT-3的能力
少样本学习(Few-shot): 给几个示例,模型就能学会新任务 示例: 将英文翻译成法文: sea otter => loutre de mer peppermint => menthe poivrée plush giraffe => girafe en peluche cheese => ? 模型输出:fromage3.3 ChatGPT的创新
基于GPT-3.5/GPT-4,加入对话优化。
训练流程: 1. 预训练:大规模文本学习语言知识 2. 监督微调(SFT):用对话数据微调 3. 奖励模型(RM):训练奖励模型 4. 强化学习(PPO):优化对话策略 RLHF(人类反馈强化学习): 人类对模型输出评分 训练奖励模型学习人类偏好 用强化学习优化模型3.4 GPT-4的进步
多模态:支持图像输入 更长的上下文:32K tokens 更好的推理能力 更高的准确性 更少的幻觉四、其他大语言模型
4.1 Claude系列
开发商:Anthropic 特点: - 长上下文(200K tokens) - 宪慎安全 - 高质量输出 Claude 3系列: - Haiku:快速、轻量 - Sonnet:平衡 - Opus:最强4.2 Llama系列
开发商:Meta 特点:开源、可本地部署 Llama 2: - 7B、13B、70B三种规格 - 开源可商用 - 支持微调 Llama 3: - 8B、70B - 性能接近GPT-3.54.3 国产大模型
文心一言(百度) 通义千问(阿里) 智谱清言(智谱AI) Kimi(月之暗面) 星火大模型(科大讯飞)五、大语言模型的能力
5.1 涌现能力
模型规模大到一定程度后突然出现的能力。
小模型:只能完成训练过的任务 大模型:能完成未见过的任务 涌现能力: - 少样本学习 - 思维链推理 - 指令遵循 - 代码生成 - 数学推理5.2 思维链(Chain-of-Thought)
普通提示: 问:小明有5个苹果,给了小红2个,又买了3个,现在有几个? 答:6个 思维链提示: 问:小明有5个苹果,给了小红2个,又买了3个,现在有几个?请一步步思考。 答: 1. 小明原本有5个苹果 2. 给了小红2个,剩下5-2=3个 3. 又买了3个,现在有3+3=6个 答案是6个5.3 上下文学习
在上下文中提供示例,模型就能学会 示例: 判断情感: "这部电影太棒了!" => 正面 "浪费时间和金钱" => 负面 "演员演技在线,剧情一般" => ? 模型输出:中性六、提示工程进阶
6.1 提示词框架
角色设定: "你是一位经验丰富的软件工程师..." 任务描述: "请帮我设计一个用户登录系统..." 背景信息: "这是一个电商网站,用户量约100万..." 输出格式: "请以Markdown格式输出,包含: 1. 系统架构图 2. 数据库设计 3. API接口定义 4. 安全考虑" 示例: "参考示例:..."6.2 高级技巧
链式提示
Step 1:分析需求 Step 2:设计方案 Step 3:实现代码 Step 4:测试验证 每步输出作为下一步输入自我反思
生成初版答案 ↓ "请检查上面的回答是否有错误或遗漏" ↓ 修正和完善 ↓ 最终答案角色扮演
"请你扮演: 1. 产品经理:提出需求 2. 架构师:设计方案 3. 开发者:实现代码 4. 测试工程师:测试用例 请以多角色对话的形式展开讨论"6.3 常见问题
问题1:回答太泛 解决:要求具体、详细、举例 问题2:偏离主题 解决:明确范围、限制话题 问题3:格式不对 解决:给出模板、示例 问题4:幻觉(编造信息) 解决:要求引用来源、承认不确定七、大语言模型的应用
7.1 对话助手
智能客服:回答用户问题 个人助理:日程管理、信息查询 教育辅导:答疑解惑、学习指导 心理咨询:情感支持、建议7.2 内容创作
文章写作:博客、报告、论文 营销文案:广告、软文、产品描述 创意写作:小说、剧本、诗歌 翻译:多语言翻译7.3 编程辅助
代码生成:根据描述生成代码 代码解释:解释代码功能 Bug修复:定位和修复问题 代码重构:优化代码结构 文档生成:自动生成文档7.4 知识工作
文档摘要:长文档压缩 信息提取:提取关键信息 问答系统:基于知识库回答 数据分析:数据解读和建议八、大语言模型的局限
8.1 幻觉问题
定义:模型生成虚假但看似合理的信息 例子: - 编造不存在的论文 - 捏造历史事件 - 给出错误的计算结果 原因: - 模型学习的是概率分布,不是事实 - 训练数据可能有误 - 模型可能过度推断 应对: - 事实核查 - 要求引用来源 - 使用检索增强(RAG)8.2 上下文限制
限制: GPT-4:32K tokens(约2.5万字) Claude 3:200K tokens(约15万字) 问题: - 长文档无法完整输入 - 对话历史受限 解决: - 分段处理 - 摘要压缩 - 检索增强8.3 知识截止
问题:训练数据有时间截止点 GPT-4:知识截止2023年 无法回答最新事件 解决: - 联网搜索 - 实时信息注入8.4 推理能力
擅长: - 模式匹配 - 知识检索 - 简单推理 不擅长: - 复杂数学证明 - 多步逻辑推理 - 常识判断九、检索增强生成(RAG)
9.1 什么是RAG?
检索增强生成 = 检索 + 生成
流程: 用户提问 ↓ 检索相关文档 ↓ 文档 + 问题 → LLM ↓ 生成答案9.2 RAG的优势
1. 减少幻觉:基于检索到的事实生成 2. 知识更新:更新知识库即可 3. 可解释:可以追溯信息来源 4. 领域适配:注入领域知识9.3 RAG实现
知识库构建: 1. 文档切分 2. 向量化(Embedding) 3. 存入向量数据库 检索: 1. 问题向量化 2. 相似度搜索 3. 返回相关文档 生成: 问题 + 检索文档 → LLM → 答案十、微调与部署
10.1 微调方法
全量微调: - 更新所有参数 - 效果最好 - 成本最高 参数高效微调(PEFT): - LoRA:低秩适配 - QLoRA:量化 + LoRA - Adapter:插入适配层 - Prompt Tuning:软提示 优势: - 计算量小 - 存储空间小 - 效果接近全量微调10.2 部署方式
云端API: - OpenAI API - Anthropic API - 国内各大模型API 本地部署: - Ollama - vLLM - Text Generation WebUI 私有化部署: - 企业数据安全 - 定制化需求 - 成本控制十一、动手实践:大语言模型应用开发
11.1 环境准备
pipinstallopenai langchain chromadb tiktoken11.2 调用大模型API
""" 大语言模型API调用示例 """fromopenaiimportOpenAI client=OpenAI()# 需要设置OPENAI_API_KEYdefchat_completion(messages,model="gpt-3.5-turbo"):"""对话补全"""response=client.chat.completions.create(model=model,messages=messages,temperature=0.7,max_tokens=1000)returnresponse.choices[0].message.content# 1. 基础对话messages=[{"role":"system","content":"你是一位AI助手,帮助用户解答问题。"},{"role":"user","content":"什么是机器学习?请简单解释。"}]answer=chat_completion(messages)print("回答:",answer)# 2. 多轮对话conversation=[{"role":"system","content":"你是一位Python编程专家。"}]whileTrue:user_input=input("\n你: ")ifuser_input.lower()in['exit','quit']:breakconversation.append({"role":"user","content":user_input})response=chat_completion(conversation)conversation.append({"role":"assistant","content":response})print(f"\nAI:{response}")11.3 提示词工程实践
""" 提示词工程:设计有效的提示词 """# 1. 角色设定defcreate_prompt_with_role(role,task):"""带角色设定的提示词"""returnf""" 你是一位{role}。 任务:{task}请提供专业、详细的回答。 """# 2. 思维链提示chain_of_thought_prompt=""" 请一步步思考以下问题: 问题:小明有5个苹果,给了小红2个,又买了3个,现在有几个? 请按以下格式回答: 1. 分析初始条件 2. 列出计算步骤 3. 得出最终答案 """# 3. Few-shot提示few_shot_prompt=""" 以下是文本分类的示例: 文本:"苹果发布新款iPhone" → 类别:科技 文本:"股市今日大涨" → 类别:财经 文本:"某明星新电影上映" → 类别:娱乐 请对以下文本分类: 文本:"国足世预赛获胜" → 类别: """# 4. 结构化输出structured_prompt=""" 请分析以下文章,并以JSON格式输出: 文章:[文章内容] 输出格式: { "title": "文章标题", "summary": "文章摘要(100字以内)", "keywords": ["关键词1", "关键词2", "关键词3"], "category": "文章类别", "sentiment": "情感倾向(正面/负面/中性)" } """11.4 RAG实现
""" RAG(检索增强生成)实现 """fromlangchain.embeddings.openaiimportOpenAIEmbeddingsfromlangchain.vectorstoresimportChromafromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.llmsimportOpenAIfromlangchain.chainsimportRetrievalQAfromlangchain.document_loadersimportTextLoader# 1. 加载文档defload_documents(file_path):"""加载并切分文档"""loader=TextLoader(file_path)documents=loader.load()# 切分文档text_splitter=RecursiveCharacterTextSplitter(chunk_size=1000,chunk_overlap=200)texts=text_splitter.split_documents(documents)returntexts# 2. 构建向量数据库defbuild_vector_store(texts,persist_directory="./chroma_db"):"""构建向量数据库"""embeddings=OpenAIEmbeddings()vectorstore=Chroma.from_documents(documents=texts,embedding=embeddings,persist_directory=persist_directory)returnvectorstore# 3. RAG问答defrag_qa(vectorstore,question):"""RAG问答"""llm=OpenAI(temperature=0)qa_chain=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=vectorstore.as_retriever(search_type="similarity",search_kwargs={"k":3}),return_source_documents=True)result=qa_chain({"query":question})returnresult['result'],result['source_documents']# 使用示例# texts = load_documents("knowledge_base.txt")# vectorstore = build_vector_store(texts)# answer, sources = rag_qa(vectorstore, "什么是机器学习?")# print(f"回答: {answer}")# print(f"来源文档: {sources}")11.5 使用LangChain构建应用
""" 使用LangChain构建AI应用 """fromlangchain.chat_modelsimportChatOpenAIfromlangchain.promptsimportChatPromptTemplatefromlangchain.chainsimportLLMChainfromlangchain.output_parsersimportPydanticOutputParserfrompydanticimportBaseModel,FieldfromtypingimportList# 1. 定义输出结构classArticleAnalysis(BaseModel):"""文章分析结果"""title:str=Field(description="文章标题")summary:str=Field(description="文章摘要")keywords:List[str]=Field(description="关键词列表")sentiment:str=Field(description="情感倾向")# 2. 创建解析器parser=PydanticOutputParser(pydantic_object=ArticleAnalysis)# 3. 创建提示词模板prompt=ChatPromptTemplate.from_messages([("system","你是一位专业的文章分析师。"),("user",""" 请分析以下文章: {article} {format_instructions} """)])# 4. 创建链llm=ChatOpenAI(temperature=0)chain=LLMChain(llm=llm,prompt=prompt,output_parser=parser)# 5. 执行分析# article = "..." # 文章内容# result = chain.run(# article=article,# format_instructions=parser.get_format_instructions()# )# print(f"标题: {result.title}")# print(f"摘要: {result.summary}")# print(f"关键词: {result.keywords}")# print(f"情感: {result.sentiment}")11.6 本地部署大模型(使用Ollama)
""" 使用Ollama本地运行大模型 需要先安装Ollama: https://ollama.ai """importrequestsdefollama_chat(prompt,model="llama2"):"""调用Ollama API"""response=requests.post("http://localhost:11434/api/generate",json={"model":model,"prompt":prompt,"stream":False})returnresponse.json()["response"]# 使用示例# answer = ollama_chat("什么是机器学习?")# print(answer)# 常用模型:# - llama2: Meta的Llama 2# - mistral: Mistral AI的模型# - qwen: 阿里的通义千问# - glm4: 智谱的GLM-4十二、小结
- 大语言模型 = 参数巨大、数据巨大、计算巨大
- 核心架构:Transformer,自注意力机制
- 训练流程:预训练 + 监督微调 + RLHF
- 涌现能力:少样本学习、思维链、指令遵循
- 提示工程:设计提示词引导模型输出
- 局限:幻觉、上下文限制、知识截止
- RAG:检索增强生成,减少幻觉
- 微调:全量微调、PEFT方法
十三、思考题
Transformer的自注意力机制是如何工作的?为什么它比RNN更适合处理长序列?
什么是涌现能力?为什么大模型会出现涌现能力?
RAG是什么?它如何解决大语言模型的幻觉问题?
下一篇预告:我们将探讨AI的未来与挑战,展望AI技术的发展趋势,以及我们面临的机遇和风险。
标签:大语言模型LLMChatGPTTransformer提示工程RAGAI入门
版权声明:本文为原创内容,转载请注明出处。