pi-openai-responses-instructions

Pi extension package that rewrites openai-responses payloads to use top-level instructions instead of system/developer input messages.

Packages

Package details

extension

Install pi-openai-responses-instructions from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-openai-responses-instructions
Package
pi-openai-responses-instructions
Version
0.1.2
Published
Jul 3, 2026
Downloads
330/mo · 15/wk
Author
raoxxxwq
License
MIT
Types
extension
Size
8.7 KB
Dependencies
0 dependencies · 1 peer
Pi manifest JSON
{
  "extensions": [
    "./index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-openai-responses-instructions

pi-openai-responses-instructions 是一个 Pi extension package。

它会在请求真正发出前,自动把 api: "openai-responses" 的 payload 从:

  • input[0] 中携带 system / developer prompt

改写为:

  • 顶层 instructions
  • 同时从 input 中移除该首条 system / developer

这个方案不修改 node_modules,因此比直接 patch 已安装的 Pi 运行时代码更稳,更适合跨机器复用。

作用范围

默认影响全部 ctx.model.api === "openai-responses" 的请求。

不影响:

  • openai-codex-responses
  • azure-openai-responses
  • openai-completions
  • anthropic-messages

工作原理

扩展使用 Pi 的 before_provider_request 钩子,在 provider payload 已经序列化完成、但尚未发送前进行改写:

  1. 仅处理当前模型 api === "openai-responses" 的请求。
  2. 若 payload 已经存在顶层 instructions,则保持不动。
  3. 仅检查 payload.input[0] 是否存在,且其 role 是否为 systemdeveloper
  4. 将这第一条消息的文本内容写入顶层 instructions
  5. input 中删除这第一条 system / developer 消息,保留其余消息顺序不变。

安装

本地路径安装

pi install /absolute/path/to/extensions-pluging/pi-openai-responses-instructions

临时试用

pi -e /absolute/path/to/extensions-pluging/pi-openai-responses-instructions/index.ts

npm 安装

发布到 npm 后可用:

pi install npm:pi-openai-responses-instructions

git 安装

如果你把这个目录放到独立仓库,也可以:

pi install git:github.com/MuJianxuan/pi-openai-responses-instructions@v0.1.0

使用

安装后重启 Pi,或执行:

/reload

然后继续使用原来的 provider / model 配置即可,不需要切换 provider。

调试日志

如果你想查看首条 system / developer 消息里的原始 content,以及扩展最终提取出的 instructions,可以在启动 Pi 前打开调试开关:

PI_OPENAI_RESPONSES_INSTRUCTIONS_DEBUG=1 pi

开启后,当扩展命中可改写的首条消息时,会输出两条日志:

  • 原始 firstItem.content
  • 提取后的 instructions,若未提取到则显示 <empty>

验证方法

最直接的方法是临时加载一个 payload 日志扩展,或在你自己的网关侧查看最终请求体。

改写成功后,请求体应表现为:

{
  "instructions": "...system prompt...",
  "input": [
    { "role": "user", "content": [...] }
  ]
}

也就是说,只有当第一条消息本来就是 systemdeveloper 时,才会发生改写。例如:

{
  "input": [
    { "role": "developer", "content": "...system prompt..." },
    { "role": "user", "content": [...] }
  ]
}

会被改写;而下面这种不会:

{
  "input": [
    { "role": "user", "content": [...] },
    { "role": "developer", "content": "...late prompt..." }
  ]
}

限制说明

  1. 这个包按 api 类型匹配,因此会影响所有 openai-responses 请求。
  2. 如果首条消息不是 system / developer,本扩展不会扫描后续消息,也不会做任何改写。
  3. 如果某个 provider 后续自己已经改成直接发送 instructions,本扩展会检测到 payload.instructions 已存在,并跳过重复改写。
  4. 这个包只重写 provider payload,不改 Pi 内置 provider 实现,因此升级 Pi 后通常不需要重打补丁。

开发检查

npm run check:import
npm run pack:check
npm run prepublishOnly