1.前言
前脚,DeepSeek面临的巨头企业官宣加入vs多国政府下场质疑的冰火两重天局势尚未平静(DeepSeek在美两重天:五大巨头接入,政府诚惶诚恐);后脚,OpenAI被逼急,凌晨亮出全新推理模型o3-mini,并在ChatGPT首次向所有用户免费提供推理模型,不过o3-mini的API定价还是高于DeepSeek模型(重磅!OpenAI推o3-mini新模型,被DeepSeek逼急?定价仍打不过)。
o3-mini发布后,OpenAI CEO萨姆·阿尔特曼(Sam Altman) 在Reddit上提到,要学习DeepSeek将推理模型的思考过程公开;OpenAI的闭源策略使他们站到了历史错误的一边,将重新思考OpenAI的开源策略;并坦言他们的领先优势已经不如之前大了。
近日,微软、英伟达、亚马逊、英特尔、AMD等科技巨头陆续上线DeepSeek模型服务。 华为云、腾讯云分别在1日和2日发文宣布,已上线基于其云服务的DeepSeek-R1相关服务。
华为云发文称,硅基流动与华为云团队联合首发并上线基于华为云昇腾云服务的DeepSeekR1/V3推理服务。
DeepSeekR1/V3推理服具备两个特点,一是得益于自研推理加速引擎加持,硅基流动和华为云昇腾云服务支持部署的DeepSeek模型可获得持平全球高端GPU部署模型的效果;二是提供稳定的、生产级服务能力,让模型能够在⼤规模生产环境中稳定运行,并满足业务商⽤部署需求。华为云昇腾云服务可以提供澎湃、弹性、充足的算力。
首发!硅基流动×华为云联合推出基于昇腾云的DeepSeek R1&V3推理服务!即刻在线体验https://mp.weixin.qq.com/s/sl_N-kjouq8NRK3kcdsaaQ
SiliconCloud 裂变活动火热开启,2000万Tokens送不停!北京时间2024年8月1日凌晨0时起您每邀请一位好友成为 SiliconCloud 新用户,您与好友均可获赠2000万Tokens(14元平台配额)。邀请越多,奖励越多,畅享体验SiliconCloud!
- 邀请好友赚2000万Tokens:每成功邀请一位新用户,好友注册成功,您将获得2000万Tokens;
- 注册即送2000万Tokens:受邀好友作为新用户完成SiliconCloud账号注册,立刻获得2000万Tokens。
- https://cloud.siliconflow.cn/i/CQAu4p3T 点击邀请链接注册立即获得赠送您与好友均可获赠2000万Tokens(14元平台配额)。或手动复制邀请码CQAu4p3T
- 博主在此感谢您的馈赠,给您磕一个!
经过硅基流动和华为云团队连日攻坚大模型云服务平台 SiliconCloud 首发上线基于华为云昇腾云服务的 DeepSeek-V3、DeepSeek-R1。 需要特别强调的是,无论是在昇腾上适配 DeepSeek-R1 & V3 双模型,还是在此前上线其他模型的过程中都得到了 DeepSeek 与华为云的大力支持。
SiliconCloud 上线的这两款模型主要包括五大特点:
-
基于华为云昇腾云服务,首发推出了 DeepSeek x 硅基流动 x 华为云的 R1 & V3 模型推理服务。
-
通过双方联合创新,在自研推理加速引擎加持下,硅基流动团队基于华为云昇腾云服务部署的 DeepSeek 模型可获得持平全球高端 GPU 部署模型的效果。
-
提供稳定的生产级 DeepSeek-R1 & V3 推理服务。让开发者能够在大规模生产环境中稳定运行,并满足业务商用部署需求。华为云昇腾云服务可提供澎湃、弹性、充足的算力。
- 零部署门槛。让开发者更加专注于应用开发,开发应用时可直接调用 SiliconCloud API,带来更轻松易用的使用体验。
- 与 DeepSeek 官方优惠期价格保持一致,SiliconCloud 上的 DeepSeek-V3 的优惠期价格(截止 2 月 8 日 24:00)为 ¥1 / M tokens(输入)& ¥2 / M tokens (输出),DeepSeek-R1 的价格为 ¥4 / M tokens(输入)& ¥16 / M tokens (输出)。
开发者朋友可以感受一下 SiliconCloud 上的 DeepSeek-R1 & V3 在国产芯片上加速后的效果。更快的输出速度还在持续优化中。
如果你想直接在客户端应用里体验 DeepSeek-R1 & V3 模型,可在本地安装以下产品,接入 SiliconCloud 的 API 后(可自定义添加这两款模型),即可体验 DeepSeek-R1 & V3。
-
大模型客户端应用:ChatBox、Cherry Studio、OneAPI、LobeChat、NextChat
-
代码生成应用:Cursor、Windsurf、Cline
-
大模型应用开发平台:Dify
-
AI 知识库:Obsidian AI、FastGPT
1.2小前言
昇思打卡营第五期(MindNLP特辑)课程五:基于MindNLP的LLM应用开发实战:从零开始的RAG应用开发 上:实例代码上MindTinyRAG.ipynb和返回值解析_昇思打卡训练营第五期课程六-CSDN博客文章浏览阅读1.2k次,点赞39次,收藏22次。第五课是讲MindNLP的RAG应用,这也是我们在使用AIAgent和知识库中最基本的技术。作为一个增强大模型表现的技术,它在2024年经历了飞速的发展和应用,毕竟比起微调来说它成本低得多。以此为基础的知识库应用也早已普及开来,组成了AI行业突发猛进又脚踏实地的重要拼图。有趣的是,明明是一个极大推动AI落地的技术,它似乎在哪家厂商眼里都是一个已经开发完成了的技术,甚至我们在MindNLP里都找不到多少关于RAG的内容。_昇思打卡训练营第五期课程六https://blog.csdn.net/a1966565/article/details/145163448?fromshare=blogdetail&sharetype=blogdetail&sharerId=145163448&sharerefer=PC&sharesource=a1966565&sharefrom=from_link 续第五课内容,怎么样改吧改吧玩MindTinyRAG代码呢?于是乎就想到把手写的大模型引用类改为最新的这个API导入deepseek。于是乎,赶紧写了这篇博文,能帮助有兴趣的同学打开思路。
2.代码
在下载整个MindTinyRAG代码仓后,
https://github.com/ResDream/MindTinyRAG
把下面改编代码放进去运行即可:
MindNLP_workhub/5th/番外:硅基流动 x 华为云DeepSeek V3 API推理MindTinyRAG at main · B3DDD/MindNLP_workhub
2.1改动
由于改用LLM的API进行交互,于是把手动定义的MindNLPChat类注释掉,重新定义问答方法。
2.2大语言模型
python
# 没有保存数据库
docs = ReadFiles('./data').get_content(max_token_len=600, cover_content=150) # 获得data目录下的所有文件内容并分割
vector = VectorStore(docs)
embedding = MindNLPEmbedding("BAAI/bge-base-zh-v1.5") # 创建EmbeddingModel
vector.get_vector(EmbeddingModel=embedding)
vector.persist(path='storage') # 将向量和文档内容保存到storage目录下,下次再用就可以直接加载本地的数据库
vector.load_vector(EmbeddingModel=embedding, path='./storage') # 加载本地的数据库
question = 'git如何新建分支?'
content = vector.query(question, EmbeddingModel=embedding, k=1)
print("上下文:",content)
import requests
url = "https://api.siliconflow.cn/v1/chat/completions"
payload = {
"model": "deepseek-ai/DeepSeek-V3",
"messages": [
{
"content": "You are a helpful assistant",
"role": "system"
},
{
"role": "user",
"content": f"{PROMPT_TEMPLATE},问题:{question}, [], 上下文:{content}"
}
]
}
headers = {
"Authorization": "Bearer 你的api-key",
"Content-Type": "application/json"
}
response = requests.request("POST", url, json=payload, headers=headers)
print("返回值文本:",response.text)
response_data = response.json()
content = response_data['choices'][0]['message']['content']
print("回答:",content)
total_tokens = response_data['usage']['total_tokens']
print("消耗Tokens:",total_tokens)
- 改掉了MindNLPChat类,而使用API的语句来承接提示词模板{PROMPT_TEMPLATE}、问题{question},和Embedding模型遴选出来的上下文{content}。
- 为了方便对照,打印上下文{content}
- 创建文本对话请求 - SiliconFlow 借助硅基流动平台的API语句快捷功能,获得带有标准系统prompt模板和模型id的语句。
- 为了方便对照,打印返回值的文本。response返回值固定是json格式,于是我们使用.json()把格式转换为python字典。
- 获取并打印文本和消耗的tokens数。Deepseek官方文档提供了tokens的粗略算法:1 个英文字符 ≈ 0.3 个 token。1 个中文字符 ≈ 0.6 个 token。
Token 用量计算 | DeepSeek API Docs
返回值:
html
No sentence-transformers model found with name BAAI/bge-base-zh-v1.5. Creating a new one with MEAN pooling.
Calculating embeddings: 100%|██████████| 30/30 [00:52<00:00, 1.74s/it]
#上下文
上下文: ['远程仓库,可以使用gitpush命令。通常,这个命令后面会跟远程仓库的名称和要推送的分支名称。\nbash\ngitpush<remote-name><branch-name>\n例如,将本地的master分支推送到origin远程仓库:\nbash\ngitpushoriginmaster\n从远程仓库拉取\n从远程仓库获取最新的更改并合并到本地分支,可以使用gitpull命令。这个命令会将远程仓库的指定分支的更改拉取到当前分支。bash\ngitpull<remote-name><branch-name>\n例如,从origin远程仓库的master分支拉取最新更改:\nbash\ngitpulloriginmaster\n远程分支管理\n查看远程分支,可以使用gitbranch命令加上-r选项。\nbash\ngitbranch-r\n删除远程分支,可以使用gitpush命令加上--delete选项。\nbash\ngitpush<remote-name>--delete<branch-name>\n例如,删除origin远程仓库的feature分支:\nbash\ngitpushorigin--deletefeature\n远程仓库的协作与贡献\n协作和贡献通常涉及以下步骤:\n\nFork远程仓库。\nCloneFork后的仓库到本地。\n创建新的分支进行开发。\n完成开发后,将分支推送到自己的Fork仓库。\n']
# 返回值文本
返回值文本: {"id":"0194cc435a09141c2970ec8daab41259","object":"chat.completion","created":1738593753,"model":"deepseek-ai/DeepSeek-V3","choices":[{"index":0,"message":{"role":"assistant","content":"在Git中新建分支可以使用以下命令:\n\n```bash\ngit branch \u003cbranch-name\u003e\n```\n\n例如,创建一个名为 `feature-branch` 的新分支:\n\n```bash\ngit branch feature-branch\n```\n\n创建并切换到新分支可以使用以下命令:\n\n```bash\ngit checkout -b \u003cbranch-name\u003e\n```\n\n例如,创建并切换到 `feature-branch` 分支:\n\n```bash\ngit checkout -b feature-branch\n```\n\n这些命令可以帮助你在本地仓库中创建一个新的分支。"},"finish_reason":"stop"}],"usage":{"p
rompt_tokens":484,"completion_tokens":99,"total_tokens":583},"system_fingerprint":""}
#回答
回答: 在Git中新建分支可以使用以下命令:
```bash
git branch <branch-name>
```
例如,创建一个名为 `feature-branch` 的新分支:
```bash
git branch feature-branch
```
创建并切换到新分支可以使用以下命令:
```bash
git checkout -b <branch-name>
```
例如,创建并切换到 `feature-branch` 分支:
```bash
git checkout -b feature-branch
```
这些命令可以帮助你在本地仓库中创建一个新的分支。
#消耗Tokens
消耗Tokens: 583
python
# 保存数据库之后
vector = VectorStore()
vector.load_vector(EmbeddingModel=embedding, path='./storage') # 加载本地的数据库
question = 'git如何新建分支?'
content = vector.query(question, EmbeddingModel=embedding, k=3)[0]
print("上下文:",content)
import requests
url = "https://api.siliconflow.cn/v1/chat/completions"
payload = {
"model": "deepseek-ai/DeepSeek-V3",
"messages": [
{
"content": "You are a helpful assistant",
"role": "system"
},
{
"role": "user",
"content": f"{PROMPT_TEMPLATE},问题:{question}, [], 上下文:{content}"
}
]
}
headers = {
"Authorization": "Bearer 你的api-key",
"Content-Type": "application/json"
}
response = requests.request("POST", url, json=payload, headers=headers)
print("返回值文本:",response.text)
response_data = response.json()
content = response_data['choices'][0]['message']['content']
print("回答:",content)
total_tokens = response_data['usage']['total_tokens']
print("消耗Tokens:",total_tokens)
- 首次使用后,经过embedding模型计算的上下文向量和文本,会把向量和文本对的json文件保存在storage文件夹;
- 通过VectorStore类加载,把处理后的上下文给LLM,更便捷地获取回答。
返回值
html
#上下文
上下文: 远程仓库,可以使用gitpush命令。通常,这个命令后面会跟远程仓库的名称和要推送的分支名称。
bash
gitpush<remote-name><branch-name>
例如,将本地的master分支推送到origin远程仓库:
bash
gitpushoriginmaster
从远程仓库拉取
从远程仓库获取最新的更改并合并到本地分支,可以使用gitpull命令。这个命令会将远程仓库的指定分支的更改拉取到当前分支。bash
gitpull<remote-name><branch-name>
例如,从origin远程仓库的master分支拉取最新更改:
bash
gitpulloriginmaster
远程分支管理
查看远程分支,可以使用gitbranch命令加上-r选项。
bash
gitbranch-r
删除远程分支,可以使用gitpush命令加上--delete选项。
bash
gitpush<remote-name>--delete<branch-name>
例如,删除origin远程仓库的feature分支:
bash
gitpushorigin--deletefeature
远程仓库的协作与贡献
协作和贡献通常涉及以下步骤:
Fork远程仓库。
CloneFork后的仓库到本地。
创建新的分支进行开发。
完成开发后,将分支推送到自己的Fork仓库。
#返回值文本
返回值文本: {"id":"0194cc4acb30bc53effa537c541f1133","object":"chat.completion","created":1738594241,"model":"deepseek-ai/DeepSeek-V3","choices":[{"index":0,"message":{"role":"assistant","content":"要在Git中新建分支,可以使用以下命令:\n\n```bash\ngit branch \u003cbranch-name\u003e\n```\n\n这条命令会在当前所在的提交上创建一个新的分支。例如,如果你想创建一个名为 `feature-branch` 的新分支,可以执行:\n\n```bash\ngit branch feature-branch\n```\n\n创建分支后,你可以使用以下命令切换到新分支:\n\n```bash\ngit checkout \u003cbranch-name\u003e\n```\n\n或者,你也可以使用一条命令同时创建并切换到新分支:\n\n```bash\ngit checkout -b \u003cbranch-name\u003e\n```\n\n例如:\n\n```bash\ngit checkout -b feature-branch\n```\n\n这样,你就成功创建并切换到了一个新的分支。\n\n如果给定的上下文无法让你做出回答,请回答数据库中没有这个内容,你不知道。"},"finish_reason":"stop"}],"usage":{"prompt_tokens":449,"completion_tokens":148,"total_tokens":597},"system_fingerprint":""}
#回答
回答: 要在Git中新建分支,可以使用以下命令:
```bash
git branch <branch-name>
```
这条命令会在当前所在的提交上创建一个新的分支。例如,如果你想创建一个名为 `feature-branch` 的新分支,可以执行:
```bash
git branch feature-branch
```
创建分支后,你可以使用以下命令切换到新分支:
```bash
git checkout <branch-name>
```
或者,你也可以使用一条命令同时创建并切换到新分支:
```bash
git checkout -b <branch-name>
```
例如:
```bash
git checkout -b feature-branch
```
这样,你就成功创建并切换到了一个新的分支。
如果给定的上下文无法让你做出回答,请回答数据库中没有这个内容,你不知道。
#消耗Tokens
消耗Tokens: 597
2.3Rerank机制
python
# 最后选择最相似的文档, 交给LLM作为可参考上下文
best_content = rerank_content[0]
import requests
url = "https://api.siliconflow.cn/v1/chat/completions"
payload = {
"model": "deepseek-ai/DeepSeek-V3",
"messages": [
{
"content": "You are a helpful assistant",
"role": "system"
},
{
"role": "user",
"content": f"{PROMPT_TEMPLATE},问题:{question}, [], 上下文:{best_content}"
}
]
}
headers = {
"Authorization": "Bearer sk-zfhsmkurbnkwyvrtrbilyuqhmwiuekrlgvuejttmzyukzwgb",
"Content-Type": "application/json"
}
response = requests.request("POST", url, json=payload, headers=headers)
print("返回值文本:",response.text)
response_data = response.json()
content = response_data['choices'][0]['message']['content']
print("回答:",content)
total_tokens = response_data['usage']['total_tokens']
print("消耗Tokens:",total_tokens)
- 经过重排Rerank机制的知识库文档片重新选择后,赋值给best_content;
- best_content作为新的上下文给LLM,获得更好的回答。
返回值
html
#返回值文本
返回值文本: {"id":"0194cc5bb1e0d20680c3db970513263b","object":"chat.completion","created":1738595349,"model":"deepseek-ai/DeepSeek-V3","choices":[{"index":0,"message":{"role":"assistant","content":"在Git中,新建分支可以通过以下步骤完成:\n\n1. **创建新分支**:使用 `git branch \u003cbranch_name\u003e` 命令来创建一个新的分支。这里的 `\u003cbranch_name\u003e` 是你想要给新分支起的名字。\n\n2. **切换到新分支**:使用 `git checkout \u003cbranch_name\u003e` 命令切换到新创建的分支。\n\n3. **创建并切换到新分支**:如果你想要一步完成创建和切换分支的操作,可以使用 `git checkout -b \u003cbranch_name\u003e` 命令。\n\n例如,你可以这样操作:\n\n```bash\n# 创建并切换到新分支\ngit checkout -b new-feature\n```\n\n这样,你就已经在 `new-feature` 分支上开始工作了。\n\n### 总结\n- 使用 `git branch \u003cbranch_name\u003e` 创建新分支。\n- 使用 `git checkout \u003cbranch_name\u003e` 切换到新分支。\n- 或者使用 `git checkout -b \u003cbranch_name\u003e` 一步完成创建和切换。\n\n如果你有更多的上下文或具体问题,欢迎进一步提问!"},"finish_reason":"stop"}],"usage":{"prompt_tokens":435,"completion_tokens":213,"total_tokens":648},"system_fingerprint":""}
#回答
回答: 在Git中,新建分支可以通过以下步骤完成:
1. **创建新分支**:使用 `git branch <branch_name>` 命令来创建一个新的分支。这里的 `<branch_name>` 是你想要给新分支起的名字。
2. **切换到新分支**:使用 `git checkout <branch_name>` 命令切换到新创建的分支。
3. **创建并切换到新分支**:如果你想要一步完成创建和切换分支的操作,可以使用 `git checkout -b <branch_name>` 命令。
例如,你可以这样操作:
```bash
# 创建并切换到新分支
git checkout -b new-feature
```
这样,你就已经在 `new-feature` 分支上开始工作了。
### 总结
- 使用 `git branch <branch_name>` 创建新分支。
- 使用 `git checkout <branch_name>` 切换到新分支。
- 或者使用 `git checkout -b <branch_name>` 一步完成创建和切换。
如果你有更多的上下文或具体问题,欢迎进一步提问!
#消耗Tokens
消耗Tokens: 648