FIM 补全
使用场景
在 FIM (Fill In the Middle) 补全任务中,用户输入希望保留的前缀和后缀内容,模型将根据提示生成中间缺失的部分。这种补全方式常见于代码自动补全、文本中间生成等应用场景。
使用方式
在 chat/completions 接口中使用,只需支持 model_id 设置为模型广场上的模型 id 即可,在模块卡片的右上角复制。
{
"model": "model_id",
"messages": "prompt",
"params": "params",
"extra_body": {"prefix": "前缀内容", "suffix": "可选的后缀内容"}
}
在 completions 接口中使用
{
"model": "model_info",
"prompt": "前缀内容",
"suffix": "后缀内容"
}
使用示例
基于 OpenAI 的 chat.completions 接口使用FIM补全:
- Python
- JavaScript
- TypeScript
- Curl
from openai import OpenAI
client = OpenAI(
api_key="NUWA_API_KEY", # 换成你在后台生成的 Key "sk-***"
base_url="https://api.nuwaapi.com/v1"
)
messages = [
{"role": "user", "content": "Please write a sum function code"},
]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
extra_body={
"prefix": f"""
def sum_numbers(numbers):
# 如果列表为空,返回 0
if not numbers:
return 0
""",
"suffix": f"""
# 测试
numbers = [1, 2, 3, 4, 5]
result = sum_numbers(numbers)
print("Sum of numbers:", result)
"""
},
stream=True,
max_tokens=4096
)
for chunk in response:
if chunk.choices and len(chunk.choices) > 0 and chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end='')
const prefix = `
def sum_numbers(numbers):
# 如果列表为空,返回 0
if not numbers:
return 0
`;
const suffix = `
# 测试
numbers = [1, 2, 3, 4, 5]
result = sum_numbers(numbers)
print("Sum of numbers:", result)
`;
async function main() {
const response = await fetch("https://api.nuwaapi.com/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "sk-***"
},
body: JSON.stringify({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "Please write a sum function code" }],
stream: true,
max_tokens: 4096,
prefix,
suffix
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const lines = decoder.decode(value).split("\n").filter(l => l.startsWith("data: "));
for (const line of lines) {
const data = line.slice(6);
if (data === "[DONE]") return;
try {
const chunk = JSON.parse(data);
const content = chunk.choices?.[0]?.delta?.content;
if (content) process.stdout.write(content);
} catch {}
}
}
}
main().catch(e => console.error("❌ 出错:", e.message));
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-***",
baseURL: "https://api.nuwaapi.com/v1"
});
const prefix = `
def sum_numbers(numbers):
# 如果列表为空,返回 0
if not numbers:
return 0
`;
const suffix = `
# 测试
numbers = [1, 2, 3, 4, 5]
result = sum_numbers(numbers)
print("Sum of numbers:", result)
`;
async function main(): Promise<void> {
const stream = await client.chat.completions.create({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "Please write a sum function code" }],
stream: true,
max_tokens: 4096,
...({ prefix, suffix } as any)
});
for await (const chunk of stream) {
const content = chunk.choices?.[0]?.delta?.content;
if (content) process.stdout.write(content);
}
}
main().catch(e => console.error("❌ 出错:", e.message));
curl https://api.nuwaapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: sk-***" \
-d '{
"model": "claude-sonnet-4-6",
"stream": true,
"max_tokens": 4096,
"messages": [
{"role": "user", "content": "Please write a sum function code"}
],
"prefix": "\ndef sum_numbers(numbers):\n # 如果列表为空,返回 0\n if not numbers:\n return 0\n",
"suffix": "\n# 测试\nnumbers = [1, 2, 3, 4, 5]\nresult = sum_numbers(numbers)\nprint(\"Sum of numbers:\", result)\n"
}'