写点什么

Prompt-Driven 编码与领域驱动建模的融合研究

作者:申公豹
  • 2025-07-09
    陕西
  • 本文字数:4818 字

    阅读完需:约 16 分钟

一、引言:AI 工具正在重塑软件开发方式

随着人工智能(AI)技术不断进化,以 GitHub Copilot、Tabnine 为代表的 AI 辅助编程工具,正逐步渗透开发者的日常工作流。从自动补全代码到生成测试用例,甚至推荐架构设计模式,AI 的参与正日益深度与智能。然而,当前 AI 编程助手仍存在不少“幻觉”现象,其输出质量、上下文理解能力、代码可维护性仍受限于提示方式与模型能力。


为此,本文不仅系统分析 AI 工具在三个关键领域的应用潜力与局限性,同时提出一套三步实践法,指导开发者如何将 AI 工具更好地融合到生产级项目中。通过一个微服务拆分与建模的真实案例,进一步展示 AI 工具在领域建模草图生成与人工精调结合方面的实战价值。




二、AI 工具在开发工作流中的三大应用方向

2.1 代码补全:Copilot 的上下文理解与编程惯性问题

示例:自动生成接口代码


# 开发者输入注释# Create a FastAPI endpoint for creating new users@app.post("/users/")def create_user(user: User):    ...
复制代码


Copilot 会自动补全如下内容:


@app.post("/users/")def create_user(user: User):    fake_db.append(user)    return {"message": "User created", "user_id": len(fake_db)}
复制代码


优点:


  • 提高开发速度;

  • 准确率高于模板生成工具;

  • 支持多语言与主流框架(如 FastAPI、Spring Boot、Express 等)。


局限性:


  • 缺乏业务语义理解(如权限校验、异常处理);

  • 容易引入“沉默 Bug”,即逻辑正确但业务错误;

  • 当函数上下文较长时,建议能力迅速下降。




2.2 测试用例生成:Tabnine 与 Copilot 的对比优势

AI 可以基于函数签名和注释自动生成 pytest unittest 格式的测试代码:


# 原函数def add(a, b):    return a + b
# AI生成的测试用例def test_add(): assert add(1, 2) == 3 assert add(-1, 1) == 0
复制代码


优势:


  • 降低测试入门门槛;

  • 能自动覆盖基本边界情况;

  • 可用于大规模补全缺失测试的遗留项目。


局限:


  • 无法自动推断业务规则下的复杂边界;

  • 难以生成与 Mock 依赖深度相关的测试用例;

  • 有概率生成冗余或重复测试。



2.3 架构模式推荐:从设计模式到微服务边界

在领域驱动设计(DDD)、微服务拆分、事件驱动架构等高级任务中,AI 工具能提出一些合理的设计草图:



示例 Prompt:


“为电商系统设计微服务边界,包含订单、用户、支付、库存服务,并使用事件驱动架构。”


AI 生成草稿(部分输出)


1. 用户服务 (UserService)   - 注册用户   - 更新用户资料   - 事件:UserCreatedEvent
2. 订单服务 (OrderService) - 创建订单 - 更新订单状态 - 事件:OrderPlacedEvent
3. 支付服务 (PaymentService) - 发起支付 - 监听 OrderPlacedEvent - 事件:PaymentCompletedEvent
复制代码


价值:


  • 加速架构草图构建;

  • 提供模式启发(如 Saga 模式、事件溯源);

  • 促进跨团队沟通。


不足:


  • 忽略复杂耦合(如跨服务事务);

  • 输出常流于“套路”,不够创新;

  • 依赖开发者做出大量语义修正。



三、三步实践法:AI 融合开发的可控性提升路径

3.1 提升质量:提示工程(Prompt Engineering)为关键


设计结构化、高语义的提示可以大幅提升 AI 生成代码的准确性。例如:


❌ 模糊提示:


"写一个用户登录函数"


✅ 结构提示:


"用 Flask 写一个 POST 接口 /login,验证用户名和密码,成功返回 JWT Token,失败返回 401 错误"


生成质量提升明显:


@app.post("/login")def login(user: LoginRequest):    if authenticate(user.username, user.password):        return {"token": create_jwt(user.username)}    raise HTTPException(status_code=401, detail="Invalid credentials")
复制代码



3.2 保证安全:代码审查过滤 AI 引入的逻辑漏洞

AI 生成代码可能存在:


  • SQL 注入、XSS 漏洞;

  • 不规范异常处理;

  • 冗余或逻辑错误代码。


