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…

「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…

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

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

第十六周:机器学习笔记

第十六周周报 摘要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;觉得这篇文章对你有帮助吗&…

ApacheShiro反序列化 550 721漏洞

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

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。 一…

Windows系统PyCharm右键运行.sh文件

在参考了Windows系统下pycharm运行.sh文件&#xff0c;执行shell命令_shell在pycharm-CSDN博客 和深度学习&#xff1a;PyCharm中运行Bash脚本_pycharm bash-CSDN博客 配置了右键执行.sh文件之后&#xff0c;发现在Windows的PyCharm中直接右键运行sh文件&#xff0c;存在如下…

【MyBatis】MyBatis-config标签详解

目录 MyBatis配置文件标签详解configuration标签properties标签typeAliases标签environments标签environment标签transactionManager标签dataSource标签mappers标签 MyBatis配置文件标签详解 我们在使用MyBatis框架的时候需要一个配置文件——MyBatis-config.xml来告诉MyBatis…

Android按钮Button

Button是程序用于和用户进行交互的一个重要控件。Button也是继承自TextView&#xff0c;既可以显示文本&#xff0c;又可以显示图片&#xff0c;二者在UI上的区别主要是 Button 控件有个按钮外观&#xff0c;提示用户单击。 图1 Button示意图 Button最主要的功能是通过单击来执…

K折交叉验证代码实现——详细注释版

正常方法 #---------------------------------Torch Modules -------------------------------------------------------- from __future__ import print_function import numpy as np import pandas as pd import torch.nn as nn import math import torch.nn.functional as …

基于潜空间搜索的策略自适应组合优化(NeurIPS2023)(未完)

文章目录 Abstract1 Introduction2 Related work3 Methods3.1 预备知识3.2 COMPASS4 Experiments4.1 TSP、CVRP和JSSP的标准基准测试4.2 对泛化的鲁棒性:解决变异实例4.3 搜索策略分析5 ConclusionAbstract 组合优化是许多现实应用的基础,但设计高效算法以解决这些复杂的、通…

MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询

一、生成学生信息脚本 利用该脚本可以生成任意个学生信息&#xff0c;包括学号、姓名、班级、年级、专业、课程名称、课程成绩等信息&#xff0c;此处生成2万名学生&#xff0c;学生所有信息都是给定范围后随机生成。 生成学生信息后&#xff0c;再来对学生信息进行简单查询。…

关于武汉芯景科技有限公司的限流开关芯片XJ6241开发指南(兼容LTC4411)

一、芯片引脚介绍 1.芯片引脚 二、系统结构图 三、功能描述 1.CTL引脚控制VIN和VOUT的通断 2.CTL引脚控制STAT引脚的状态 3.输出电压高于输入电压加上–VRTO的值&#xff0c;芯片处于关断状态

Artistic Oil Paint 艺术油画着色器插件

只需轻轻一点&#xff0c;即可将您的视频游戏转化为艺术品&#xff01;&#xff08;也许更多…&#xff09;。 ✓ 整个商店中最可配置的选项。 ✓ 六种先进算法。 ✓ 细节增强算法。 ✓ 完整的源代码&#xff08;脚本和着色器&#xff09;。 ✓ 包含在“艺术包”中。 &#x1f…