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.rhkb.cn/news/455102.html

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

相关文章

数学建模微分方程模型——传染病模型

病毒也疯狂&#xff1a;细说传染病微分方程模型的那些事儿 “数学是打开科学大门的钥匙&#xff0c;而微分方程则是理解世界变化的密码。” 大家好&#xff01;今天我们要聊一聊一个既严肃又有趣的话题——传染病微分方程模型。别急&#xff0c;听起来高大上&#xff0c;其实一…

亚信安全DeepSecurity中标知名寿险机构云主机安全项目

近日&#xff0c;亚信安全DeepSecurity成功中标国内知名寿险机构的云主机安全项目。亚信安全凭借在云主机安全防护领域的突出技术优势&#xff0c;结合安全运营的能力&#xff0c;以“实战化”为指导&#xff0c;为用户提供无惧威胁攻击、无忧安全运营的一站式云安全体系&#…

【论文翻译】ICLR 2018 | DCRNN:扩散卷积递归神经网络:数据驱动的交通预测

论文题目Diffusion Convolutional Recurrent Neural Network: Data-Driven Traffic Forecasting论文链接https://arxiv.org/abs/1707.01926源码地址https://github.com/liyaguang/DCRNN发表年份-会议/期刊2018 ICLR关键词交通预测&#xff0c;扩散卷积&#xff0c;递归神经网络…

数字+文旅:AI虚拟数字人如何焕发传统文旅景区新活力?

​​引言&#xff1a; 据《2024年中国数字文旅行业市场研究报告》显示&#xff0c;截至2022年&#xff0c;中国数字文旅市场规模已达到约9698.1亿元人民币&#xff0c;相较于2017年的7870.5亿元&#xff0c;实现了57.89%的显著增长。这一行业涵盖了数字化的文化遗产旅游、虚拟…

JVM、字节码文件介绍

目录 初识JVM 什么是JVM JVM的三大核心功能 JVM的组成 字节码文件的组成 基础信息 Magic魔数 主副版本号 其它基础信息 常量池 字段 方法 属性 字节码常用工具 javap jclasslib插件 阿里Arthas 初识JVM 什么是JVM JVM的三大核心功能 1. 解释和运行虚拟机指…

【性能优化】安卓性能优化之CPU优化

【性能优化】安卓性能优化之CPU优化 CPU优化及常用工具原理与文章参考常用ADB常用原理、监控手段原理监控手段多线程并发解决耗时UI相关 常见场景排查CPU占用过高常用系统/开源分析工具AndroidStudio ProfilerSystraceBtracePerfettoTraceView和 Profile ANR相关ANR原理及常见场…

使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程

使用 VSCode 通过 Remote-SSH 连接远程服务器详细教程 在日常开发中&#xff0c;许多开发者需要远程连接服务器进行代码编辑和调试。Visual Studio Code&#xff08;VSCode&#xff09;提供了一个非常强大的扩展——Remote-SSH&#xff0c;它允许我们通过 SSH 协议直接连接远程…

YOLO V3 网络构架解析

YOLO V3&#xff08;You Only Look Once version 3&#xff09;是由Joseph Redmon等人于2018年提出的一种基于深度学习的目标检测算法。它在速度和精度上相较于之前的版本有了显著提升&#xff0c;成为计算机视觉领域的一个重要里程碑。本文将详细解析YOLO V3的网络架构&#x…

【信息论基础第六讲】离散无记忆信源等长编码包括典型序列和等长信源编码定理

一、信源编码的数学模型 我们知道信源的输出是消息序列&#xff0c;对于信源进行编码就是用码字集来表示消息集&#xff0c;也就是要进行从消息集到码字集的映射。 根据码字的特征我们又将其分为D元码&#xff0c;等长码&#xff0c;不等长码&#xff0c;唯一可译码。 我们通过…

通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)

