


























@@ -550,6 +550,51 @@ function formatFullAccessBlockedReason(reason?: EmbeddedFullAccessBlockedReason)
550550}
551551return "runtime constraints";
552552}
553+554+const MODEL_IDENTITY_PREFIX = "Current model identity:";
555+556+export function buildModelIdentityPromptLine(model?: string): string | undefined {
557+const trimmed = model?.trim();
558+if (!trimmed) {
559+return undefined;
560+}
561+return `${MODEL_IDENTITY_PREFIX} ${trimmed}. If asked what model you are, answer with this value for the current run.`;
562+}
563+564+export function appendModelIdentitySystemPrompt(params: {
565+systemPrompt: string;
566+model?: string;
567+}): string {
568+const line = buildModelIdentityPromptLine(params.model);
569+if (!line) {
570+return params.systemPrompt;
571+}
572+573+let replaced = false;
574+const nextLines = params.systemPrompt
575+.split(/\r?\n/u)
576+.filter((candidate) => {
577+if (!candidate.trimStart().startsWith(MODEL_IDENTITY_PREFIX)) {
578+return true;
579+}
580+if (replaced) {
581+return false;
582+}
583+replaced = true;
584+return true;
585+})
586+.map((candidate) =>
587+candidate.trimStart().startsWith(MODEL_IDENTITY_PREFIX) ? line : candidate,
588+);
589+590+if (replaced) {
591+return nextLines.join("\n");
592+}
593+594+const base = params.systemPrompt.trimEnd();
595+return base ? `${base}\n\n${line}` : line;
596+}
597+553598export function buildAgentSystemPrompt(params: {
554599workspaceDir: string;
555600defaultThinkLevel?: ThinkLevel;
@@ -757,6 +802,7 @@ export function buildAgentSystemPrompt(params: {
757802const skillsPrompt = params.skillsPrompt?.trim();
758803const heartbeatPrompt = params.heartbeatPrompt?.trim();
759804const runtimeInfo = params.runtimeInfo;
805+const modelIdentityLine = buildModelIdentityPromptLine(runtimeInfo?.model);
760806const runtimeChannel = normalizeOptionalLowercaseString(runtimeInfo?.channel);
761807const runtimeCapabilities = runtimeInfo?.capabilities ?? [];
762808const runtimeCapabilitiesLower = new Set(
@@ -816,7 +862,9 @@ export function buildAgentSystemPrompt(params: {
816862817863// For "none" mode, return just the basic identity line
818864if (promptMode === "none") {
819-return "You are a personal assistant running inside OpenClaw.";
865+return ["You are a personal assistant running inside OpenClaw.", modelIdentityLine]
866+.filter(Boolean)
867+.join("\n");
820868}
821869822870const contextFiles = params.contextFiles ?? [];
@@ -1174,6 +1222,7 @@ export function buildAgentSystemPrompt(params: {
11741222lines.push(
11751223"## Runtime",
11761224buildRuntimeLine(runtimeInfo, runtimeChannel, runtimeCapabilities, params.defaultThinkLevel),
1225+ ...(modelIdentityLine ? [modelIdentityLine] : []),
11771226`Reasoning: ${reasoningLevel} (hidden unless on/stream). Toggle /reasoning; /status shows Reasoning when enabled.`,
11781227);
11791228此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。