Prompts 的软件工程网页链接“LLMs 无法在“开箱即用”的情况下,以可接受的标准完成我感兴趣的大多数事情,所以我们经常会尝试设计 prompts 来提升性能。做得越多,我越有一种感觉:我们其实是在一种非常不同寻常的编程语言上做软件工程。很多人都类比过 prompts 和代码,但我还没看到太多从软件工程视角来看待“prompt engineering”的讨论。
软件工程关注的是软件制品的需求、设计、实现、调试、测试和维护。而我在 prompts 中也看到了这些方面的对应关系。比如,我们经常会花时间找出 LLM 失败的案例,然后在 prompt 中添加额外规则来修复这些问题,并不断迭代。遗憾的是,有时候添加一条规则会导致模型产生新的错误。这和我调试、测试传统软件制品时的经验非常相似!下面我会用“system”来同时指代传统软件,以及 prompt + LLM 这类制品。
请注意,在这篇博客中,我讨论的是构建一个可以完成重要领域任务的系统,也许它是某个更大工作流的一部分,例如提供医疗或法律建议。我讨论的不是把 LLM 当作助手来使用,比如让它在网上查找信息、总结文档、建议如何改进写作等。我也主要关注的是使用 LLM 直接完成某项任务,而不是要求 LLM 生成能完成该任务的代码。”