1. 从电商场景看LangChain4j结构化输出的必要性
去年我在一个电商中台项目里负责商品详情页的智能化重构。传统方案中,运营人员需要通过CMS后台手动配置每个商品的轮播图、标题、价格、促销标签等元素,平均一个详情页需要15-20分钟配置时间。当商品数量超过5000个时,这种人工操作模式就变得不可持续。
我们尝试用大语言模型自动生成详情页,最初的prompt是这样的:
java复制String prompt = "请为商品" + productName + "生成详情页,包含3-5张轮播图..."
得到的回复却是这样的自然语言描述:
code复制"建议顶部放置5张商品实拍图,中间用大字号展示商品名称,价格区域添加'限时折扣'标签..."
这种输出方式带来三个致命问题:
- 解析成本高:需要编写复杂的正则表达式提取元素(如
Pattern.compile("放置(\\d+)张")) - 维护困难:当AI调整描述方式时(如把"放置"改为"展示"),正则立即失效
- 无法直接渲染:前端需要二次转换才能得到可渲染的数据结构
1.1 结构化输出的实现方案
LangChain4j的解决方案是预先定义Java Bean:
java复制@Data
public class ProductDetail {
@Description("轮播图URL列表,3-5张")
List<String> carouselImages;
@Description("商品标题,不超过30字")
String title;
@Description("价格信息")
PriceInfo price;
}
@Data
public class PriceInfo {
Double originalPrice;
Double discountPrice;
String discountTag;
}
然后在调用时强制结构化输出:
java复制StructuredPrompt prompt = new StructuredPrompt(
"为商品生成详情页",
ProductDetail.class
);
P
