Metadata-Version: 2.4
Name: structured-writer-ldxs
Version: 1.1.0b9
Summary: structured-writer — AI Agent
Home-page: https://github.com/Ldxs001/workbuddy-skills
Author: Ldxs (wUwproject)
Author-email: wuwofc@yeah.net
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: requires-python
Dynamic: summary

# Structured Writer

> 结构化写作智能体 — 模板驱动的大纲规划 + 串行写作引擎。
> 版本：1.1.0b2 | 作者：wUwproject | 许可证：Apache 2.0

基于 Planner → Writer 双流水线的文档生成工具，支持模板驱动的元数据/内容树分离、大纲交互编辑、逻辑提示词等特性。

---

## 核心特性

| 特性 | 说明 |
|------|------|
| **meta+content 分离** | 模板分元数据区（短标识）和内容树区（文章正文），各有独立渲染/规划规则 |
| **LLM 对话生成模板** | 描述需求 → LLM 自动生成 meta/content/style/logic 四部分 |
| **串行写作引擎** | 按 order batch 逐节写作，支持 RAG 参考 + 辅助知识注入 + 事实自检 |
| **交互式大纲编辑** | 勾选/排序/重点/RAG/字数调整，leaf 和 section 类型独立字数控制 |
| **重新规划 + plan_hints** | 模态框输入章节/字数修改要求，LLM 按优先级重规划 |
| **逻辑提示词** | 与风格提示词分离，控制 LLM 的认知流程顺序（先写什么后写什么），不影响文章最终排列 |

---

## 快速开始

```bash
# 1. 安装依赖
pip install -r requirements.txt

# 2. 启动（需要 LM Studio 或 Ollama 运行中）
python main.py

# 3. 打开浏览器访问 http://localhost:8770
```

---

## 用户界面概览

### 配置 Tab

```
┌─ 模板管理 ───────────────────────────────────────┐
│  [下拉选择模板]  [另存为] [删除] [从对话生成]      │
│                                                  │
│  元数据区（橙色）   名称 | 显 | 字段意义 | 填写    │
│  ┌─────────────────────────────────────────────┐ │
│  │ 标题  | ☐ | 文章标题 | auto                 │ │
│  │ 作者  | ☑ | 作者姓名 | user                 │ │
│  └─────────────────────────────────────────────┘ │
│                                                  │
│  内容树区（蓝色）   名称 | 显 | 字段意义 | 子结构  │
│  ┌─────────────────────────────────────────────┐ │
│  │ 摘要  | ☐ | 概括全文  | 无                  │ │
│  │ 正文  | ☐ | 详细展开  | 有                  │ │
│  └─────────────────────────────────────────────┘ │
│                                                  │
│  风格提示词：控制文风和语气，注入每一步写作 prompt │
│  逻辑提示词：控制LLM认知顺序，不改变文章最终排列   │
└──────────────────────────────────────────────────┘
```

### 填写 → 规划 → 生成流程

```
1. 选择模板 → meta 输入框出现在聊天区
   ↓ 填写meta字段（或留空让LLM生成）
2. 发送写作主题 → LLM按模板生成大纲
   ↓
3. 编辑大纲（勾选/排序/字数/重点/RAG）
   ↓ 点「重新规划」→ 输入调整要求 → LLM重规划
4. 点「开始生成」→ 逐节串行写作
```

---

## 常见操作

### 1. 配置模型

在配置 Tab 的 规划模型 / 写作模型 区设置后端地址和模型名，点「刷新」加载可用模型列表。

### 2. 管理模板

- **切换**：下拉选择
- **编辑**：直接修改表格中的字段
- **另存为**：基于当前模板创建副本
- **删除**：仅自定义模板可删，双击确认
- **从对话生成**：输入文档描述，LLM 自动构造 meta+content+style+logic

### 3. 调整大纲

| 操作 | 方式 |
|------|------|
| 隐藏/显示节 | 勾选复选框 |
| 调整顺序 | 下拉选择 I~X |
| 标记重点 | 勾选 ⭐重点 |
| 调整字数 | leaf 节直接改输入框，section 节改子结构输入框 |
| 设为 0 | 不做字数限制，LLM 自由发挥 |
| 启用 RAG | 勾选 RAG + 选择知识库（需 8767 在线） |
| 重新规划 | 点击 → 模态框输入要求 → LLM 按新要求重生成 |

### 4. 写作控制

- **自动撰写**：单篇/批量自动执行规划+生成
- **延时停止**：当前子结构写完停
- **立即停止**：续写边界停

---

## 模板字段说明

```
元数据区：
  source=user: 用户必须填，LLM不碰（作者、单位、文号）
  source=auto: 用户可填，留空LLM生成（标题）
  source=llm: 由LLM生成（关键词等短数据）
  show_label=☑: 渲染时显示标签，无值也显示" > 名称：" 
  show_label=☐: 渲染时不显示标签，有值才显示" > 值"

内容树区：
  type=leaf: 无子结构，单段直接写
  type=section: 拆2-4个子结构（用户指定则按用户要求）
  source 固定 llm，不在表格中显示
```

---

## 文件结构

```
structured-writer/
├── main.py                           # 入口
├── setup.bat                         # Windows 一键启动
├── config.json                       # 全量配置（模板/模型/参数）
├── requirements.txt                  # 依赖
├── CHANGELOG.md                      # 版本日志
├── README.md                         # 本文件
│
├── structured_writer/                # 核心模块
│   ├── web_ui.py                     # Web UI（port 8770）
│   ├── planner.py                    # 大纲规划器（LLM 调用）
│   ├── writer.py                     # 串行写作引擎
│   ├── config_manager.py             # 配置读写 + 迁移
│   ├── state_manager.py              # 会话状态管理
│   ├── llm_client.py                 # LLM 统一客户端
│   └── rag_client.py                 # RAG 外部 API 客户端
│
└── data/                             # 运行时数据
    ├── sessions/                     # 会话存档
    └── archives/                     # 归档会话
```

---

## 技术栈

- **LLM 后端**: LM Studio / Ollama
- **Python**: 3.10+
- **架构**: ThreadingHTTPServer + 串行写作流水线
- **模板**: meta[] + content[] + style + logic 四部分
- **渲染**: Markdown（#/##/### 三级标题）

---

## 协议

Apache 2.0


---

## 更新说明

## [1.1.0b9] - 2026-07-30
### 重构
- **引用系统整体重构**：引用规则从 style 移至参考文献 desc，style 仅保留纯风格
- **后处理系统**：Python 全权处理引用替换（扫描「引用自{文件名}」→去重→按首次出现编号→正文替换→参考文献重排），LLM 仅负责格式化
- **prompt 分层重构**：`_build_context_section_prompt` 输出结构拆分为【全文风格背景】【前文回顾】【当前章节要求】【引用来源】四个独立区域，LLM 能明确区分各块用途

### 新增
- **addContentRow**：引用列改为两个独立输入框（□=□），正文格式和条目格式分开配置
- **引用后处理**：`generate_article` 末尾执行，引用列打勾时触发
- **rag_client**：Content-Type 增加 `charset=utf-8`，默认超时 30→60 秒，添加 3 次重试

### 修复
- **引用自正则**：`\S+` 和 `\w+` 在 Python3 下默认匹配 Unicode（含中文），改为 `[a-zA-Z0-9_.\-]` 仅匹配 ASCII
- **config.json**：学术论文/论文综述/test 三个模板全部 content 项设 `citation_check=True` + `citation_format="[x]=1."`

### 模板变更
- 学术论文/论文综述/test：style 移除引用规则，参考文献 desc 内嵌映射规则和格式说明
