opencode 如何重启服务,如何指定哪个文件夹内的,哪个文件中的哪一行,需要修改一下或者添加新的...

作成日: 2026年1月30日

使用モデル GPT-5.2 by Chat01

質問

opencode 如何重启服务,如何指定哪个文件夹内的,哪个文件中的哪一行,需要修改一下或者添加新的处理方法
https://github.com/anomalyco/opencode

思考

Response breakdown in Chinese

  1. Restart: In opencode TUI or server, use /exit to restart. For serving, use ctrl+c. If using systemd, run systemctl restart for the service.
  2. Specify folder: For TUI, use opencode /path/to/project. For the server, cd to the desired directory and then run opencode serve.
  3. Specify file/line: In IDE, reference with `

Thought for 1m 56s

回答

下面按你说的 3 件事来讲:如何重启服务如何指定“哪个文件夹/哪个文件/哪一行”要“加一个新的处理方法”该改哪里(给你 3 条最常用的扩展方式:命令 / 工具 / 插件)。


1) OpenCode 如何“重启服务”

OpenCode 的“服务”通常指两种:

A. 你在跑 TUI(交互界面)

  • 目前社区普遍做法是:在 TUI 里执行 /exit 退出,然后在终端里重新启动(也有人提需求希望有 /restart,但还在讨论中)。(GitHub)

启动(当前目录):

  • opencode

启动(指定目录):

B. 你在跑 opencode serve(HTTP Server)

文档里明确 opencode serve 是一个 headless HTTP server:(OpenCode)

  • 前台运行:按 Ctrl+C 停掉,再重新跑一次
  • 指定端口/地址:
    • opencode serve --port 4096 --hostname 127.0.0.1 (OpenCode)

如果你是用 systemd / docker 把 opencode serve 当常驻服务跑:那就按你自己的管理方式重启(例如 systemctl restart xxxdocker restart xxx)。OpenCode 本身不“接管”你宿主机的服务管理。


2) 如何指定:哪个文件夹、哪个文件、哪一行

A. 指定“哪个文件夹/项目目录”

最简单就是启动时指定工作目录

  • opencode /path/to/project(启动 TUI 并以该目录作为工作目录)(OpenCode)
    或者:
  • cd /path/to/project && opencode

服务器模式同理:你在哪个目录启动 opencode serve,后续实例/会话的目录上下文就是那套(工具里也会拿到 directory/worktree 这些上下文)。(OpenCode)

B. 指定“哪个文件”

在 TUI 里,直接用 @ 引用文件路径即可(会 fuzzy search 并把文件内容带进上下文):(OpenCode)
例子:

  • 请解释 @packages/opencode/src/.../xxx.ts 里这个逻辑

C. 指定“哪一行(行号范围)”

IDE 集成(VS Code/Cursor 等)里,官方示例支持这种行号标注:

(在纯 TUI 文档里只明确了 @file 引用;你要精确行范围,最稳的是用 IDE 的 @File#Lx-y 或者在消息里手动写“请看第 N 行到 M 行”。)


3) “需要修改一下或者添加新的处理方法”——推荐你用哪种方式?

你这句“处理方法”可能有 3 种常见诉求,我给你分别对应该改哪个文件夹


方式 1:加一个 自定义命令(适合:固定提示词/流程,例如 /test/lint

放到项目里:

例如你建一个:

  • .opencode/commands/my-flow.md

然后在 TUI 里就能 /my-flow 跑。(OpenCode)

什么时候用它?
你想“一键触发一套提示词”,但不需要真正新增可被 LLM 调用的“函数”。


方式 2:加一个 自定义 Tool(工具函数)(适合:新增“可执行的处理方法”,让模型像调用 read/write/bash 一样调用你写的逻辑)

放到项目里:

最小例子(官方文档结构):

  • .opencode/tools/database.ts 里用 tool() helper 定义 execute(),文件名就是工具名(如 database)。(OpenCode)

并且工具 execute(args, context) 能拿到:

  • context.directory(会话工作目录)
  • context.worktree(git 根目录) 等上下文信息。(OpenCode)

什么时候用它?
你说的“添加新的处理方法”大概率就是这个:比如“新增一个调用内部接口/跑脚本/查数据库/处理日志”的能力。

✅ 注意:tools/plugins/commands 这类扩展都是启动时加载的,所以你改完通常要重启 opencode(/exit 后再开,或重启 serve)。(OpenCode)


方式 3:写一个 插件 Plugin(适合:想 hook 事件、改默认行为、接入外部服务)

放到项目里:

  • .opencode/plugins/(项目级) 或全局:
  • ~/.config/opencode/plugins/ (OpenCode)

文档也说明了加载顺序、npm 插件如何安装缓存等。(OpenCode)


4) 如果你是想“改 OpenCode 自身源码”的那种“处理方法”

仓库是 monorepo,核心 CLI + HTTP server 在 packages/opencode 里;架构说明里也提到 server 入口在 packages/opencode/src/command/serve.ts(API 层 / HTTP server 相关)。(DeepWiki)

这类改动属于贡献源码,而不是“扩展”。一般建议你先用 Custom Tools / Plugins,除非你确定要改框架层。


如果你告诉我你说的“服务”具体是哪一种(TUI 还是 opencode serve,以及你想加的“处理方法”是:一条命令一个可调用工具、还是hook 行为的插件),我可以直接给你一个“应放置的目录结构 + 示例文件内容 + 如何触发验证”的完整模板。

質問

如下是我opencode的配置,我觉得这样配置模型思考时间太长了,能否修改一下,让思考但时间不要超过1分钟
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"Elysiz": {
"npm": "@ai-sdk/openai-compatible",
"name": "Elysiz",
"options": {
"baseURL": "https://elysia.h-e.top/v1",
"apiKey": "sk-SSEr9Vxk9rOA50xZudDoWmm6SOxuQiaVmrwixdFOUdvseG"
},
"models": {
"claude-4.5-sonnet-real": {
"name": "claude-4.5-sonnet-real",
"thinking": true
},
"claude-4.5-sonnet": {
"name": "claude-4.5-sonnet",
"thinking": true
},
"gemini-3-pro-preview": {
"name": "gemini-3-pro-preview",
"thinking": true
},
"gpt-5.2": {
"name": "gpt-5.2",
"thinking": true,
"options": {
"include": [
"reasoning.encrypted_content"
],
"store": false
},
"variants": {
"xhigh": {
"reasoningEffort": "xhigh",
"textVerbosity": "medium",
"reasoningSummary": "auto"
},
"high": {
"reasoningEffort": "high",
"textVerbosity": "medium",
"reasoningSummary": "auto"
},
"medium": {
"reasoningEffort": "medium",
"textVerbosity": "medium",
"reasoningSummary": "auto"
}
}
}
}
},
"BoHe": {
"npm": "@ai-sdk/openai-compatible",
"name": "BoHe",
"options": {
"baseURL": "https://x666.me/v1",
"apiKey": "sk-IQrzxa9pkDC7igKlVI83AHGDmIdf631qRTLlrYZVzTXEe6"
},
"models": {
"gpt-5.2-high": {
"name": "gpt-5.2-high",
"thinking": true
},
"gemini-3-pro-preview-bs": {
"name": "gemini-3-pro-preview-bs",
"thinking": true
},
"gpt-5.2": {
"name": "gpt-5.2",
"thinking": true
}
}
},
"B4U": {
"npm": "@ai-sdk/openai-compatible",
"name": "B4U",
"options": {
"baseURL": "https://b4u.qzz.io/v1",
"apiKey": "sk-T51gpwsP5bze6fd7lMpcbRzvqaVnrcbrIhCRsRc10wKX0S"
},
"models": {
"claude-4.5-sonnet": {
"name": "claude-4.5-sonnet",
"thinking": true
},
"claude-4.5-sonnet-think": {
"name": "claude-4.5-sonnet-think",
"thinking": true
}
}
},
"QAQ": {
"npm": "@ai-sdk/openai-compatible",
"name": "QAQ",
"options": {
"baseURL": "https://ai.qaq.al",
"apiKey": "sk-df87dc1f3a78b272243b198e48b53fc3c59de3b97ba0fc0ecda0c4057a2f0e"
},
"models": {
"gpt-5.2-codex": {
"name": "gpt-5.2-codex",
"options":{
"reasoningEffort": "high",
"textVerbosity": "medium",
"reasoningSummary": "auto"
}
},
"gpt-5.2": {
"name": "gpt-5.2",
"thinking": true
}
}
}
}
}

思考

Thought for 52s

回答

可以的,而且OpenCode 本身就支持“1 分钟超时”——你现在“思考太久”,本质上是两件事叠加:

  1. 你给很多模型都开了 thinking: true(会更慢)
  2. 你没给 provider 配 request timeout(默认 300000ms = 5 分钟)——OpenCode 文档里明确 provider.options.timeout 是毫秒,默认 300000ms。 (OpenCode)

下面给你一套“仍然允许思考,但单次请求不超过 60 秒”的改法。


先说最关键:加 60 秒超时(硬上限)

把每个 provider 的 options 里加上:

jsonc
"timeout": 60000

因为 OpenCode 支持 provider.<id>.options.timeout(单位毫秒)。 (OpenCode)

例如(以你的 Elysiz 为例):

jsonc
"provider": { "Elysiz": { "npm": "@ai-sdk/openai-compatible", "name": "Elysiz", "options": { "baseURL": "https://elysia.h-e.top/v1", "apiKey": "…", "timeout": 60000 }, "models": { ... } } }

同样给 BoHe / B4U / QAQ 都加上 timeout: 60000

这个是硬限制:超过 60s 还没返回就会被 OpenCode 断掉(你就不会再等 2~5 分钟了)。


再说第二关键:把默认“思考强度”降下来(软提速)

你现在 gpt-5.2 还定义了 variants,但最高有 xhigh,而且模型本体还 thinking: true,这很容易变“深度思考模式”。

OpenCode 的模型配置里,**OpenAI 类(reasoningEffort)**常见档位是 none / minimal / low / medium / high / xhigh。(OpenCode)

推荐改法(保持能思考,但更快)

  1. 保留 thinking(如果你就是想“默认会思考”)
  2. 把默认常用 variant 调到 minimallow
  3. xhigh 禁用掉,避免误切到超慢档

示例(只展示 gpt-5.2 这一段):

jsonc
"gpt-5.2": { "name": "gpt-5.2", "thinking": true, "options": { "include": ["reasoning.encrypted_content"], "store": false }, "variants": { "minimal": { "reasoningEffort": "minimal", "textVerbosity": "medium", "reasoningSummary": "auto" }, "low": { "reasoningEffort": "low", "textVerbosity": "medium", "reasoningSummary": "auto" }, "medium": { "reasoningEffort": "medium", "textVerbosity": "medium", "reasoningSummary": "auto" }, "xhigh": { "disabled": true } } }

这样你依然能用 minimal/low/medium 思考,但不会一不小心切到 xhigh 慢到怀疑人生。


怎么“实际使用时”选更快的 variant?

  • CLIopencode run 支持 --variant(例如 --variant low / --variant minimal)。这个在社区/文档里有提到,并且近期就是围绕 --variant 在讨论增强。(GitHub)
  • TUI:可以用 variant_cycle 的 keybind 在不同 variant 间快速切换(文档在 Models 里专门提到 Cycle variants)。(OpenCode)

你这份配置里还有一个会“让你以为很慢”的坑:JSON 现在是无效的

你贴的片段里,gpt-5.2options 后面有一个多余的逗号:

jsonc
"store": false },

JSON/JSONC 里这会直接导致解析失败或行为异常(取决于你用的加载器)。建议你把整份文件过一遍 JSONC 校验。


⚠️ 非常重要:你把 API Key 直接发出来了

这几个 sk-... 已经暴露了,强烈建议立刻吊销/重置,然后换成新的再写回配置文件(或者用环境变量//connect 管理)。
(我这里不复述你的 key,避免二次扩散。)


一句话建议(最省事的组合)

  • 给每个 provider 加:"timeout": 60000(硬 1 分钟上限) (OpenCode)
  • 把常用模型 variant 默认用 minimallow,并禁用 xhigh(软提速) (OpenCode)

如果你愿意,我也可以直接把你这份配置整理成一份完整的、可直接粘贴的合法 JSONC(保留你的 provider 结构,但把 timeout/variants/语法问题一次性修好)。

このQ&Aを共有