【大模型】DeepSeek调研

本地部署

1.下载安装Ollama

https://ollama.com/download

2.下载运行deepseek-r1

https://ollama.com/library/deepseek-r1:1.5b

1
ollama run deepseek-r1:1.5b

3.局域网访问API

(1)修改监听地址 ~/.zshrc

1
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
18
curl -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
32
curl -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
7
curl -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
18
curl -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
6
messages: [
{"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

最近的文章

【Harmony】鸿蒙开发经验

1.下拉刷新不支持边缘滑动效果问题描述页面下拉刷新无响应,拉不动 原因The edgeEffect value must be EdgeEffect.None[图片][图片]文档链接:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fpulltorefr …

鸿蒙开发 阅读全文
更早的文章

【前端】开发Tips

1.添加 vConsole12345<script src="https://cdn.bootcss.com/vConsole/3.2.2/vconsole.min.js"></script><script> var vConsole = new VCons …

前端 阅读全文