Claude API 定制化生成与提示工程实战指南

169 阅读5分钟

一、引言

随着大模型在各类业务场景中落地,如何精准控制模型的输出风格、格式与内容,成为开发者的必修课。本文围绕 Claude API 的可调参数、进阶定制化选项,以及实战级提示工程技巧,给出详细示例与最佳实践,帮助你快速上手并打造高质量应用。


二、API 必选参数详解

在调用 Claude 的 /v1/chat/completions 接口时,三大必选参数如下。示例中使用 Python SDK(anthropic 包):

pip install anthropic
from anthropic import Anthropic

client = Anthropic(api_key="YOUR_API_KEY")

response = client.completions.create(
    model="claude-3-sonnet-20240229",
    max_tokens=1024,
    system="You are a polite assistant that always responds in Chinese.",
    messages=[
        {"role": "user",   "content": "给我推荐三本科幻小说。"}
    ],
)
print(response.completion)
  • model:选择合适算力与表现的模型版本(如 claude-3.5claude-instant)。
  • max_tokens:限制生成长度,避免过长或爆 token。
  • messages:按顺序传入 userassistantuser…,为对话提供上下文。

三、可选采样参数(控制随机性与创造力)

参数含义适用场景
temperature调整概率分布平滑度,0.0–1.0;数值越低越保守,越高越创新创意写作(高),专业回答(低)
top_k取概率最高的前 K 个标记,再从中随机选取下一个 token需要截断极低概率输出时
top_p累积概率至 P(0.0–1.0)为止,选中这部分 token 集合,再随机选兼顾保守与创新,更多细微控制

注意temperaturetop_k/top_p 二者互斥,仅需配置其中一种采样策略。

3.1 调节 temperature 示例

from anthropic import Anthropic

client = Anthropic(api_key="YOUR_API_KEY")

response = client.completions.create(
    model="claude-3-sonnet-20240229",
    max_tokens=200,
    temperature=0.3,
    messages=[
        {"role": "user",   "content": "给我推荐五条东京三日游路线。"}
    ],
)
print(response.completion)
  • temperature 调低至 0.3,可让回答更加聚焦于最优选项,减少偏离主题的创意输出。

3.2 调节 top_p 示例

from anthropic import Anthropic

client = Anthropic(api_key="YOUR_API_KEY")

response = client.completions.create(
    model="claude-3-sonnet-20240229",
    max_tokens=150,
    top_p=0.9,
    messages=[
        {"role": "user",   "content": "请给我三部近年最佳科幻电影推荐。"}
    ],
)
print(response.completion)
  • top_p=0.9 表示候选集中累积概率达到 90% 的标记,既保留多样性,又防止极端低概率项。

四、进阶定制化参数

4.1 system prompt(系统提示)

create 的时候使用参数system,可提供全局策略或语气指令:

client.completions.create( 
    model="claude-3-sonnet-20240229", 
    max_tokens=150,
    top_p=0.9,
    system="You are Sherlock Holmes, assist me in solving mysteries.",#system提示词
    messages=[ {"role": "user", "content": "请给我三部近年最佳科幻电影推荐。"} ], 
)
  • 应用场景:角色扮演、定制化人格、上下文注入。

4.2 stop_sequence(停止序列)

通过设置 stop_sequences,当模型输出遇到指定字符串时,立即截断:

response = client.completions.create(
    model="claude-3-sonnet-20240229",
    max_tokens=300,
    system="使用xml格式的来格式化内容,<JSON_END>做为开始的标记,使用</JSON_END>作为结束的标记",
    stop_sequences=["</JSON_END>"],
    messages=[ ... ],
)
  • 用途示例1:强制 JSON 输出 在 JSON 末尾加上 "</JSON_END>",并将其添加到 stop_sequences,避免多余自然语言。
  • 用途示例2:敏感信息保护 当模型可能意外输出如信用卡号、IP 等敏感字段,可设定关键前缀或后缀为停止符,降低泄露风险。

五、提示工程(Prompt Engineering)实战技巧

