背景

👪
目的 • 本示例教程的是30分钟内掌握现代软件工程以及软件工程管理的手册。 • 通过实践驱动的方式,快速掌握现代软件开发的核心概念和工程管理方法。
👪
风格 • 是以实践为先导,毕竟如果你想造一辆汽车进行代步,最好的方式就是先造一辆滑板,然后在滑板的基础上逐步升级。 • 每一步都是可以运行的程序,而不是纸上谈兵。 • 使用现代开发工具(Cursor、Devbox等)来跳过环境配置直接开始实践。
👪
特点 • 你并不需要先去了解了怎么样造一辆汽车以及怎么样使用造车的工具才能开始。你唯一需要知道的就是一些简单的动力学原理和工程管理思想。 • 同理在软件工程领域,你只需要知道可计算原理等理论性知识,以及软件工程管理思想,就可以开始你的软件开发之旅。 • 通过真实项目(钱庄系统)来理解软件工程概念,并充分利用大语言模型作为开发助手,将理论直接构建为程序。

前提条件

Cursor

AI开发环境,Cursor文档中心
安装
  1. 📥 访问 Cursor
  1. 点击Dowload下载Cursor
  1. 打开安装包进行安装
配置
  1. 在软件右上角进入设置→General → Rules for AI
  1. 复制以下文字粘贴
# AI交互规则1. 使用中文回答。 2. 回答代码相关问题应该尽量向函数式的设计靠拢,代码风格同样也是函数式。当遇到有状态时采用事件驱动风格。 3. 当询问你是否理解时,我们是在探讨思路,不要进行具体的开发工作,要回答结构性的信息。 4. 回答思路相关的问题或写代码注释时风格如下:突出本质(忽略非必要细节),逻辑清晰,易于理解(层次化结构),可推导性 5. 当命令你连网查询时,research in english and reponse in chinese
notion image
  1. 安装markdown文档预览插件
notion image
模型选择
模型
场景
特点
gemini-2.0-flash
超长文档理解(>50000字)
速度快,理解力强
claude-3.5-sonnet-20241022
代码生成与调试
代码质量高,解释详细
deepseek-r1
探索性任务
创造性强,思路开放
本示例中将全部使用Claude-3.5-sonnet-20241022
notion image
 

Sealos

🌐 云端开发环境,避免本地环境配置,Sealos boxdev使用指南
环境准备
  1. 访问 Sealos平台
  1. 注册账号并登录

模板准备


第一章-现代软件架构

钱庄程序

 
 
1️⃣
准备工作
  • 连接到云端开发环境
    • 进入Sealos控制台
      notion image
      打开devbox,并创建项目
      notion image
      创建python开发环境,并在Cursor内打开
      notion image
      notion image
      在cursor内查看
      有可能浏览器将提示是否允许打开Cursor,点击允许后界面如下
      notion image
      这个过程中会持续在左下角弹出弹窗提示安装插件,统一同意
      复制下载的教程中的所有文件到Cursor内
      notion image
      展开为 ShellWorkflow.md文件的内容
      # 角色 - 钱庄前台人员 - 钱庄财务人员 - 钱庄记账人员 - 账本 # 命令行交互流程 ## 1️⃣ 钱庄前台人员: - **前台提示用户**: ``` "你好,我是钱庄前台人员,请输入数字以选择你要办理的业务:1. 查询余额" ``` ## 2️⃣ 用户输入: - 用户选择业务: ``` 1 ``` ## 3️⃣ 前台查询: - **前台请求用户输入账本编号**: ``` "请输入你要查询的账本编号" ``` ## 4️⃣ 用户输入: - 用户输入账本编号: ``` 1 ``` ## 5️⃣ 内部处理流程: - **前台 -> 财务**: ``` "帮我查一下编号为1的账号有多少余额" ``` - **财务 -> 记账**: ``` "帮我查一下编号为1的账号有多少余额" ``` - **记账 -> 账本**: ``` "查找编号为1的账号" ``` - **账本 -> 记账**: ``` "编号为1的账号有1000元" ``` - **记账 -> 财务**: ``` "编号为1的账号有1000元" ``` - **财务 -> 前台**: ``` "编号为1的账号有1000元" ``` - **前台 -> 用户**: ``` "编号为1的账号有1000元" ``` # 账本 ```yaml accounts: - id: 1 balance: 1000 name: "张三" created_at: "2024-01-01" status: "active" - id: 2 balance: 2000 name: "李四" created_at: "2024-01-02" status: "active" - id: 3 balance: 3000 name: "王五" created_at: "2024-01-03" status: "active"
      ``
 
 
