ai 就会开始自行探索思源笔记内容了,得益于思源开放的 api 以及内置了 sqlite 来做笔记索引,所以甚至 ai 是能自行构造复杂 sql 来精准查询我们所想要的内容。(感谢
Frostime 提供的
sql 小助手提示词)
三分钟上手
安装在对应的支持 skill 功能的 ai 工具 skills 目录下,这里以 claude code skills 为例:
bash
# 1. 克隆
cd ~/.claude/skills
git clone https://github.com/2234839/siyuan-notes-skill.git siyuan-notes
# 3. 配置
cp .env.example .env
# 编辑.env,填入思源的API Token
安装在对应的支持 skill 功能的 ai 工具 skills 目录下,这里以 claude code skills 为例:
安装在对应的支持 skill 功能的 ai 工具 skills 目录下,这里以 claude code skills 为例:
常见问题
Q: 支持哪些思源版本?
A: 所有提供API的版本
Q: 移动端能用吗?
A: 只要能访问思源API接口就行
使用示例
直接对Claude code说:查询我的笔记总结我这段时间除了工作主要探索了什么
ai 就会开始自行探索思源笔记内容了,得益于思源开放的 api 以及内置了 sqlite 来做笔记索引,所以甚至 ai 是能自行构造复杂 sql 来精准查询我们所想要的内容。(感谢
Frostime 提供的
sql 小助手提示词)
直接对Claude code说:查询我的笔记总结我这段时间除了工作主要探索了什么
bash
# 1. 克隆
cd ~/.claude/skills
git clone https://github.com/2234839/siyuan-notes-skill.git siyuan-notes
# 3. 配置
cp .env.example .env
# 编辑.env,填入思源的API Token
Q: 支持哪些思源版本?
A: 所有提供API的版本
Q: 移动端能用吗?
A: 只要能访问思源API接口就行
最近实践
note amd 利用 npu 的办法:https://ryzenai.docs.amd.com/en/latest/inst.html
https://lemonade-server.ai/ https://github.com/amd/gaia?tab=readme-ov-file
主要还是 lemonade-server ,gaia 也是连接的 gaia (直接安装 gaia 会自动安装 lemonade-server
powertoys 用于窗口置顶(例如操作浏览器和编码无需切换窗口(置顶vscode)),还有许多的实用功能
我的订阅列表
崮生精选 : 如果你都看到这里了,不妨订阅一下我的精选博客吧
一些我关注的信息列表or文章
技术
ean1.cn
export CONFIG_FILE="config-ean1.cn.ts"
export DATABASE_URL="file://root/app/tuchuang/prisma/dev-ean1.cn.db?connection_limit=1&socket_timeout=10"
pm2 start "node --enable-source-maps ./dist/index.cjs" --name "TsFullStack"
工具收藏
inngest 可扩展、低延迟、事件驱动的持久执行平台。 支持部署到无服务器、服务器或边缘的功能。
主要应用场景:嵌入各个网站,让原有网站在简单改造后即可拥有ai对话以及 agent 自动化操作能力,例如表单填写,数据筛选提取。网站只需声明一些tools,以及配置一些提示词。
effect 速查手册
可以使用 Context.empty().pipe(Context.add(...),...) 这样的方式组合多个依赖,然后尽量将依赖拆分的更细一些,这样方便执行小段程序而不用注入大而全的依赖
依赖处理
每个具体的依赖被称为 service ,service 的集合就是 context 。
然后每个 service 都不应该直接依赖其他 service ,可以通过 Effect.Service 来声明 service 依赖(这里很有意思,相当于也是一种依赖倒置,本来 service 的架构已经是依赖倒置的典范了,所以可以称之为二阶依赖倒置?
然后一个 provide 了service 值的 effect 对象一般加 live 后缀。
program.pipe(Effect.provide(OpenAIConfigService.Default)); 可以通过这样的形式来为 program 提供对应的依赖注入
然后一个 provide 了service 值的 effect 对象一般加 live 后缀。
然后每个 service 都不应该直接依赖其他 service ,可以通过 Effect.Service 来声明 service 依赖(这里很有意思,相当于也是一种依赖倒置,本来 service 的架构已经是依赖倒置的典范了,所以可以称之为二阶依赖倒置?
node 版本管理
bash
# 第一次使用 fnm 时需要安装
winget install Schniz.fnm
## 或者windows 使用 scoop 安装
scoop install fnm
# configure fnm environment
fnm env --use-on-cd | Out-String | Invoke-Expression
## 之后直接使用对应版本就行
fnm use v24.0.1
# 修改默认使用什么版本
fnm default v24.0.1
# 查看node版本是否生效
node -v
# 启用 pnpm
corepack enable pnpm
# 方法1:全局启用脚本(推荐)
pnpm config set enable-pre-post-scripts true
# 查看pnpm 版本是否生效
pnpm -v
配置 powershell env https://github.com/Schniz/fnm?tab=readme-ov-file#powershell
配置 powershell env https://github.com/Schniz/fnm?tab=readme-ov-file#powershell
program.pipe(Effect.provide(OpenAIConfigService.Default)); 可以通过这样的形式来为 program 提供对应的依赖注入
背景
随着 vite-node 宣布完成使命并推荐使用 Vite 原生的 Environment API,以及 tsx 等传统方案在 Vite 项目中的局限性,我们探索并实现了一种基于 Vite Environment API 的 TypeScript 运行时方案。
随着 vite-node 宣布完成使命并推荐使用 Vite 原生的 Environment API,以及 tsx 等传统方案在 Vite 项目中的局限性,我们探索并实现了一种基于 Vite Environment API 的 TypeScript 运行时方案。
核心思路
利用 Vite 的 ssrLoadModule API,创建临时的 Vite 服务器实例来即时编译和执行 TypeScript 文件,无需预先编译步骤。
利用 Vite 的 ssrLoadModule API,创建临时的 Vite 服务器实例来即时编译和执行 TypeScript 文件,无需预先编译步骤。
实现方案
核心代码
javascript
#!/usr/bin/env node
import { createServer } from 'vite'
/**
* 使用 Vite 运行 TypeScript 文件
*/
async function runTypeScriptFile(filePath) {
// 创建 Vite 服务器
const server = await createServer({
configFile: false, // 不使用配置文件,简化设置
server: { hmr: false }, // 禁用 HMR
optimizeDeps: {
noDiscovery: true,
include: undefined
}, // 禁用依赖优化
clearScreen: false,
logLevel: 'silent', // 静默模式
})
try {
// 使用 Vite 的 SSR 功能加载并执行模块
await server.ssrLoadModule(filePath)
} finally {
// 清理资源
await server.close()
}
}
/**
* CLI 主函数
*/
async function main() {
const args = process.argv.slice(2)
if (args.length === 0) {
process.exit(1)
}
const filePath = args[0]
try {
await runTypeScriptFile(filePath)
} catch (error) {
process.exit(1)
}
}
// 运行主函数
main().catch(() => {})
javascript
#!/usr/bin/env node
import { createServer } from 'vite'
/**
* 使用 Vite 运行 TypeScript 文件
*/
async function runTypeScriptFile(filePath) {
// 创建 Vite 服务器
const server = await createServer({
configFile: false, // 不使用配置文件,简化设置
server: { hmr: false }, // 禁用 HMR
optimizeDeps: {
noDiscovery: true,
include: undefined
}, // 禁用依赖优化
clearScreen: false,
logLevel: 'silent', // 静默模式
})
try {
// 使用 Vite 的 SSR 功能加载并执行模块
await server.ssrLoadModule(filePath)
} finally {
// 清理资源
await server.close()
}
}
/**
* CLI 主函数
*/
async function main() {
const args = process.argv.slice(2)
if (args.length === 0) {
process.exit(1)
}
const filePath = args[0]
try {
await runTypeScriptFile(filePath)
} catch (error) {
process.exit(1)
}
}
// 运行主函数
main().catch(() => {})
使用方式
1. 作为项目脚本
bash
# 保存为 run-ts.js
node run-ts.js src/example.ts
# 或在 package.json 中添加命令
{
"scripts": {
"run": "node run-ts.js"
}
}
bash
# 保存为 run-ts.js
node run-ts.js src/example.ts
# 或在 package.json 中添加命令
{
"scripts": {
"run": "node run-ts.js"
}
}
2. 命令行使用
bash
pnpm run run src/example.ts
bash
pnpm run run src/example.ts
技术优势
与现有方案对比
| 特性 | tsx | vite-node | Vite Runner (我们的方案) |
| 安装 | npm install tsx | npm install vite-node | 内置 Vite |
| 配置 | 简单 | 简单 | 极简 |
| 性能 | 良好 | 良好 | 优秀 |
| 插件生态 | 有限 | Vite 插件 | 完整 Vite 生态 |
| 未来支持 | 持续维护 | 已废弃 | 官方推荐方向 |
| 项目一致性 | 独立工具 | 独立工具 | 与 Vite 项目完全一致 |
| 特性 | tsx | vite-node | Vite Runner (我们的方案) |
| 安装 | npm install tsx | npm install vite-node | 内置 Vite |
| 配置 | 简单 | 简单 | 极简 |
| 性能 | 良好 | 良好 | 优秀 |
| 插件生态 | 有限 | Vite 插件 | 完整 Vite 生态 |
| 未来支持 | 持续维护 | 已废弃 | 官方推荐方向 |
| 项目一致性 | 独立工具 | 独立工具 | 与 Vite 项目完全一致 |
核心特性
✅ 零配置: 无需额外配置即可运行
✅ 类型安全: 完整的 TypeScript 支持
✅ ESM 支持: 现代 ES 模块语法
✅ 异步支持: 支持 async/await
✅ 依赖解析: 自动解析 node_modules 依赖
✅ 静默执行: 无多余日志输出
✅ Vite 生态: 完全兼容 Vite 插件和配置
✅ 零配置: 无需额外配置即可运行
✅ 类型安全: 完整的 TypeScript 支持
✅ ESM 支持: 现代 ES 模块语法
✅ 异步支持: 支持 async/await
✅ 依赖解析: 自动解析 node_modules 依赖
✅ 静默执行: 无多余日志输出
✅ Vite 生态: 完全兼容 Vite 插件和配置
适用场景
最佳使用场景
复杂插件需求: 需要 Vue、React、CSS 预处理器等支持
复杂插件需求: 需要 Vue、React、CSS 预处理器等支持