通过人工审查结合静态分析工具(如 SonarQube、Bandit),对 AI 代码进行第一时间过滤,是保障代码质量的底线措施。




3.3 加速原型:AI 生成伪代码+人工精调

AI 可先快速生成伪代码或接口草图,开发者再进行重构与精调,效率显著提升。


示例


Prompt:设计一个“创建商品”的微服务接口,包含验证、持久化、事件发布逻辑。


AI 生成伪代码:


def create_product(product_data):    # validate product    # save to DB    # publish ProductCreatedEvent    return {"message": "Product created"}
复制代码


精调后变为:


def create_product(product_data: ProductDTO) -> Product:    validate(product_data)    product = Product(**product_data.dict())    db.session.add(product)    db.session.commit()    event_bus.publish("ProductCreatedEvent", product.to_event())    return product
复制代码



四、实战案例:用 AI 辅助完成微服务领域模型草图

4.1 背景描述

假设一个传统的“单体商城系统”正准备拆分为微服务,业务包含:商品、用户、订单、支付、物流五大模块。目标是快速建模领域边界并生成初步服务代码骨架。

4.2 步骤一:AI 生成领域模型草图

Prompt 示例:


"为电商系统拆分微服务,列出每个服务的领域模型及其主要方法"


AI 输出片段(精简后):


UserService:- User    - register()    - update_profile()    - delete()
OrderService:- Order - create() - cancel() - complete()
PaymentService:- Payment - initiate() - confirm()
复制代码

4.3 步骤二:人工审查与精调

问题:


  • 所有模型缺乏聚合边界;

  • 没有明确的 VO、Entity、ValueObject 区分;

  • 缺乏事务边界与事件定义。


手工精调后形成 DDD 规范模型:


# 订单实体(领域层)class Order(Entity):    def __init__(self, order_id, items, user_id):        self.order_id = order_id        self.items = items        self.user_id = user_id        self.status = "PENDING"
def confirm_payment(self): self.status = "PAID"
复制代码


并生成服务骨架:


# OrderService 服务接口@app.post("/orders")def place_order(order_request: OrderRequest):    order = order_service.create_order(order_request)    return OrderResponse.from_domain(order)
复制代码

4.4 步骤三:AI 辅助测试生成与业务场景覆盖

Prompt:


"为订单创建函数编写 3 个边界测试用例"


AI 输出:


def test_place_order_with_empty_items():    ...
def test_place_order_with_invalid_user(): ...
def test_place_order_success(): ...
复制代码

五、AI 辅助驱动下的协同编码模型:开发者的角色再定义

AI 工具的强势介入,并不意味着开发者的角色被削弱,反而要求开发者从纯编码者协同设计者(Co-Designer)、**决策引导者(Prompt Engineer)以及语义审校官(Code Curator)**转变。以下从三个角色视角展开探讨:

5.1 Prompt Engineer:构建 AI 输入质量的第一责任人

随着 AI 生成代码质量越来越依赖上下文与提示工程,开发者的第一身份正在转变为“提示设计师”。高质量 Prompt 的特征包括:


  • 清晰目标:说明功能目的而非仅提供函数名;

  • 明确约束:告知 AI 可用库、设计风格(如 RESTful、MVC);

  • 语义抽象:让 AI 关注“意图”,而非机械 API 行为。


示例对比:


❌ 模糊提示:


“写一个上传接口”


✅ 优质提示:


“使用 FastAPI 构建一个上传接口,接收前端上传的 JPEG 图片,保存至/uploads/目录,并返回文件名,要求文件大小不超过 5MB,出现异常返回 HTTP 400”


生成代码更完整、可直接使用:


@app.post("/upload")async def upload_image(file: UploadFile = File(...)):    if file.content_type != "image/jpeg":        raise HTTPException(status_code=400, detail="Invalid file type")    contents = await file.read()    if len(contents) > 5 * 1024 * 1024:        raise HTTPException(status_code=400, detail="File too large")    with open(f"uploads/{file.filename}", "wb") as f:        f.write(contents)    return {"filename": file.filename}
复制代码



5.2 Code Curator:AI 代码质量的第二把关人

即便 AI 生成的代码形式上正确,开发者仍需承担语义层面“校对师”的角色,对 AI 代码进行:


  • 业务一致性审查:是否符合真实业务流程;

  • 逻辑安全性审查:是否引入不可预期分支;

  • 边界条件验证:是否考虑空值、极限输入等场景;

  • 依赖复审:AI 是否引入了错误或冗余依赖包;