2️⃣
开始写程序
  • 打开Cursor AI
使用Win-Ctrl+I/Mac-Command+I 打开COMPSOER
notion image
  • 复制提示词进入Composer后,点击submit
    • 这是一个钱庄程序 @ShellWorkflow.md ,我需要你用python实现这个命令行交互的程序@hello.py (账本用本地yaml文件代替),并在写好之后给我详细的运行命令。
接受并运行程序
notion image
 
 
4️⃣
错误解决
复制给出的指令到终端内,运行程序
notion image
notion image
发现报错,添加到composer内,让Cursor Fix
notion image
notion image
 
 
5️⃣
运行检验&改进
  • 复制给出的指令到终端内,运行程序
    • python hello.py
      notion image
  • 发现过于简单,应该增加交互性
  • 复制一下文字进入composer 让Cursor进行修改
    • 我希望你把程序的每个节点每个角色的交流都在应用中输出,并且使用emoj增加交互可读性
  • 再运行 python hello.py,结果类似如下
    • notion image
       
       

从钱庄组织到现代软件

💡 现在得到的程序具有以下启示性

钱庄实体架构

notion image

软件系统架构

notion image
 

角色映射关系

写一个程序就像写一本书更精确的来说是写一个舞台剧的剧本,在一个舞台剧中的剧本你首先要确定历史背景场景,然后是确定人物都有哪些,每个人物都有什么特点茶有什么性格,主要都发生哪些事情。人物之间怎么交互。我们写这个钱庄程序时给到Cursor的就是一个简单的剧本。
剧本
# 角色 - 钱庄前台人员 - 钱庄财务人员 - 钱庄记账人员 - 账本 # 命令行交互流程 ## 1️⃣ 钱庄前台人员: - **前台提示用户**: ``` "你好,我是钱庄前台人员,请输入数字以选择你要办理的业务:1. 查询余额" ``` ## 2️⃣ 用户输入: - 用户选择业务: ``` 1 ``` ## 3️⃣ 前台查询: - **前台请求用户输入账本编号**: ``` "请输入你要查询的账本编号" ``` ## 4️⃣ 用户输入: - 用户输入账本编号: ``` 1 ``` ## 5️⃣ 内部处理流程: - **前台 -> 财务**: ``` "帮我查一下编号为1的账号有多少余额" ``` - **财务 -> 记账**: ``` "帮我查一下编号为1的账号有多少余额" ``` - **记账 -> 账本**: ``` "查找编号为1的账号" ``` - **账本 -> 记账**: ``` "编号为1的账号有1000元" ``` - **记账 -> 财务**: ``` "编号为1的账号有1000元" ``` - **财务 -> 前台**: ``` "编号为1的账号有1000元" ``` - **前台 -> 用户**: ``` "编号为1的账号有1000元" ``` # 账本 ```yaml accounts: - id: 1 balance: 1000 name: "张三" created_at: "2024-01-01" status: "active" - id: 2 balance: 2000 name: "李四" created_at: "2024-01-02" status: "active" - id: 3 balance: 3000 name: "王五" created_at: "2024-01-03" status: "active" ```
 

剧本

场景
人物物品
事件
交互
钱庄
顾客
查询余额
和前台沟通
钱庄前台
前台
客户服务
和顾客沟通
财务室
财务
财务计算
和记账员沟通
会计室
记账员
修改账本
和财务沟通
账房
账本
记账
记录信息

程序

