随着GitHub Copilot用户突破百万,以及调查显示编码和测试任务平均节省时间在16%到50%之间,AI代码助手正迅速从“好奇”转变为PHP开发团队的日常伙伴。对于维护着一些网络最繁忙后端的PHP团队来说,精心设计的提示工程(Prompt Engineering) 是将大语言模型(LLM) 转化为一个无需入职培训的初级结对程序员的“接口”。 本文将深入探讨在PHP项目中提示工程的重要性,分享最有效的提示模式,阐述其应用场景(尤其是在单元测试方面),列出最佳工作流程实践,并提醒哪些地方绝不能完全信任AI。

为什么提示工程在PHP项目中至关重要

在软件开发的世界里,效率至关重要。而对于PHP开发者来说,高效的编码方式不仅意味着更快的项目交付,也意味着更低的开发成本。提示工程作为一种新兴的技术,正为PHP开发者带来前所未有的效率提升。它通过巧妙地设计提示语,引导大语言模型(LLM) 生成高质量的代码,从而极大地缩短开发时间。

举个例子,假设你需要创建一个符合PSR-12规范的PHP类骨架。传统的方式是手动编写代码,这不仅耗时,而且容易出错。但是,通过提示工程,你可以直接向AI代码助手发送一个指令:“创建一个符合PSR-12规范的名为UserController的PHP类,包含indexshowcreateupdatedelete方法”。大语言模型(LLM) 可以在几秒钟内生成符合规范的代码,大大减少了手动编写代码的时间和精力。

这种自动化代码生成的能力不仅限于类骨架。还可以用于生成服务提供者、Doctrine实体等。这意味着PHP开发者可以将更多的时间和精力投入到更具创造性和挑战性的任务中,例如设计复杂的业务逻辑、优化性能等。

利用提示工程进行PSR-12规范的代码脚手架搭建

在PHP开发中,遵循PSR(PHP Standards Recommendations)规范至关重要,尤其是PSR-12,它是PHP代码风格的标准。手动编写符合PSR-12规范的代码既耗时又容易出错。提示工程可以显著提升效率。

例如,要生成一个符合PSR-12规范的Doctrine实体,可以构造如下提示:

请使用Doctrine ORM annotations,创建一个PHP实体类`Product`,包含`id` (int, primary key, autoincrement)、`name` (string, nullable=false, length=255)、`description` (text, nullable=true) 和 `price` (decimal, precision=10, scale=2) 属性。确保代码符合PSR-12规范。
<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 * @ORM\Table(name="product")
 */
class Product
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $name;

    /**
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

    /**
     * @ORM\Column(type="decimal", precision=10, scale=2)
     */
    private $price;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getDescription(): ?string
    {
        return $this->description;
    }

    public function setDescription(?string $description): self
    {
        $this->description = $description;

        return $this;
    }

    public function getPrice(): ?float
    {
        return $this->price;
    }

    public function setPrice(float $price): self
    {
        $this->price = $price;

        return $this;
    }
}

类似的,创建服务提供者可以使用如下提示:

请创建一个Laravel服务提供者 `PaymentServiceProvider`,用于绑定 `PaymentGateway` 接口到 `StripePaymentGateway` 实现。 确保代码符合PSR-12规范,并包含必要的use语句和注册方法。

通过清晰明确的提示工程,可以快速生成符合规范的代码骨架,减少重复劳动,提高开发效率。

单元测试覆盖:提示工程的巨大优势

单元测试是保证代码质量的关键环节。然而,编写全面的单元测试往往需要耗费大量时间和精力,尤其是覆盖各种边界情况的数据提供器。AI代码助手大语言模型(LLM) 在生成完整的PHPUnit测试套件方面表现出色,特别是能够自动生成包含边缘情况的数据提供器,这为PHP开发带来了极大的便利。

例如,假设你有一个函数用于计算购物车总价:

function calculateCartTotal(array $items): float {
  $total = 0.0;
  foreach ($items as $item) {
    $total += $item['price'] * $item['quantity'];
  }
  return $total;
}

要为此函数编写单元测试,可以使用如下提示:

请使用PHPUnit为函数 `calculateCartTotal(array $items): float` 编写单元测试,考虑以下情况:
1. 购物车为空
2. 购物车包含单个商品
3. 购物车包含多个商品
4. 商品数量为0
5. 商品价格为负数
使用数据提供器来覆盖这些情况。

大语言模型(LLM) 可以生成如下测试代码:

<?php

use PHPUnit\Framework\TestCase;

class CartTest extends TestCase
{
    /**
     * @dataProvider cartDataProvider
     */
    public function testCalculateCartTotal(array $items, float $expectedTotal)
    {
        $this->assertEquals($expectedTotal, calculateCartTotal($items));
    }

