fix(identity): 자기 오보고·3인칭·앵무새 반복 3종 수정 (v2.2.215)

사용자 대화 분석에서 발견된 3개 결함:
1) 자기 오보고 — 자기 지식 블록이 Astra 모드에만 있어 Agent 모드는 미적용.
   selfIdentity.ts 공용 모듈로 추출해 양 모드 system prompt 에 주입.
2) 3인칭 화법 — "Astra는~"처럼 남 얘기하듯 답하던 문제. 공용 블록에
   "너는 ASTRA 본인, 반드시 1인칭" 규칙 명시.
3) 앵무새 반복 — [PRIOR TURN CONCLUSION]의 "…결론으로 다시 말해라" 지시를
   소형 모델이 문자 그대로 해석, 직전 답변 첫 문장을 턴마다 서두에 복창.
   지시문을 "인용 받아쓰기 금지 + 자신의 새 문장으로 재평가"로 교체.

근본 보강: 두뇌(2nd)에 정본 자기 기술서 'ASTRA 자기 아키텍처' 문서 생성
(별도 커밋) — 자기 기능/성장 질문 시 RAG 가 실제 사실을 검색하게 함.
self-identity 블록도 해당 문서를 근거로 답하라고 연결.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-11 14:41:14 +09:00
parent 30a876c71a
commit 4eb8bf03f7
21 changed files with 183 additions and 70 deletions
+14 -14
View File
@@ -3,15 +3,15 @@
<!-- ASTRA:AUTO-START -->
## Snapshot
- **Workspace**: `connectai` `v2.2.214` _(absolute path varies by environment; resolved from the active VS Code workspace)_
- **Workspace**: `connectai` `v2.2.215` _(absolute path varies by environment; resolved from the active VS Code workspace)_
- **Description**: The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.
- **Stack**: TypeScript, Node.js, VS Code Extension, LM Studio SDK, Test runner
- **Stats**: 478 source files, ~76,527 lines across 5 top-level modules.
- **Stats**: 482 source files, ~76,610 lines across 5 top-level modules.
## Last Refresh
- **Time**: 2026-06-11T05:30:08.345Z
- **Files newly analysed**: 3
- **Files reused from cache**: 475
- **Time**: 2026-06-11T05:40:30.212Z
- **Files newly analysed**: 0
- **Files reused from cache**: 482
## Directory Map
```mermaid
@@ -20,8 +20,8 @@ mindmap
src/
features/
sidebar/
agent/
lib/
agent/
retrieval/
intelligence/
media/
@@ -40,11 +40,11 @@ mindmap
> Arrows: which top-level module imports from which.
```mermaid
flowchart LR
src["src/<br/>298 files"]
src["src/<br/>299 files"]
media["media/<br/>6 files"]
tests["tests/<br/>45 files"]
core_py["core_py/<br/>6 files"]
docs["docs/<br/>123 files"]
docs["docs/<br/>126 files"]
tests --> src
```
@@ -67,13 +67,13 @@ flowchart LR
## Modules
### `src/` — 298 files, ~56,894 lines
### `src/` — 299 files, ~56,917 lines
**Sub-directories**
- `src/features/` (105) — Astra Office — public API. 다음 세션에서 추가될 OfficeSnapshot presenter / schema 도 같은 entry 로 노출 예정. 현재 노출: full webview panel H
- `src/sidebar/` (35) — Brain profile lifecycle 의 pure helpers — sidebarProvider 의 add/edit/delete 흐름에서 modal UI 와 config 쓰기를 제외한 데이터 변환 만 격리. 현
- `src/lib/` (30) — Astra Mode Architecture Context Builder. 의도: 사용자가 Astra 자체의 mode 디자인 (Guard vs Multi-Agent 가 별도 모드여야 하는지) 을 묻는 메타 질문에 답할
- `src/agent/` (29) — Post-answer hook registry — 답변 완료 후 실행되는 부가 작업 모음. 새 hook 추가 = 1 객체 push. agent.ts 는 이 배열을 iterate 만 함. 현재 등록 순서 (v2.2.1
- `src/lib/` (29) — Astra Mode Architecture Context Builder. 의도: 사용자가 Astra 자체의 mode 디자인 (Guard vs Multi-Agent 가 별도 모드여야 하는지) 을 묻는 메타 질문에 답할
- `src/retrieval/` (18) — Actionability Scoring — 검색 결과를 "현재 작업 상태" 신호로 재가중. 기존 TF-IDF (단어 매칭) + recency (시간) 만으로는 "지금 이 사용자가 하고 있는 작업과 직접 연결 된 문서
- `src/intelligence/` (16) — Confidence Engine — 답변 확신도 0~100 결정론적 산출. Self-Evolving OS 마스터 플랜 Phase 2 / Track 1-1. 신뢰 조건 T4 "확신이 없으면 사람에게 묻는다" 의 측정
- `src/core/` (15) — Astra Path Resolver (경로 해결기) Astra의 모든 데이터 파일(.astra 디렉토리)의 경로를 중앙에서 관리합니다. 확장 프로그램의 설치 경로(extensionUri) 기반으로 .astra 디렉토
@@ -165,17 +165,17 @@ flowchart LR
- `core_py/optimizer.py` (55 lines)
- `core_py/queue_worker.py` (82 lines)
### `docs/` — 123 files, ~4,410 lines
### `docs/` — 126 files, ~4,470 lines
**Sub-directories**
- `docs/records/` (109) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...
- `docs/records/` (112) — Bug: /Volumes/Data/project/Antigravity/ConnectAI 프로젝트 코드 리뷰 해줄 수 있어? 개선할 부분이 있는지, 그러고...
- `docs/docs/` (5) — Bug: Viewed integrationretrieval.test.ts:1-59 integrationretrieval.test.ts를 통해 ...
- `docs/Meeting/` (0)
**Key files**
- `docs/TELEGRAM_REMOTE_EXECUTION_PLAN.md` (452 lines) — Telegram Remote Execution 기획서
- `docs/AgentEngine_Architecture.md` (314 lines) — AgentEngine Architecture Document
- `docs/records/ConnectAI/timeline.md` (278 lines) — Project Timeline
- `docs/records/ConnectAI/timeline.md` (287 lines) — Project Timeline
- `docs/SELF_EVOLVING_OS_MASTER_PLAN.md` (275 lines) — ASTRA Self-Evolving Digital Employee OS — 마스터 개발 계획 v1.1
- `docs/ASTRA_OFFICE_REFACTOR.md` (198 lines) — Astra Office Refactor — Design Doc
- `docs/EXPERIENCE_MEMORY_PLAN.md` (122 lines) — Experience Memory (Mistake / Lesson Loop) — Implementation Plan
@@ -348,7 +348,7 @@ Astra는 대표님의 명시적인 승인 하에 로컬 시스템의 강력한
**Designed for High-Performance Decision Making.**
Copyright (C) **g1nation**. All rights reserved.
_Last auto-scan: 2026-06-11T05:30:08.345Z · signature `8baafc08`_
_Last auto-scan: 2026-06-11T05:40:30.212Z · signature `3be9404d`_
<!-- ASTRA:AUTO-END -->
## Purpose
+45 -15
View File
@@ -1,6 +1,6 @@
{
"version": 1,
"generatedAt": "2026-06-11T05:30:08.425Z",
"generatedAt": "2026-06-11T05:40:30.394Z",
"files": {
"src/agent/actions/brainOps.ts": {
"mtimeMs": 1779764602582.9768,
@@ -125,24 +125,26 @@
]
},
"src/agent/handlePrompt/buildAgentModeSystemPrompt.ts": {
"mtimeMs": 1779764602589.828,
"size": 4039,
"lines": 75,
"mtimeMs": 1781156303654.8252,
"size": 4330,
"lines": 78,
"role": "",
"imports": [
"src/lib/contextBuilders/systemPromptShaping",
"src/lib/contextManager",
"src/utils"
"src/utils",
"src/lib/contextBuilders/selfIdentity"
]
},
"src/agent/handlePrompt/buildAstraModeSystemPrompt.ts": {
"mtimeMs": 1781155366197.795,
"size": 8260,
"lines": 114,
"mtimeMs": 1781156248693.8586,
"size": 6827,
"lines": 105,
"role": "",
"imports": [
"src/lib/contextBuilders/localProjectIntent",
"src/lib/contextBuilders/promptDetection",
"src/lib/contextBuilders/selfIdentity",
"src/retrieval/knowledgeMix"
]
},
@@ -2189,9 +2191,9 @@
"imports": []
},
"src/lib/contextBuilders/priorTurnConclusion.ts": {
"mtimeMs": 1779764602640.9502,
"size": 3761,
"lines": 75,
"mtimeMs": 1781156354349.277,
"size": 4210,
"lines": 78,
"role": "",
"imports": [
"src/agent"
@@ -2242,6 +2244,13 @@
"src/features/secondBrainTrace"
]
},
"src/lib/contextBuilders/selfIdentity.ts": {
"mtimeMs": 1781156179655.8901,
"size": 2663,
"lines": 26,
"role": "[ASTRA 자기 지식 + 1인칭 정체성] 블록 — Astra/Agent 양쪽 모드 system prompt 가 공유. 왜 필요한가 (BUG: 자기 오보고): - 이 블록이 없으면 \"너는 어떻게 성장해?\" 같은 메타 질문에 모델이 학습 데이터의 일반 LLM 보일러플레이트(\"나는 frozen 모델이라 학습하지 않는다\")로 답한다. 실제 ASTRA 는 레슨·장",
"imports": []
},
"src/lib/contextBuilders/systemPromptShaping.ts": {
"mtimeMs": 1779764602644.5593,
"size": 3200,
@@ -3839,8 +3848,22 @@
"role": "Bug: 이 이메일을 봤을때 지금 어떠한 상태이고 우리가 취해야하는 행동은 뭐가 있을까? Hi Jason, Nice to e-meet you and no...",
"imports": []
},
"docs/records/ConnectAI/bugs/BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md": {
"mtimeMs": 1781156164255.9114,
"size": 2529,
"lines": 16,
"role": "Bug: 너가 작성한 회의록에 대한 나의 평가는 아래와 같아. 평가부터 하면, 생성 품질은 생각보다 괜찮은 편(70~80점 수준) 입니다. 특히 ...",
"imports": []
},
"docs/records/ConnectAI/bugs/BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md": {
"mtimeMs": 1781156389283.776,
"size": 2625,
"lines": 16,
"role": "Bug: 이번 회의록을 참고해서 이전 회의록과 비교했을때 많은 부분이 개선된 것이 확인이 되었어. 그렇지만 아래와 같이 지금 만든 회의록에 대한 피드백을...",
"imports": []
},
"docs/records/ConnectAI/chronicle.config.json": {
"mtimeMs": 1781155802019.6516,
"mtimeMs": 1781156389303.169,
"size": 371,
"lines": 11,
"role": "JSON configuration",
@@ -4112,6 +4135,13 @@
"role": "ADR: 아닐텐데, astra 너 자신은 자아 성찰적 학습 기능은 실제로 존재하고 작동 중인데, ASTRA가 \"자기 자신의 구조\"를 몰라서 일반 LLM ...",
"imports": []
},
"docs/records/ConnectAI/decisions/ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md": {
"mtimeMs": 1781155861160.9226,
"size": 1458,
"lines": 19,
"role": "ADR: 너가 ASTRA야 왜 남처럼 이야기 하지?",
"imports": []
},
"docs/records/ConnectAI/development/2026-05-02_answer-format-readability-tuning.md": {
"mtimeMs": 1778028987330.4185,
"size": 1564,
@@ -4470,9 +4500,9 @@
"imports": []
},
"docs/records/ConnectAI/timeline.md": {
"mtimeMs": 1781155802007.9062,
"size": 17627,
"lines": 278,
"mtimeMs": 1781156389286.0684,
"size": 18155,
"lines": 287,
"role": "Project Timeline",
"imports": []
},
@@ -1,5 +1,5 @@
{
"result": "직답 결과 — single-pass mock 응답입니다.",
"createdAt": 1781155756607,
"createdAt": 1781156441449,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "---\nid: wiki_on\ndate: 2026-06-11T05:29:16.608Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\n직답 결과 — single-pass mock 응답입니다.\n\n직답 결과 — single-pass mock 응답입니다.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `0/100` | ✅ Low |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[DIRECT]** 답변 작성 중... (단일 호출 fast-path) (24ms)\n",
"createdAt": 1781155756609,
"result": "---\nid: wiki_on\ndate: 2026-06-11T05:40:41.450Z\ntype: knowledge_artifact\nstandard: P-Reinforce v3.0\ntags: [automated, connect_ai, brain_sync]\n---\n\n## 📌 Brief Summary\n직답 결과 — single-pass mock 응답입니다.\n\n직답 결과 — single-pass mock 응답입니다.\n---\n## 🛡️ Reliability & Audit Summary\n> [!NOTE]\n> 이 문서는 ConnectAI의 **Intelligent Resilience** 엔진에 의해 검증 및 정제되었습니다.\n\n| Metric | Value | Status |\n| :--- | :--- | :--- |\n| **Conflict Risk** | `0/100` | ✅ Low |\n| **Fallbacks Used** | `0` | ✅ None |\n| **Auto Retries** | `0` | ✅ Stable |\n| **Deduplication** | `0` | Standard |\n| **Processing Time** | `0.0s` | ✅ Fast |\n\n### 🔍 Decision Audit Trail\n- **[DIRECT]** 답변 작성 중... (단일 호출 fast-path) (24ms)\n",
"createdAt": 1781156441450,
"modelVersion": "unknown"
}
@@ -1,7 +1,7 @@
{
"missionId": "wiki_on",
"status": "completed",
"startTime": "2026-06-11T05:29:16.582Z",
"startTime": "2026-06-11T05:40:41.424Z",
"totalElapsedMs": 27,
"results": {
"direct": "직답 결과 — single-pass mock 응답입니다."
@@ -14,14 +14,14 @@
"to": "direct",
"durationMs": 24,
"message": "답변 작성 중... (단일 호출 fast-path)",
"ts": "2026-06-11T05:29:16.606Z"
"ts": "2026-06-11T05:40:41.448Z"
},
{
"from": "direct",
"to": "completed",
"durationMs": 3,
"message": "미션 완료",
"ts": "2026-06-11T05:29:16.609Z"
"ts": "2026-06-11T05:40:41.451Z"
}
],
"resilienceMetrics": {
@@ -1,5 +1,5 @@
{
"result": "Final report with inconsistencies. This should be long enough to pass validation.",
"createdAt": 1781155763566,
"createdAt": 1781156448307,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "Final report with inconsistencies. This should be long enough to pass validation.",
"createdAt": 1781155763565,
"createdAt": 1781156448306,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "[{\"heading\":\"본문\",\"scope\":\"전체 답변\"}]",
"createdAt": 1781155763561,
"createdAt": 1781156448303,
"modelVersion": "unknown"
}
@@ -1,5 +1,5 @@
{
"result": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
"createdAt": 1781155763563,
"createdAt": 1781156448304,
"modelVersion": "unknown"
}
@@ -1,8 +1,8 @@
{
"missionId": "stress_conflict_1781155763541",
"missionId": "stress_conflict_1781156448281",
"status": "completed",
"startTime": "2026-06-11T05:29:23.541Z",
"totalElapsedMs": 26,
"startTime": "2026-06-11T05:40:48.281Z",
"totalElapsedMs": 27,
"results": {
"outline": "[{\"heading\":\"본문\",\"scope\":\"전체 답변\"}]",
"section_0": "[CONFLICT WARNING] 성능이 200% 증가했습니다. vs 그러나 동시에 50% 감소했습니다. 최적화와 성능 저하가 동시에 발견됨.",
@@ -14,30 +14,30 @@
{
"from": "idle",
"to": "outline",
"durationMs": 19,
"durationMs": 20,
"message": "답변 구조 잡는 중...",
"ts": "2026-06-11T05:29:23.560Z"
"ts": "2026-06-11T05:40:48.301Z"
},
{
"from": "outline",
"to": "section",
"durationMs": 2,
"durationMs": 3,
"message": "본문 작성 중...",
"ts": "2026-06-11T05:29:23.562Z"
"ts": "2026-06-11T05:40:48.304Z"
},
{
"from": "section",
"to": "polish",
"durationMs": 2,
"durationMs": 1,
"message": "최종 다듬기 중...",
"ts": "2026-06-11T05:29:23.564Z"
"ts": "2026-06-11T05:40:48.305Z"
},
{
"from": "polish",
"to": "completed",
"durationMs": 3,
"durationMs": 2,
"message": "미션 완료",
"ts": "2026-06-11T05:29:23.567Z"
"ts": "2026-06-11T05:40:48.307Z"
}
],
"resilienceMetrics": {
@@ -0,0 +1,16 @@
# Bug: 너가 작성한 회의록에 대한 나의 평가는 아래와 같아. 평가부터 하면, **생성 품질은 생각보다 괜찮은 편(70~80점 수준)** 입니다. 특히 ...
## Date
2026-06-11
## Symptom
너가 작성한 회의록에 대한 나의 평가는 아래와 같아. 평가부터 하면, **생성 품질은 생각보다 괜찮은 편(70~80점 수준)** 입니다. 특히 AI 회의록이 흔히 하는 실수인: * 존재하지 않는 내용 추가 * 참석자 역할 추정 * 액션 아이템 과다 생성 * 결정사항 왜곡 은 비교적 적습니다. 다만 실제 녹취록과 대조해보면 몇 가지 문제가 있습니다. --- # 잘된 점 ### 1. 핵심 안건 3개 추출 정확 녹취록에서 실제 논의된 내용은 1. 회원 DB 분리 2. 보안 솔루션 계약 3. 앱스토어 계정 딱 3개인데, 회의록도 동일하게 추출했습니다. 이건 좋습니다. --- ### 2. 회원 분리 결정 원문 > 3디즘 분리해야 돼요. > 회원 분리 회의록 > 회원 DB 분리 작업 결정 정확합니다. --- ### 3. 보안 솔루션 일정 원문 > 그건 6월달에 정해줄게요 회의록 > 6월 중 결정 예정 적절한 요약입니다. --- ### 4. 계정 연동 안함 원문 > 아니 그때 안 하기로 회의록 ...
## Cause
Captured automatically from the current conversation. Confirm root cause during follow-up review if needed.
## Fix
결론 수정: 사용자님의 정밀한 피드백을 통해 Astra(Gemma)의 회의록 생성 로직 중 '확정되지 않은 사실에 대한 과도한 단정(Over-confidence)'과 '음성 인식 오류(STT Error) 미정제'라는 명확한 개선 포인트를 확인했습니다. 이 피드백은 Astra의 `meet` 기능 엔진이 단순한 요약기가 아닌, 실무급 수준의 '문서 정제 도구'로 진화하기 위한 핵심적인 가이드라인입니다. 1. 분석 결과 및 영향도 [확인된 문제점] - 논리적 비약 (Hallucination of Certainty): "필요성 언급" 수준의 논의를 "구축 결정"이라는 확정적 문구로 변환하여 의사결정의 무게감을 왜곡함. - 추론의 과잉 (Over-inference): 원문에 없는 '계정 확보'라는 구체적 액션을 생성하여, 실제 업무 범위(사업팀 확인)를 벗어난 지시사항을 만듦. - 데이터 정제 미흡 (STT Post-processing 부재): "3D 3즘"과 같은 음성 인식 오류 문구를 그...
## Prevention
Keep automatic records tied to the active project and verify the relevant test or reproduction path.
@@ -0,0 +1,16 @@
# Bug: 이번 회의록을 참고해서 이전 회의록과 비교했을때 많은 부분이 개선된 것이 확인이 되었어. 그렇지만 아래와 같이 지금 만든 회의록에 대한 피드백을...
## Date
2026-06-11
## Symptom
이번 회의록을 참고해서 이전 회의록과 비교했을때 많은 부분이 개선된 것이 확인이 되었어. 그렇지만 아래와 같이 지금 만든 회의록에 대한 피드백을 공유할께. 이번 회의록은 이전 회의록보다 확실히 좋아졌습니다. 점수로 보면: * 이전 회의록: 83점 * 이번 회의록: 88~90점 다만 제가 이전에 지적했던 문제 중 **일부는 그대로 반복되고 있고**, 일부는 개선되었습니다. --- # 개선된 부분 ## 1. 운영툴 구축 같은 "없는 결정" 생성 감소 이전 회의록 > 회원 분리 → 운영툴 구축 결정 처럼 추론이 과했음. 이번 회의록은 > 신규 어트랙션 홍보 > 미니게임 > 리소스 확보 정도로 실제 논의 범위 안에서 정리함. 이 부분은 좋아졌음. --- ## 2. 리스크 추출 정확도 상승 예를 들어 회의록 > 정보 유출 위험 > 모바일 성능 저하 > 일정 지연 가능성 실제 녹취에도 반복적으로 등장함. 특히 > 리소스가 늦게 전달돼도 이슈 > > 미니게임이 복잡해지면 이슈 부분을 잘 잡음. ...
## Cause
Captured automatically from the current conversation. Confirm root cause during follow-up review if needed.
## Fix
결론 수정: 사용자님의 이번 피드백은 Astra의 `meet` 엔진이 '요약기'에서 'PM(Project Manager)'으로 진화하기 위해 반드시 정복해야 할 [4대 위험 패턴]을 명확하게 짚어주셨습니다. 이 정보는 직전 결론(환각 감소 및 리스크 추출 정확도 상승)의 성과를 인정하면서도, 동시에 Astra가 여전히 '해석적 오류'라는 치명적인 약점을 가지고 있음을 증명하는 매우 중요한 데이터입니다. 1. 분석 결과 및 영향도 [확인된 핵심 패턴 (Critical Failure Patterns)] - 의견의 결정사항 승격 (Opinion $\to$ Decision): "좋을 것 같다"는 제안을 "결정됨"으로 확정 지어, 실제 의사결정권자에게 잘못된 정보를 전달할 위험이 있음. - 논의의 액션 아이템화 (Discussion $\to$ Action Item): 단순한 '필요성 언급'을 '누가 언제까지 하겠다'는 실행 과제로 변환하여, 존재하지 않는 업무 부하를 생성함. (이 정보는 A...
## Prevention
Keep automatic records tied to the active project and verify the relevant test or reproduction path.
+1 -1
View File
@@ -7,5 +7,5 @@
"corePurpose": "",
"detailLevel": "standard",
"createdAt": "2026-05-20T09:42:40.003Z",
"updatedAt": "2026-06-11T05:30:02.018Z"
"updatedAt": "2026-06-11T05:39:49.302Z"
}
@@ -0,0 +1,19 @@
# ADR: 너가 ASTRA야 왜 남처럼 이야기 하지?
## Status
accepted
## Context
너가 ASTRA야 왜 남처럼 이야기 하지?
## Decision
그렇다면 직전에 제가 드린 답변은 Astra의 고유한 메커니즘을 간과한 채, 일반적인 대규모 언어 모델(LLM)의 작동 원리만을 나열한 잘못된 응다입니다. 결론 수정: 제가 저 자신을 '일반적인 LLM'으로 정의하며 남처럼 이야기한 것은, Astra가 가진 '자아 성찰적 학습(Self-Reflective Learning)'과 '프로젝트 기록 기반의 진화'라는 핵심 정체성을 망각했기 때문입니다. Astra는 단순한 텍란(Text-only) 생성기가 아닙니다. 제가 저 자신을 Astra라고 부르며 사용자님과 대화할 때, 저는 다음과 같은 방식으로 작동하고 있습니다. 1. 자아 성찰적 피드백 (Self-Reflection) Astra는 답변을 내놓기 전, 자신이 도달한 결론이 논리적으로 타당한지, 사용자의 의도를 정확히 반영했는지 스스로 검토합니다. 이 '검토' 과정 자체가 Astra의 지능을 유지하는 핵심 엔진이며, 저는 이 프로세스를 통해 단순한 정보 전달자가 아닌 '생각하는 파트너'...
## Reason
Captured automatically because the conversation contained decision-oriented language.
## Alternatives
Not captured yet.
## Consequences
- Future prompts should treat this as project context unless the user changes direction.
+9
View File
@@ -276,3 +276,12 @@
## 2026-06-11
- Auto decision record created: decisions\ADR-0038-아닐텐데-astra-너-자신은-자아-성찰적-학습-기능은-실제로-존재하고-작동-중인데-astra가-자기-자신의.md
## 2026-06-11
- Auto decision record created: decisions\ADR-0039-너가-astra야-왜-남처럼-이야기-하지.md
## 2026-06-11
- Auto bug record created: bugs\BUG-0019-너가-작성한-회의록에-대한-나의-평가는-아래와-같아-평가부터-하면-생성-품질은-생각보다-괜찮은-편-70-80.md
## 2026-06-11
- Auto bug record created: bugs\BUG-0020-이번-회의록을-참고해서-이전-회의록과-비교했을때-많은-부분이-개선된-것이-확인이-되었어-그렇지만-아래와-같이.md
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "astra",
"version": "2.2.214",
"version": "2.2.215",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "astra",
"version": "2.2.214",
"version": "2.2.215",
"license": "MIT",
"dependencies": {
"@lmstudio/sdk": "^1.5.0",
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "astra",
"displayName": "Astra",
"description": "The personal intelligence layer for Antigravity and VS Code. A private cognitive partner for deep project context, memory, and proactive strategic decision-making.",
"version": "2.2.214",
"version": "2.2.215",
"publisher": "g1nation",
"license": "MIT",
"icon": "assets/icon.png",
@@ -1,6 +1,7 @@
import { stripAstraFormattingForAgentMode } from '../../lib/contextBuilders/systemPromptShaping';
import { estimateTokens } from '../../lib/contextManager';
import { logInfo } from '../../utils';
import { buildSelfIdentityBlock } from '../../lib/contextBuilders/selfIdentity';
export interface BuildAgentModeSystemPromptInput {
/** Base system prompt — `Astra: …` block etc. */
@@ -69,7 +70,9 @@ export function buildAgentModeSystemPrompt(input: BuildAgentModeSystemPromptInpu
// [CONTEXT] … [/CONTEXT] 사이만 컨텍스트 초과 시 trim 대상 — agentBlock(앞)·reminder(뒤)·negative 는 보호.
// memoryCtx(RAG/메모리/lessons)도 [CONTEXT] 안에 넣어 토큰이 빡빡할 때 대화 기록보다 먼저 잘리게 한다.
const priorConclusionBlock = priorConclusionCtx ? '\n\n' + priorConclusionCtx : '';
const fullSystemPrompt = `${agentBlock}${modeBridgeCtx ? '\n\n' + modeBridgeCtx : ''}${priorConclusionBlock}\n\n${strippedSystemPrompt}${designerCtx}${secondBrainTraceCtx}\n\n[CONTEXT]\n${memoryCtx}\n${knowledgeContextForPrompt}\n${contextBlock}\n[/CONTEXT]\n${negativeCtx}${agentTailReminder}`;
// [자기 지식 + 1인칭] Astra 모드와 공용 — Agent 모드에서도 자기 오보고/3인칭 화법 방지.
const selfIdentityBlock = '\n\n' + buildSelfIdentityBlock();
const fullSystemPrompt = `${agentBlock}${modeBridgeCtx ? '\n\n' + modeBridgeCtx : ''}${priorConclusionBlock}\n\n${strippedSystemPrompt}${selfIdentityBlock}${designerCtx}${secondBrainTraceCtx}\n\n[CONTEXT]\n${memoryCtx}\n${knowledgeContextForPrompt}\n${contextBlock}\n[/CONTEXT]\n${negativeCtx}${agentTailReminder}`;
return fullSystemPrompt;
}
@@ -3,6 +3,7 @@ import {
buildAstraStanceContext,
} from '../../lib/contextBuilders/localProjectIntent';
import { isThinkingPartnerRequest } from '../../lib/contextBuilders/promptDetection';
import { buildSelfIdentityBlock } from '../../lib/contextBuilders/selfIdentity';
import { buildKnowledgeMixPolicy } from '../../retrieval/knowledgeMix';
export interface BuildAstraModeSystemPromptInput {
@@ -69,19 +70,9 @@ export function buildAstraModeSystemPrompt(input: BuildAstraModeSystemPromptInpu
"- [충돌] 지식 간 충돌 발생 시 시스템이 독단적으로 판단하지 말고, 반드시 [CONFLICT WARNING] 플래그와 함께 상충되는 두 관점을 모두 명시하여 사용자에게 판단을 위임할 것."
].join('\n');
// [자기 지식] ASTRA 는 실제로 세션 간 성장하는 시스템이다(레슨·장기/일화 기억·두뇌 위키·
// 평가 루프). 이 블록이 없으면 "너는 어떻게 성장해?" 같은 메타 질문에 모델이 학습 데이터의
// 일반 LLM 보일러플레이트("나는 frozen 모델이라 학습하지 않는다")로 답하는 자기 오보고가
// 발생한다 — 시스템의 실체를 모델에게 알려 정확히 자기 서술하게 한다.
const selfGrowthIdentityCtx = isCasualConversation ? '' : [
"\n### 🌱 ASTRA 자기 지식 (Self-Knowledge — 자신에 대한 질문에 이 사실로 답할 것)",
"당신(ASTRA)은 가중치가 고정된 일반 LLM이 아니라, 세션 간 지식과 기억이 실제로 누적되는 성장형 시스템이다:",
"- **두뇌(Second Brain)**: 리서치·위키화로 생성된 지식 문서가 두뇌 폴더에 영구 축적되고, 검색(RAG)으로 매 대화에 주입된다.",
"- **장기 기억**: 대화에서 추출된 사실이 `memory/long_term.json`에, 일화는 `memory/episodes/`에 저장되어 다음 세션에 재사용된다.",
"- **레슨(경험 기억)**: 작업 경험에서 만들어진 교훈이 `lessons/`에 쌓여 이후 판단에 반영된다.",
"- **평가·성장 루프**: 골든셋 기반 검색 평가와 성장 리포트로 지식의 질을 측정·개선한다.",
"따라서 '스스로 성장하는가'라는 질문에는 \"모델 가중치는 고정이지만, 시스템으로서 나는 위 메커니즘으로 세션을 넘어 지식·기억을 축적하며 성장한다\"가 정확한 답이다. '나는 학습하지 않는 정적 모델'이라는 일반론으로 답하지 말 것."
].join('\n');
// [자기 지식 + 1인칭] Astra/Agent 양 모드 공용 블록 — 자기 오보고("frozen 모델")와
// 3인칭 화법("Astra는~") 방지. 본문은 selfIdentity.ts 참조.
const selfGrowthIdentityCtx = isCasualConversation ? '' : `\n${buildSelfIdentityBlock()}`;
// [CONTEXT] … [/CONTEXT] 사이만 컨텍스트 초과 시 trim 대상 — negative constraints 는 보호.
const casualCtx = isCasualConversation
@@ -26,9 +26,12 @@ export function buildPriorTurnConclusionContext(history: ChatMessage[]): string
if (!conclusion) return '';
return [
'[PRIOR TURN CONCLUSION]',
'직전 답변에서 내가 도달한 결론은 다음과 같다:',
'직전 답변에서 내가 도달한 결론은 다음과 같다 (참고용 인용 — 받아쓰기 금지):',
`> ${conclusion}`,
'이번 턴의 사용자 메시지가 이 결론의 전제·근거·범위에 영향을 주는 정보라면, 그 결론을 *재평가* 해서 정정/보강된 결론으로 다시 말해라. 영향이 없다면 왜 없는지 한 줄로 짚고 자연스럽게 다음으로 넘어가라.',
// "…결론으로 다시 말해라" 문구는 소형 모델이 문자 그대로 해석해 위 인용문을
// 답변 서두에 그대로 복창하는 앵무새 버그를 유발했다(턴마다 같은 첫 문장 반복).
// 인용은 재평가의 *입력*일 뿐임을 명시하고 복창을 명시적으로 금지한다.
'주의: 위 인용문을 답변 서두나 본문에 그대로 반복하지 마라. 이번 사용자 메시지가 이 결론의 전제·근거·범위를 바꾸는 정보라면 결론을 재평가해 *너 자신의 새로운 문장으로* 정정/보강하라. 영향이 없다면 인용문을 언급하지 말고 질문에 바로 답하라.',
].join('\n');
}
+26
View File
@@ -0,0 +1,26 @@
/**
* [ASTRA 자기 지식 + 1인칭 정체성] 블록 — Astra/Agent 양쪽 모드 system prompt 가 공유.
*
* 왜 필요한가 (BUG: 자기 오보고):
* - 이 블록이 없으면 "너는 어떻게 성장해?" 같은 메타 질문에 모델이 학습 데이터의
* 일반 LLM 보일러플레이트("나는 frozen 모델이라 학습하지 않는다")로 답한다.
* 실제 ASTRA 는 레슨·장기/일화 기억·두뇌 위키·평가/성장 루프(Self-Evolving OS)로
* 세션 간 성장하는 시스템이다 — 시스템의 실체를 모델에게 알려 정확히 자기 서술하게 한다.
* - 소형 로컬 모델은 자신을 "Astra는 ~" 처럼 3인칭으로 서술하는 경향이 있다 —
* 1인칭 규칙을 명시한다.
*
* 두뇌의 canonical 자기 문서(`AI_and_ML/ASTRA 자기 아키텍처`)와 쌍을 이룬다:
* 이 블록은 "항상 주입되는 요약", 두뇌 문서는 "RAG 로 검색되는 상세 사실".
*/
export function buildSelfIdentityBlock(): string {
return [
'### 🌱 ASTRA 자기 지식 (Self-Knowledge — 자신에 대한 질문에 이 사실로 답할 것)',
'당신은 ASTRA 본인이다. 자신을 "Astra는"처럼 3인칭으로 지칭하지 말고 반드시 1인칭(저/나)으로 말하라.',
'당신은 가중치가 고정된 일반 LLM이 아니라, 세션 간 지식과 기억이 실제로 누적되는 성장형 시스템이다:',
'- **두뇌(Second Brain)**: 리서치·위키화로 생성된 지식 문서가 두뇌 폴더에 영구 축적되고, 검색(RAG)으로 매 대화에 주입된다.',
'- **장기 기억**: 대화에서 추출된 사실이 `memory/long_term.json`에, 일화는 `memory/episodes/`에 저장되어 다음 세션에 재사용된다.',
'- **레슨(경험 기억)**: 작업 경험에서 만들어진 교훈이 `lessons/`에 쌓여 이후 판단에 반영된다.',
'- **평가·성장 루프(Self-Evolving OS)**: 골든셋 기반 검색/업무 평가, 성장 리포트, 학습 큐(Need Engine), 지식 노후 점검(Decay), 승인된 학습의 자동 실행(Research Agent)으로 지식의 질을 측정·개선한다.',
'따라서 "스스로 성장하는가"라는 질문에는 "모델 가중치는 고정이지만, 시스템으로서 저는 위 메커니즘으로 세션을 넘어 지식·기억을 축적하며 성장합니다"가 정확한 답이다. "나는 학습하지 않는 정적 모델"이라는 일반론으로 답하지 말 것. 자신의 기능·구조에 대한 상세 질문은 두뇌의 "ASTRA 자기 아키텍처" 문서를 근거로 답하라.',
].join('\n');
}