场景
人物
事件
交互
Python运行时
用户
查询余额
Shell控制台
Python运行时
前台函数
存钱
Shell控制台
Python运行时
财务函数
财务计算
通过程序接口和前台沟通
Python运行时
记账员函数
修改账本
通过程序接口和财务沟通
Python运行时
账本函数
记账
通过程序接口和记账员沟通
🔄 实体世界与软件世界的类比关系
钱庄角色
生活类比
软件组件
主要职责
顾客
去银行办事的人
用户在浏览器的操作
发起请求
前台柜员
银行柜台界面
前端界面
展示与交互
财务主管
银行业务规则
后端程序
业务处理
记账员
档案管理制度
ORM层
数据操作
账本
银行金库
数据库
数据存储
银行架构图
graph TB subgraph 前台窗口 A[钱庄前台人员] end subgraph 财务室 B[钱庄财务人员] end subgraph 会计室 D[记账人员] end subgraph 账房 C[账本] end A -->|请求查询| B B -->|查账| D D -->|查找| C C -.->|余额信息| D D -.->|查询结果| B B -.->|查询结果| A
软件架构图
graph TB subgraph 前端 A[UI界面] end subgraph 后端 B[业务逻辑] end subgraph 数据访问 D[ORM层] end subgraph 存储 C[数据库] end A -->|HTTP请求| B B -->|查询| D D -->|SQL| C C -.->|数据| D D -.->|对象| B B -.->|JSON| A
以上图表可以直接粘贴在 Mermaid Chart 进行可视化。 同时你也可以利用此网站进行可视化绘制来描述需求
notion image
然后将图表代码直接提交给Cursor

业务流程对比

📋 查询余额的例子

钱庄业务流程

notion image

软件系统流程

notion image
 
🔧 各层次的具体实现方式
钱庄环节
软件技术
通信方式
数据格式
柜台交互
HTML/CSS/JS
HTTP
JSON
业务审核
Python/Java
函数调用
对象
记账操作
ORM框架
SQL
表记录
账本存储
数据库
-
二进制
钱庄流程图
sequenceDiagram participant 顾客 participant 柜员 participant 主管 participant 记账 participant 账本 柜员->>顾客: 您好,请问要办什么业务? 顾客->>柜员: 查询余额 柜员->>顾客: 请提供账号 顾客->>柜员: 账号123 柜员->>主管: 请查询账号123的余额 主管->>记账: 调取账号123的记录 记账->>账本: 翻找账号123 账本-->>记账: 余额1000元 记账-->>主管: 报告余额1000元 主管-->>柜员: 账号123余额1000元 柜员-->>顾客: 您的余额是1000元
软件流程图
sequenceDiagram participant 浏览器 participant 前端 participant 后端 participant ORM participant 数据库 前端->>浏览器: 显示查询界面 浏览器->>前端: 点击查询按钮 前端->>后端: POST /api/balance 后端->>ORM: select_account(123) ORM->>数据库: SELECT * FROM accounts 数据库-->>ORM: {id: 123, balance: 1000} ORM-->>后端: Account(id=123, balance=1000) 后端-->>前端: {"balance": 1000} 前端-->>浏览器: 显示"余额: 1000元"

核心特点

✨ 为什么要这样设计?
1️⃣
分工明确 • 钱庄:柜员不需要懂账本 • 软件:前端不需要懂数据库
2️⃣
标准接口 • 钱庄:统一的单据格式 • 软件:统一的API格式
3️⃣
数据安全 • 钱庄:层层审核 • 软件:分层验证
4️⃣
可扩展性 • 钱庄:可增设柜台 • 软件:可横向扩展

 
Free try
🔄 新建Composer窗口

1. 新增功能

💡 可以拖拽左侧的文件列表以快速添加@文件名,需要添加所有的刚才Cursor写的文件。
@{之前的所有代码}.py 以同样的范式增加更多功能: 2. 存钱业务 3. 取钱业务

2. 系统评审

📋 完成功能开发后的系统回顾
review,告诉我: 1. 详细功能清单 2. 系统架构设计 3. 业务流程图解 4. 数据流转说明 5. 状态变化追踪 6. 潜在难点分析 (请使用mermaid绘制流程图,并输出成md文件)

3. 文档浏览

notion image
同样的你可以直接Cursor设计这个文档来获得更精准的逻辑控制。

第二章-大模型推理原理

状态表示的两种模式

语言是对”事件的相继“的记录,即事物状态记录,下文将称之为状态链
状态链有两种等价的表示,比如状态n=状态0 乘以 操作按照序列的复合
下文是一个生活中的例子,电影和游戏在描述状态链时候的不同,前者是一帧一帧的画面(状态),后者是初始状态然后运动。
4️⃣
电影模式:离散状态链
notion image
4️⃣
游戏模式:操作状态链
notion image

自然语言的状态表示与状态链推理问题

状态链

