关于 Mac 配置 AI 环境变量的解决方案

本贴最后更新于 646 天前,其中的信息可能已经事过景迁

前言

相信很多小伙伴跟我一样,兴致勃勃的打开思源笔记,/ 唤出来 AI 菜单准备用,结果还要设置 key。然后文档也只说了去 openai,根本没提供注册,可能希望自己折腾。好吧,还好我之前注册了账号。

然后,好不容易打开 openai 官网,发现这家伙网站也是坑,token 获取地址隐晦得很,好不容易才找到。

这里前排提供 token 获取地址:https://platform.openai.com/account/api-keys

好不容易生成了 token。心想,配置一下可以用了吧。

想象很美好,结果发现不知道去哪里设置,找配置界面发现没有。于是乎就猜测,可能是系统环境变量。那就设置呗。我在 ~/.zshrc 设置 export SIYUAN_OPENAI_API_KEY=sk-XXX ,重启思源,然而并没有什么卵用。重启系统也不行。后来又设置到 ~/.bashrc ~/.profile 均以失败告终。备注:都是重启了的。

经过反复尝试,发现 Mac 有坑,上面几种方案都不行。具体解决方案请参考干货一节。

吐槽完毕,接下来要上 mac 系统的干货了!亲测可用!

干货

提示:本脚本只针对 Mac!本脚本只针对 Mac!本脚本只针对 Mac!

2022-03-17 更新:支持设置 api 请求代理,请自行去除代理相关注释,代理问题需自行解决。🎉

2022-03-12 更新:已调整脚本,现在支持永久生效。🎉

针对 Mac 设置全局环境变量解决思源笔记 openAI 的 key 不生效问题。我目前探索的可用方法如下:

设置

setenv.sh

#!/bin/sh

# 1.请修改 ENV_VALUE 为你的 api_kry
# 2.前排提示,去除注释,修改 ENV_VALUE_API_PROXY 为你的代理地址,代理请自行解决
# 3.检测方法:打开思源开发者工具->输入命令回车:
# process.env.SIYUAN_OPENAI_API_KEY
# process.env.SIYUAN_OPENAI_API_PROXY

LAUNCH_AGENTS_DIR="${HOME}/Library/LaunchAgents"
PLIST_PATH="${LAUNCH_AGENTS_DIR}/openai.env.plist"

ENV_NAME="SIYUAN_OPENAI_API_KEY"
ENV_VALUE="sk-XXX"

#ENV_NAME_API_PROXY="SIYUAN_OPENAI_API_PROXY"
#ENV_VALUE_API_PROXY="http://127.0.0.1:7890"

mkdir -p "${LAUNCH_AGENTS_DIR}"
echo '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>Label</key><string>openai.env.plist</string><key>ProgramArguments</key><array><string>sh</string><string>-c</string><string>' >"${PLIST_PATH}"
echo "launchctl setenv \"${ENV_NAME}\" \"${ENV_VALUE}\"" >>"${PLIST_PATH}"
#echo "launchctl setenv \"${ENV_NAME_API_PROXY}\" \"${ENV_VALUE_API_PROXY}\"" >>"${PLIST_PATH}"
launchctl setenv "${ENV_NAME}" "${ENV_VALUE}"
#launchctl setenv "${ENV_NAME_API_PROXY}" "${ENV_VALUE_API_PROXY}"
echo '</string></array><key>RunAtLoad</key><true/></dict></plist>' >>"${PLIST_PATH}"

echo 'done.'

取消

unsetenv.sh

#!/bin/sh
LAUNCH_AGENTS_DIR="${HOME}/Library/LaunchAgents"
PLIST_PATH="${LAUNCH_AGENTS_DIR}/openai.env.plist"

ENV_NAME="SIYUAN_OPENAI_API_KEY"
launchctl unsetenv "${ENV_NAME}"
rm -rf "${PLIST_PATH}"
echo "done."

Mac 脚本下载

macenv20230317.zip

如果脚本权限有问题。可以使用

cd env
chmod u+x *.sh
./setenv.sh

附上成功截图

测试是否成功,可以直接思源笔记的 console 里面打印 process.env.SIYUAN_OPENAI_API_KEY 或者 process.env.SIYUAN_OPENAI_API_PROXY

image.png

后记

科普一下 mac 里面环境变量的冷知识。

-- 以下内容来自配置好了之后 chatgpt 自动生成。[手动狗头]

解释一下 Mac 里面的 launchctl setenv 的作用