工具建议搭配:


  • 静态分析工具:pylintflake8mypy

  • 安全检查工具:banditsemgrep

  • 集成测试回归:覆盖 AI 生成逻辑路径的接口测试




5.3 Co-Designer:从“码农”到“AI 对话中的架构师”

当 AI 已可参与初步架构构思,开发者应从业务视角主动与 AI 协同设计。例如在微服务边界划分中,开发者可利用 AI 提出多个备选方案,并做可行性评估。


Prompt 示例:


“帮我列出三种电商系统中订单服务与库存服务的通信模式,分别说明它们适用于哪些场景,并指出各自的缺点。”


AI 可能输出:


  • 同步 REST 调用

  • 场景:实时性高、服务稳定时;

  • 缺点:库存服务故障会阻断订单服务。

  • 事件驱动(异步)

  • 场景:高吞吐、高解耦;

  • 缺点:一致性延迟、调试复杂。

  • 共享数据库

  • 场景:小团队、快速开发初期;

  • 缺点:违反微服务边界原则,难以扩展。


开发者可选择“事件驱动+本地事务+幂等性”架构进行组合,推动 AI 从建议提供者向协同建模者演进。



六、AI 驱动下的原型快速迭代流程设计

我们结合前文内容,将 AI 能力融合到原型构建—验证—精调的完整闭环中,以提高从构想到产品的周期效率。

6.1 AI 生成伪代码 + Prompt 增量构建接口

开发者首先通过高层提示引导 AI 输出整体框架,然后逐步细化每个组件。以下是基于 FastAPI + PostgreSQL 的用户注册原型流程:


第一轮 Prompt:


“用 FastAPI 写一个 POST 接口/register,用户注册功能”


AI 输出:


@app.post("/register")def register(user: User):    # Validate user    # Save user    return {"message": "Registered"}
复制代码


第二轮 Prompt:


“完善上面接口,添加邮箱唯一性验证和密码加密,使用 SQLAlchemy 保存用户,返回新用户 ID”


最终输出:


@app.post("/register")def register(user: UserCreate, db: Session = Depends(get_db)):    if db.query(User).filter(User.email == user.email).first():        raise HTTPException(status_code=400, detail="Email already registered")    hashed_password = bcrypt.hashpw(user.password.encode(), bcrypt.gensalt())    new_user = User(email=user.email, password=hashed_password.decode())    db.add(new_user)    db.commit()    db.refresh(new_user)    return {"user_id": new_user.id}
复制代码


这个过程充分体现了**“AI 草图 + 人工迭代”**模式的高效与稳定性。



6.2 AI 生成接口文档与 API 测试用例

结合 OpenAPI 和 Postman 格式,开发者可通过如下 Prompt 让 AI 直接生成接口文档与测试文件:


“为上面的注册接口生成 OpenAPI 接口文档和 Postman 测试集合”


AI 输出 OpenAPI 片段:


paths:  /register:    post:      summary: "用户注册"      requestBody:        content:          application/json:            schema:              $ref: '#/components/schemas/UserCreate'      responses:        '200':          description: 注册成功,返回用户ID
复制代码


并补充 Postman 格式:


{  "info": {    "name": "User API Collection"  },  "item": [    {      "name": "Register User",      "request": {        "method": "POST",        "url": "{{base_url}}/register",        "body": {          "mode": "raw",          "raw": "{\"email\": \"test@example.com\", \"password\": \"123456\"}"        }      }    }  ]}
复制代码



6.3 快速迭代闭环:AI + Git + CI/CD 联动

AI 工具可接入开发流程各个环节:


  • PR 阶段:AI 生成变更摘要、推荐测试策略;

  • CI 阶段:自动生成变更影响范围提示(基于 GPT-4 等);

  • CD 阶段:辅助构建部署脚本、Dockerfile、Helm Chart。


未来甚至可实现“AI 全栈预编译”机制:开发者只需描述“意图”,AI 完成从功能到部署的闭环操作。虽然目前仍需人工大量干预,但雏形已显现。

发布于: 2025-07-09阅读数: 4
用户头像

申公豹

关注

🏆2022年InfoQ写作平台-签约作者 🏆 2023-06-05 加入

还未添加个人简介

评论

发布
暂无评论
Prompt-Driven编码与领域驱动建模的融合研究_AI_申公豹_InfoQ写作社区