这两种方法都可以在 Ollama 接口中设置系统提示词(system_prompt
),但它们在实现方式和适用场景上有一些不同。以下是它们的详细对比:
1. 使用 system
参数
代码示例
Python
复制
import httpx
async def chat_with_ollama():
system_prompt = "你是一个专业的程序员,擅长使用代码解决用户的问题。"
messages = [{"role": "user", "content": "请帮我写一个计算两个数之和的Python函数"}]
async with httpx.AsyncClient() as client:
response = await client.post(
"http://localhost:11434/api/chat",
json={
"model": "deepseek-chat",
"system": system_prompt,
"messages": messages
}
)
return response.json()
特点
-
直接在请求中设置:通过
system
参数直接传递系统提示词。 -
简洁明了:代码结构简单,易于理解和维护。
-
适用场景:适用于单轮对话或简单的多轮对话,尤其是当系统提示词不需要频繁变化时。
2. 在 messages
参数中设置
代码示例
Python
复制
import httpx
async def multi_turn_chat():
system_prompt = "你是一个专业的程序员,擅长使用代码解决用户的问题。"
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "请帮我写一个计算两个数之和的Python函数"}
]
async with httpx.AsyncClient() as client:
response = await client.post(
"http://localhost:11434/api/chat",
json={
"model": "deepseek-chat",
"messages": messages
}
)
return response.json()
特点
-
通过
messages
参数传递:将系统提示词作为一条消息(role: system
)包含在messages
列表中。 -
灵活性更高:可以将系统提示词与其他消息(如用户消息、AI 助手消息)一起传递,适合复杂的多轮对话场景。
-
适用场景:适用于需要动态调整系统提示词或在多轮对话中逐步构建上下文的场景。
两种方法的主要区别
表格
复制
特点 | 使用 system 参数 | 在 messages 参数中设置 |
---|---|---|
代码结构 | 简洁,直接在请求体中设置 system 参数 | 稍复杂,需要在 messages 中添加系统消息 |
适用场景 | 单轮对话或简单的多轮对话 | 复杂的多轮对话,动态调整系统提示词 |
灵活性 | 较低,系统提示词固定 | 较高,可以动态调整系统提示词 |
是否需要额外消息结构 | 不需要,直接传递字符串 | 需要,系统提示词作为一条消息传递 |
总结
-
使用
system
参数:-
适用于简单的对话场景,系统提示词不需要频繁变化。
-
代码结构简单,易于理解和维护。
-
-
在
messages
参数中设置:-
适用于复杂的多轮对话场景,需要动态调整系统提示词。
-
提供更高的灵活性,可以与其他消息一起传递。
-
选择建议
-
如果你的对话场景相对简单,系统提示词固定,推荐使用
system
参数。 -
如果你需要处理复杂的多轮对话,或者需要动态调整系统提示词,推荐在
messages
参数中设置。
希望这些解释对你理解这两种方法的区别有帮助!