5.1 长文档上下文注入

  • 数据置顶:将长文本或文档内容放在 prompt 最前面,再追加指令,保证模型优先消化数据。

  • 示例

    doc = "<DOCUMENT>\n" + open("manual.txt").read() + "\n</DOCUMENT>"
    query = "<QUERY>\n根据上文内容,帮我生成一份产品卖点总结,要求 5 条。\n</QUERY>"
    
    response = client.completions.create(
        model="claude-3-sonnet-20240229",
        max_tokens=500,
        messages=[
            {"role": "user",   "content": doc + "\n" + query},
        ],
    )
    print(response.completion)
    

5.2 自定义标签(类似 XML/HTML)

  • 使用 <INSTRUCTION><DATA><OUTPUT_FORMAT> 等标签,明确分段结构,增强模型对格式的遵循度。

  • 示例

    prompt = """
    <INSTRUCTION>
    你是资深市场分析师,请根据以下数据生成周报。
    </INSTRUCTION>
    <DATA>
    {"sales": 120000, "growth": "15%", "region": "华东区"}
    </DATA>
    <OUTPUT_FORMAT>
    - 第一部分:要点概述
    - 第二部分:详细分析
    </OUTPUT_FORMAT>
    """
    response = client.completions.create(
        model="claude-3-sonnet-20240229",
        max_tokens=400,
        messages=[{"role": "user", "content": prompt}],
    )
    print(response.completion)
    

5.3 引用与溯源

  • 要求模型在答案中标注引用编号,并在末尾给出原文出处位置,提升“可验证性”。

  • 示例

    prompt = """
    <DOCUMENT>
    【在此粘贴用户调研报告全文】
    </DOCUMENT>
    <QUERY>
    根据上文,请列出 3 条用户主要痛点,并在每条后以 [引用编号] 标注出处。
    </QUERY>
    """
    response = client.completions.create(
        model="claude-3-sonnet-20240229",
        max_tokens=300,
        messages=[
            {"role": "user",   "content": prompt},
        ],
    )
    print(response.completion)
    

5.4 Chain-of-Thought(思维链)

  • 对于复杂推理或多步骤任务,可在 prompt 中加入:

    “请先列出推理步骤,再给出最终结论:”
    
  • 注意:会明显增加生成长度与响应时间,仅在确实需要多步推理时启用。


六、综合示例:生成带引用的分析报告

from anthropic import Anthropic

client = Anthropic(api_key="YOUR_API_KEY")

document = open("customer_research.txt", encoding="utf-8").read()

user_prompt = f"""
<DOCUMENT>
{document}
</DOCUMENT>
<QUERY>
请基于以上文档,生成一份购买动机分析报告:
1. 按编号列出 3 个主要购买动机
2. 每条后面以 [引用编号] 标注出处
</QUERY>
"""

response = client.completions.create(
    model="claude-3-sonnet-20240229",
    max_tokens=800,
    temperature=0.2,
    stop_sequences=["</REPORT>"],
    messages=[
        {"role": "user",   "content": user_prompt},
    ],
)
print(response.completion)

(示例输出)

1. 价格敏感型:[1] 80% 受访者最关注价格因素  
2. 功能导向型:[3] “需要高性能处理”出现在第 43. 品牌忠诚型:[5] “品牌影响力强”在第 7[1] 文档第 2 段 “80% 受访者关注价格”  
[3] 文档第 4 段 “…对功能要求高…”  
[5] 文档第 7 段 “品牌影响力显著”  
</REPORT>

七、最佳实践与常见误区

  1. 参数互斥temperaturetop_p/top_k 不要同时配置,避免逻辑冲突。
  2. 标签格式:标签越清晰、层级越浅,模型遵从度越高。
  3. 示例优先级:若需要模型参考示例格式,可在 prompt 中提供 1–2 个“示例输出”,效果更稳定。
  4. 费用与性能:使用低温度(或小 max_tokens)可节省 API 费用、加快响应速度;高温度/大 max_tokens 则适合创意与深度生成。