Prompt Engineering — 提示词工程
核心原则
好的 Prompt 应该:角色明确、任务清晰、格式约束、示例引导。
基础技巧
角色设定
python
system_prompt = """
你是一位拥有15年经验的银行信贷风险分析师,专注于:
- 企业信用评估和贷款审批
- 财务报表分析和风险识别
- 金融监管合规
回答要求:
1. 基于数据和事实,避免主观臆断
2. 风险评估要量化,给出具体数值
3. 建议要可操作,避免空泛表述
4. 涉及不确定信息时明确说明
"""结构化输出
python
prompt = """
分析以下企业的贷款申请,按照指定格式输出:
企业信息:
- 公司名称:{company}
- 成立年限:{years}年
- 年营收:{revenue}万元
- 资产负债率:{debt_ratio}%
请按以下 JSON 格式输出分析结果:
{{
"risk_level": "高/中/低",
"risk_score": 0-100的整数,
"key_risks": ["风险1", "风险2", "风险3"],
"recommendation": "批准/拒绝/条件批准",
"conditions": "如果条件批准,列出具体条件",
"reasoning": "简要说明判断依据"
}}
"""Chain-of-Thought(思维链)
python
cot_prompt = """
分析以下贷款申请的风险,请一步步思考:
企业:某科技公司
- 成立2年
- 年营收300万
- 负债率75%
- 主营AI软件开发
请按以下步骤分析:
第一步:分析企业基本面
- 成立时间:...
- 业务稳定性:...
第二步:分析财务状况
- 营收规模评估:...
- 负债率分析:...
第三步:行业风险评估
- AI软件行业特点:...
- 市场竞争情况:...
第四步:综合风险评级
- 综合以上分析,风险等级为:...
- 建议:...
"""Few-Shot 示例
python
few_shot_prompt = """
你是信贷风险评估专家。根据企业信息给出风险评级。
示例1:
输入:成立8年,年营收2000万,负债率45%,制造业
输出:低风险(评分85)- 经营稳定,财务健康,行业成熟
示例2:
输入:成立1年,年营收100万,负债率85%,互联网创业
输出:高风险(评分25)- 经营时间短,高负债,盈利不确定
示例3:
输入:成立5年,年营收800万,负债率60%,餐饮连锁
输出:中风险(评分60)- 有一定经营历史,负债偏高,行业竞争激烈
现在评估:
输入:{company_info}
输出:
"""输出格式控制
python
# Markdown 格式
markdown_prompt = """
生成一份信贷评估报告,使用 Markdown 格式,包含以下章节:
## 企业概况
## 财务分析
## 风险评估
## 授信建议
企业信息:{info}
"""
# 表格格式
table_prompt = """
对比分析以下三家银行的风险指标,以 Markdown 表格输出:
| 指标 | 招商银行 | 平安银行 | 兴业银行 |
|------|---------|---------|---------|
| 不良贷款率 | ... | ... | ... |
| 资本充足率 | ... | ... | ... |
| 净息差 | ... | ... | ... |
"""防止幻觉
python
anti_hallucination_prompt = """
基于以下文档内容回答问题。
重要规则:
1. 只使用文档中明确提到的信息
2. 如果文档中没有相关信息,回答"文档中未提及此信息"
3. 不要推测或补充文档以外的内容
4. 引用具体数据时注明来源段落
文档内容:
{context}
问题:{question}
"""Prompt 模板管理
python
from string import Template
from dataclasses import dataclass
from typing import Dict
@dataclass
class PromptTemplate:
name: str
template: str
required_vars: list[str]
def format(self, **kwargs) -> str:
missing = [v for v in self.required_vars if v not in kwargs]
if missing:
raise ValueError(f"缺少必要变量: {missing}")
return self.template.format(**kwargs)
# 模板库
PROMPTS = {
"risk_assessment": PromptTemplate(
name="风险评估",
template="评估企业 {company} 的信贷风险,营收 {revenue},负债率 {debt_ratio}%",
required_vars=["company", "revenue", "debt_ratio"]
),
"rag_qa": PromptTemplate(
name="RAG问答",
template="基于文档回答:\n{context}\n\n问题:{question}",
required_vars=["context", "question"]
)
}
# 使用
prompt = PROMPTS["risk_assessment"].format(
company="某科技公司",
revenue="500万",
debt_ratio=65
)