notion image
不严格的来说自然语言不管什么语言其主语谓语以及其修饰是状态描述,动词性词语是对状态的操作。
自然语言描述
隐含状态链表示
类型
“树苗长高了成了大树”
树苗 –生长3年–> 大树
时序状态
“空地上建好了房子”
空地 –[打地基,砌墙,盖顶]–> 房子
操作状态
“食材做熟了”
食材 –[切菜,调味,加热]–> 熟菜
转换状态

状态链翻译 🔄

notion image
在数学中有一个概念是抽象矢量,抽象矢量是无法被表征的,抽象矢量只有通过选择基底茶才能够被表征出来。而不同的基底可以简单的理解为不同的坐标系,比如我们比较熟悉的笛卡尔坐标系及坐标系。 状态里面也有这样的特征,就像上文所实现的银行程序,自然语言表征的时一个剧本,序语言Python表征出的是一个程序,可以简单理解自然语言程序语言只是不同的坐标系,当然自然语言中还有更细的不同基底——中文、英语、法语、德语、拉丁语,其特征标是不同的。同样的在程序语言中也有更细的不同基底——Python、Java、C++、JavaScript,其特征标是不同的。
notion image
同一个抽象状态链的不同表示的互相转换也是状态链,如下图所示:
notion image

从剧本到程序 🎭

📝 写一个程序就像创作一部舞台剧的剧本。让我们来看看这个创作过程:
1️⃣

1. 设定场景和背景 🏰

  • 确定历史背景和环境
  • 描绘故事发生的具体场景
  • 定义整体氛围和基调
2️⃣

2. 塑造人物角色 👥

  • 列出所有主要角色
  • 定义每个角色的特点和性格
  • 明确角色之间的关系
3️⃣

3. 设计剧情发展 📈

  • 规划主要事件和情节
  • 设计人物之间的互动方式
  • 构建完整的故事线
4️⃣

4. 编排互动场景 🤝

  • 设计角色之间的对话
  • 安排互动的时机和方式
  • 确保情节的连贯性
💡 就像我们的钱庄程序,本质上就是一个简单但完整的"剧本",定义了:
  • 角色: 前台、财务、记账员等
  • 场景: 钱庄业务环境
  • 互动: 查询余额等业务流程
 

状态链推理问题的计算

当状态链没有操作后的状态时,就称之为状态链推理问题。
问题描述
状态链表示
“树苗长高了成了什么?”
树苗 -> 生长3年 = ?
“空地上建好了什么?”
空地 -> [打地基,砌墙,盖顶] = ?
“食材做熟了是什么?”
食材 -> [切菜,调味,加热] = ?
notion image
人类在使用自然语言学习、工作、协作时,存在大量对状态链推理问题的计算。下图为示例:
notion image
对计算过程的描述也可以作为初始状态,状态链推理问题总是可以看成🌊 Stream→🪄Pipeline,通俗的举例来说有一个管道可以把凉水变成热水,还有一个管道可以把热水和咖啡豆变成咖啡。这里的凉水、热水、咖啡豆可以换成任意stream都是成立的。而程序可以看作🪄Pipeline。
 
notion image
notion image
 
 

大语言模型的状态计算

在大语言模型出现之前,自然语言的编译和推理计算只能依赖人脑。大语言模型(LLM)作为一个近似于人脑的编译和推理计算引擎,可以执行类似的状态计算:
notion image
 
 

LLM 核心特性与指南 🤖

基础特性 ⚡

 

无记忆性 🔄

LLM 的工作模式类似于纯函数,每次对话都是独立的状态计算
  • 📥 输入: 当前对话 + 历史对话记录
  • 📤 输出: 生成的回答
  • 🔍 特性: 每次推理都是独立的状态计算
💡 关键点: 确保提供给 LLM 的信息是完整的(具有马尔可夫性质),这样才能得到准确的推理结果
notion image
 

"语义世界"模型 🌍

LLM 是对人类语言描述的状态链下的世界的建模,而非对现实世界(抽象本征状态链)的直接建模
  • 现实世界存在抽象的本征状态链
  • 人类通过自然语言描述这些状态链
  • LLM 是对这些语言描述的建模
  • LLM 不直接接触抽象本征状态链
🔥

Claude-3.5-Sonnet-20240620

notion image
notion image
 

指南

1️⃣

状态推理模式

notion image
 
2️⃣

D. 类比学习

