专题归档 · 2026 年 7 月(编辑分组,非实际写作日期)
BodySense:在诊断重构中学习 Python
Python pytest、依赖注入、Pydantic 建模以及诊断重构中的学习问题。
在实际重构中学
决定直接在实际项目的重构中学习。 ai 结合了 pydanticAI,langGraph,langflow 帮我创建了一个重构计划
先固定旧行为(DMR-001)
不是为了证明“新设计正确”,而是为了把旧 Python Diagnosis 边界钉死。
简单讲就是补充一系列测试文件,确保在重构的时候不会意外改动,导致意外的变化。
学习 python 的测试文件(pytest 框架)怎么写:
测试函数 test_ 前缀+三个步骤(AAA模式)
依赖注入(DMR-100)
- 在 diagnosis service 的 def init 函数中添加 aiservice 参数
- python 的 protocol (类似go中的interface)
- 依赖注入和依赖倒置
领域建模(DMR-101)
为什么现在 DiagnosisItem / DiagnosisResponse 这些 Pydantic Model 还不够,它们与真正的 typed domain models 有什么区别
大致就是,目前是使用了一个 base model 来定义 diagnosis item 的一些属性,也就是它长什么样,但并不足以把这个领域对象给清楚建模。
比如说它的 severity(严重程度),当前只是简单的 string(字符串)字段。但真正建模好的话,应该限制它的字段值,一般是作为一个枚举(比如说中、低、高之类的)。现在这个就完全没有清楚建模。
留下的问题(DX-001)
AIExecutor(Protocol)为什么存在?- constructor dependency injection 是什么?
PydanticAI deps_type为什么不是 constructor DI 的替代品?(“既然 PydanticAI 已经提供了一套 dependency injection 机制,我们为什么还需要让DiagnosisService使用 constructor DI?”)- 为什么
output_type=DiagnosisAgentOutput后,可以删掉手工 JSON parsing?
写了一个 Agent 能力的接口,也就是搜索能力,用于后面给 diagnosis service 实现一个依赖注入。