在 MacOS(以及其他类 UNIX 系统)中,launchctl 是一个守护进程,用于管理系统启动时要运行的进程和它们的配置。setenv 是指令之一,用于在 launchctl 环境中设置环境变量。

当在 launchctl 环境中设置环境变量时,它们将与系统启动时默认的环境变量一起设置,以供在后台运行的进程使用。这可以在安装或运行某些应用程序时很有用,因为它可以确保您的应用程序具有所需的所有环境变量。

例如,如果您的 Node.js 应用程序依赖于环境变量 NODE_ENV,您可以使用以下命令将其设置为生产环境:

launchctl setenv NODE_ENV production

这将在 launchctl 环境中设置 NODE_ENV 变量,以便后台进程可以使用它。在设置后,无需重新启动计算机即可访问该变量。

总之,使用 launchctl setenv 命令可以在 MacOS 中设置环境变量,以便在后台运行进程时使用。

launchctl setev 与 source 和 export 设置环境变量的区别

虽然 launchctl setenv、source 和 export 都可以设置环境变量,但它们的具体作用和应用场景有所不同。

  1. launchctl setenv 是用于在 launchctl 环境中设置环境变量,主要用于设置系统启动时要运行的进程的环境变量。这些变量会在后台运行的进程中自动生效。需要注意的是,使用该命令设置的环境变量仅适用于在 launchctl 环境中运行的进程,而无法在普通终端中生效。
  2. source 是用于读取脚本文件中的环境变量并将其导入当前 shell 环境中。主要用于在当前终端中启动应用程序或运行脚本时设置环境变量。当需要设置一些临时的环境变量,在终端中单独运行某些命令时带上环境变量等情况下,可以使用该命令。
  3. export 用于将变量从当前 shell 导出到其子进程的环境变量中,以便于它们能正常使用。该命令不会影响到其他终端会话或 shell 环境,只会影响子进程。例如,当您需要将某个环境变量导入到脚本中并在该脚本内使用时,可以使用该命令。

总之,这些命令都是用于设置环境变量,但其应用场景和作用范围各不相同,需要根据实际情况进行具体选择。

launchctl 在 mac 中是什么?作用是啥?

在 macOS 中,launchctl 是一个守护进程和命令行工具,用于管理服务和进程,可以在系统启动时启动并使它们一直运行。它的作用主要有以下几个方面:

  1. 管理系统服务:使用 launchctl 可以管理系统服务,例如设置自启动服务、启动或停止服务等。通过配置 .plist 文件,可以指定需要在系统启动时自动运行的程序或服务。
  2. 监视运行中的进程:使用 launchctl 可以监视正在运行的进程的状态,例如它的 PID、资源占用等信息。同时,它也可以在进程异常终止时重新启动它。
  3. 管理环境变量:使用 launchctl setenv 命令可以在 launchctl 环境中设置环境变量,这些变量可以被在 launchctl 环境中运行的后台进程自动使用。这可以在安装或运行某些应用程序时很有用,因为它可以确保应用程序具有所需的所有环境变量。

总之,launchctl 提供了一种方便的方式来管理 macOS 系统服务和进程,并确保它们一直在运行。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    23025 引用 • 92621 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • LarryGuan

    请教一下,key 在控制台,都可以的都。提示这个内核问题,有遇到吗?image.png

    1 回复
  • 其他回帖
  • terwergreen

    感谢提醒,已改正。另外,感谢提供永久生效的方案。

    已调整脚本,现在支持永久生效。🎉

    直接下载文中最新脚本即可。或者手动保存命令为 .sh ,运行命令也可以。

    3 操作
    terwergreen 在 2023-03-12 13:23:03 更新了该回帖
    terwergreen 在 2023-03-12 13:22:37 更新了该回帖
    terwergreen 在 2023-03-12 13:21:49 更新了该回帖
  • zhzh

    在 zsh 里 export SIYUAN_OPENAI_API_KEY=sk-xxx 后,需要 zsh 里启动 siyuan,即

    • cd /Applications/
    • open SiYuan.app

    如果需要设置代理,可以在 open SiYuan.app 之前 export http_proxy=xxx

    不过我的试下来还是连不上。。不知道是不是我账号的 api 被封了。。

  • ChienYY

    感谢!可以了 !谢谢大佬。

    p.s. 大佬你 zip 文件里的 API_key 暴露了,替换下吧~

    1 回复
  • 查看全部回帖