word下宏命令添加右键菜单调用大语言模型

word开发者模式下,直接选visual basic,把代码粘贴进去,CrateSelectedTextWithAI()函数下把apikey换成你自己的密钥,我这个密钥不可用。这里调用的是月之暗面的模型(有一定免费额度),其他模型的没试过,应该也能用。

apiKey = "换成你自己密钥"

然后关闭visual basic窗口,运行宏命令AddCustomMenuItem,这样就添加了右键菜单。在word中选择要替换的内容或者要生成的内容,然后右键,选择菜单,则根据菜单进行替换或者生成。提示词可根据自己的需要进行修改,没实现流式输出,好像vba下不行。只是简单的调用演示。

Sub AddCustomMenuItem()Dim cb As CommandBarDim cbBtn As CommandBarButton' 检查是否已经存在该菜单项,若存在则先删除On Error Resume NextApplication.CommandBars("Text").Controls("AI替换内容").DeleteApplication.CommandBars("Text").Controls("AI生成内容").DeleteOn Error GoTo 0' 在右键菜单中添加菜单项Set cb = Application.CommandBars("Text")Set cbBtn = cb.Controls.Add(Type:=msoControlButton)With cbBtn.Caption = "AI替换内容".OnAction = "ReplaceSelectedTextWithAI"End WithSet cb2 = Application.CommandBars("Text")Set cbBtn2 = cb.Controls.Add(Type:=msoControlButton)With cbBtn2.Caption = "AI生成内容".OnAction = "CrateSelectedTextWithAI"End With
End SubSub ReplaceContent()Dim originalText As StringDim newText As String' 获取选定文本originalText = Selection.Text' 弹出输入框让用户输入新的文本'newText = InputBox("请输入要替换的新内容:", "替换内容")' 替换选定文本的内容为新内容,并保留原始格式Selection.Text = newText
End Sub
Sub CrateSelectedTextWithAI()Dim xhr As ObjectDim apiKey As StringDim apiUrl As StringDim selectedText As StringDim response As StringDim message As String' 初始化API密钥和端点,换成你自己的密钥apiKey = "sk-ce20qi5Cetn7mV4RqyFruxMMrZHWGz7AHT2Hcfv0"apiUrl = "https://api.moonshot.cn/v1/chat/completions"' 创建XMLHttpRequest对象Set xhr = CreateObject("MSXML2.XMLHTTP")' 获取用户选择的文本If Selection.Type = 2 ThenselectedText = Selection.TextElseMsgBox "Please select some text first."Exit SubEnd If' 将 '\\r' 替换为换行符selectedText = Replace(selectedText, vbCr, "\n")' 构建JSON字符串Dim jsonText As StringjsonText = _"{" & vbCrLf & _"  ""model"": ""moonshot-v1-32k""," & vbCrLf & _"  ""messages"": [" & vbCrLf & _"    {""role"": ""system"", ""content"": ""你将收到一段或多段文字,将提供的文字内容替换,在保留原有含义的基础上,降低重复率,并进行内容扩充,内容扩充到原来的2倍""}," & vbCrLf & _"    {""role"": ""user"", ""content"": """ & selectedText & """}" & vbCrLf & _"  ]," & vbCrLf & _"  ""temperature"": 0.3" & vbCrLf & _"}"' 发送请求到Moonshot AI的APIxhr.Open "POST", apiUrl, Falsexhr.setRequestHeader "Authorization", "Bearer " & apiKeyxhr.setRequestHeader "Content-Type", "application/json"xhr.send jsonText' 获取响应response = xhr.responseText' 检查响应是否包含错误信息If InStr(response, """error""") > 0 Then' 解析错误信息Dim errorType As StringerrorType = Mid(response, InStr(response, """type"":""") + Len("""type"":"""), InStr(InStr(response, """type"":""") + Len("""type"":"""), response, """") - InStr(response, """type"":""") - Len("""type"":"""))' 根据错误类型显示相应的提示消息Select Case errorTypeCase "invalid_authentication_error"MsgBox "鉴权失败请确认,请确认API key 是否有效。"Case "invalid_request_error"MsgBox "输入格式有误,使用了预期外的参数。"Case "rate_limit_reached_error"MsgBox "You have exceeded the rate limit. Please try again later."Case "exceeded_current_quota_error"MsgBox "超过每分钟最大访问次数限制。"Case ElseMsgBox "费用不够了,请购买相关服务。"End SelectElse' 解析JSON响应message = Mid(response, InStr(response, """content"":""") + Len("""content"":"""), InStr(InStr(response, """content"":""") + Len("""content"":"""), response, """") - InStr(response, """content"":""") - Len("""content"":"""))' 提取新内容If message <> "" Then' 替换所选文本Selection.Text = Replace(message, "\n", vbCr)ElseMsgBox "No new content received from the API."End IfEnd If
End SubSub ReplaceSelectedTextWithAI()Dim xhr As ObjectDim apiKey As StringDim apiUrl As StringDim selectedText As StringDim response As StringDim message As String' 初始化API密钥和端点apiKey = "sk-ce20qi5Cetn7mV4RqyFruxMMrZHWGz7AHT2Hcfv0xFudCbDo"apiUrl = "https://api.moonshot.cn/v1/chat/completions"' 创建XMLHttpRequest对象Set xhr = CreateObject("MSXML2.XMLHTTP")' 获取用户选择的文本If Selection.Type = 2 ThenselectedText = Selection.TextElseMsgBox "Please select some text first."Exit SubEnd If' 将 '\\r' 替换为换行符selectedText = Replace(selectedText, vbCr, "\n")' 构建JSON字符串Dim jsonText As StringjsonText = _"{" & vbCrLf & _"  ""model"": ""moonshot-v1-32k""," & vbCrLf & _"  ""messages"": [" & vbCrLf & _"    {""role"": ""system"", ""content"": ""你将收到一段或多段文字,将其内容进行细化扩充,每段内容扩充作为至少600字""}," & vbCrLf & _"    {""role"": ""user"", ""content"": """ & selectedText & """}" & vbCrLf & _"  ]," & vbCrLf & _"  ""temperature"": 0.3" & vbCrLf & _"}"' 发送请求到Moonshot AI的APIxhr.Open "POST", apiUrl, Falsexhr.setRequestHeader "Authorization", "Bearer " & apiKeyxhr.setRequestHeader "Content-Type", "application/json"xhr.send jsonText' 获取响应response = xhr.responseText' 检查响应是否包含错误信息If InStr(response, """error""") > 0 Then' 解析错误信息Dim errorType As StringerrorType = Mid(response, InStr(response, """type"":""") + Len("""type"":"""), InStr(InStr(response, """type"":""") + Len("""type"":"""), response, """") - InStr(response, """type"":""") - Len("""type"":"""))' 根据错误类型显示相应的提示消息Select Case errorTypeCase "invalid_authentication_error"MsgBox "鉴权失败请确认,请确认API key 是否有效。"Case "invalid_request_error"MsgBox "输入格式有误,使用了预期外的参数。"Case "rate_limit_reached_error"MsgBox "You have exceeded the rate limit. Please try again later."Case "exceeded_current_quota_error"MsgBox "超过每分钟最大访问次数限制。"Case ElseMsgBox "费用不够了,请购买相关服务。"End SelectElse' 解析JSON响应message = Mid(response, InStr(response, """content"":""") + Len("""content"":"""), InStr(InStr(response, """content"":""") + Len("""content"":"""), response, """") - InStr(response, """content"":""") - Len("""content"":"""))' 提取新内容If message <> "" Then' 替换所选文本Selection.Text = Replace(message, "\n", vbCr)ElseMsgBox "No new content received from the API."End IfEnd If
End Sub
Function ParseJSONContent(ByVal strContent As String) As StringDim sc As ObjectDim jsonObj As ObjectDim content As StringDim message As String' 创建 ScriptControl 对象Set sc = CreateObject("ScriptControl")sc.Language = "JScript"' JSON 字符串content = strContent' 解析 JSON 字符串sc.ExecuteStatement "var obj = " & contentSet jsonObj = sc.Eval("obj")' 获取 content 字段的值message = sc.Eval("obj.choices[0].message.content")' 释放对象Set jsonObj = NothingSet sc = NothingParseJSONContent = messageEnd Function

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 部署 EMQX 一分钟极速部署