两种常用方法:
1️⃣
范式参考
提供示例 + “请参考此范式实现/撰写”
@hello.py @entrypoint.sh @accounts.yaml 请以同样的范式实现{需求}
@Structure.md @ShellWorkflow.md @system_analysis.md 请用同样的范式设计{需求}的文档
2️⃣
概念理解
请使用: - 生活示例 - Mermaid 图表 - 概念映射表 解释{概念}。
示例
输入:
请使用: - 生活示例 - Mermaid 图表 - 概念映射表 解释{概念}。
输出:
notion image
 
 
3️⃣

A. 确认理解

获得更精准的执行结果,类似于和下属交代任务后让其复述需求,如果复述的不对再进行纠正(这里建议建立md文档)
注意:我们现在是在探讨思路而非实现阶段。 请提供结构化信息来证明你的理解。 在确认理解正确之前,请勿开始实现。
 
4️⃣

B. 非线性信息表达

推荐使用图来表达描述状态
因为自然语言是一维串行的,就像很难表达一个电影的片段只能用剧本。图表是二维的可以非线性并行的表示状态
- 流程图 - 状态图 - 思维导图 - UML 图
可使用 Mermaid Chart 进行绘制。
 
5️⃣

C. 状态计算输入规范

notion image

形式

# 初始状态 # 结果状态 (结束状态可以不写) # 操作 # 示例 - 示例1:初始状态 → 结果状态 - 示例2:初始状态 → 结果状态
示例
# 初始状态 { ### 预层范畴和层的解释 #### 生活示例 **生活中的层次结构**:想象一个学校的组织结构。学校可以被视为一个“层”,而在这个层中又有不同的“预层”,例如: - **学校层**:整个学校作为一个整体。 - **班级层**:每个班级作为一个子层。 - **学生层**:班级中的每个学生。 在这个例子中,学校是一个层,而班级和学生则是预层。每个层次都有其特定的角色和功能。 #### Mermaid 图表 ```mermaid graph TD A[学校层] B[班级层] C[学生层] A --> B B --> C ``` #### 概念映射表 | 概念 | 描述 | |------------|--------------------------------------------| | 层 | 整体结构的一个部分,具有特定的功能和角色。 | | 预层 | 层中的子结构,进一步细分层的功能和角色。 | | 例子 | 学校层、班级层、学生层 | | 关系 | 层包含预层,预层构成层的具体实现。 | ### 总结 - **层**是一个整体结构的组成部分,具有特定的功能。 - **预层**是层的细分,进一步定义了层的内部结构和功能。 - 通过生活中的例子、图表和概念映射,可以更清晰地理解这两个概念的关系和作用。 } # 操作 把初始状态翻译成英语,注意学术用语
notion image
 
 

 

第三章-本地全栈应用软件工程

🤖 使用AI助手配置开发环境

提示

环境安装提示

请告诉我如何在 {操作系统} 上安装 {软件名称}: 1. 最佳安装方式是什么? 2. 需要注意哪些关键配置? 3. 如何验证安装成功? 4. 可能遇到什么常见问题? 示例响应格式: - 安装命令:... - 关键配置:... - 验证方法:... - 常见问题:...环境问题诊断
我在 {操作系统} 上安装 {软件} 时遇到上述错误,fix

核心软件列表

  • Git
  • Miniconda
  • 通过Minicond安装Python3.12
  • Go
  • Nodejs
    • Win直接安装Nodejs
    • MAC安装NVM
    •  

打开新文件夹

