deep seek R1本地化部署及openAI API调用
先说几句题外话。
最近deep seek火遍全球,所以春节假期期间趁着官网优惠充值了deep seek的API,用openAI的接口方式尝试了下对deep seek的调用,并且做了个简单测试,测试内容确实非常简单:通过prompt提示词让大模型对用户提问做一个简单的提问场景判断,分了3个大类:一个是能耗问题,比如用户提问包括电流、电压、功率、能耗、耗能情况等等,判断为能耗问题。一个是生产问题,比如产量、产品等等,生产问题需要识别用户提问的日期范围之后转化为格式化输出,以便调用生产系统API获取数据。除此之外就是通用问题。
重点测试了生产相关的产量问题的日期范围测试,分别调用过讯飞的generalv3,智普的glm-4-plus,openAI的gpt-4o,提问比如上周的产量怎么样,不论我怎么调整提示词,generalv3都识别不出“上周”的时间范围,相同提示词的情况下,gpt-4o表现最好,识别的准确率最高,智普的glm-4-plus也还可以。
春节前用deepseek-reasoner试了下,对这个简单问题的表现很不错,因为我的openAI的apikey已经到期了所以没有办法对比测试了,但是单独测试deepseek-reasoner,每次都可以准确识别上周、上个月等时间范围。
其实这个测试是为了对function calling做一个简单的准备,验证一下将来如果有相关场景的话,是否可以通过funcation calling使大模型和业务系统做一个对接。前期测试结果并不能反映出模型是否支持我的业务场景,因为效果不好的直接原因可能就是我的提示词使用不当,不断优化提示词后应该能解决,因为问题确实非常简单。
好的,进入正题。
我的笔记本电脑配置很低,没有gpu,所以没有办法选择参数量比较大的模型做本地化部署,先选一个最小的,主要目的是验证一下本地化部署的步骤。
部署内容:
- Ollama:Ollama是开源大模型部署或管理工具,提供了对大部分知名模型的支持,对外提供了openAI的api接口、以及聊天窗口
- DeepSeek R1 1.5b:选了一个最小的模型,模型文件的大小是1.1GB,关键是推理过程中对GPU没有要求,我16g内存、无显卡的笔记本电脑,可以无障碍运行。
- 本地知识库搭建:搭建本地rag环境,安装embedding模型实现本地知识库的搭建(这一步还在摸索中,尚未找到合适的embedding模型,所以本次内容不涉及)。
下载安装Ollama
到Ollama官网:https://ollama.com/download 下载:
直接点击download for windows下载,不需要注册就可以下载。需要点时间,我还是下载了好一会儿的。
下载之后点击OllamaSetup.exe安装,点击安装之后,没有给用户提供参与的机会,直接默认安装到了:
C:\Users\username\AppData\Local\Programs\Ollama
你可以挪地方,比如整体copy到d盘,但是需要设置环境变量,将安装路径加入到path中。
安装deepseek R1
Ollama官网中,点击左上角右侧的models,发现deepseek-r1出现在很显眼的位置:
打开,选择1.5b,复制安装连接:
安装之前,需要先配置下环境变量OLLAMA_MODELS,OLLAMA_MODELS是指定Ollama的模型安装位置的:
准备好之后,运行上一步copy的安装命令,开始安装:
ollama run deepseek-r1:1.5b
首次运行,ollama会下载deepseek-r1:
安装完成后直接启动,在命令行窗口就可以直接使用了。
聊天窗口
Ollama有集成的Open WebUI聊天窗口,网上好多安装教程,这儿就不说了,不是本次研究内容,这次我也没安装。
openAI API调用
很简单,参考文档:
Ollama openai api 调用
python代码:
from openai import OpenAI
client = OpenAI(
base_url='http://localhost:11434/v1/',
# required but ignored
api_key='ollama',
)
chat_completion = client.chat.completions.create(
messages=[
{
'role': 'user',
'content': '你好,你是谁,请将一个关于小明的笑话',
}
],
model='deepseek-r1:1.5b',
)
print(chat_completion.choices[0].message.content)
ollama本地安装后默认服务端口是11434,可以通过环境变量OLLAMA_HOST修改。
调试稍稍花了一点时间,是因为model没写对,刚开始写的deepseek-reasoner,调用报错404,之后命令行试了下:
C:\Users\zhang>ollama list
NAME ID SIZE MODIFIED
deepseek-r1:1.5b a42b25d8c10a 1.1 GB 32 minutes ago
修改model为deepseek-r1:1.5b之后就ok可,调用成功了,但是讲的这个小明的笑话很是操蛋:
<think>
好的,我现在需要帮用户生成一个小明的笑话。首先,我得回想一下小明是个什么样的角色。小明应该是一个可爱的动物,可能从故事里看到他是哪个动物呢?比如兔子、松鼠或者狗之类的。
接下来,笑话的核心是什么?一般来说,小明的好奇和困惑会让他的情节有趣。我可以利用这一点来设计谜题或矛盾。
让我想想,小明每天都在做什么呢?如果他住在苹果树上,或者他在 garden里,这样的环境可以给他带来乐趣 。比如,他可能想算出苹果的数量或者解决蚂蚁困的难题。
接着,我要考虑如何制造一个谜题或者谜语,让小明感到困惑和不安。我可以编一个关于天气的问题,比如“谁 在你的车里?”因为这个答案会让他陷入迷宫般的思考,而不是立刻告诉你答案。
然后,我需要确保笑话有趣且容易理解。要让小明感觉困惑而不觉得奇怪,这样他的反应才会是那副可爱的猫头鹰样子。同时,谜题不能太难,保持简单的逻辑就可以了。
最后,我要确保整个笑话结构清晰,开头点出小明的特点,接着制造疑问,然后解释答案或者引导到后面的内容。这样既符合用户的指示,又能传达出有趣的笑点。
</think>
好的,以下是一个关于小明的笑话:
---
今天早上,小明刚从花园跑回来,看到花园里有一只受伤的大树被风吹坏了。
“哎呀!谁在你的车里?”小明兴奋地指着旁边的一辆黑色轿车。“啊,别急,你就是那只兔子!”小东赶紧冲他微笑,“它经常在你那里偷吃苹果,所以今天 you 害死你。”
小明眨了下眼睛,看着旁边的车窗上积了一层薄雾。突然之间,一个温暖的阳光照亮了整辆车。
“对不起,请给我一杯饮料?”小明突然开口问道。
“不用了,这是我刚才在 garden 发现的一个秘密洞穴。”小东笑着摇摇头,“那里住了一只小蚂蚁,它每天都会 自己结成一堆大面包。”
“原来是这样啊!”小明开心地大笑起来,然后从车窗里的阳光中看去。
“哦?你什么颜色眼睛?”小明兴奋地问道。
“黄色。这就是我,我的新朋友凯特!”小东补充道,“我知道你在 garden 里看到了我们刚才说的苹果,后来那 个苹果树上的苹果都落下来了。”
听到这笑语声后,小明忍不住笑了起来,终于找到了内心的平静点!
---
这样一个可爱的猫头鹰可爱的角色, Plus 这个谜题会让他的笑翻!
PS D:\develop\python\chatBot> & "D:/Program Files/python/python.exe" d:/develop/python/chatBot/base/test.py
<think>
嗯,用户给了我这个请求:“你好,你是谁,请将一个关于小明的笑话。” 我应该先分析一下这个问题。看起来 像是想测试我的知识,可能是在寻求帮助或获取一些信息。
首先,“你好,你是谁”这句话本身就是一个常见的问候语,通常不会涉及到笑话。如果我回应“我是DeepSeek-R1-Lite-Preview”,可能会让用户觉得我只是在回答他的名字请求,而不是提供内容。
接下来是关于小明的笑话。小明是一个常见的名字,而且中文里有很多关于小孩子的谐音 shorten语,比如“哪 里有我”、“永远抱我对不起你”。如果用户需要一些经典或有趣的笑话,我可以列举一些例子或者建议他找一些 记忆中和这些名字相关的梗。
考虑到用户只是想要“一个”关于小明的笑话,我不确定是否有必要提供太多。所以我可能会列出几个常见的笑话来满足他的需求,同时鼓励他多提更多内容,这样我们能够更接近你的实际意图。
此外,我也需要考虑用户的其他潜在需求,比如也许他们希望我帮助解答其他类型的提问,或者在写作中使用这个信息。因此,在回复时保持开放和友好的态度是比较好的策略,让用户知道我可以随时回应任何问题,即使是关于笑话的情况。
总结一下,我的思考步骤包括:分析用户的问题,判断是否满足问候,检查是否有遗漏的可能内容,然后决定提供合适的回应,鼓励用户提供更多所需的内容。这样的条理确保我能够有效地帮助用户。
</think>
你好!我是DeepSeek-R1-Lite-Preview。
如果您指的是一个关于小明的笑话,我可以为您提供一些经典的小说梗、动画或儿童领域的梗。比如:
1. **小明遇到大 trouble**:小明在数学题中总是错,最终老师用他爸爸教他的方法纠正了他。
2. **小明的自白**:小明每次都在学校里说话的时候不小心把自己说出来。
3. **小明的搞笑表情和打字机**:
- 你看看那个破手机,
冲你的笑点喊“开”?
让他帮你写个字。
4. **小明小时候喜欢学编程**:
- 爸爸问他会不会能算错分数,可他说只要不教别人就好了。
5. **小明的迷路**:小明在放学路上不小心跌了一跤,撞到树上摔在地上。
如果您希望一个更具体或针对某个故事的小明梗,请告诉我!
不过这里可以看到deepseek R1作为推理模型的影子,他的回答里有一部分括起来的内容,应该就是他的推理过程,很像其他模型中你用提示词告诉他要用到思维链的回答方式。
下次尝试补充embeding模型的本地化部署,在ollama官网看到了这个:
这几天找一个靠谱的、资源消耗低的,先研究下。
Thanks!