部署 EMQX ( Docker ) [Step 1] : 拉取 EMQX 镜像 docker pull emqx/emqx:latest[Step 2] : 创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器 # 创建目录 mkdir -p /data/emqx/{etc,data,log}# 创建容器 docker run -d --name emqx -p 1883:1883 -p 1808…

【贪心算法】(第十篇)

目录 加油站&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 单调递增的数字&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 加油站&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;LeetCode&a…

「Qt Widget中文示例指南」如何实现半透明背景?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将为大家展示如…

《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优

1. 题记 有关Linux关键内核参数的调整&#xff0c;我前面的调优文章其实就有涉及到&#xff0c;只是比较零散&#xff0c;本篇集中深入介绍Linux常用关键内核参数及其调优&#xff0c;Linux调优80%以上都涉及到内核的这些参数的调整。 2. 文件系统相关参数 fs.file-max 参数…

Excel 对数据进行脱敏

身份证号脱敏&#xff1a;LEFT(A2,6)&REPT("*",6)&RIGHT(A2,6) 手机号脱敏&#xff1a;LEFT(B2,3)&REPT("*",5)&RIGHT(B2,3) 姓名脱敏&#xff1a;LEFT(C2,1)&REPT("*",1)&RIGHT(C2,1) 参考&#xff1a; excel匹配替换…

STM32F103C8T6 IO 操作