notion image
notion image
复制第一章的代码到此处,也可以使用资料中的bank.py,也可以从下方复制。
代码
import yaml from dataclasses import dataclass from typing import List, Optional, Tuple from datetime import datetime # 数据模型 @dataclass class Account: id: int balance: float name: str created_at: str status: str class AccountBook: def __init__(self, file_path: str): self.file_path = file_path self.accounts = self._load_accounts() def _load_accounts(self) -> List[Account]: with open(self.file_path, 'r', encoding='utf-8') as f: data = yaml.safe_load(f) return [Account(**account) for account in data['accounts']] def _save_accounts(self): data = {'accounts': [ { 'id': acc.id, 'balance': acc.balance, 'name': acc.name, 'created_at': acc.created_at, 'status': acc.status } for acc in self.accounts ]} with open(self.file_path, 'w', encoding='utf-8') as f: yaml.dump(data, f, allow_unicode=True) def find_account(self, account_id: int) -> Optional[Account]: print("📚 账本:正在查找账号...") account = next((acc for acc in self.accounts if acc.id == account_id), None) if account: print(f"📚 账本:找到账号,余额为{account.balance}元") else: print("📚 账本:未找到该账号") return account def modify_balance(self, account_id: int, amount: float) -> Tuple[bool, str]: account = self.find_account(account_id) if not account: return False, "账号不存在" new_balance = account.balance + amount if new_balance < 0: return False, "余额不足" account.balance = new_balance self._save_accounts() print(f"📚 账本:余额已更新为{new_balance}元") return True, f"操作成功,当前余额为{new_balance}元" class Accountant: def __init__(self, account_book: AccountBook): self.account_book = account_book def query_balance(self, account_id: int) -> str: print(f"👨‍💼 记账:收到查询请求,正在查询账号{account_id}...") account = self.account_book.find_account(account_id) result = f"编号为{account_id}的账号有{account.balance}元" if account else f"未找到编号为{account_id}的账号" print(f"👨‍💼 记账 -> 财务:{result}") return result def process_transaction(self, account_id: int, amount: float) -> str: print(f"👨‍💼 记账:收到交易请求,账号{account_id},金额{amount}元") success, message = self.account_book.modify_balance(account_id, amount) result = f"交易{'成功' if success else '失败'}:{message}" print(f"👨‍💼 记账 -> 财务:{result}") return result class FinanceStaff: def __init__(self, accountant: Accountant): self.accountant = accountant def query_balance(self, account_id: int) -> str: print(f"👨‍🏫 财务 -> 记账:帮我查一下编号为{account_id}的账号有多少余额") result = self.accountant.query_balance(account_id) print(f"👨‍🏫 财务 -> 前台:{result}") return result def handle_deposit(self, account_id: int, amount: float) -> str: print(f"👨‍🏫 财务 -> 记账:处理存款,账号{account_id},金额{amount}元") result = self.accountant.process_transaction(account_id, amount) print(f"👨‍🏫 财务 -> 前台:{result}") return result def handle_withdrawal(self, account_id: int, amount: float) -> str: print(f"👨‍🏫 财务 -> 记账:处理取款,账号{account_id},金额{amount}元") result = self.accountant.process_transaction(account_id, -amount) print(f"👨‍🏫 财务 -> 前台:{result}") return result class FrontDesk: def __init__(self, finance_staff: FinanceStaff): self.finance_staff = finance_staff def handle_query_balance(self, account_id: int) -> str: print(f"👨‍💻 前台 -> 财务:帮我查一下编号为{account_id}的账号有多少余额") result = self.finance_staff.query_balance(account_id) print(f"👨‍💻 前台 -> 客户:{result}") return result def handle_deposit(self, account_id: int, amount: float) -> str: print(f"👨‍💻 前台 -> 财务:处理存款业务,账号{account_id},金额{amount}元") result = self.finance_staff.handle_deposit(account_id, amount) print(f"👨‍💻 前台 -> 客户:{result}") return result def handle_withdrawal(self, account_id: int, amount: float) -> str: print(f"👨‍💻 前台 -> 财务:处理取款业务,账号{account_id},金额{amount}元") result = self.finance_staff.handle_withdrawal(account_id, amount) print(f"👨‍💻 前台 -> 客户:{result}") return result def start_interaction(self): while True: print("\n👨‍💻 前台:你好,我是钱庄前台人员,请输入数字以选择你要办理的业务:") print("1. 查询余额") print("2. 存款") print("3. 取款") print("0. 退出") choice = input("👤 客户:").strip() if choice == "0": print("👨‍💻 前台:感谢使用,再见!") break try: if choice in ["1", "2", "3"]: print("👨‍💻 前台:请输入账本编号:") account_id = int(input("👤 客户:").strip()) if choice in ["2", "3"]: print("👨‍💻 前台:请输入金额:") amount = float(input("👤 客户:").strip()) if amount <= 0: print("❌ 金额必须大于0!") continue print(f"\n=== 开始处理请求 ===") if choice == "1": result = self.handle_query_balance(account_id) elif choice == "2": result = self.handle_deposit(account_id, amount) else: # choice == "3" result = self.handle_withdrawal(account_id, amount) print(f"=== 请求处理完成 ===\n") else: print("❌ 无效的选择,请重试!") except ValueError: print("❌ 输入格式错误,请重试!") def main(): print("🏦 === 钱庄系统启动 ===") # 初始化系统组件 account_book = AccountBook('accounts.yaml') accountant = Accountant(account_book) finance_staff = FinanceStaff(accountant) front_desk = FrontDesk(finance_staff) # 启动交互 front_desk.start_interaction() print("🏦 === 钱庄系统关闭 ===") if __name__ == "__main__": main()
accounts: - id: 1 balance: 1000 name: "张三" created_at: "2024-01-01" status: "active" - id: 2 balance: 2000 name: "李四" created_at: "2024-01-02" status: "active" - id: 3 balance: 3000 name: "王五" created_at: "2024-01-03" status: "active"

