fix(agent): smooth Chinese stream chunks

This commit is contained in:
2026-07-02 20:22:47 +08:00
parent 60b7acd1bf
commit 9a0dea799b
3 changed files with 398 additions and 14 deletions
+25
View File
@@ -22,6 +22,21 @@ const optionalString = () =>
z.string().optional(),
);
const optionalBoolean = (defaultValue: boolean) =>
z.preprocess((value) => {
if (typeof value !== "string") {
return value;
}
const normalized = value.trim().toLowerCase();
if (["1", "true", "yes", "on"].includes(normalized)) {
return true;
}
if (["0", "false", "no", "off"].includes(normalized)) {
return false;
}
return value;
}, z.boolean().default(defaultValue));
// 统一在启动时解析环境变量,避免业务代码里散落字符串默认值。
const envSchema = z
.object({
@@ -51,6 +66,16 @@ const envSchema = z
OPENCODE_MODEL: z.string().default("deepseek/deepseek-v4-flash"),
// 聊天 UI 和 /stream 允许选择的 opencode 模型完整配置,JSON 数组。
OPENCODE_MODEL_OPTIONS: z.string().default(defaultAgentModelOptionsJson),
// 平滑 token 输出,避免上游模型大块/抖动 token 直接传到前端。
AGENT_TOKEN_SMOOTHING_ENABLED: optionalBoolean(true),
// 平滑输出每段之间的间隔(毫秒)。
AGENT_TOKEN_SMOOTHING_DELAY_MS: z.coerce
.number()
.int()
.min(0)
.default(20),
// 平滑输出分词 locale,中文默认使用 zh。
AGENT_TOKEN_SMOOTHING_LOCALE: z.string().default("zh"),
// opencode skills 树目录;会在运行时解析为绝对路径,避免工具 cwd 偏移。
OPENCODE_SKILLS_ROOT_DIR: z.string().default("./.opencode/skills"),
// client 模式下,目标 opencode server 的基础地址。