[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"learning-part-6-llm-api":3,"learning-all":13},{"id":4,"slug":5,"title":6,"description":7,"level":8,"topic":9,"url":10,"content":11,"sortOrder":12},4,"part-6-llm-api","Part 6 · 大模型 API 调用","站 3 你已经调通了 API。这一站把\"调用\"做成专业水准：","BEGINNER","API 工程",null,"# Part 6 · 大模型 API 调用\n\n\n---\n\n## Section 1 · 把 API 调用封装成函数\n\n**Subsection 1 · 记术语**\n```\nEndpoint   接口地址，如 https:\u002F\u002Fapi.deepseek.com\nToken      计费单位（输入+输出都算钱）\nPrompt     你发给模型的所有内容（system+user+assistant）\nAPI Key    你的身份凭证（在 .env 里）\n```\n\n**Subsection 2 · 写一个通用调用函数**\nVS Code 新建 `llm_client.py`：\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom openai import OpenAI\n\nload_dotenv()\n_client = None\n\ndef get_client():\n    \"\"\"懒加载：只用一次客户端，避免每次重复创建\"\"\"\n    global _client\n    if _client is None:\n        _client = OpenAI(\n            api_key=os.getenv(\"DEEPSEEK_API_KEY\"),\n            base_url=\"https:\u002F\u002Fapi.deepseek.com\",\n        )\n    return _client\n\ndef chat(prompt: str, system: str = \"你是乐于助人的助手。\", temperature: float = 0.7):\n    \"\"\"最常用的聊天函数：输入一句话，返回模型回答\"\"\"\n    resp = get_client().chat.completions.create(\n        model=\"deepseek-chat\",\n        temperature=temperature,\n        messages=[\n            {\"role\": \"system\", \"content\": system},\n            {\"role\": \"user\", \"content\": prompt},\n        ],\n    )\n    return resp.choices[0].message.content\n\nif __name__ == \"__main__\":\n    print(chat(\"你好，介绍一下你自己。\"))\n```\n- 运行（`python llm_client.py`）\n- ✅ 预期看到：模型自我介绍。\n- 💡 以后所有站都用这个 `llm_client.py`，这是你的\"公共工具\"。\n\n**过关**：llm_client.py 能跑，且理解\"为什么封装成函数\" = Section 1 完成。\n\n---\n\n## Section 2 · 流式输出（打字机效果）\n\n> 做聊天产品必学：让回答一个字一个字蹦出来，而不是等全部生成完。\n\n**Subsection 1 · 跑流式代码**\nVS Code 新建 `stream.py`：\n```python\nimport os\nfrom dotenv import load_dotenv\nfrom openai import OpenAI\n\nload_dotenv()\nclient = OpenAI(api_key=os.getenv(\"DEEPSEEK_API_KEY\"), base_url=\"https:\u002F\u002Fapi.deepseek.com\")\n\nprint(\"模型：\", end=\"\", flush=True)\nstream = client.chat.completions.create(\n    model=\"deepseek-chat\",\n    messages=[{\"role\": \"user\", \"content\": \"写一段关于秋天的散文，大约100字。\"}],\n    stream=True,   # 关键：开启流式\n)\nfor chunk in stream:\n    piece = chunk.choices[0].delta.content\n    if piece:\n        print(piece, end=\"\", flush=True)   # 逐字打印，不换行\nprint()\n```\n- ✅ 预期看到：文字像打字机一样逐字蹦出来。\n- 💡 `stream=True` 后，每次返回一个\"增量块\"（delta），拼起来就是完整回答。\n\n**Subsection 2 · 理解 SSE**\n在备忘录写：\n```\nSSE  服务端单向推送，简单，适合\"模型→用户\"的流式文字（打字机用这个）\nWebSocket  双向通信，适合\"聊天室\u002F实时协作\"（Part 20 做 AI 面试官再用）\n```\n- 💡 你现在用的就是底层走 SSE 的效果。不用自己实现，SDK 已经封装好。\n\n**过关**：能跑出打字机效果 = Section 2 完成。\n\n---\n\n## Section 3 · Token 计费精算 + 站 4 验收\n\n**Subsection 1 · 算一笔真实账单**\n- 打开 https:\u002F\u002Fapi-docs.deepseek.com\u002Fquick_start\u002Fpricing （DeepSeek 价格页）看当前价格。\n- 在 `llm_client.py` 里加一行打印用量：\n```python\nresp = get_client().chat.completions.create(...)\nprint(\"本次输入 tokens:\", resp.usage.prompt_tokens)\nprint(\"本次输出 tokens:\", resp.usage.completion_tokens)\n```\n- 跑一次长一点的问答，记下输入\u002F输出 token。\n- 用\"输入 token 数 × 输入单价 + 输出 token 数 × 输出单价\"算这次花了多少钱。\n- ✅ 预期看到：一次对话通常只要几分甚至几厘钱。\n- 💡 记住结论：**单次便宜，规模化后成本才显著；做产品要控输入 token（Prompt 别啰嗦）、控输出 token（max_tokens 限制）**。+\n\n**Subsection 2 · Part 6 验收勾选**\n- [ ] 能说出 Endpoint \u002F Token \u002F Prompt \u002F API Key 的含义\n- [ ] llm_client.py 封装函数跑通，理解\"懒加载客户端\"\n- [ ] 流式输出（打字机）跑通，理解 SSE 与 WebSocket 区别\n- [ ] 会查模型价格、能算一次调用的成本\n- [ ] 知道控成本的两个抓手（输入\u002F输出 token）\n\n**全勾选 = Part 6 通过** → 进入下一站 Part 7 · RAG，15 天，最实战的一段）。",6,[14,20,26,32,38,44,45,51,56,62,68,75,81,87,93,99,105,111,117,123,129],{"id":15,"slug":16,"title":17,"description":18,"level":8,"topic":19,"url":10,"content":10,"sortOrder":15},1,"part-1-llm-basics","Part 1 · 大模型基础认知","小白零基础友好。这一站不写代码，只建立\"大模型到底是什么\"的骨架。","大模型认知",{"id":21,"slug":22,"title":23,"description":24,"level":8,"topic":25,"url":10,"content":10,"sortOrder":21},2,"part-2-llm-principles","Part 2 · 大模型原理 · 入门实操","这一站不卷数学，只把\"理解模型所需的知识\"讲透。；站 2A 解决\"理解模型\"，站 2B 解决\"面试能答\"。；这一层是\"有余力再做\"，不做也不影响你进入站 3。","大模型原理",{"id":27,"slug":28,"title":29,"description":30,"level":8,"topic":25,"url":10,"content":10,"sortOrder":31},100,"part-3-llm-principles-deep","Part 3 · 大模型原理 · 面试深入","数学基础、机器学习、神经网络、词向量、思维链等面试必考原理",3,{"id":33,"slug":34,"title":35,"description":36,"level":37,"topic":25,"url":10,"content":10,"sortOrder":4},101,"part-4-llm-principles-advanced","Part 4 · 大模型原理 · 进阶可选","从零写迷你模型、RLHF、PPO、分布式训练实操等进阶内容","INTERMEDIATE",{"id":31,"slug":39,"title":40,"description":41,"level":8,"topic":42,"url":10,"content":10,"sortOrder":43},"part-5-prompt-engineering","Part 5 · Prompt 提示词工程","从这里开始，你每天都要真的调大模型 API。","提示工程",5,{"id":4,"slug":5,"title":6,"description":7,"level":8,"topic":9,"url":10,"content":10,"sortOrder":12},{"id":43,"slug":46,"title":47,"description":48,"level":37,"topic":49,"url":10,"content":10,"sortOrder":50},"part-7-rag","Part 7 · RAG 检索增强生成","这一站是\"能落地\"的关键：让模型回答**你的私有知识**。","RAG",7,{"id":12,"slug":52,"title":53,"description":54,"level":37,"topic":49,"url":10,"content":10,"sortOrder":55},"part-8-rag-optimization","Part 8 · RAG 优化与评估","站 5 你做出了\"能跑\"的 RAG。这一站把它做到\"能打\"：",8,{"id":50,"slug":57,"title":58,"description":59,"level":37,"topic":60,"url":10,"content":10,"sortOrder":61},"part-9-langchain","Part 9 · LangChain 框架","目标：用 LangChain 把\"模型、提示词、检索、记忆、工具\"串成可复用的链和 Agent。","LangChain",9,{"id":55,"slug":63,"title":64,"description":65,"level":37,"topic":66,"url":10,"content":10,"sortOrder":67},"part-10-agent","Part 10 · Agent 基础","让模型从\"会聊天\"变成\"能干活\"：自己拆任务、调工具、看结果、再行动。","Agent",10,{"id":61,"slug":69,"title":70,"description":71,"level":72,"topic":73,"url":10,"content":10,"sortOrder":74},"part-11-multi-agent","Part 11 · 多 Agent 与 Agent IDE","从\"单个 Agent\"升级到\"多 Agent 协作\"，并掌握 AutoGen \u002F LangGraph \u002F GPTs \u002F Coze \u002F Dify 五个工具。","ADVANCED","多 Agent",11,{"id":67,"slug":76,"title":77,"description":78,"level":72,"topic":79,"url":10,"content":10,"sortOrder":80},"part-12-llamaindex","Part 12 · LlamaIndex","站 5~7 你用了 LangChain 做 RAG。LlamaIndex 是另一条专攻\"数据 + LLM\"的路线。","LlamaIndex",12,{"id":74,"slug":82,"title":83,"description":84,"level":72,"topic":85,"url":10,"content":10,"sortOrder":86},"part-13-transformer","Part 13 · Transformer 深入","站 2A 建立了直觉，这一站把手写代码跑通——从\"懂概念\"到\"写得出\"。","Transformer",13,{"id":80,"slug":88,"title":89,"description":90,"level":72,"topic":91,"url":10,"content":10,"sortOrder":92},"part-14-open-models","Part 14 · 开源模型与私有化部署","目标：把主流开源模型在本地\u002F服务器跑通，理解服务化工程（显存、量化、并发）。","模型部署",14,{"id":86,"slug":94,"title":95,"description":96,"level":72,"topic":97,"url":10,"content":10,"sortOrder":98},"part-15-finetuning","Part 15 · 模型微调 Fine-Tuning","目标：理解\"什么时候必须微调、怎么选基座、怎么备数据\"，并完整跑通一次业务微调。","微调",15,{"id":92,"slug":100,"title":101,"description":102,"level":72,"topic":103,"url":10,"content":10,"sortOrder":104},"part-16-peft-lora","Part 16 · PEFT 参数高效微调","重点吃透 **LoRA**：用极少量可训练参数微调大模型（消费级显卡就能跑）。","PEFT\u002FLoRA",16,{"id":98,"slug":106,"title":107,"description":108,"level":72,"topic":109,"url":10,"content":10,"sortOrder":110},"part-17-quantization","Part 17 · 模型量化","目标：理解\"为什么量化、主流算法各自思路\"，能动手量化并评估效果。","量化",17,{"id":104,"slug":112,"title":113,"description":114,"level":72,"topic":115,"url":10,"content":10,"sortOrder":116},"part-18-data-evaluation","Part 18 · 训练数据与模型评估","数据决定模型上限，评估决定你\"能不能交付\"。","数据与评估",18,{"id":110,"slug":118,"title":119,"description":120,"level":72,"topic":121,"url":10,"content":10,"sortOrder":122},"part-19-multimodal","Part 19 · 多模态应用","让 AI 同时\"看得懂图、听得了音、说得出话\"。","多模态",19,{"id":116,"slug":124,"title":125,"description":126,"level":72,"topic":127,"url":10,"content":10,"sortOrder":128},"part-20-projects-career","Part 20 · 项目实战 + 求职备战","把 0→1 到 1→100 学到的全部收敛成**能展示、能讲、能面试**的项目。","项目与求职",20,{"id":130,"slug":131,"title":132,"description":133,"level":72,"topic":134,"url":10,"content":10,"sortOrder":135},102,"extra-2026-ai-tech","额外篇 · 2026 年 AI 应用开发必学的 5 项成熟技术","从近半年爆发的技术里，挑出已经过了尝鲜期、能真正用在项目里的 5 项：推理模型、MCP、多模态、GraphRAG、AI 编程工具链，每项都给到能跑通的代码。","AI 工程实践",21]