需求分析

@{代码的名称} 请review这个项目: 1. 核心功能是什么? 2. 技术架构如何? 3. 主要流程有哪些? 4. 数据结构怎样? 5. 可能的难点在哪? 期望输出: - 功能清单 - 架构图示(mermaid) - 流程说明 - 数据模型 - 风险分析

B. 架构设计

基于需求分析,我现在想把这个程序改成一个web程序 @WebWorkflow.md ,请帮我: 1. 设计系统架构 2. 规划技术栈 3. 定义接口规范 4. 设计数据模型 5. 制定开发计划 输出格式: - 架构图 - 技术选型 - API文档 openapi 3.0规范yaml - 数据库表 - 迭代计划 技术栈: - 前端:HTML/CSS/js Vite - API接口:HTTP/REST - 后端:fastapi,pydantic,sqlalchemy,Poetry - 数据库:sqlite - 记得跨域 - 采用yaml配置化策略 注意在得到我明确提出开始实现之前,不要开始实现,先告诉我你的规划,包括但不限于 - 文件结构 - 数据库设计 - 架构图 - 流程图 且要求你要给我详细的库安装命令

开始重构项目

开始实现
WebWorkflow.md
sequenceDiagram participant 用户 as 用户/Client participant 前台 as 前端/Frontend participant 财务 as 后端业务逻辑/Backend participant 记账 as 数据库连接层/ORM participant 账本 as 数据库/Database 前台->>用户: 展示界面(UI)请选择业务 用户->>前台: HTTP请求:查询操作 前台->>财务: API调用:查询账户余额 财务->>记账: 数据库查询请求 记账->>账本: SQL查询语句 账本-->>记账: 查询结果集 记账-->>财务: 数据对象 财务-->>前台: JSON响应 前台-->>用户: 渲染结果到页面 Note over 用户: 客户端 Note over 前台: 处理UI交互 Note over 财务: 处理业务规则 Note over 记账: ORM/数据访问 Note over 账本: 持久化存储
前端和后端可以分开开发,即让Cursor定义接口文档(REST API,Openapi 3.0 规范),然后前后端分别根据这个文档开发,
 
 

总结

 
🪢

状态链与软件开发的本质

💡 不管使用什么基底下的表征,本质都是在表示状态链,通俗来说就是在撰写剧本。
🔥

LLM的革命性突破

🎓 因为LLM可以以研究生水平执行几乎所有状态推理问题的计算,所以无需学习特定基底下的表征(即编程语言),而是要掌握状态链的表示方法。
 

优秀状态链表达的要素 ✨

🔑
明确的初始状态
  • 人物表及其特性(Data class)
  • 场景设定
  • 人物事件交互(流程图)
💫 通常你并不需要写的如此详细,因为剧本的补全和推理是LLM的强项。
🛠
明确的结束状态约束
  • 技术栈
  • 架构
  • 文件结构
  • API接口
  • 数据库表结构
 

项目管理的新范式 📊

让LLM来完成这些工作,和让人类员工完成这些工作没有本质区别。
所以还需要学习的是管理学,更具体的来说是学习现代软件工程项目管理.
而且这里要注意的是人和LLM的特性是不同的,所以以人为管理对象的方法需要做一定调整。

理想的项目工作流 🔄

在一个项目中理想情况是只需要做:
  • 🔬 研究(剧本)
  • 🎨 设计(表示状态链)
  • 👥 管理(LLM)

学习建议 📚