1.开启相关时钟 在 STM32 微控制器中&#xff0c;开启 GPIO 端口的时钟是确保 IO 口可以正常工作的第一步。 查找 RCC 寄存器使能时钟 在 STM32 中&#xff0c;时钟控制的寄存器通常位于 RCC (Reset and Clock Control) 模块中。不同的 STM32 系列&#xff08;如 STM32F1、STM…

【Flutter】Dart:异步

在现代应用开发中&#xff0c;异步编程是不可或缺的部分&#xff0c;尤其是在开发用户界面、网络请求、文件操作等涉及长时间执行的操作时&#xff0c;异步能避免阻塞主线程&#xff0c;从而提升应用的响应速度和用户体验。在 Dart 中&#xff0c;异步编程主要依靠 Future 和 S…

【单元测试】深入解剖单元测试的思维逻辑

目录 一、前言二、准备环境三、 常用的mock语句3.1 模拟指定类的对象实例&#xff0c;用于模拟依赖对象&#xff08;类成员&#xff09;3.2 定义被测试对象3.3 模拟枚举类型/静态方法3.4 模拟依赖方法3.5 模拟构造方法3.6 验证方法调用次数3.7 验证返回值3.8 验证异常对象 四、…

10. 异常处理器

一、通过 注解 注册异常处理器 <?php namespace App\Exception\Handler;use App\Exception\FooException; use Hyperf\ExceptionHandler\ExceptionHandler; use Hyperf\HttpMessage\Stream\SwooleStream; use Swow\Psr7\Message\ResponsePlusInterface; use Throwable;use…

第十六周:机器学习笔记

第十六周周报 摘要Abstratc一、机器学习1. Pointer Network&#xff08;指针网络&#xff09;2. 生成式对抗网络&#xff08;Generative Adversarial Networks | GAN&#xff09;——&#xff08;上&#xff09;2.1 Generator&#xff08;生成器&#xff09;2.2 Discriminator&…

ssm企业库存管理微信小程序-计算机毕业设计源码82704

摘 要 本文基于SSM框架&#xff0c;设计与实现了一个企业库存管理微信小程序。该小程序主要包括用户登录、库存查询、入库操作、出库操作等功能模块。在设计过程中&#xff0c;采用了前后端分离的架构&#xff0c;前端使用了微信小程序原生开发工具进行开发&#xff0c;后端使用…

【C++篇】探索STL之美:熟悉使用String类

CSDN 文章目录 前言 &#x1f4ac; 欢迎讨论&#xff1a;如果你在学习过程中有任何问题或想法&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习。你的支持是我继续创作的动力&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;觉得这篇文章对你有帮助吗&…

【跨平台】ReactNative 入门初探

【跨平台】ReactNative 入门初探 环境搭建与资料基础知识JS/TS Html基础React 基础异步编程处理PromiseGeneratorasync UI 组件定义和使用style宽度和高度FlexBox触摸组件常用交互 Redux基础概念 与安卓通信参考相关类注解等 构建打包示例常用参数自定义RN插件 环境搭建与资料 …

no.977有序数组的平方 python

一、题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c…

.NETCore Blazor使用localStorage存储登录信息

目录 1. JWT 登录并存储到 localStorage 2. 读取 JWT 3. 删除 JWT&#xff08;用户退出&#xff09; 4. 修改 JWT 5. 处理 JWT 过期 总结 在使用 JWT&#xff08;JSON Web Token&#xff09;进行身份验证时&#xff0c;除了生成和存储 JWT&#xff0c;还需要处理读取、删…

ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中&#xff0c;该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来 Shiro-550 CVE-2016-4437 Shiro反序列化Docker复现 …

JavaScript 第30章:综合项目

看起来您想要了解如何在一个JavaScript为主的项目中进行项目规划、技术选型、开发流程以及维护等方面的内容&#xff0c;并且希望结合Java的源代码来进行详细的讲解。不过&#xff0c;JavaScript和Java是两种不同的编程语言&#xff0c;通常它们的应用场景也不同。JavaScript 主…

运动监测网站毕设基于SpringBootSSM框架的计算机毕业设计

目录 ‌一、引言 ‌ 1. 开发背景 2. 开发目标 ‌二、系统设计与实现‌ ‌技术选型‌&#xff1a; ‌功能模块‌&#xff1a; ‌技术挑战与解决方案‌&#xff1a; 4. 测试与评估‌ ‌三、需求分析 1.用户需求分析‌ 2. 功能需求‌ 3.非功能需求‌ ‌四、成果与展…

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具&#xff0c;尤其是在需要诊断 GPU 性能问题和优化应用时&#xff0c;可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

HTTP Proxy环境下部署Microsoft Entra Connect和Health Agents

在企业环境中&#xff0c;时常需要通过使用HTTP Proxy访问Internet&#xff0c;在使用HTTP Proxy访问Internet的环境中部署Microsoft Entra Connect和Microsoft Entra Connect Health Agents可能会遇到一些额外的配置步骤&#xff0c;以便这些服务能够正常连接到Internet。 一…