principles.tsx

principles.tsx

概述

提示工程原则总结组件。以卡片列表形式展示核心提示工程原则,每个原则配有图标、标题和简要说明。

组件

PrinciplesSummary

原则总结展示组件,从本地化数据动态加载原则列表。

功能特性:

  • 动态加载本地化原则数据
  • 图标映射显示
  • 彩色卡片样式
  • 响应式网格布局(移动端单列,桌面端自适应)

数据结构:

locales/*.tsprinciples 字段获取数据:

interface Principle {
  iconName: string;    // 图标名称
  title: string;       // 原则标题
  description: string; // 原则描述
  color: string;       // 颜色键
}

支持的颜色:

颜色键背景边框图标
blueblue-50blue-200blue-600
greengreen-50green-200green-600
purplepurple-50purple-200purple-600
amberamber-50amber-200amber-600
pinkpink-50pink-200pink-600
cyancyan-50cyan-200cyan-600
indigoindigo-50indigo-200indigo-600
roserose-50rose-200rose-600

支持的内置图标:

图标名Lucide 组件典型用途
GemGem价值/质量原则
TargetTarget明确性原则
CrownCrown优先级原则
CompassCompass方向/指导原则
RefreshCwRefreshCw迭代优化原则
SparklesSparkles创意/创新原则
RulerRuler衡量/约束原则
CheckCircleCheckCircle验证/确认原则

视觉样式:

  • 网格布局:grid gap-2
  • 卡片内边距:p-3
  • 圆角:rounded-lg
  • 图标尺寸:h-5 w-5
  • 标题加粗:font-semibold
  • 描述文字:muted 颜色

使用示例:

import { PrinciplesSummary } from "@/components/book/elements/principles";

export function ChapterSummary() {
  return (
    <div className="chapter-end">
      <h2>本章核心原则</h2>
      <PrinciplesSummary />
    </div>
  );
}

本地化数据示例

// locales/zh.ts
export default {
  principles: [
    {
      iconName: "Target",
      title: "明确具体",
      description: "清晰地描述你期望的输出格式和内容",
      color: "blue"
    },
    {
      iconName: "Gem", 
      title: "提供上下文",
      description: "给出足够的背景信息帮助 AI 理解任务",
      color: "purple"
    },
    {
      iconName: "RefreshCw",
      title: "迭代优化", 
      description: "根据输出结果持续改进提示词",
      color: "green"
    }
  ]
} satisfies LocaleData;

依赖

依赖用途
lucide-react图标组件(Gem, Target, Crown 等)
@/lib/utils - cn类名合并
next-intl - useLocale获取当前语言
./locales - getLocaleField, Principle本地化数据获取

组件实现细节

export function PrinciplesSummary() {
  const locale = useLocale();
  const principles = getLocaleField(locale, "principles");
  
  return (
    <div className="my-6 grid gap-2">
      {principles.map((principle, index) => {
        const colors = principleColors[principle.color];
        const Icon = iconMap[principle.iconName];
        return (
          <div
            key={index}
            className={cn(
              "flex items-center gap-3 p-3 rounded-lg border", 
              colors.bg, 
              colors.border
            )}
          >
            <Icon className={cn("h-5 w-5 shrink-0", colors.icon)} />
            <div>
              <span className="font-semibold">{principle.title}</span>
              <span className="text-muted-foreground">
                {" — "}{principle.description}
              </span>
            </div>
          </div>
        );
      })}
    </div>
  );
}

扩展指南

添加新图标:

import { NewIcon } from "lucide-react";
const iconMap: Record<string, typeof Gem> = {
  // ... 现有图标
  NewIcon,  // 添加新图标
};
{
  iconName: "NewIcon",
  title: "新原则",
  description: "原则描述",
  color: "blue"
}
← 返回目录