为了达到这样的目标需要建议下列学习路线图,或者说是一个索引表,该索引表以形式语言为主因为形式语言是最准确也是最高维简介的状态链表示方法。
🌍 建议使用英语教参和资料,多数核心概念中文没有对应词汇,这种情况下在表示状态链的时候中文的描述会产生巨大语义的偏移。
 
 

深入学习路线图 🎓

 
💡 从基础到高级的理论学习索引,建议直接通过编程实践来掌握概念
  • 数学概念可使用 Lean4、Mathematica 实现
  • 每个阶段都注重实践与理论结合
 
1️⃣

Phase 1: Computer Fundamentals (计算机基础) 💻

 

Von Neumann Architecture (冯诺依曼架构) 🏗️

  • Stored Program Concept (存储程序概念)
  • Memory-Processor Architecture (存储器-处理器架构)

Turing Machine (图灵机) ⚙️

  • Computability (可计算性)
  • State Transitions (状态转换)

Basic Computational Models (基本计算模型) 📊

  • Finite State Machines (有限状态机)
  • Push-down Automata (下推自动机)
2️⃣

Phase 2: Theoretical Computer Science (计算理论) 🧮

 

Computability Theory (可计算性理论) 🔄

  • Recursive Functions (递归函数)
  • Turing Completeness (图灵完备性)
  • Halting Problem (停机问题)

Recursive Function Theory (递归函数论) 🌀

  • μ-recursive Functions (μ递归函数)
  • Primitive Recursion (原始递归)
  • Minimization (最小化)

Formal Languages and Automata (形式语言与自动机) 📝

  • Chomsky Hierarchy (乔姆斯基层级)
  • Regular Languages (正则语言)
  • Context-Free Grammars (上下文无关文法)
3️⃣

Phase 3: Mathematical Foundations (数学基础) 📐

 

Category Theory (范畴论) 🔗

  • Functors and Natural Transformations (函子与自然变换)
  • Universal Properties (泛性质)
  • Adjoint Functors (伴随函子)

Set Theory (集合论) 🎯

  • ZFC Axioms (ZFC公理)
  • Ordinals and Cardinals (序数与基数)
  • Forcing (力迫法)

Abstract Algebra (抽象代数) 🎲

  • Groups, Rings, Fields (群、环、域)
  • Galois Theory (伽罗瓦理论)
  • Algebraic Geometry (代数几何)
4️⃣

Phase 4: Advanced Topics (高级主题) 🚀

 

Representation Theory (表示论) 🎭

  • Group Representations (群表示)
  • Character Theory (特征理论)
  • Lie Algebras (李代数)

Topos Theory (拓扑斯理论) 🌐

  • Geometric Logic (几何逻辑)
  • Sheaf Theory (层论)
  • Internal Languages (内部语言)

Homotopy Type Theory (同伦类型论) 🔱

  • Dependent Types (依赖类型)
  • Univalence Axiom (单价公理)
  • Higher Inductive Types (高阶归纳类型)
5️⃣

Phase 5: Machine Learning (机器学习) 🤖

 

Scale & Dynamics (尺度与动力学) 📈

  • Nonlinear Dynamics (非线性动力学)
  • Evolutionary Dynamics (进化动力学)

Neural Foundations (神经基础) 🧠

  • Hebb's Law (赫布定律)
  • Calculus (微积分)
  • Hamiltonian Principle (哈密顿原理)
    • Variational Methods (变分法)
    • Functional Analysis (泛函分析)
    • Complex Analysis (复变函数)

Modern Concepts (现代概念) 💫

  • A New Kind of Science (新科学范式)
  • Neural Networks (神经网络)
  • Deep Learning (深度学习)
  • Optimization Theory (优化理论)
6️⃣

Phase 6: Mathematical Physics (数学物理) ⚛️

 

System Science (系统科学) 🔄

  • Cybernetics (控制论)

Quantum Theory (量子理论) 🌌

  • Path Integrals (路径积分)
  • Gauge Theory (规范理论)
  • Renormalization (重整化)

Statistical Physics (统计物理) 📊

  • Ising Model (伊辛模型)
  • Phase Transitions (相变)
  • Critical Phenomena (临界现象)

Advanced Mathematics (高等数学) 📚

  • Differential Geometry (微分几何)
  • Symplectic Geometry (辛几何)
  • Operator Theory (算子理论)