大模型如何"记住"你说过的话:多轮对话机制与 Go 实操

大模型如何"记住"你说过的话:多轮对话机制与 Go 实操 大家好,我是极客老墨。 我刚开始做 AI 应用的时候,有个直觉假设:“模型后台应该有个数据库,记住了我的聊天记录。“后来才发现完全不是这么回事。 主流大模型 API 都是"无状态”(Stateless)的。 每一次你发请求过去,它都完全不记得你之前说过什么。之所以它能接住你的话茬,是因为开发者每次都把之前的聊天记录打包发给了它。 这篇就来聊聊,怎么在 Go 代码里实现这种"人工记忆”。 一、多轮对话的本质:以存储换记忆 在 API 调用层面,模型并不负责存储对话历史。实现多轮对话的公式其实很简单: $$新请求 = 对话历史 + 当前问题$$ 每次你提问,你的程序都要从内存(或数据库)里把之前的对话翻出来,拼成一个数组发过去。模型读完这一长串,才能理解你说的"它"是指谁,或者"接着说"是要说什么。 1sequenceDiagram 2 participant User as 用户 3 participant App as 你的 Go 应用 4 participant LLM as 大模型 (DeepSeek) 5 6 User->>App: 1. "你好,我是老墨" 7 App->>LLM: POST [User: 你好,我是老墨] 8 LLM-->>App: "你好,老墨!" 9 App-->>User: "你好,老墨!" 10 11 Note over App: 内存存储: [User: 你好, Assistant: 你好老墨] 12 13 User->>App: 2. "我刚才说我叫什么?" 14 App->>LLM: POST [User: 你好, Assistant: 你好, User: 我刚才说我叫什么?] 15 LLM-->>App: "你刚才说你叫老墨。" 16 App-->>User: "你刚才说你叫老墨。" 二、Messages 数组的三大角色 在标准的 chat/completions 接口中,messages 数组是唯一的上下文载体。它由三种角色组成: ...

2026-06-27 · 6 min · 1243 words · 老墨

开发者如何接管大模型:API 调用逻辑深度拆解

开发者如何接管大模型:API 调用逻辑深度拆解 大家好,我是极客老墨。 做大模型开发,最爽的一点就在于:你不需要懂怎么训练模型,你只需要懂怎么把它”接管”进你的业务系统。 我刚开始做 AI 应用时,也把 API 调用理解成”发个 POST、收个字符串”,结果一上生产就翻车:成本失控、超时、流式中断、JSON 解析失败、缓存命中率低得可怜。 2026 年这套活,已经从”能调通”升级成”调得稳、调得省、调得可观测”。尤其 DeepSeek V4 的 thinking mode、上下文缓存、流式输出,让 API 层直接从”胶水层”变成了”核心工程层”。 这篇我就按真实项目视角,把 API 调用链路从协议到代码,从错误恢复到成本控制,彻底掰开讲清楚。 一、先立一个工程观:调用模型,本质是远程协作 把模型 API 想成“远程同事”会更容易理解: 你发的请求体,不只是参数,而是任务工单。 返回的 token,不只是文本,而是这个同事边想边说的过程。 usage 字段,不只是统计,而是你的财务报表。 我早期总把调用失败归因于”模型智商不够”,后来复盘发现 70% 的问题是工程姿势不对:上下文组织烂、超时策略缺失、重试机制粗暴、流式解析不规范。 老墨说: 你要把 API 当成数据库连接池一样认真管理。对待数据库你不会裸奔重试,对待大模型也不该。 二、2026 版:开发者与模型的“分工协议” 在 AI 应用开发中,分工正在变得更加精密: 模型厂商 (DeepSeek/OpenAI):负责烧钱买卡,并把能力封装成兼容 OpenAI 协议的 HTTPS 接口。 开发者 (你):不只是写业务逻辑,更像一个”流量调度员 + 成本控制官”——通过 thinking 参数和 reasoning_effort 平衡速度与深度,通过优化 Prompt 结构提高缓存命中率,再通过超时/重试/降级把稳定性托住。 这种分工决定了开发者的核心价值:不是调 Prompt 的手感,而是把成本、质量和稳定性三件事同时管住。 官方参考: DeepSeek Chat 接口:Create Chat Completion DeepSeek Thinking Mode:Thinking Mode DeepSeek 上下文缓存:Context Caching OpenAI 结构化输出:Structured Outputs 三、API 调用的生命周期:2026 增强版 一次现代大模型 API 调用(以 chat/completions 接口为例)遵循以下生命周期: ...

