PHP调用OpenAI API记录闪念需手动curl POST至/chat/completions,设Content-Type为application/json、Authorization头为"Bearer sk-xxx",闪念文本放messages[0].content且角色为user;本地存档优先用file_put_contents()写JSON文件,命名含时间戳与uniqid,结构极简;离线模型通过proc_open()调用本地HTTP服务更安全;归类交由SQLite FTS5或外部工具处理,PHP仅负责原始数据落盘。

PHP 调用 OpenAI API 记录闪念:绕不开 curl 和 Authorization 头
PHP 本身不内置 AI 接口能力,得靠 HTTP 请求对接。最稳的方式是用 curl 手动发 POST 到 https://api.openai.com/v1/chat/completions,别碰那些封装过深的第三方 SDK——它们常悄悄改 prompt 结构或重试逻辑,导致你存进去的“闪念”被自动润色甚至篡改。
关键点:
-
Content-Type必须设为application/json,漏了会返回400 Bad Request并提示 “Invalid JSON” -
Authorization头格式是Bearer sk-xxx,注意Bearer后有一个空格,少这个空格直接 401 - 闪念文本建议塞进
messages[0].content,角色固定用user,别设system提示词——你要存的是原始念头,不是让它“扮演笔记助手”
用 file_put_contents() 做本地闪念胶囊:时间戳命名 + JSON 封装
AI 不是必需环节。很多所谓“灵感记录”本质只是快速落笔,这时候 PHP 本地写文件比调 API 更快、更可靠、不依赖网络和 token 限额。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 文件名用
date('Ymd_His') . '_' . uniqid() . '.json',避免并发写入覆盖 - 内容结构保持极简:
{"text": "刚才想到接口可以加缓存", "created_at": "2024-06-12 14:23:05"},别嵌套 tags 或 categories——后期用 grep 或 SQLite 全文搜更方便 - 路径别硬写
/var/www/.../notes/,用__DIR__ . '/data/flash/',配合is_writable()检查权限,否则静默失败
把 ChatGLM 或 Ollama 本地模型接入 PHP:走 proc_open() 比 exec() 安全
想离线跑小模型(比如 chatglm3-6b 或 phi-3),又不想暴露 API 密钥或依赖云服务?PHP 可以起子进程调本地 HTTP 服务,但直接用 exec() 启动 ollama run phi-3 会卡死——它没 stdin/stdout 流控。
正确姿势是 proc_open():
- 先确保
ollama serve已后台运行,PHP 只需向http://localhost:11434/api/chat发请求 - 如果非要 PHP 直启模型(如无现成服务),用
proc_open()配['pipe' => ['r', 'w', 'w']],读stderr抓加载日志,超时 30 秒就proc_terminate() - 别让模型输出带 markdown 或编号列表——闪念需要纯文本,后处理反而增加解析负担
“自动归类闪念”别在 PHP 层做:交给 SQLite FTS5 或外部 CLI 工具
有人一上来就想让 PHP 调 AI 给每条闪念打标签(#缓存 #数据库 #前端)。这不仅慢,还不可控:同一条“用户登录太慢”,可能某次标 #性能,另一次标 #安全。
更务实的做法:
- PHP 只负责收,原样存进 SQLite 的
flash_notes表,字段仅id, text, created_at - 归类交给后续步骤:用
sqlite3 notes.db "SELECT * FROM flash_notes WHERE text MATCH '缓存 OR redis';"查,或用 Python 脚本批量跑轻量分类模型 - 真要实时打标,用
curl -X POST http://localhost:8000/tag走独立服务,PHP 不承担 NLP 逻辑——否则一个memory_limit不够就崩整个 Web 请求
闪念的价值在于“捕获速度”和“回溯确定性”,不是首次录入时的智能程度。越早把数据落盘、越少中间转换环节,后期越不容易丢东西。



















