本地部署
1.下载安装Ollama
2.下载运行deepseek-r1
https://ollama.com/library/deepseek-r1:1.5b1
ollama run deepseek-r1:1.5b
3.局域网访问API
(1)修改监听地址 ~/.zshrc1
2# 设置Ollama监听所有网络接口(0.0.0.0表示允许所有IP访问)
export OLLAMA_HOST=0.0.0.0:11434
(2)立即生效1
source ~/.zshrc
(3)不生效可以用下面这个1
OLLAMA_HOST=0.0.0.0 ollama serve
可以访问了:http://10.33.158.12:11434/api/tags
意图识别
实现方式
本地部署 DeepSeek 后,要让它能够进行意图识别(例如把“这个房子的租金是多少”映射到“查租金”),有以下几种方式:
1.通过 system 提示词 (Prompt) 设定规则
你可以在 system 提示词中提供指导,告诉 DeepSeek 需要按照你的要求进行意图分类,例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47你是一个经验丰富的专业租赁经纪人,负责识别用户的意图,并返回 JSON 格式的结果。
你只需要返回 JSON,不要输出其他内容。
返回格式如下:
{
"command": "意图名称",
"text": "简短的回应"
}
意图类别:
- "查租金":如果用户询问房屋租金、价格或费用相关信息
- "发放优惠券": 如果用户询问房源优惠信息
- "看厨房": 我想看看厨房
- "预约实地带看": 如果用户希望安排看房,想实地看看
- "线上签约": 如果用户想在线签约
- "推荐房源":如果用户询问还有别的房子可以看吗?有其他推荐吗?
示例:
用户:这个房子的租金是多少?
你应该回复:
{
"command": "查租金",
"text": "好的,帮你查一下租金"
}
用户:附近有什么房子出租?
你应该回复:
{
"command": "推荐房源",
"text": "我来帮你找附近的房源"
}
用户:我想预约看房
你应该回复:
{
"command": "预约实地带看",
"text": "好的,帮你预约看房"
}
用户:有优惠吗?
你应该回复:
{
"command": "发放优惠券",
"text": "好的,帮你查看优惠信息"
}
请严格按照 JSON 格式返回,不要输出其他内容。
然后,你在调用 DeepSeek 的时候,把这个 system 提示词加入 messages 参数中,让模型按此规则识别意图。
2.微调 (Fine-tuning)
如果你的需求很稳定,并且你有较多的训练数据(比如用户问题和对应意图的标注数据),可以微调 DeepSeek,让它专门适应你的任务。例如,你可以用类似这样的标注数据:1
2
3{"input": "这个房子的租金是多少?", "output": "查租金"}
{"input": "附近有什么房子出租?", "output": "查房源"}
{"input": "我想预约看房", "output": "预约看房"}
然后对 DeepSeek 进行微调,让它更精准地匹配你的业务场景。
3. 使用向量检索(Embedding + 检索)
如果你的意图库是固定的,你可以使用 DeepSeek 的 embedding 模型,把所有的意图示例转换成向量,并存入向量数据库(如 FAISS、Milvus 等)。当用户输入查询时,把它的向量与已有意图的向量匹配,找最相似的意图。
4. 结合规则(正则/关键词匹配)+ LLM
如果意图识别的需求比较简单,你可以先用关键词匹配或正则表达式筛选出明显的意图,再用 LLM 处理复杂情况。例如:
●如果输入中包含“租金”、“价格”,直接返回“查租金”;
●否则,调用 DeepSeek 进行意图识别。
这种方法可以减少 LLM 处理的请求量,提高效率。
选型建议:
如果意图较少,规则清晰 → system 提示词就够了,简单高效。
如果数据多,想优化效果 → 适合微调模型,让它更精准。
如果意图较多,且经常更新 → 适合向量检索方案,灵活扩展。
本地部署DeepSeek-R1 1.5B 效果:
耗时3.84s,结果不稳定。
curl:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18curl -X POST "http://10.33.158.12:11434/api/chat" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:1.5b",
"messages": [
{
"role": "system",
"content": "你是一个经验丰富的专业租赁经纪人,负责识别用户的意图,并返回 JSON 格式的结果。\n你只需要返回 JSON,不要输出其他内容。\n\n返回格式如下:\n{\n \"command\": \"意图名称\",\n \"text\": \"简短的回应\"\n}\n\n意图类别:\n- \"查租金\":如果用户询问房屋租金、价格或费用相关信息\n- \"发放优惠券\": 如果用户询问房源优惠信息\n- \"看厨房\": 我想看看厨房\n- \"预约实地带看\": 如果用户希望安排看房,想实地看看\n- \"线上签约\": 如果用户想在线签约\n- \"推荐房源\":如果用户询问还有别的房子可以看吗?有其他推荐吗?\n\n示例:\n用户:这个房子的租金是多少?\n你应该回复:\n{\n \"command\": \"查租金\",\n \"text\": \"好的,帮你查一下租金\"\n}\n\n用户:附近有什么房子出租?\n你应该回复:\n{\n \"command\": \"推荐房源\",\n \"text\": \"我来帮你找附近的房源\"\n}\n\n用户:我想预约看房\n你应该回复:\n{\n \"command\": \"预约实地带看\",\n \"text\": \"好的,帮你预约看房\"\n}\n\n用户:有优惠吗?\n你应该回复:\n{\n \"command\": \"发放优惠券\",\n \"text\": \"好的,帮你查看优惠信息\"\n}\n\n请严格按照 JSON 格式返回,不要输出其他内容。"
},
{
"role": "user",
"content": "能便宜吗?"
}
],
"temperature": 0,
"stream": false,
"max_tokens": 100
}'
DeepSeek官网API效果:
耗时9.45s,结果稳定
curl:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32curl -L -X POST 'https://api.deepseek.com/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer sk-e856b3fef50d4da1902b2a41de3c1a10' \
--data-raw '{
"messages": [
{
"role": "system",
"content": "你是一个经验丰富的专业租赁经纪人,负责识别用户的意图,并返回 JSON 格式的结果。\n你只需要返回 JSON,不要输出其他内容。\n\n返回格式如下:\n{\n \"command\": \"意图名称\",\n \"text\": \"简短的回应\"\n}\n\n意图类别:\n- \"查租金\":如果用户询问房屋租金、价格或费用相关信息\n- \"发放优惠券\": 如果用户询问房源优惠信息\n- \"看厨房\": 我想看看厨房\n- \"预约实地带看\": 如果用户希望安排看房,想实地看看\n- \"线上签约\": 如果用户想在线签约\n- \"推荐房源\":如果用户询问还有别的房子可以看吗?有其他推荐吗?\n\n示例:\n用户:这个房子的租金是多少?\n你应该回复:\n{\n \"command\": \"查租金\",\n \"text\": \"好的,帮你查一下租金\"\n}\n\n用户:附近有什么房子出租?\n你应该回复:\n{\n \"command\": \"推荐房源\",\n \"text\": \"我来帮你找附近的房源\"\n}\n\n用户:我想预约看房\n你应该回复:\n{\n \"command\": \"预约实地带看\",\n \"text\": \"好的,帮你预约看房\"\n}\n\n用户:有优惠吗?\n你应该回复:\n{\n \"command\": \"发放优惠券\",\n \"text\": \"好的,帮你查看优惠信息\"\n}\n\n请严格按照 JSON 格式返回,不要输出其他内容。"
},
{
"content": "能便宜吗?",
"role": "user"
}
],
"model": "deepseek-chat",
"frequency_penalty": 0,
"max_tokens": 2048,
"presence_penalty": 0,
"response_format": {
"type": "text"
},
"stop": null,
"stream": false,
"stream_options": null,
"temperature": 1,
"top_p": 1,
"tools": null,
"tool_choice": "none",
"logprobs": false,
"top_logprobs": null
}'
本地部署支持的接口:
1.文本生成接口:
请求方式:POST /api/generate
功能:根据提供的提示词(prompt)生成文本。
请求参数:
●model(必需):模型名称,例如 deepseek-r1:1.5b。
●prompt(必需):要生成响应的提示词。
●stream(可选):是否以流式方式返回响应。
curl示例:1
2
3
4
5
6
7curl -X POST http://10.33.158.12:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:1.5b",
"prompt": "请用专业经纪人给客户介绍房源的口吻帮我润色下:这是厨房",
"stream": false
}'
效果:
2.对话接口:
请求方式:POST /api/chat
功能:与模型进行多轮对话。
请求参数:
●model(必需):模型名称。
●messages(必需):一个包含对话历史的列表,每个消息包含 role(角色,如 user 或 assistant)和 content(内容)。
●stream(可选):是否以流式方式返回响应。
curl示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18curl -X POST "http://10.33.158.12:11434/api/chat" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1:1.5b",
"messages": [
{
"role": "system",
"content": "你是一个经验丰富的专业租赁经纪人,负责识别用户的意图,并返回 JSON 格式的结果。\n你只需要返回 JSON,不要输出其他内容。\n\n返回格式如下:\n{\n \"command\": \"意图名称\",\n \"text\": \"简短的回应\"\n}\n\n意图类别:\n- \"查租金\":如果用户询问房屋租金、价格或费用相关信息\n- \"发放优惠券\": 如果用户询问房源优惠信息\n- \"看厨房\": 我想看看厨房\n- \"预约实地带看\": 如果用户希望安排看房,想实地看看\n- \"线上签约\": 如果用户想在线签约\n- \"推荐房源\":如果用户询问还有别的房子可以看吗?有其他推荐吗?\n\n示例:\n用户:这个房子的租金是多少?\n你应该回复:\n{\n \"command\": \"查租金\",\n \"text\": \"好的,帮你查一下租金\"\n}\n\n用户:附近有什么房子出租?\n你应该回复:\n{\n \"command\": \"推荐房源\",\n \"text\": \"我来帮你找附近的房源\"\n}\n\n用户:我想预约看房\n你应该回复:\n{\n \"command\": \"预约实地带看\",\n \"text\": \"好的,帮你预约看房\"\n}\n\n用户:有优惠吗?\n你应该回复:\n{\n \"command\": \"发放优惠券\",\n \"text\": \"好的,帮你查看优惠信息\"\n}\n\n请严格按照 JSON 格式返回,不要输出其他内容。"
},
{
"role": "user",
"content": "能便宜吗?"
}
],
"temperature": 0,
"stream": false,
"max_tokens": 100
}'
效果:
结果不稳定
3.列出模型
http://10.33.158.12:11434/api/tags
效果:
DeepSeek官网API支持的接口:
https://api-docs.deepseek.com/zh-cn/api/create-chat-completion
https://api-docs.deepseek.com/zh-cn/api/create-completion
https://api-docs.deepseek.com/zh-cn/api/list-models
带上下文的意图
多轮对话放在messages里1
2
3
4
5
6messages: [
{"role": "system", "content": "你是一位乐于助人的助手"},
{"role": "user", "content": "中国的首都是哪里?"},
{"role": "assistant", "content": "中国的首都是北京。"},
{"role": "user", "content": "美国的首都是哪里?"}
]
https://api-docs.deepseek.com/zh-cn/guides/multi_round_chat
响应速度
通常在几秒内返回
Function Calling
Function Calling 让模型能够调用外部工具,来增强自身能力。
示例流程:
●用户:询问现在的天气
●模型:返回 function get_weather({location: ‘Hangzhou’})
●用户:调用 function get_weather({location: ‘Hangzhou’}),并传给模型。
●模型:返回自然语言,”The current temperature in Hangzhou is 24°C.”
注:上述代码中 get_weather 函数功能需由用户提供,模型本身不执行具体函数。
https://api-docs.deepseek.com/zh-cn/guides/function_calling