2026-06-24 · 4 min · 686 words · 老墨

大模型 API 核心参数:调对了事半功倍,调错了钱打水漂

大模型 API 核心参数:调对了事半功倍,调错了钱打水漂 大家好,我是极客老墨。 我刚开始接大模型 API 时,最容易犯的毛病就是把所有问题都往 prompt 上推。输出不稳定,先改 prompt;JSON 解析失败,继续改 prompt;账单涨了,还想着是不是 prompt 不够精简。改到最后,prompt 越写越长,接口却还是像没装仪表盘的车,能跑,但不知道哪里在烧钱、哪里在抖。 这篇不讲玄学调参。我就按一个常见场景来讲:做一个客服工单摘要接口。 输入是一段用户和客服的对话,输出要稳定变成这样的 JSON: 1{ 2 "summary": "用户咨询退款到账时间,客服告知预计 3-5 个工作日", 3 "category": "refund", 4 "risk_level": "low", 5 "next_action": "等待退款到账" 6} 这个接口看着简单,真接到业务里会遇到四个问题: 有时输出一段自然语言,JSON 解析直接炸。 有时写到一半停了,字段缺一截。 有时同一条工单跑两次,分类不一致。 有时为了一个简单摘要开了推理模式,成本和延迟都上去了。 这些问题不全是 prompt 的锅。后来我才把 API 参数当成方向盘、油门、刹车和仪表盘来看:prompt 负责告诉模型要去哪,参数负责控制它怎么走、走多远、花多少钱、异常时怎么停下来。 本文以 DeepSeek API 为主线。DeepSeek 当前官方文档里,Chat Completions 的模型 ID 是 deepseek-v4-flash 和 deepseek-v4-pro;deepseek-chat、deepseek-reasoner 仍可兼容,但官方已说明将于 2026/07/24 弃用。下面的参数口径按本文撰写时查阅的官方文档编写,后续以官方最新文档为准。 model:先选一辆够用的车 客服工单摘要这类任务,第一版通常不需要最强模型。它不是奥数题,也不是复杂代码审查,核心是稳定抽取、分类、压缩信息。 DeepSeek 当前官方模型表里有两个主模型: model 适合什么 deepseek-v4-flash 延迟、成本更敏感的通用任务,比如摘要、分类、提取、普通问答 deepseek-v4-pro 更复杂的推理、规划、工具调用、代码分析 官方还保留了两个兼容别名: deepseek-chat:对应 deepseek-v4-flash 的非 thinking 模式。 deepseek-reasoner:对应 deepseek-v4-flash 的 thinking 模式。 这里有个很实用的判断:能用 deepseek-v4-flash 跑稳,就先不上 deepseek-v4-pro;能关 thinking 跑稳,就先不开 thinking。 ...

2026-06-17 · 10 min · 1987 words · 老墨

Token 是什么:大模型计费和上下文管理的底层逻辑

Token是怎么来的:大模型计费和上下文管理的底层逻辑 大家好,我是极客老墨。 上一篇讲大模型工作原理时,Token 出现了很多次。这一篇专门把它讲透——不是因为概念难,而是因为它的每一个细节都直接影响你的 API 账单和代码行为。 成本超支、上下文莫名截断、多轮对话"失忆"——这些新手最常踩的坑,根子都在 Token 上。 一、Token 是什么:BPE 分词不是按字切 Token(中文翻译定义为“词元”) 是大模型处理文本的最小单位。但很多人对它有一个根本性的误解:Token 不等于字,不等于词,更不等于汉字。 主流大模型(包括 DeepSeek)使用的分词算法叫 BPE(Byte-Pair Encoding,字节对编码)。它的逻辑是:从字节出发,统计语料中最高频的字节对,反复合并,最终形成一个包含几万到十几万个"子词单元"的词表。 结果就是:Token 的边界是由训练语料的统计规律决定的,不是人为规定的。 1# 英文示例(DeepSeek tokenizer) 2"developer" → ["developer"] # 1 token(高频词,整词入表) 3"tokenization" → ["token", "ization"] # 2 tokens(低频长词,拆分) 4"DeepSeek" → ["Deep", "Seek"] # 2 tokens(专有名词) 5 6# 中文示例 7"大模型" → ["大", "模型"] # 2 tokens("模型"是高频词组) 8"量子纠缠" → ["量", "子", "纠", "缠"] # 4 tokens(低频,逐字) 9"API" → ["API"] # 1 token 中英文的核心差异: ...

