系列导读上一篇我们了解了生成式AI今天深入探讨当前最热门的AI技术——大语言模型揭开ChatGPT等应用背后的秘密。一、什么是大语言模型1.1 定义大语言模型Large Language Model简称LLM 参数量巨大、在大规模文本数据上训练的语言模型。1.2 大在哪里参数量大 GPT-31750亿参数 GPT-4估计万亿级参数 Claude 3参数量未公开 数据量大 训练数据数万亿词 涵盖网页、书籍、论文、代码... 计算量大 训练成本数百万美元 训练时间数周到数月1.3 发展历程2017Transformer架构提出 2018BERT3.4亿、GPT-11.17亿 2019GPT-215亿 2020GPT-31750亿 2022ChatGPT发布 2023GPT-4、Claude 2、Llama 2 2024GPT-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 QQuery查询向量 KKey键向量 VValue值向量 直观理解 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-23个 3. 又买了3个现在有336个 答案是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 幻觉问题定义模型生成虚假但看似合理的信息 例子 - 编造不存在的论文 - 捏造历史事件 - 给出错误的计算结果 原因 - 模型学习的是概率分布不是事实 - 训练数据可能有误 - 模型可能过度推断 应对 - 事实核查 - 要求引用来源 - 使用检索增强RAG8.2 上下文限制限制 GPT-432K tokens约2.5万字 Claude 3200K tokens约15万字 问题 - 长文档无法完整输入 - 对话历史受限 解决 - 分段处理 - 摘要压缩 - 检索增强8.3 知识截止问题训练数据有时间截止点 GPT-4知识截止2023年 无法回答最新事件 解决 - 联网搜索 - 实时信息注入8.4 推理能力擅长 - 模式匹配 - 知识检索 - 简单推理 不擅长 - 复杂数学证明 - 多步逻辑推理 - 常识判断九、检索增强生成RAG9.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 clientOpenAI()# 需要设置OPENAI_API_KEYdefchat_completion(messages,modelgpt-3.5-turbo):对话补全responseclient.chat.completions.create(modelmodel,messagesmessages,temperature0.7,max_tokens1000)returnresponse.choices[0].message.content# 1. 基础对话messages[{role:system,content:你是一位AI助手帮助用户解答问题。},{role:user,content:什么是机器学习请简单解释。}]answerchat_completion(messages)print(回答:,answer)# 2. 多轮对话conversation[{role:system,content:你是一位Python编程专家。}]whileTrue:user_inputinput(\n你: )ifuser_input.lower()in[exit,quit]:breakconversation.append({role:user,content:user_input})responsechat_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):加载并切分文档loaderTextLoader(file_path)documentsloader.load()# 切分文档text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)textstext_splitter.split_documents(documents)returntexts# 2. 构建向量数据库defbuild_vector_store(texts,persist_directory./chroma_db):构建向量数据库embeddingsOpenAIEmbeddings()vectorstoreChroma.from_documents(documentstexts,embeddingembeddings,persist_directorypersist_directory)returnvectorstore# 3. RAG问答defrag_qa(vectorstore,question):RAG问答llmOpenAI(temperature0)qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,retrievervectorstore.as_retriever(search_typesimilarity,search_kwargs{k:3}),return_source_documentsTrue)resultqa_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:strField(description文章标题)summary:strField(description文章摘要)keywords:List[str]Field(description关键词列表)sentiment:strField(description情感倾向)# 2. 创建解析器parserPydanticOutputParser(pydantic_objectArticleAnalysis)# 3. 创建提示词模板promptChatPromptTemplate.from_messages([(system,你是一位专业的文章分析师。),(user, 请分析以下文章 {article} {format_instructions} )])# 4. 创建链llmChatOpenAI(temperature0)chainLLMChain(llmllm,promptprompt,output_parserparser)# 5. 执行分析# article ... # 文章内容# result chain.run(# articlearticle,# format_instructionsparser.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,modelllama2):调用Ollama APIresponserequests.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入门版权声明本文为原创内容转载请注明出处。