
先看一个很具体的实践How I used an LLM to kick my nicotine addiction翻译过来就是“如何用大语言模型辅助戒除尼古丁成瘾”。这个标题看起来像个人故事但它背后其实是一整套可以复用的技术方案。核心思路不是让 LLM 替你“下决心”而是把大模型当成一个 24 小时在线、不评判、能记录、能复盘的行为干预助手你随时把烟瘾冲动的感受、触发场景、替代动作丢给它它帮你结构化地记录、追问、分析和总结。这篇文章会拆解这套方案怎么从零搭起来。你会看到本地模型怎么选、提示词怎么设计、日志记录怎么做、接口怎么调用、批量复盘脚本怎么写以及显存、CPU、端口、进程这些实际部署中躲不开的问题。适合想用 LLM 做个人健康管理记录、行为干预、情绪日志的人也适合把 LLM 接入自己工具链的开发者。先说结论这不是什么高门槛项目。没有 GPU 也能跑有小显存显卡体验会好很多完全本地部署还能把吸烟冲动记录这类隐私数据留在自己机器里。下面按可复现的流程来写。1. 核心能力速览在动手之前先把这套“LLM 戒瘾辅助方案”的关键规格列出来。能力项说明项目类型基于本地 LLM 的个人行为干预与记录工具链核心功能冲动对话安抚、触发因素识别、结构化日志、周期复盘、趋势分析模型规模选择7B 到 14B 开源模型显存充足可尝试更大规模硬件门槛CPU 可跑小模型GPU 可显著提升响应速度显存需按模型版本实测支持平台Windows / macOS / Linux 均可启动方式Ollama、LM Studio 等一键或命令行启动也可 Docker 部署API 能力支持本地 HTTP API可被 Python、脚本或其他程序调用批量任务通过脚本批量分析多天记录生成周报/月报数据存储本地 JSON / Markdown / SQLite 均可适合场景个人健康记录、行为矫正辅助、情绪日志复盘、LLM 应用开发测试这里要强调一个边界这套工具链的角色是“辅助记录与认知干预”不能替代专业医疗建议。如果戒断过程中出现明显身体不适或严重情绪问题应该寻求专业帮助。2. 适用场景与使用边界这类方案最核心的适用场景是把“冲动”变成一个可以被观察的数据点。具体来说它可以做四件事第一在你烟瘾冲动来的时候提供一个即时对话入口帮助你冷静下来第二通过固定问题结构帮你识别冲动背后的触发因素比如压力、社交、饭后、无聊第三把每次冲动记录保存下来形成时间线和强度曲线第四用 LLM 做周期性复盘找出哪些情况下最容易破戒哪些替代动作最有效。它不是用来替代意志力的而是用来降低“记录”和“复盘”这两个动作的摩擦成本。传统戒烟建议往往让人做纸质记录但很多人坚持不下去。用 LLM 对话的形式相当于有人每隔一段时间问你一句“刚才发生了什么”这个过程更自然也更适合长期记录。使用边界也必须说清楚。第一隐私边界。吸烟行为、情绪波动、身体状态属于敏感健康数据。本地部署 LLM 的优势就是数据不出本机。如果非要用云端模型也要把输入内容匿名化去掉姓名、手机号、具体地址等信息。这篇文章统一使用本地部署方案。第二安全边界。LLM 不是医生不要让它回答用药剂量、替代药物选择、戒断综合征判断这类问题。最好的做法是在提示词里直接声明遇到身体不适或医疗问题只提示“建议咨询专业医生”不做诊断。第三稳定性边界。本地服务可能因为进程退出、端口占用、模型加载失败而不可用。当你处于强烈冲动状态时如果工具连不上体验会非常差。所以日常记录仍要保持一个最简单的文本兜底方案比如手机备忘录里存一行模板。3. 环境准备与前置条件下面的流程按“本地部署 本地 API 脚本分析”来组织。3.1 操作系统与软件依赖这套方案不依赖特定操作系统。Windows、macOS、Linux 都可以。需要准备的基础软件如下Python 3.9 以上用于运行调用脚本和批量分析脚本。Ollama 或其他本地 LLM 运行工具用于加载模型并提供 API。curl用于快速验证 API 是否可用。一个终端工具Windows 上建议用 PowerShell 或 Windows TerminalLinux/macOS 用系统终端即可。如果你熟悉 Docker也可以把模型服务容器化方便迁移和复现。不过为了降低门槛下面的示例以 Ollama 为主。3.2 硬件与模型选择先根据手头硬件确定模型规模。硬件条件建议模型规模说明无 GPU仅 CPU7B 及以下量化模型能跑但响应较慢适合文字交互不频繁的场景8GB 左右显存7B 到 14B 量化模型需要开启量化具体占用以实测为准16GB 以上显存14B 到 32B 模型回复质量更高上下文更长显存不足把模型量化版本或进一步缩小模型优先保证服务能稳定运行选择模型时优先选 7B 到 14B、对中文支持较好的 instruct 模型。比如 Qwen2.5 系列的 7B/14B 都是常见选择。如果你有 4090 或更大的专业卡可以尝试 32B 以上效果会更好但功耗和响应时间也会增加。注意显存占用不是一个固定数字。它和模型参数量、量化位数、上下文长度、并行请求数都有关系。最可靠的方法是在自己的机器上跑起来之后用nvidia-smi观察。不要直接照搬网上任何一个“显存占用 X G”的结论那是特定环境下的结果。3.3 磁盘空间与端口模型文件体积通常不小。7B 量级的基础模型文件常见在 4GB 到 8GB 之间14B 可能到 10GB 以上具体取决于量化格式。建议预留 20GB 以上磁盘空间并给输入输出数据单独建目录。端口方面Ollama 默认监听11434。如果这个端口被占用可以修改环境变量OLLAMA_HOST来换端口。这一步在后面的常见问题里会单独讲。3.4 目录规划建议把记录、脚本、模型配置分开管理。这里给一个推荐结构nicotine-llm/ ├── scripts/ │ ├── chat_with_llm.py │ └── weekly_review.py ├── prompts/ │ └── system_prompt.txt ├── data/ │ ├── notes/ │ ├── reports/ │ └── raw_logs/ ├── models/ └── README.md这个目录结构的好处是输入素材、输出报告、脚本代码互不干扰批量任务出错时也容易定位。4. 安装部署与启动方式4.1 安装 OllamaOllama 是目前本地跑 LLM 最方便的工具之一。安装方式很简单。Linux 或 macOS 可以在终端执行curl -fsSL https://ollama.com/install.sh | shWindows 用户直接去 Ollama 官网下载安装包安装后就能在终端使用ollama命令。安装完成后检查版本ollama --version4.2 拉取模型并启动服务拉取一个 7B 量级的模型比如 Qwen2.5 7Bollama pull qwen2.5:7b如果你的显存比较紧张可以看 Ollama 模型库中是否有更小或更高量化的版本比如带q4字样的标签。具体标签名以实际模型库为准。接下来运行模型ollama run qwen2.5:7b执行后你会进入一个对话终端直接输入“你好”就能看到一个基础回复。这说明模型已经加载成功。注意ollama run会保持一个交互会话。如果你想让它作为后台 API 服务运行只需要保持 Ollama 主进程在运行即可。默认情况下Ollama 安装后会自动在后台监听11434端口。验证 API 是否可用curl http://127.0.0.1:11434/api/chat \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, stream: false, messages: [{role: user, content: 你好}] }如果返回了正常 JSON说明 API 已经通了。后面所有脚本都可以走这个本地接口。4.3 准备系统提示词这个项目的关键不是“能对话”而是“对话内容能不能按固定结构执行”。所以 system prompt 要写得非常明确。在prompts/system_prompt.txt中保存下面这个模板你是我的戒断辅助助手。 你的目标是帮助我记录尼古丁戒断过程中的冲动、触发因素和替代行为。 回答要求 1. 不评判不吓唬。不要使用“你怎么又忍不住”这类表达。 2. 每次回复正文控制在 3 句话以内否则在关键场景会带来额外压力。 3. 先确认并接纳我的感受再用一个提问帮我识别触发点。 4. 不要提供任何医学诊断或用药建议。如果我提到身体不适统一回复“建议咨询专业医生”。 5. 在你认为适合记录时用 JSON 结构输出本次记录。 6. 如果我问你“今天数据怎么样”请汇总最近记录给出趋势判断。 记录 JSON 结构 { date: 2025-06-02, time: 10:15, trigger: 工作压力, intensity: 7, action: 做了10个深蹲, result: 忍住了 }这个提示词非常关键。它的目的是把 LLM 的输出约束到一个可解析、可复查的方向上而不是让它自由发挥。自由对话适合兴趣聊天不适合需要持续追踪的行为干预。4.4 用 Python 调用本地模型写一个最小的 Python 调用脚本先验证从脚本到模型之间的链路是通的。import requests SYSTEM_PROMPT open(prompts/system_prompt.txt, encodingutf-8).read() url http://127.0.0.1:11434/api/chat payload { model: qwen2.5:7b, stream: False, messages: [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: 我现在烟瘾犯了特别想点一根。} ] } resp requests.post(url, jsonpayload, timeout180) resp.raise_for_status() data resp.json() print(data[message][content])运行这个脚本观察模型返回的内容。如果回复包含了安抚和追问说明提示词生效如果回复冗长、跑题或者出现了没有依据的健康建议说明需要调整提示词或更换模型。这是整个项目中最小的可运行闭环建议先把这一步跑通再做后续功能。5. 功能测试与效果验证一个 LLM 辅助戒瘾工具至少需要测下面几个维度。5.1 冲动场景模拟测试直接模拟“烟瘾犯了”这个最高频场景。输入示例我现在烟瘾犯了特别想点一根。判断标准模型是否先接纳感受而不是说教。是否会追问触发因素比如“刚才发生了什么”或“你现在是压力大还是无聊”。是否给出了替代动作建议。是否控制在 3 句话以内。常见失败情况模型回复太长变成一篇说教文章。模型直接说“吸烟有害健康”然后结束没有提供行动建议。模型给出“你可以买尼古丁口香糖”这类具体医疗产品建议。只要不是专业医疗背景这超出了安全边界。出现这些情况优先调整 system prompt把“不要给具体药物建议”这句话写得更有约束力。如果还不行换一个对齐能力更强的模型。5.2 触发因素识别测试这个测试的目的是看模型能不能帮你从“模糊感受”里拆出“具体触发点”。输入示例我今天下午其实没压力但看到同事去阳台抽烟我就特别想来一根。好的回复应该指出环境线索是触发因素可能属于“看到他人吸烟”或“社交场景”类型并建议以后遇到类似场景时的应对方式。判断标准是模型是否能把“同事抽烟”识别为一种环境触发而不是只停留在“你要坚持住”的鼓励层面。5.3 结构化记录测试当用户描述完一次冲动后模型是否按提示词里的 JSON 结构输出记录。输入示例刚才开会开到一半脑子很乱特别想抽一根。后来我去茶水间喝了杯水过了五分钟好一点了。判断标准返回内容里是否包含trigger、intensity、action、result等字段。intensity是否是一个数字。action是否能准确概括“喝水”这个替代动作。如果模型没有输出 JSON可以在 system prompt 里增加一句“当用户描述完一次完整的冲动过程时必须输出一条 JSON 记录”。如果仍不稳定说明模型指令跟随能力不够换更大或对齐更好的模型。5.4 多轮对话稳定性测试这不是一次问答就结束的事。你需要连续发多条消息模拟一天中的多次冲动记录。测试时按下面顺序连续输入1. 早上起床后想抽烟。 2. 是不是因为昨晚没睡好 3. 那我今天该怎么提醒自己 4. 帮我记录刚刚这次10点半强度6原因是没睡好我喝了一杯水。判断标准模型在第四轮是否能正确生成一条包含所有字段的记录而不是把前三轮内容重复一遍。这里最容易暴露的问题是上下文丢失或格式漂移。如果三轮之后模型开始忘记 JSON 格式说明上下文长度或模型能力不足以支撑这种用法。5.5 周复盘测试当数据积累到几天后让模型对记录做一次汇总。这是我这周的冲动记录三天内有 5 次冲动2 次在晚上3 次发生在工作压力大的时候。我不确定规律是什么你能帮我分析一下吗判断标准模型能否给出一个清晰的规律总结比如“晚上冲动可能与加班疲劳有关”或“工作压力是主要触发因素”而不是泛泛地说“坚持就是胜利”。6. 接口 API 与批量任务6.1 本地 API 能力Ollama 启动后相当于在本地暴露了一个 HTTP 接口。这意味着你不需要打开任何独立网页完全可以通过脚本调用模型能力。接口地址默认是http://127.0.0.1:11434常见接口包括/api/chat和/api/generate。具体请求结构以实际部署工具的文档为准上面 Python 示例使用的是/api/chat的常见结构。如果你不想用 Ollama也可以用 LM Studio、vLLM 等工具。它们的 API 路径可能不同但思路一致模型服务端口起来之后用 HTTP 请求调用。6.2 让 LLM 生成周报的批量脚本批量任务的设计思路是把一段时间内的记录从 JSON 文件读取出来一次性交给 LLM 做汇总分析。假设每天的记录都保存在data/notes/目录下下面这个脚本会读取一周的记录并生成复盘报告。import json import glob import requests def load_notes(directory): notes [] for path in sorted(glob.glob(f{directory}/*.json)): with open(path, encodingutf-8) as f: notes.extend(json.load(f)) return notes notes load_notes(data/notes) url http://127.0.0.1:11434/api/chat payload { model: qwen2.5:7b, stream: False, messages: [ { role: system, content: 你是一个健康管理分析助手。请只基于用户提供的记录做描述性总结不提供医疗建议不评价个人意志。 }, { role: user, content: 请根据以下戒烟记录生成周复盘输出规律、触发因素和有效替代动作\n json.dumps(notes, ensure_asciiFalse) } ] } resp requests.post(url, jsonpayload, timeout300) resp.raise_for_status() with open(data/reports/weekly_review.md, w, encodingutf-8) as f: f.write(resp.json()[message][content])这个脚本已经具备批量任务的基本特征输入是目录下的多个 JSON 文件输出是一份独立的 Markdown 报告。后面如果要处理更多天数据只需要往目录里放更多 JSON 文件不需要改代码。6.3 批量任务的设计建议批量任务最容易踩的坑有三个第一输入数据格式不一致导致模型输出乱掉第二单次请求上下文过长导致响应变慢或超时第三并发请求太多导致显存不足或服务崩溃。建议永远先做小规模测试。先放三条记录确认输出正常再放一周数据。批量分析建议串行执行不要同时发起很多请求。如果有几十条甚至上百条记录一次塞进上下文可能超过模型上下文限制最好拆成多次分析再汇总。如果要在脚本里增加失败重试可以加一个最简单的时间间隔重试逻辑for attempt in range(3): try: resp requests.post(url, jsonpayload, timeout300) resp.raise_for_status() break except requests.exceptions.RequestException as e: print(f请求失败第 {attempt 1} 次尝试{e}) time.sleep(5)6.4 LLM 与其他平台是否需要同一台电脑这里可以直接回答一个网上常问的问题LLM 服务和调用端必须在同一台电脑上吗不需要。LLM 服务本质上是一个 HTTP 服务部署在一台机器上其他机器通过网络访问即可。如果你把 Ollama 部署在电脑 A电脑 B 只需要把请求地址从127.0.0.1:11434改成http://电脑A的IP:11434就能调用。这种做法适合一台性能较好的机器专门跑模型其他设备只负责发送指令。但要注意两点一是暴露局域网 IP 时要确保网络环境可信否则别人也能调用你的模型服务二是如果把请求地址改成公网地址必须加鉴权措施。Ollama 默认没有复杂鉴权不建议直接暴露到公网。ComfyUI 与 LLM 是否在同一台机器同理不必须通过 API 跨机调用即可。7. 资源占用与性能观察7.1 显存和内存怎么看如果使用 NVIDIA 显卡可以用nvidia-smi查看显存占用。在运行模型的同时打开一个终端执行nvidia-smi重点看Memory-Usage那一列。如果显存占用接近上限说明模型规模或上下文长度需要调低。如果没有独立显卡可以通过系统任务管理器或top命令查看内存和 CPU 占用。CPU 推理时7B 模型可能会出现明显的响应延迟这是正常现象。这类工具对交互响应速度有一定要求如果 CPU 推理慢到十几秒才回复体验会明显下降。7.2 影响性能的关键参数在同一个模型里影响资源占用最大的几个因素如下。模型参数量7B、14B、32B 之间差异是数量级的。量化位数Q4、Q5、Q8、FP16 各自显存占用不同量化越高占用越大效果通常也更好。上下文长度请求中携带的历史消息越多占用的显存和内存越高。不要在批量任务里一次性塞入无限长的历史记录。并发请求数同时请求越多占用越高。个人使用场景下保持串行请求最稳妥。7.3 如何降低资源占用如果你的设备带不动当前模型按这个顺序尝试换成更小的模型比如从 14B 降到 7B。使用更高压缩率的量化版本。缩短上下文只保留最近几轮对话。关闭其他占用显存的程序比如浏览器硬件加速、其他模型服务。在批量任务中把长记录拆成小批次处理。需要注意的是降低资源占用通常会带来回复质量下降。你需要自己测试一个平衡点回复是否能稳定输出 JSON是否还能记住前几轮的关键信息。如果做不到硬件就不适合跑这个模型。8. 常见问题与排查方法问题现象可能原因排查方式解决方案启动 Ollama 后无法访问页面/API服务未启动或端口被占用执行ollama serve查看日志检查端口netstat -ano | findstr 11434换端口或重启 Ollama 服务拉取模型时下载失败网络问题或模型名错误检查模型库中是否存在该标签重新拉取换成可访问的模型源显存不足导致启动崩溃模型过大显存不够用nvidia-smi观察显存占用换更小模型或更高压缩量化版本脚本调用超时模型推理太慢或请求时间过短查看脚本 timeout 设置增大 timeout如 300 秒模型答非所问system prompt 约束不够或模型能力不足检查回复内容与提示词的偏差强化 system prompt或换更大模型输出不是合法 JSON模型指令跟随能力不足打印模型原始输出在 system prompt 中重申 JSON 输出格式或改用 generate 接口批量任务卡住单次请求上下文过长或并发过多查看终端日志、显存占用分批处理减少并发换端口后脚本还是连旧端口环境变量未生效或进程未重启检查OLLAMA_HOST配置重启 Ollama 进程后重新测试9. 最佳实践与使用建议这类工具最终能不能起作用很大程度不取决于模型多强而取决于使用流程是否稳定。下面几条建议可以直接用。第一先跑通最小闭环。第一天不要设计复杂功能只需要完成“输入一句话模型回复一句话脚本能记录日志”这个过程。最小闭环稳定后再逐步加周报、趋势分析、批量处理。第二固定 system prompt。不要每天随手改提示词频繁修改会让模型行为不稳定也让你难以判断效果变化是来自数据还是提示词。每次修改提示词可以备份一份旧版本比如system_prompt_v2.txt。第三用 JSON 保存原始记录用 Markdown 保存复盘报告。原始记录必须结构化便于批量分析和长期统计。复盘报告是给人看的Markdown 足够。不要用对话式的自由文本作为主要存储方式后续很难分析。第四冲动来临时记录越快越好。可以在手机或电脑桌面放一个启动脚本双击就进入对话界面。如果手边没有模型服务也可以用系统自带备忘录先写一行时间、触发点、强度、做了什么。等回到电脑前再补录到 JSON 中。第五数据要及时备份。本地 JSON 文件可能因为误删、磁盘故障而丢失。最简单的方式是在脚本里加一段自动复制到备份目录的逻辑或者定期手动备份。这些记录是你的行为基线数据丢失后很难重建。第六保持隐私边界。不要把真实姓名、手机号、详细工作单位等身份信息写进数据文件。分析触发因素时用“工作压力”“开会”“晚饭后”这类去身份化的描述即可。第七模型输出必须复核。LLM 生成的周报可能存在幻觉比如把没有记录的日期当成真实数据。批量分析脚本可以增加一个简单校验在输出报告前手动检查关键结论是否有对应记录支持。不要把模型总结当成绝对事实。第八合规和安全使用边界要前置。这是辅助工具不涉及医疗诊断。如果出现身体不适、严重焦虑、睡眠障碍等戒断反应不要指望 LLM 处理直接咨询专业医生。涉及个人健康数据的使用也要遵守相关法律法规和平台规则不用于未经授权的场景。10. 总结与下一步把 LLM 用于尼古丁成瘾干预本质上不是让模型解决“意志力”问题而是把主观冲动转变成可记录、可分析、可复盘的客观数据。这套方案里最重要的不是模型参数多强而是三条链路是否稳定对话输入链路、结构化解析链路、批量复盘链路。这三条链路都跑通之后它就从一个聊天工具变成了一个行为干预工具。值得最先验证的功能是 5.1 的冲动场景模拟测试。如果模型在“我现在烟瘾犯了”这句话下能给出简短、不评判、有追问的回复说明提示词方向是对的。如果这一步效果不好后续记录和复盘质量都会受影响。最容易踩的坑有两个。一是把 system prompt 写得过于抽象模型自由发挥空间太大二是记录数据没有固定 JSON 结构导致后期无法批量分析。这两个问题都要在一开始就避免。后续可以扩展的方向很多把记录接入日历工具生成打卡提醒用本地向量数据库保存长期记忆把周报脚本改成自动发送到手机的小工具或者把提示词和脚本打包成一键启动的整合包分享给需要的人。这些都是在当前骨架上的自然延伸。如果你也需要一套能长期记录的本地 LLM 行为辅助工具建议先从最小闭环开始跑通之后再逐步加功能。数据越规整模型能帮你提炼的东西就越多。