介绍 这篇博文详细介绍了如何发现CVE-2024-6778和CVE-2024-5836的&#xff0c;这是Chromium web浏览器中的漏洞&#xff0c;允许从浏览器扩展&#xff08;带有一点点用户交互&#xff09;中进行沙盒逃逸。 简而言之&#xff0c;这些漏洞允许恶意的Chrome扩展在你的电脑上运行…

npm run serve 提示异常Cannot read property ‘upgrade‘ of undefined

npm run serve 提示Cannot read property ‘upgrade’ of undefined 一般是proxy的target代理域名问题导致的&#xff0c;如下&#xff1a; 解决方案&#xff1a; proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题&#xff0c;会导致…

Linux-基础命令及相关知识2

补充&#xff1a; 1、A命令&#xff08;echo&#xff09;既有可能是内部命令也有可能是外部命令&#xff0c;例如命令A既有可能在bash上也有可能在csh上&#xff0c;为了防止A在某些shell程序里不起作用&#xff0c;可以将A命令设置为外部命令&#xff08;环境变量路径上&…

【JAVA毕设】基于JAVA的酒店管理系统

一、项目介绍 本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router实现动态路由&#xff0c;Ajax实现前后端通信&#xff0c;Element-plus组件库使页面快速成型。后端部分&#xff1a;采用SpringBoot作为开发框架&#xff0c;同时集成MyBatis、Redis、…

Chrome DevTools:Console Performance 汇总篇

Chrome DevTools Chrome 开发者工具是一套 Web 开发者工具&#xff0c;直接内置于 Google Chrome 浏览器中。 开发者工具可以帮助您即时修改页面和快速诊断问题&#xff0c;最终帮助您更快地构建更好的网站。 一、开启 DevTools 右上角菜单 > 更多工具 > 开发者工具 页面…

如何用mmclassification训练多标签多分类数据

这里使用的源码版本是 mmclassification-0.25.0 训练数据标签文件格式如下&#xff0c;每行的空格前面是路径&#xff08;图像文件所在的绝对路径&#xff09;&#xff0c;后面是标签名&#xff0c;因为特殊要求这里我的每张图像都记录了三个标签每个标签用“,”分开&#xff0…

力扣71~75题

题71&#xff08;中等&#xff09;&#xff1a; python代码&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:#首先根据/分割字符串&#xff0c;再使用栈来遍历存储p_listpath.split(/)p_stack[]for i in p_list:#如果为空则肯定是//或者///if i:con…

mac m1 安装openresty以及redis限流使用

一切源于一篇微信文章 早上我上着班&#xff0c;听着歌1.打算使用腾讯云服务器centos-7实验&#xff1a;安装ngx_devel_kitmac m1 os 12.7.6 安装openresty测试lua限流: 终于回到初心了&#xff01; 早上我上着班&#xff0c;听着歌 突然微信推送了一篇文章《Nginx 实现动态封…

记录一次从nacos配置信息泄露到redis写计划任务接管主机

经典c段打点开局。使用dddd做快速的打点发现某系统存在nacos权限绕过 有点怀疑是蜜罐&#xff0c;毕竟nacos这实在是有点经典 nacos利用 老规矩见面先上nacos利用工具打一波看看什么情况 弱口令nacos以及未授权访问&#xff0c;看这记录估计被光顾挺多次了啊 手动利用Nacos-…

MySQL - Navicat自动备份MySQL数据

对于从事IT开发的工程师&#xff0c;数据备份我想大家并不陌生&#xff0c;这件工程太重要了&#xff01;对于比较重要的数据&#xff0c;我们希望能定期备份&#xff0c;每天备份1次或多次&#xff0c;或者是每周备份1次或多次。 如果大家在平时使用Navicat操作数据库&#x…

深入解析Python数据容器

Python数据容器 1&#xff0c;数据容器介绍2&#xff0c;数据容器的分类3&#xff0c;数据容器&#xff1a;list&#xff08;列表&#xff09;3.1&#xff0c;列表的定义3.2&#xff0c;列表的下标索引3.3&#xff0c;列表的常用操作3.3.1&#xff0c;查找指定元素下标3.3.2&am…