Conversation topic and review
A work-agent conversation keeps the user’s purpose. Say change, add to, or summarize the topic and the assistant does it; review when the work is done.
Source docs/en/site/mech-topic-review.md
Truth: User-visible capabilities follow docs/产品规格.md §4.1.2.
Voice: A continuous Q&A chat is a conversation; one user message plus the assistant finishing a reply is a round. Topic and review hang on the conversation.
Scope: Main-site work-assistant conversations only. The help assistant, embed visitors, and scheduled conversations do not do topic and review.
Related: 智能体记忆.md, 记忆锻造/记忆锻造.md, 工作区能力包.md, 帮助智能体对话操作.md, 智能体对话编排.md (topic is background; this round follows the latest sentence); usage: 对话复盘的操作, 对话主题的操作.
1. Topic
The topic is the user’s main goal in this conversation: written in Markdown, one paragraph or several, with optional small headings, lists, and bold. The UI shows it formatted, not as source. Make the thing to get done, the boundaries, and current progress clear. Editable and visible to the user. Not a short list title, and not a cut of one original user sentence.
| When | Who writes |
|---|---|
| After the first round ends | The assistant drafts |
| The user asks to add a bit, replace a whole paragraph, or tighten the topic (e.g. “put this in the topic”, “change the topic to…”, “summarize the topic”) | The assistant understands then writes the topic, not long-term memory; this round’s work continues |
| The user clearly changes subject | The assistant answers the new question this turn. It only asks whether to rewrite the stored topic if the user seems to want that field changed; it does not interrogate before answering. |
Each round sent to the model includes the current topic as background, not a command. Answer this turn’s latest message first; words in the topic (such as “rule”) are not an instruction to edit operating rules. If the user asks something new, answer it; do not ask “should we change the topic?” first. Rewriting the stored topic still needs the user to say so. The topic is an anchor, not a lock. In small talk, or when the user says “let’s not talk about this for now”, the topic yields.
The title is still the short list name (cut from the first user message), separate from the topic. After the topic changes you may suggest changing the title, but they are not one field.
Subject changes keep a short history (when, from A to B) for review and Memory Forge.
2. Review
A review is a conclusion the assistant drafts and the user edits after a task has reached a pause. It is written to disk only after confirm.
Five columns:
- What got done
- Key decisions and basis
- Requirements / corrections the user made explicit
- Unfinished or to continue next time
- Reusable practices (skill names, approved libraries, and so on)
When it appears
By default do not prompt. Agent settings “Prompt for review” is off by default, to avoid interrupting. When off, the user can still say “review this”. They can also tell the assistant “turn on prompt for review” or “don’t nag for review”.
Only when that agent has “Prompt for review” on does it prompt as below:
| When | What the user sees |
|---|---|
| After at least 2 rounds, the assistant judges the current topic is done | A Review button (does not start writing automatically) |
| This conversation has been idle more than 2 hours and less than 2 days | The assistant sends an invite in the same conversation, with a review button |
Invite only once in the window. If the user speaks again before due, already reviewed, or said skip review this time, cancel. After 2 days, do not nag. Count by duration, not calendar days.
Tapping the button or saying “review this”: the assistant drafts the five columns; the user edits then confirms. Saying “skip review this time” is recorded; this stretch is not nagged again.
After confirm the button becomes “View review”. After a successful subject change, the next stretch is allowed. Old reviews are kept.
The invite is an assistant message + a next-step suggestion chip; it does not invent a new message type. It does not use the scheduled-task path that “creates a new conversation each time”.
3. After confirm
| Downstream | How it is used |
|---|---|
| Agent long-term memory | Extract across-conversation facts from “user requirements / corrections” |
| Memory forge | Archive carries topic and review; cluster by topic |
| Later new conversations | When topics are close, related reviews may be reference, not scripture |
Rolling summary (context compaction) is not review; keep them separate.
4. Conversation actions
When the user says what they want done, do it:
- “Change the topic to check Liu Yiyang’s May attendance against punches and leave, mark abnormal days”
- “Update the topic to real historical dynasties + fantasy fairy tale + light humor + Jin Yong style”
- “The book should be funny; this is important; put it in the topic” (also help invent characters and plot; humor goes into the topic, not long-term memory)
- “Summarize the topic and remove wording that does not fit” (tidy the current topic, not remove a workspace member)
- “Review this”
- “Skip review this time”
Only when they ask “how do I change the topic / how do I review” do you explain.
Implementation mapping
| User language | Implementation |
|---|---|
| Conversation | chat_sessions (session_kind=agent, source=main) |
| Topic | topic, topic_updated_at, topic_history_json |
| Review status | review_status: none / suggested / invited / drafted / confirmed / declined |
| Review body | review_json |
| Already invited | review_nudge_at |
| Whether to prompt for review | Agent config_json.prompt_review (off by default) |
| Change topic / review | Topic: after the assistant understands, topic_get / topic_write, not passphrase intercept. Short review phrases (“review this”, “confirm review”, “skip review this time”) may still use a fixed phrase. Also PATCH /api/v1/chat/sessions/{id}; async extract after a round (do not overwrite if this round just wrote) |
| Idle invite | In-process scan → original conversation AppendChatAssistant + unread |