首页 / 资讯中心 / 文章详情

前端转 AI 100 天 Day 31:大模型入门——从 GPT 到 API,搞懂 LLM 的一切

前端转 AI 100 天 Day 31:大模型入门——从 GPT 到 API,搞懂 LLM 的一切 ★ FEATURED ARTICLE
前端转 AI 第 31 天大模型入门 - 从 GPT 到 API搞懂 LLM 的一切昨日回顾Day 30 把服务正式上线了30 天走完 Python 后端工程化。但我们的AI 助手一直在用假的 Mock LLM——它只是把输入套个模板返回根本不是真的 AI。从今天开始进入大模型世界。未来 15 天把 Mock 换成真 LLM让助手真正能思考。Day 31 目标搞懂大模型的核心概念拿到第一个 API Key跑通第一次真实调用。一、大模型到底是什么作为前端你可能用过 ChatGPT但大模型和ChatGPT是一回事吗不是。1. 大模型 vs ChatGPT概念是什么类比大模型LLM一个预测下一个词的数学模型发动机ChatGPT基于大模型做的产品一台车API让程序调用大模型的接口加油枪一句话大模型是能力ChatGPT 是产品API 是接口。你要做的 Agent是另一个产品——用同样的大模型做不同的事情。2. LLM 到底在做什么核心原理简化到极致给它一段文本它预测下一个词是什么。比如输入今天天气真 输出好80%、不错15%、差5%它每次都选一个概率最高的词然后拼起来就成了完整的回答。ChatGPT 的对话是怎么来的用户你好 模型内部用户说了你好我应该回复什么 → 预测你概率最高 → 预测好概率最高 → 预测概率最高 → 停止 输出你好看起来像思考本质是超大规模的模式匹配。3. 大模型是怎么学会说话的三阶段训练1. 预训练Pre-training 读遍整个互联网几万亿字 → 学会语言的规律 2. 微调Fine-tuning 用高质量对话数据训练 → 学会对话的格式 3. 对齐RLHF 人类打分强化学习 → 学会有用、无害、诚实代价GPT-4 训练成本约 $1 亿用了上万张 A100 显卡跑几个月。前端类比预训练≈ 让一个模型看遍所有开源代码微调≈ 用高质量项目继续训练对齐≈ 用code review 意见训练它别写烂代码4. 大在哪GPT-3 有 1750 亿参数GPT-4 传闻有 1.8 万亿。参数 模型里的旋钮——每个参数是一个数字决定了模型对输入的响应。1750 亿个旋钮一起调才能预测下一个词。大模型的大就是指这个参数量。但注意参数量不等于能力。一个训练充分的 7B 模型70 亿参数可能比乱训的 70B 还好。二、必须搞懂的 5 个概念这 5 个概念未来 15 天会反复出现。1. Token大模型的字大模型不认识字它认识 Token。Token 是文本切分的最小单位Hello → [Hello] 1 token Hello world → [Hello, world] 2 tokens 你好 → [你, 好] 2 tokens 你好世界 → [你, 好, 世界] 3 tokens不精确经验估算语言约等于英文4 个字符 ≈ 1 token中文1-2 个汉字 ≈ 1 token代码3 个字符 ≈ 1 token为什么关心 Token因为 API 按 Token 收费。GPT-4o-mini$0.15 / 100万 input tokens GPT-4o$2.5 / 100万 input tokens用 GPT-4o 处理 100 万字的文档 $2.5。用 mini 只要 $0.15。Token 直接影响成本。2. 上下文窗口大模型的记忆上下文窗口 一次能处理的最大 Token 数输入 输出。模型上下文窗口GPT-4o-mini128k tokensGPT-4o128k tokensClaude 3.5 Sonnet200k tokensGemini 2.0 Flash1M tokensDeepSeek V364k tokens128k 是什么概念约 10 万个汉字一本 300 页的书约 300 页代码超过这个限制怎么办这就是 Day 14 学的记忆裁剪和未来 Day 46 学的 RAG 要解决的。3. 温度Temperature控制创造力温度决定模型输出的随机性。温度效果场景0.0确定性最强每次输出一样代码生成、数据提取0.3-0.5比较稳定问答、总结0.7平衡默认日常对话1.0-2.0极具创造力创意写作、头脑风暴Agent 场景里工具调用、JSON 提取 → 温度 0聊天对话 → 温度 0.7文案生成 → 温度 1.0前端类比Math.random()权重不同的感觉——温度越高模型越不走寻常路。4. 系统提示System Prompt给模型下命令对话里有三种角色角色含义示例system设定 AI 的行为“你是一个专业的 Python 老师”user用户输入“解释一下装饰器”assistantAI 回复“装饰器是…”System Prompt 最强大——它能彻底改变模型的回答风格。例System你是一个简洁的助手回答不超过 20 个字。 User解释一下量子力学。 Assistant微观粒子的运动规律。换个 SystemSystem你是一个幽默的助手用段子回答。 User解释一下量子力学。 Assistant量子力学就是——你不看月亮的时候月亮在不在天上 这问题连爱因斯坦都吵不明白咱还是聊点能懂的。同一个模型System Prompt 不同效果完全不同。Agent 的核心技巧之一就是写好 System Prompt。5. 模型家族不只是 GPT很多人以为大模型 GPT。其实国内国外一堆选择模型厂商特点价格1M inputGPT-4oOpenAI综合最强$2.5GPT-4o-miniOpenAI便宜快$0.15Claude 3.5 SonnetAnthropic代码和长文本强$3Gemini 2.0 FlashGoogle超长上下文$0.1DeepSeek V3深度求索国产之光性价比高¥0.5通义千问阿里中文场景好¥0.4豆包字节便宜¥0.8Llama 3Meta开源可本地部署免费选型决策三角能力 / \ / \ 成本 ───── 速度不同场景不同侧重做 Agent 原型→ DeepSeek / GPT-4o-mini便宜复杂推理→ GPT-4o / Claude 3.5长文档→ Gemini本地私有→ Llama 3 / Qwen建议国内用户先用 DeepSeek 或通义便宜、快、不用翻墙。三、注册账号 拿 API Key今天的目标跑通第一次真实调用。1. 方案对比服务优点缺点推荐度DeepSeek便宜、国产、快偶尔限流⭐⭐⭐⭐⭐通义千问免费额度多、稳定控制台稍复杂⭐⭐⭐⭐智谱 GLM国产、有免费—⭐⭐⭐⭐OpenAI能力最强需翻墙、贵⭐⭐⭐Claude代码/长文强需翻墙⭐⭐⭐我推荐 DeepSeek 起步——5 块钱能玩很久。2. DeepSeek 注册流程1. 访问 https://platform.deepseek.com2. 注册账号手机号 / 邮箱3. 实名认证国内服务都要求4. 充值最低 10 元5. 创建 API Key控制台 → API Keys → 创建复制保存只显示一次Key 长这样sk-a3f9b2e1c7d8...6. 保存到环境变量# 加到 ~/.zshrc 或 ~/.bashrcexportDEEPSEEK_API_KEYsk-xxx或者项目.envDEEPSEEK_API_KEYsk-xxx⚠️API Key 是你的钱袋子——泄露了别人能刷爆。永远不要提交到 git。3. 通义千问备选访问 https://dashscope.console.aliyun.com/阿里云账号登录开通 DashScope 服务新用户有免费额度100 万 tokens创建 API Key4. OpenAI需要海外环境访问 https://platform.openai.com需要有海外手机号或虚拟号海外信用卡或虚拟卡稳定的科学上网新手不推荐——门槛高先用国产。四、第一次真实调用目标用 Python 跑通第一次 LLM 调用。1. 安装 OpenAI SDK注意DeepSeek / 通义 / 智谱都兼容 OpenAI 的 API 格式——装一个 SDK 能调所有。pipinstallopenai2. 最简单的一次调用创建day31/hello_llm.py第一次真实调用 LLMimportosfromopenaiimportOpenAI# 1. 创建客户端指向 DeepSeekclientOpenAI(api_keyos.getenv(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com/v1,# ← 关键改 base_url)# 2. 调用responseclient.chat.completions.create(modeldeepseek-chat,# 模型名messages[{role:user,content:用一句话解释 Python 是什么},],)# 3. 拿结果print(response.choices[0].message.content)运行exportDEEPSEEK_API_KEYsk-xxxpython day31/hello_llm.py输出Python 是一种简洁易读、功能强大的高级编程语言广泛用于数据分析、人工智能和 Web 开发等领域。 你第一次调用了真实的大模型3. 逐行拆解1.client OpenAI(...)虽然叫OpenAI但它其实是个通用客户端——只要base_url指向兼容 OpenAI 格式的服务就能调。不同厂商的base_url厂商base_urlOpenAIhttps://api.openai.com/v1DeepSeekhttps://api.deepseek.com/v1通义https://dashscope.aliyuncs.com/compatible-mode/v1智谱https://open.bigmodel.cn/api/paas/v4月之暗面https://api.moonshot.cn/v1同一个 SDK换个base_url就能调不同模型。2.messages数组这就是 Day 13 设计的ChatMessage结构的来源。messages[{role:system,content:...},# 可选{role:user,content:...},{role:assistant,content:...},# 历史回复{role:user,content:...},]多轮对话就是不断往数组里加消息。3.response.choices[0].message.content响应结构responseChatCompletion(idchatcmpl-xxx,modeldeepseek-chat,choices[Choice(index0,messageChatCompletionMessage(roleassistant,contentPython 是...,),finish_reasonstop,),],usageCompletionUsage(prompt_tokens15,completion_tokens25,total_tokens40,),)重点关注choices[0].message.content回复内容usageToken 消耗算钱的4. 加一点真实感多轮对话多轮对话importosfromopenaiimportOpenAI clientOpenAI(api_keyos.getenv(DEEPSEEK_API_KEY),base_urlhttps://api.deepseek.com/v1,)defchat(messages):一次对话responseclient.chat.completions.create(modeldeepseek-chat,messagesmessages,temperature0.7,)returnresponse.choices[0].message.contentdefmain():messages[{role:system,content:你是一个简洁的助手回答不超过 50 字},]whileTrue:user_inputinput(\n你)ifuser_input.lower()in(quit,exit):breakmessages.append({role:user,content:user_input})replychat(messages)print(fAI{reply})messages.append({role:assistant,content:reply})if__name____main__:main()运行起来就是一个真的命令行 AI 助手了。对比 Day 13 的 Mock 版本——代码几乎一样只是chat函数换成了真实调用。这就是 Day 13 说的面向接口编程调用方不用改。五、响应结构详解要写好 Agent必须搞懂 LLM API 的完整响应。1. 完整字段responseclient.chat.completions.create(...)# 基础信息print(response.id)# chatcmpl-xxxprint(response.model)# deepseek-chatprint(response.created)# 时间戳print(response.object)# chat.completion# 核心内容print(response.choices[0].message.role)# assistantprint(response.choices[0].message.content)# 回复文本print(response.choices[0].finish_reason)# 结束原因# Token 使用print(response.usage.prompt_tokens)# 输入 token 数print(response.usage.completion_tokens)# 输出 token 数print(response.usage.total_tokens)# 总 token 数2.finish_reason为什么结束值含义stop正常结束length达到 max_tokens 上限被截断content_filter内容被安全过滤tool_calls模型请求调用工具function_call旧版函数调用stop是正常的其他都可能有问题。处理策略ifresponse.choices[0].finish_reasonlength:print(⚠️ 输出被截断请增大 max_tokens)elifresponse.choices[0].finish_reasoncontent_filter:print(⚠️ 内容被过滤)3.usage算钱的依据usageresponse.usageprint(f本次消耗)print(f 输入{usage.prompt_tokens}tokens)print(f 输出{usage.completion_tokens}tokens)print(f 总计{usage.total_tokens}tokens)记录 usage你就能算每天花了多少钱。例COST_PER_1M{deepseek-chat:{input:0.5,output:2.0},# 元gpt-4o-mini:{input:0.15,output:0.6},# 美元}defestimate_cost(model:str,usage)-float:priceCOST_PER_1M.get(model)ifnotprice:return0.0cost(usage.prompt_tokens/1_000_000*price[input]usage.completion_tokens/1_000_000*price[output])returncost做 Agent 项目成本控制是第一课。六、常见参数create()支持一堆参数重要的讲几个1.model模型选择modeldeepseek-chat# DeepSeek V3modeldeepseek-reasoner# DeepSeek R1推理模型modelgpt-4o-mini# OpenAI2.temperature随机性temperature0.0# 确定性temperature0.7# 默认平衡temperature1.5# 非常随机3.max_tokens输出上限max_tokens1000# 最多输出 1000 tokens不设的话模型输出到自然结束——可能几百字也可能几千字。重要设max_tokens能控制成本。4.top_p采样策略和temperature类似的参数——都控制随机性。规则通常只调一个别两个都调。5.stop停止词stop[\n\n,###]遇到这些字符串就停止。Agent 场景里用得少——JSON 输出一般用response_format。6.response_format强制 JSON最强的参数之一responseclient.chat.completions.create(modeldeepseek-chat,messages[...],response_format{type:json_object},# 强制返回 JSON)加上这个模型一定返回合法 JSON。不用再写请返回 JSON 格式的 prompt。这就是 Day 11 学的 Pydantic 校验的前置保险——先保证格式对再校验内容。七、多模型适配项目要支持切换模型——这需要抽象。1. 多厂商对比表厂商base_url模型名备注DeepSeekapi.deepseek.com/v1deepseek-chat¥0.5/1M通义dashscope.aliyuncs.com/compatible-mode/v1qwen-plus免费额度智谱open.bigmodel.cn/api/paas/v4glm-4-flash部分免费Kimiapi.moonshot.cn/v1moonshot-v1-8k—OpenAIapi.openai.com/v1gpt-4o-mini$0.15/1M硅基流动api.siliconflow.cn/v1Qwen/Qwen2.5-7B-Instruct有免费模型2. 统一封装创建day31/multi_llm.py多模型客户端importosfromtypingimportLiteralfromopenaiimportOpenAI# 模型配置表MODEL_CONFIGS{deepseek:{base_url:https://api.deepseek.com/v1,api_key_env:DEEPSEEK_API_KEY,models:{chat:deepseek-chat,reasoner:deepseek-reasoner,},},qwen:{base_url:https://dashscope.aliyuncs.com/compatible-mode/v1,api_key_env:DASHSCOPE_API_KEY,models:{chat:qwen-plus,turbo:qwen-turbo,},},openai:{base_url:https://api.openai.com/v1,api_key_env:OPENAI_API_KEY,models:{chat:gpt-4o-mini,pro:gpt-4o,},},}classMultiLLMClient:多模型统一客户端def__init__(self,provider:strdeepseek,model_key:strchat):ifprovidernotinMODEL_CONFIGS:raiseValueError(f不支持的 provider:{provider})configMODEL_CONFIGS[provider]api_keyos.getenv(config[api_key_env])ifnotapi_key:raiseValueError(f缺少环境变量:{config[api_key_env]})self.clientOpenAI(api_keyapi_key,base_urlconfig[base_url],)self.providerprovider self.modelconfig[models][model_key]defchat(self,messages:list[dict],**kwargs)-str:简单调用返回字符串responseself.client.chat.completions.create(modelself.model,messagesmessages,**kwargs,)returnresponse.choices[0].message.contentdefchat_with_usage(self,messages:list[dict],**kwargs):返回内容 usageresponseself.client.chat.completions.create(modelself.model,messagesmessages,**kwargs,)return{content:response.choices[0].message.content,usage:{prompt_tokens:response.usage.prompt_tokens,completion_tokens:response.usage.completion_tokens,total_tokens:response.usage.total_tokens,
阅读完成 · 觉得有帮助?
咨询建站