DeepSeek应用——与word的配套使用

devtools/2025/2/13 11:46:31/

目录

一、效果展示

二、配置方法

三、使用方法

四、注意事项

1、永久化使用

2、宏被禁用

3、office的生成失败


记录自己学习应用DeepSeek的过程......

=======================================================================

这个是与WPS配套使用的过程,office的与这个类似:

一、效果展示

二、配置方法

1、在最上方的功能处找到开发工具,点击VB编辑器

2、点击“插入”——>"模块",得到一个空白的编辑界面

将下面的代码复制进去,由于最近deepseek比较火,我自己私有化本地部署了deepseek r1,这里的url就是自己本地的地址,而且代码的处理也是针对于deepseek的输出进行的编写,如果是其他模型,应该会报错。需要注意修改的有:

第8行:API = "http://localhost:1234/v1/chat/completions/",对应大模型的url地址

第9行: SendTxt = "{""model"": ""deepseek-r1-distill-qwen-7b"", ""messages"": [{""role"":""system"", ""content"":""你是一个文本编辑助手""}, {""role"":""user"", ""content"":""" & inputText & """}], ""stream"": false}",对应大模型的调用请求参数,可能需要改的就是model这个参数

第42行:api_key = "1234",对应于api_key,如果是本地私有化部署的就随意填写,如果是调用官网大模型的api,就为对应的key

Function CallDeepSeekAPI(api_key As String, inputText As String) As StringDim API As StringDim SendTxt As StringDim Http As ObjectDim status_code As IntegerDim response As StringAPI = "http://localhost:1234/v1/chat/completions/"SendTxt = "{""model"": ""deepseek-r1-distill-qwen-7b"", ""messages"": [{""role"":""system"", ""content"":""你是一个文本编辑助手""}, {""role"":""user"", ""content"":""" & inputText & """}], ""stream"": false}"Set Http = CreateObject("MSXML2.XMLHTTP")With Http.Open "POST", API, False.setRequestHeader "Content-Type", "application/json".setRequestHeader "Authorization", "Bearer " & api_key.send SendTxtstatus_code = .Statusresponse = .responseTextEnd With' 弹出窗口显示 API 响应(调试用)' MsgBox "API Response: " & response, vbInformation, "Debug Info"If status_code = 200 ThenCallDeepSeekAPI = responseElseCallDeepSeekAPI = "Error: " & status_code & " - " & responseEnd IfSet Http = Nothing
End FunctionSub DeepSeekR1()Dim api_key As StringDim inputText As StringDim response As StringDim regex As ObjectDim matches As ObjectDim originalSelection As Range' API Keyapi_key = "1234"If api_key = "" ThenMsgBox "Please enter the API key.", vbExclamationExit SubEnd If' 检查是否有选中文本If Selection.Type <> wdSelectionNormal ThenMsgBox "Please select text.", vbExclamationExit SubEnd If' 保存原始选区Set originalSelection = Selection.Range.Duplicate' 处理特殊字符inputText = Selection.TextinputText = Replace(inputText, "\", "\\")inputText = Replace(inputText, vbCrLf, " ")inputText = Replace(inputText, vbCr, " ")inputText = Replace(inputText, vbLf, " ")inputText = Replace(inputText, """", "\""") ' 转义双引号' 发送 API 请求response = CallDeepSeekAPI(api_key, inputText)' 处理 API 响应If Left(response, 5) <> "Error" Then' 解析 JSONSet regex = CreateObject("VBScript.RegExp")With regex.Global = True.MultiLine = True.IgnoreCase = False.Pattern = """content"":""(.*?)""" ' 匹配 JSON 的 "content" 字段End WithSet matches = regex.Execute(response)If matches.Count > 0 Then' 提取 API 响应的文本内容response = matches(0).SubMatches(0)' 处理转义字符response = Replace(response, "\n", vbCrLf)response = Replace(response, "\\", "\") ' 处理 JSON 里的反斜杠response = Replace(response, "&", "") ' 过滤 `&`,防止意外符号' 让光标移动到文档末尾,防止覆盖已有内容Selection.Collapse Direction:=wdCollapseEndSelection.TypeParagraphSelection.TypeText Text:=response' 将光标移回原来选中文本的末尾originalSelection.SelectElseMsgBox "Failed to parse API response.", vbExclamationEnd IfElseMsgBox response, vbCriticalEnd If
End Sub

之后关闭窗口就行

3、点击wps左上角的”文件“——>”选项“,进入”选项“窗口,之后选择”自定义功能区“

进入后在开发工具这里新建组,我在这里改组名为deepseek,然后在左侧搜索”宏“,找到之前创建的模块,点击添加,并重新命名,我这里改为”生成“,最后点击确认即可。

三、使用方法

鼠标选择要发送给大模型的文案,点击你所重命名的功能按钮,我这里是”生成“

四、注意事项

1、永久化使用

这个宏只是一次性的,下次创建新的文档时,这个”生成“便不好使。

若要永久启动宏,需要将其保存成一个模板,每次创建文档时候,使用这个模板创建,具体方法为:

1)另存为带宏的模板

2)之后若要编辑新的word,点击“开发工具”——>"加载项",去掉文档模板框中的内容,点选共用模板里面的deepseek_word.dotm,点击打开即可编辑。

2、宏被禁用

只需要把宏启动即可,wps和office的宏启动方式有所不同,不过均在“文件”——>"选项"——>"信任中心"这里,wps的直接可以看到“宏安全性”,将其调整问中或者低;而office的在“信任中心设置”里,在宏设置中启动所有宏即可。

3、office的生成失败

按照之前的步骤,一般不会出现问题,但是我在进行office的配置时发现报错。按照报错信息打印出来的结果,如下图所示,我个人推测是office在进行数据接收的时候有数据的长度限制,导致后面的数据直接截断,因此后面的数据处理时,格式错误使得内部报错。(不过网上也有说是因为单双引号导致的)

解决方案:

改成流式的输出,这样里面的vb代码需要变化

需要注意的是:

第九行:SendTxt = "{""model"": ""deepseek-r1-distill-qwen-7b"", ""messages"": [{""role"":""system"", ""content"":""我是一个文本生成助手""}, {""role"":""user"", ""content"":""" & inputText & """}], ""stream"": true}",这里的stream改为true。

之后对strArr = Split(response, "data:") ,按照data对流数据进行切分,然后再正则匹配,取出答案进行拼接。

Function CallDeepSeekAPI(api_key As String, inputText As String) As StringDim API As StringDim SendTxt As StringDim Http As ObjectDim status_code As IntegerDim response As StringAPI = "http://localhost:1234/v1/chat/completions/"SendTxt = "{""model"": ""deepseek-r1-distill-qwen-7b"", ""messages"": [{""role"":""system"", ""content"":""我是一个文本生成助手""}, {""role"":""user"", ""content"":""" & inputText & """}], ""stream"": true}"Set Http = CreateObject("MSXML2.XMLHTTP")With Http.Open "POST", API, False.setRequestHeader "Content-Type", "application/json".setRequestHeader "Authorization", "Bearer " & api_key.send SendTxtstatus_code = .Statusresponse = .responseTextEnd With' 弹出窗口显示 API 响应(调试用)' MsgBox "API Response: " & response, vbInformation, "Debug Info"If status_code = 200 ThenCallDeepSeekAPI = responseElseCallDeepSeekAPI = "Error: " & status_code & " - " & responseEnd IfSet Http = Nothing
End FunctionSub DeepSeekR1()Dim api_key As StringDim inputText As StringDim response As StringDim lastRes As StringDim strArr() As StringDim regex As ObjectDim matches As ObjectDim originalSelection As RangelastRes = ""' API Keyapi_key = "1234"If api_key = "" ThenMsgBox "Please enter the API key.", vbExclamationExit SubEnd If' 检查是否有选中文本If Selection.Type <> wdSelectionNormal ThenMsgBox "Please select text.", vbExclamationExit SubEnd If' 保存原始选区Set originalSelection = Selection.Range.Duplicate' 处理特殊字符inputText = Selection.TextinputText = Replace(inputText, "\", "\\")inputText = Replace(inputText, vbCrLf, " ")inputText = Replace(inputText, vbCr, " ")inputText = Replace(inputText, vbLf, " ")inputText = Replace(inputText, """", "\""") ' 转义双引号' 发送 API 请求response = CallDeepSeekAPI(api_key, inputText)strArr = Split(response, "data:") ' 按照流数据进行切割Set regex = CreateObject("VBScript.RegExp")With regex.Global = True.MultiLine = True.IgnoreCase = False.Pattern = """content"":""(.*?)""" ' 匹配 JSON 的 "content" 字段End WithFor Each strItem In strArr ' 循环处理' 处理 API 响应If Left(strItem, 5) <> "Error" Then' 解析 JSONSet matches = regex.Execute(strItem)If matches.Count > 0 Then' 提取 API 响应的文本内容strItem = matches(0).SubMatches(0)' 处理转义字符strItem = Replace(strItem, vbCrLf, "")strItem = Replace(strItem, "\n", vbCrLf)strItem = Replace(strItem, "\\", "\") ' 处理 JSON 里的反斜杠strItem = Replace(strItem, "&", "") ' 过滤 `&`,防止意外符号If Len(strItem) <> 0 ThenlastRes = lastRes & strItemEnd IfEnd IfElseMsgBox response, vbCriticalEnd IfNext' 让光标移动到文档末尾,防止覆盖已有内容Selection.Collapse Direction:=wdCollapseEndSelection.TypeParagraphSelection.TypeText Text:=lastRes' 将光标移回原来选中文本的末尾originalSelection.Select
End Sub


http://www.ppmy.cn/devtools/158467.html

相关文章

深度探索DeepSeek:成本效益之辩与市场展望

摘要 DeepMind的CEO对DeepSeek的成本效益提出质疑&#xff0c;认为其成本被过度炒作。他指出&#xff0c;DeepSeek所使用的技术大多源自谷歌和DeepMind。然而&#xff0c;分析机构SemiAnalysis强调&#xff0c;DeepSeek的优势在于其成本与能力的卓越组合。尽管目前DeepSeek的成…

Docker与容器交互——attach和exec

阅读《Docker 从入门到实践》时&#xff0c;读到“进入容器”这一章节&#xff0c;有两个主要 的命令&#xff0c;分别是&#xff1a; docker attach docker exec 其中提到一句话&#xff1a; 注意&#xff1a; 如果从这个 stdin 中 exit&#xff0c;会导致容器的停止。 …

Java面试--Spring AOP

面试题&#xff1a;Spring AOP介绍一下&#xff1a;(大疆、百度面试题) Spring基础部分博客如下&#xff1a; Spring基础系列&#xff08;一&#xff09; Spring基础系列&#xff08;二&#xff09; Spring基础系列&#xff08;三&#xff09; 什么是Spring AOP&#xff1a; Sp…

单例模式详解(Java)

单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…

用Python批量去除PDF文件的密码

注意&#xff1a;前提是你知道密码&#xff0c;本代码不是暴力跑字典 最近有个需求&#xff0c;下载了一堆PDF&#xff0c;但都有加密&#xff0c;密码还不一样&#xff0c;每次打开都要输密码很麻烦&#xff0c;所有有了此工具&#xff0c;批量去除所有密码。 import os fro…

服务器使用centos7.9操作系统前需要做的准备工作

文章目录 前言1.操作记录 总结 前言 记录一下centos7.9操作系统的服务器在部署业务服务之前需要做的准备工作。 大家可以复制到自己的编辑器里面&#xff0c;有需求的注释一些步骤。 备注&#xff1a;有条件的项目推荐使用有长期支持的操作系统版本。 1.操作记录 # 更换阿里云…

JavaScript语言的安全开发

JavaScript语言的安全开发 1. 引言 随着互联网的快速发展&#xff0c;JavaScript已经成为Web开发中不可或缺的一部分。无论是前端的用户界面交互&#xff0c;还是后端的服务器处理&#xff0c;JavaScript都发挥着重要的作用。然而&#xff0c;随着使用JavaScript的广泛性&…

性格测评小程序04题库管理

目录 1 创建数据源1.1 题库表1.2 选项表 2 搭建管理后台2.1 搭建题库功能2.2 搭建选项功能2.3 题库和选项联动 3 最终效果总结 我们现在性格测评的算法是通过40个题目来测评用户属于哪一个分类&#xff0c;为此后台需要有可以设置题目和选项的功能&#xff0c;本篇我们介绍一下…