    public function cartDataProvider(): array
    {
        return [
            'empty cart' => [ [], 0.0 ],
            'single item' => [ [['price' => 10.0, 'quantity' => 1]], 10.0 ],
            'multiple items' => [ [['price' => 10.0, 'quantity' => 1], ['price' => 5.0, 'quantity' => 2]], 20.0 ],
            'zero quantity' => [ [['price' => 10.0, 'quantity' => 0]], 0.0 ],
            'negative price' => [ [['price' => -10.0, 'quantity' => 1]], -10.0 ],
        ];
    }
}

这个测试用例不仅覆盖了各种正常情况,还考虑了购物车为空、商品数量为0、商品价格为负数等边界情况。这大大提高了代码的健壮性和可靠性。

通过提示工程,PHP开发者可以轻松生成高质量的单元测试,从而减少手动编写测试代码的时间和精力,提高代码质量。

提示工程的最佳实践和工作流程

要充分利用提示工程的优势,需要遵循一些最佳实践和工作流程。

  • 清晰明确的指令: 提示语应该清晰、简洁、明确,避免使用模糊不清的语言。
  • 提供足够的信息: 提示语中应该包含足够的信息,以便大语言模型(LLM) 能够理解你的意图。例如,你可以提供代码示例、规范文档、业务逻辑描述等。
  • 分步进行: 如果任务比较复杂,可以将其分解为多个步骤,逐步引导大语言模型(LLM) 完成任务。
  • 迭代优化: 根据大语言模型(LLM) 的输出结果,不断优化提示语,直到达到满意的效果。
  • 代码审查: 即使是AI代码助手生成的代码,也需要进行人工审查,确保其质量和安全性。

一个高效的工作流程可以是:

  1. 定义需求: 明确需要大语言模型(LLM) 完成的任务。
  2. 编写提示语: 根据需求编写清晰明确的提示语。
  3. 生成代码: 使用AI代码助手生成代码。
  4. 代码审查: 对生成的代码进行人工审查,确保其质量和安全性。
  5. 测试: 运行单元测试,验证代码的正确性。
  6. 迭代优化: 根据测试结果和代码审查结果,不断优化提示语,重新生成代码,直到达到满意的效果。

不要完全信任AI:安全性和注意事项

虽然AI代码助手可以极大地提高开发效率,但我们不能完全信任它。尤其是在涉及安全性方面,需要格外小心。

  • 敏感信息: 绝对不要在提示语中包含敏感信息,例如密码、API密钥、数据库连接字符串等。大语言模型(LLM) 可能会将这些信息泄露出去,导致安全风险。
  • 代码审查: 即使是AI代码助手生成的代码,也需要进行人工审查,确保其不存在安全漏洞。
  • 逻辑错误: 大语言模型(LLM) 可能会犯逻辑错误,导致代码无法正常运行。因此,需要仔细测试生成的代码,确保其符合预期。
  • 版权问题: 使用AI代码助手生成的代码时,需要注意版权问题。有些大语言模型(LLM) 可能会生成包含版权的代码,这可能会导致法律风险。

在使用提示工程时,需要时刻保持警惕,确保代码的安全性、可靠性和合法性。

大模型在PHP项目中的其他应用场景

除了代码生成和单元测试,大语言模型(LLM) 在PHP项目中还有许多其他应用场景。

  • 代码重构: 大语言模型(LLM) 可以帮助开发者快速重构代码,提高代码的可读性和可维护性。
  • 代码解释: 大语言模型(LLM) 可以解释代码的功能和逻辑,帮助开发者快速理解代码。
  • 代码文档生成: 大语言模型(LLM) 可以根据代码自动生成文档,减少编写文档的时间和精力。
  • 代码漏洞检测: 大语言模型(LLM) 可以检测代码中的潜在漏洞,提高代码的安全性。
  • 代码翻译: 大语言模型(LLM) 可以将代码从一种语言翻译成另一种语言,例如将PHP代码翻译成JavaScript代码。

随着大语言模型(LLM) 技术的不断发展,其在PHP项目中的应用场景将会越来越广泛。

结论:拥抱提示工程,提升PHP开发效率

提示工程为PHP开发者带来了前所未有的效率提升。通过巧妙地设计提示语,引导大语言模型(LLM) 生成高质量的代码,可以极大地缩短开发时间,提高代码质量。但是,我们不能完全信任AI代码助手,需要时刻保持警惕,确保代码的安全性、可靠性和合法性。 拥抱提示工程,掌握最佳实践,将帮助PHP团队构建更安全、更高效的Web后端系统。 展望2025年,提示工程将成为PHP开发者的必备技能之一,让我们一起拥抱AI代码助手,共同迎接PHP开发的未来。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注