Appearance
对话前缀续写(Beta)允许你在 messages 末尾添加一条 prefix: true 的 assistant 消息,模型会从该内容接着续写。配合 stop 参数可精确控制输出边界,是生成特定格式代码、Markdown 或 JSON 的利器。
DeepSeek API 对话前缀续写(Beta)
此功能为 Beta 版本,需使用 Beta 端点:
https://api.deepseek.com/beta
使用场景
- 强制模型输出特定格式(如以
\``python` 开始的代码块) - 续写已有文档或代码
- 精确控制输出结构
基本用法
在 messages 末尾添加一条 role: "assistant" 且 prefix: true 的消息,模型会从该内容接着生成:
typescript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.deepseek.com/beta", // 必须用 /beta 端点
apiKey: process.env.DEEPSEEK_API_KEY,
});
const response = await client.chat.completions.create({
model: "deepseek-v4-pro",
messages: [
{ role: "user", content: "写一个快速排序的 Python 实现" },
{
role: "assistant",
content: "```python\n", // 前缀:模型从这里开始续写
// @ts-ignore - prefix 是 DeepSeek 扩展字段
prefix: true,
},
],
stop: ["```"], // 遇到 ``` 停止,只输出代码块内容
});
console.log(response.choices[0].message.content);
// 直接输出 Python 代码,不带 ```python 包装Python 版本:
python
from openai import OpenAI
client = OpenAI(
api_key="<your api key>",
base_url="https://api.deepseek.com/beta",
)
messages = [
{"role": "user", "content": "写一个快速排序的 Python 实现"},
{"role": "assistant", "content": "```python\n", "prefix": True},
]
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=messages,
stop=["```"],
)
print(response.choices[0].message.content)实用技巧
控制 JSON 输出的开头:
typescript
messages: [
{ role: "user", content: "给我一份用户信息 JSON" },
{ role: "assistant", content: '{"name":', prefix: true },
]
// 模型会续写完整的 JSON 对象,从 {"name": 开始续写 Markdown 文档:
typescript
messages: [
{ role: "user", content: "写一篇关于 KV Cache 的技术文章" },
{ role: "assistant", content: "## KV Cache 简介\n\nKV Cache", prefix: true },
]注意事项
- 必须使用
/beta端点:标准端点不支持prefix字段 prefix: true的 assistant 消息必须是 messages 数组的最后一条stop参数配合使用效果更好,可以精确截断输出边界- TypeScript 中
prefix是 DeepSeek 扩展字段,可能需要// @ts-ignore或自定义类型
常见问题
Q: 对话前缀续写和普通 assistant 消息有什么区别?
A: 普通 assistant 消息会作为"历史回复"传给模型,模型知道那是之前说的话;prefix: true 的消息则告诉模型"从这里开始生成下一句",效果更像"补全"而不是"多轮对话"。
Q: FIM 和对话前缀续写有什么区别?
A: 对话前缀续写是在 Chat Completions 接口上工作,适合对话场景;FIM(Fill in the Middle)在 Completions 接口上工作,可以同时提供前缀和后缀让模型补全中间,更适合代码补全。