环境配置:新机配置
用于新mac的环境配置clashhomebrewgitssh 生产密钥 1ssh-keygen -t ed25519 -C "your_email@example.com" 全部默认回车即可 复制公钥 1cat ~/.ssh/id_ed25519.pub # 如果是 rsa 密钥,执行 cat ~/.ssh/id_rsa.pub 添加到 Github 测试 1ssh -T git@github.com 首次连接要输出 yes 输出 “Hi your_github_username! You’ve successfully authenticated, but GitHub does not provide shell access.”,说明配置成功 git gpg见个人博客 nvm, npm, pnpmgopython, minicondaoh-my-zsh, p10k
环境配置:Github GPG签名
1. 安装 GPG 工具(适配 Apple 芯片)12345678910111213141516# 安装核心工具:gnupg(GPG主程序)+ pinentry-mac(Mac友好的密码输入弹窗)brew install gnupg pinentry-mac# 创建GPG配置目录(权限必须700,否则GPG会报错)mkdir -m 700 -p ~/.gnupg# 配置pinentry-mac为默认密码输入程序(Apple Silicon路径固定为/opt/homebrew)echo "pinentry-program /opt/homebrew/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf# 配置环境变量(确保GPG Agent正常工作,zsh是Mac默认终端)echo 'export GPG_TTY=$(tty)' >> ~/.zshrcecho 'gpgconf --launch gpg-agent' >> ~/.zshrcsource...
服务器:自定义域名配置CNAME解析
配置 CNAME 的通用步骤这篇笔记整理了任何云服务场景下(CDN、OSS、云服务器等)配置 CNAME 的通用流程。核心分为四部分: 前置准备 获取目标 CNAME 值 在 DNS 解析中添加 CNAME 记录 验证是否生效 以下的例子假设你已经注册了 example.com 域名, 并想要通过配置 CNAME, 来自定义域名 wwww.example.com 提供的服务 一、前置准备:确认核心前提 域名所有权确保你拥有需要配置 CNAME 的域名(如 www.example.com)的管理权限,能够登录到域名注册商或云解析控制台,修改 DNS 记录。 清理冲突记录CNAME 记录与同名的 A / AAAA / MX 记录互斥,不能共存。在添加 CNAME 之前,先删除该主机记录下已经存在的: A 记录 AAAA 记录 MX 记录 二、获取 CNAME从对应服务提供商处获取需要指向的 CNAME 地址,例如: CDN 提供的调度域名 OSS/对象存储的专属访问域名 第三方服务(如邮件、监控、验证服务)提供的别名域名 三、配置 DN...
服务器:Ollama本地部署大模型与公网服务器内网穿透
概览Windows 机使用 ollama 本地部署 qwen,云服务器使用内网穿透与 Windows 机连接,实现其他机器(如 Mac)远程调用 Windows 运行的大模型服务。 ollama 本地部署大模型安装与验证 在 ollama 官网 下载对应操作系统版本 本地 cmd 输入 ollama,检测是否安装成功 1ollama 拉取与运行模型 拉取模型到本地,以 qwen2.5:3b-instruct 为例: 1ollama pull qwen2.5:3b-instruct 拉取完成后,运行模型,检查模型是否正常输出,检查本地 GPU 是否有资源占用(防止模型使用 CPU 运行,降低运行效率): 1ollama run qwen2.5:3b-instruct 测试 直接使用命令行交互式测试,或使用 curl 命令调用 API 测试: 1234curl http://localhost:11434/api/generate -d '{ "model": "qwen2.5:3b-instruct", ...
服务器:流量端口转发与代理
概览实现 SSH 免密登录,并让云服务器流量转发到本地端口,通过代理再返回。 免密登录打开 ~/.ssh/config,写入: 1234Host <server ip> HostName <server ip> User root # 默认为 root 用户 Port 22 # SSH 默认端口 打开 Cursor 的 Remote Explorer,会看到多了 <server ip> 这个选项。 现在配置免密 本机生成密钥 1ssh-keygen -t ed25519 # 随便取一个文件名 公钥写入服务器 1ssh-copy-id ~/.ssh/id_ed25519.pub <user>@<server-ip> 验证免密登录 打开 Cursor 的 Remote Explorer,直接点击配置的 <server ip>;也可以使用命令行: 1ssh <user>@<server-ip> 端口转发与代理原理建...
FastGPT实习:系统插件项目构建与插件生态贡献
系统插件项目构建通过三个机制实现插件项目快速构建 1. 零配置机制两个核心机制: 约定优于配置 自动发现机制 实现细节: 系统启动: 系统启动时调用initTools, 包含initBuiltInTools和refreshUploadedTools两部分 自动发现: 判断是开发环境还是生产环境, 扫描对应的路径目录, 得到工具目录数组, 对于工具目录数组的每一个元素(工具目录), 调用LoadToolsByFilename, Filename即目录名称 动态加载: 动态导入插件, 识别是工具还是工具集, 约定默认toolId和icon, 加载工具(或副工具集下的所有子工具) 自动注册: 将加载的工具添加到全局插件列表, 实现插件自动可用, 无需手动配置 2. 脚本一键生成模板 使用nodejs全局变量: __dirname, process 提前创建好工具和工具集模板 copyTemplate函数: 如果是文件夹则递归调用, 如果是文件则复制, 这样就把模板变成能实际开发的代码结构 3. 插件热插拔系统插件分为内置插件和用户自定义插件两部分, 插件热插拔针对的是用户自定...
FastGPT实习:工作流运行机制与调试模式
工作流基本数据结构 节点 Node: 工作流的基本执行单元,包含输入、输出、执行逻辑 边 Edge: 连接节点的有向边,三种状态: active: 激活状态,表示数据流经此边 skipped: 跳过状态,表示此边被跳过 waiting: 等待状态,表示等待上游节点执行完成 连接点 Handle: 节点上的输入输出连接点,一个节点可能有多个handle 活跃节点队列 activeRunQueue: 存储准备执行的节点ID集合 跳过节点队列 skipNodeQueue: 存储需要跳过的节点及其子节点映射 调试数据结构: debugNextStepRunNodes: 调试模式下存储下一步要执行的节点 debugNodeResponses: 调试模式下记录每个节点的执行结果 补充概念入口节点 (Entry Node) 工作流的起始执行点 通过 isEntry 属性标识 调试模式下,每次步骤的入口节点由前端动态设置 交互节点 (Interactive Node) (代码逻辑上:判断节点时单独判断,处理交互节点) 需要用户输入的节点(如用户选择、表单输入等) 执行后会暂停工作流,...
FastGPT实习:AI流式响应全链路分析
需求背景在AI应用中,实现向AI模型请求提问并返回流式响应,最终呈现打字机输出效果。这种交互方式能够提升用户体验,让AI的回答更加自然流畅。 技术架构分析整体流程概览整个流式响应系统涉及6个关键环节: 前端发起SSE连接 后端接收请求并调用AI模型 AI模型流式响应给后端 后端设置SSE响应头并流式发送 前端流式接收数据 渲染组件实现打字机效果 详细技术实现1. 前端发起SSE连接前端使用Server-Sent Events技术建立与后端的持久连接,为后续的流式数据传输做准备。 2. 后端接收请求并调用AI模型后端接收前端的请求后,调用AI模型API获取响应。 3. AI模型流式响应处理核心机制:异步迭代器 AI模型返回一个异步迭代器给后端,而不是完整的响应数据。异步迭代器就像一个数据管道,让后端可以通过for await循环实时获取AI生成的数据。 数据内容包含: 元数据信息 标签数据 推理内容 回答内容 处理流程: 持续接收数据直到用户手动退出或AI模型生成完毕 数据分批次到达,需要特殊处理机制 4. 函数工厂模式实现状态管理设计原理:由于流式处理中数据分批次到达...
FastGPT实习:双Token验证实现CSRF防御
双Token验证实现CSRF防御需求分析:在 FastGPT 平台发现安全漏洞,发送markdown渲染的img标签,如果src属性为”删除api”的路径(如:/api/core/dataset/delete),则会将用户的知识库自动删除 通过实现双Token验证机制,有效防御CSRF(跨站请求伪造)攻击 保护用户数据安全,防止恶意站点利用用户身份执行敏感操作 问题分析漏洞描述发送markdown渲染的img标签,如果src属性为”删除api”的路径(如:/api/core/dataset/delete),则会将用户的知识库自动删除 问题本质由于前端请求自动携带浏览器cookie作为请求头,后端校验通过后,执行图片中的路径,造成CSRF恶意攻击 攻击原理 用户已登录平台,浏览器中存储cookie信息 恶意站点的某些表单、图片等请求指向平台的敏感接口 当用户被诱导访问后,浏览器会在请求中自动添加cookie 仅凭Cookie做鉴权的服务端误以为是用户本人操作,执行敏感动作 解决方案技术方案:双Token验证实现步骤 前端Token获取: 前端发送请求前,检测本地存储中没有c...
FastGPT实习:从渲染和请求的时序中学习React设计哲学
从渲染和请求的时序中学习React设计哲学需求分析:在 FastGPT 平台开发过程中,遇到组件渲染与异步请求时序问题 通过解决组件渲染空数组的问题,深入理解 React 的异步渲染机制和设计哲学 学习如何优雅地处理异步数据加载与组件渲染的协调 问题描述打开一个modal时, 网络请求已经获取到了数据, 但是modal没有渲染出数据 核心问题组件渲染和API请求是异步进行的,导致组件优先渲染了变量的初值(空数组) 当异步请求获取到数据,填充到数组中时,组件已经渲染完毕了 最终结果就是渲染了空数组 问题影响 用户看到空白或加载状态 数据更新后界面不会自动刷新 用户体验不佳 解决方案技术方案使用 useMemo 来缓存数组,并将请求的数据变量作为依赖项 请求成功,依赖项变化,更新数组,进而重新渲染组件 解决渲染空数组的问题 实现原理 组件初始渲染时显示空数组 异步请求开始执行 请求完成后,依赖项更新 useMemo 检测到依赖变化,重新计算 组件重新渲染,显示实际数据 方案优点性能优化不会因为某一个数组在加载中,而阻塞渲染,让整个组件树等待,提升使用体验 可以让多个数据源同...