2026-06-13 · 6 min · 1111 words · 老墨

2026马年春节,我用AI帮我写了一个嘴替小程序

春节回家,最怕的是什么?不是堵车,不是抢票,而是亲戚的灵魂拷问。 “工资多少啊?” “有对象了吗?” “什么时候买房?” 今年我决定不再被动挨打,用3天时间撸了个"春节嘴替"小程序,让AI帮我练习怼人。更重要的是,整个开发过程几乎全靠AI完成——从产品设计到代码实现,我只是个"提示词工程师"。 先看效果 小程序叫"春节嘴替",核心功能有三个: AI嘴替对话 - 和虚拟亲戚battle,练习高情商回怼 妈妈银行存单 - 生成趣味压岁钱对账单 马年开运头像 - 制作春节专属头像 神仙祝福 - AI生成个性化拜年祝福语 最有意思的是AI嘴替功能。我设计了4个经典角色: 势利眼二姨(儿子阿里P8,逢人就炫) 催婚大姑(见面就问对象) 凡尔赛邻居(女儿在国外"留学") 严肃二舅(体制内,看不起互联网打工人) 每个角色都有完整的人设和攻击策略,AI会根据你的回复动态调整战斗力。如果你怼得好,AI会破防;如果你怼得不够狠,AI会继续压制你。 你可以体验一下,看看效果: AI开发全流程 这个项目最大的特点是:几乎全部由AI来完成。 1. 产品设计:Google AI Studio + Gemini 3.0 Pro Preview 我先把需求丢给Gemini: “我想做一个春节主题的小程序,帮年轻人应对亲戚的尬聊。你帮我设计产品方案。” Gemini给出了完整的PRD文档,包括: 目标用户画像 核心功能定义 技术架构建议 上架物料清单 开发时间表 这份文档直接成为了我的开发指南。AI不仅帮我理清了思路,还提醒我注意内容合规、类目审核等坑点。 2. UI素材:Nano Banana Pro(图片生成) 小程序需要大量视觉素材:角色头像、背景图、装饰元素等。我全部用Google AI Studio的图片生成模型搞定。 典型的Prompt: 1A cute 3D cartoon Chinese aunt character, wearing red traditional clothes, 2holding a smartphone, slightly snobbish expression, pop mart style, 3bright red background, Chinese New Year atmosphere, 8k 生成的图片质量很高,直接就能用。关键是速度快,几秒钟就能出图,比找设计师或自己画快太多了。 ...

2026-02-20 · 2 min · 335 words · 老墨

EP00 - DeepSeek R1 本地部署实战 (Mac篇)

EP00 - DeepSeek R1 本地部署实战 (Mac篇) 摘要: 别被几万块的显卡劝退。你的 MacBook Pro (Apple Silicon) 就是跑 DeepSeek R1 的神器。本文手把手教你用 Ollama 在本地跑起“满血版”推理模型,不仅免费,而且隐私绝对安全。 阅读时间: 5分钟 适用人群: 程序员、科研党、隐私敏感用户 硬件要求: M1/M2/M3/M4 Mac,推荐 16GB+ 内存 为什么要在本地跑 DeepSeek? 隐私安全: 你的代码、私有文档不需要上传到云端,断网也能用。 零延迟响应: 没有网络延迟,交互更丝滑(取决于模型大小)。 无审查: 你懂的。 免费: 不需要订阅费,只消耗电费。 核心工具:Ollama Ollama 是目前 macOS 上体验最好的大模型运行工具,没有之一。它开源免费,支持非常多的大模型,GitHub仓库在 这里, 目前161K的 Star。 用程序员最能听懂的话解释:Ollama 就是大模型界的 Docker。 Docker 让你可以一行命令跑 MySQL / Nginx。 Ollama 让你可以一行命令跑 DeepSeek / Llama3。 它在后台默默做了三件事:驱动 GPU、管理模型文件、提供 API 服务。装了它,你的 Mac 就有了“大脑”。 安装 Ollama 有两种方式: 方式 A: 官网下载 (推荐小白) 访问 ollama.com 下载 macOS 版本并安装。 ...

2026-02-03 · 2 min · 422 words · 老墨