掌控 LLM 输出:API 层的干预手段

你买不到模型的权重,但你可以在 API 层实施"外科手术式"控制。本文用 OpenAI Go SDK 演示每种干预手段在真实业务中的完整用法。 前置准备 go get github.com/openai/openai-go // client.go — 全文共用的客户端 package main import ( "github.com/openai/openai-go" "github.com/openai/openai-go/option" ) func newClient() *openai.Client { return openai.NewClient( option.WithAPIKey("sk-..."), // 或读取 os.Getenv("OPENAI_API_KEY") ) } 1. System Message — 给模型装"人格芯片" 原理 System Message 是发给模型的"宪法",在对话开始前设定角色、禁忌和回答格式。它不会被用户消息覆盖(模型会优先遵从)。 业务场景:客服机器人只允许回答产品相关问题 package main import ( "context" "fmt" "github.com/openai/openai-go" ) func customerServiceBot(userQuestion string) (string, error) { client := newClient() resp, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{ Model: openai.F(openai.ChatModelGPT4o), Messages: openai....

Bun ORM 全面指南:Go 语言高性能数据库操作利器

(本文内容基于 Bun ORM 官方文档 翻译整理) 1. 简介:什么是 Bun ORM? Bun 是一个 SQL 优先的 Go 语言 ORM(对象关系映射)框架,支持 PostgreSQL、MySQL、MSSQL 和 SQLite。它旨在提供一种简单高效的方式来操作数据库,同时利用 Go 的类型安全特性并减少样板代码。 核心特性 基于标准库构建:构建在 Go 标准 database/sql 包之上 类型安全:提供类型安全的查询构建器,性能卓越 复杂关系支持:支持复杂的关系和连接操作 迁移支持:提供迁移和架构管理功能 强大的扫描能力:全面的数据扫描功能 钩子和中间件:支持钩子和中间件 生产就绪:经过广泛测试,可用于生产环境 为什么选择 Bun? Bun 通过 SQL 优先 的理念区别于其他 Go ORM,不试图对开发者隐藏 SQL。这种方法具有以下优势: 可预测的查询:你确切知道生成的 SQL 是什么 高性能:对原始 SQL 的开销最小 渐进式采用:易于集成到现有代码库 灵活性:需要时可降级到原始 SQL 类型安全:大多数操作的编译时检查 2. 安装与配置 安装 Bun 要安装 Bun 和所需的数据库驱动: # 核心 Bun 包 go get github.com/uptrace/bun@latest # 数据库驱动(选择一个或多个) go get github....

在Dokploy中通过Cloudflare Tunnel发布应用

通过 Cloudflare Tunnel,你可以不需要公网 IP、不需要在路由器/防火墙开启 80 或 443 端口,就能安全地将 Dokploy 上的应用发布到互联网。 核心流程图 用户 -> Cloudflare 域名 (HTTPS) -> Cloudflare 隧道 -> Docker 内部网络 (HTTP) -> 你的应用容器 第一步:在 Cloudflare 创建隧道 (Tunnel) 登录 Cloudflare Zero Trust。 进入 Networks -> Tunnels -> Create a Tunnel。 选择 Cloudflared,起个名字(如 my-server)。 在安装页面,找到 Connector Token(那一长串字符串),复制备用。 第二步:在 Dokploy 中部署隧道服务 在 Dokploy 中新建一个 Compose 服务(建议命名为 cloudflare-tunnel),使用以下配置: services: cloudflared: image: 'docker.1ms.run/cloudflare/cloudflared:latest' environment: - 'TUNNEL_TOKEN=你的TOKEN' # 建议在 Environment 变量中设置 networks: - dokploy-network # 必须加入此网络 restart: unless-stopped command: ["tunnel", "--no-autoupdate", "run"] networks: dokploy-network: external: true 第三步:部署应用 (以 Excalidraw 为例) 部署应用时,务必确保它与隧道在同一个 Docker 网络中,以便隧道能通过“服务名”找到它。...

Git Filer Repo快速指南

本文使用claude code编写,旨在提供一个详尽的 git-filter-repo 使用指南,涵盖安装、基础概念、路径和内容过滤、实用场景、高级功能、安全机制、完整工作流示例、故障排除、性能优化、常见错误与陷阱、与其他工具配合以及最佳实践总结等方面的内容。 什么是 git-filter-repo? git-filter-repo 是一个快速、功能强大的 Git 历史重写工具,是 git filter-branch 的官方推荐替代品。它由 Git 项目贡献者 Elijah Newren 开发,速度比 filter-branch 快 10-100 倍以上。 核心原理: git fast-export <options> | filter | git fast-import <options> git-filter-repo 同时扮演管道编排者和中间过滤器的角色,基于 fast-export 和 fast-import 实现高效的历史重写。 为什么选择 git-filter-repo? vs git filter-branch 特性 git filter-branch git-filter-repo 速度 极慢(大型仓库几乎不可用) 快 10-100 倍 安全性 易出错,可能静默损坏数据 内置多重安全检查 易用性 复杂的 shell 语法 简洁的命令行参数 跨平台 依赖 shell,跨平台问题多 纯 Python,跨平台一致 官方态度 已废弃,不推荐使用 Git 官方推荐 Git 官方警告: filter-branch 的问题无法向后兼容地修复,强烈建议停止使用。...

Calude Code编写的Ent ORM 完整指南

本文由claude code生成。作为备忘录和分享,欢迎指正和补充。 一、Ent简介 Ent是一个简单但功能强大的实体框架,用于Go语言,使构建和维护具有大型数据模型的应用程序变得容易。 Ent是由Meta(Facebook)开源团队构建的ORM框架,提供了一个API,用于将任何数据库模式建模为Go对象。 核心特性 Ent的主要特性包括: Schema As Code:将任何数据库模式建模为Go对象 轻松遍历任何图结构:运行查询、聚合并轻松遍历任何图结构 静态类型和显式API:100%静态类型和显式API,通过代码生成实现 多存储驱动支持:支持MySQL、PostgreSQL、SQLite和Gremlin 易于扩展:使用Go模板简单扩展和自定义 Ent是一个相当新的ORM,使用代码优先的方法,在Go代码中定义模式。Ent之所以流行,是因为它能够优雅地处理复杂的数据模型和关系。 二、快速开始 2.1 安装Ent # 初始化Go模块 go mod init myapp # 安装ent CLI工具 go install entgo.io/ent/cmd/ent@latest # 或者使用go get go get entgo.io/ent/cmd/ent 2.2 创建第一个Schema # 创建User实体 ent new User 这会在 ent/schema/ 目录下生成一个基础的schema文件: package schema import ( "entgo.io/ent" "entgo.io/ent/schema/field" ) // User holds the schema definition for the User entity. type User struct { ent.Schema } // Fields of the User....

在Go里面实现Google和Apple OAuth登录

本文由claude code编写,仅供参考。 在现代应用开发中,提供第三方登录已经成为标配功能。本文将详细介绍如何在Go语言中实现Google和Apple的OAuth登录,以及如何处理iOS和Android的原生登录。 一、OAuth 2.0 基础概念 OAuth 2.0是一个授权框架,允许应用在用户授权的情况下访问用户在第三方服务上的资源,而无需获取用户的密码。主要流程包括: 授权请求:引导用户到OAuth提供商的授权页面 授权确认:用户同意授权 获取授权码:重定向回应用并携带授权码 交换令牌:使用授权码换取访问令牌 访问资源:使用访问令牌获取用户信息 二、Google OAuth登录实现 2.1 前期准备 首先需要在Google Cloud Console创建项目并配置OAuth 2.0凭据: 访问 Google Cloud Console 创建新项目或选择现有项目 启用Google+ API或Google Identity服务 创建OAuth 2.0客户端ID(Web应用、iOS、Android分别创建) 配置授权重定向URI 2.2 安装依赖 go get golang.org/x/oauth2 go get golang.org/x/oauth2/google go get google.golang.org/api/oauth2/v2 2.3 Web端Google登录实现 package main import ( "context" "encoding/json" "fmt" "log" "net/http" "os" "golang.org/x/oauth2" "golang.org/x/oauth2/google" oauth2api "google.golang.org/api/oauth2/v2" "google.golang.org/api/option" ) var googleOauthConfig *oauth2.Config func init() { googleOauthConfig = &oauth2....

Homebrew Tap 仓库简明指南

本文为Claude整理编写。 什么是 Homebrew Tap Homebrew Tap 是第三方的 Homebrew 软件包仓库。通过创建自己的 Tap,你可以发布和分发自己的软件包,而不需要将它们提交到官方的 Homebrew 仓库。 Tap 的命名规则: homebrew-<tapname> 用户使用时的格式:username/tapname/软件名 Formula vs Casks:核心概念 这是 Homebrew 中最重要的区别,理解这一点对于正确组织你的 Tap 至关重要。 Formula(公式) 用途: 安装命令行工具、从源代码编译的软件、开发库和服务 特点: 可以从源代码编译或安装预编译二进制 安装到 /usr/local/bin(Intel)或 /opt/homebrew/bin(Apple Silicon) 在终端中运行 文件放在 Formula/ 目录 安装命令: brew install git brew install python brew install myapp 适用场景: ✅ 命令行工具(git, wget, curl) ✅ 编程语言(python, node, ruby) ✅ 开发库(openssl, libpq) ✅ 后台服务(redis, nginx, postgresql) ✅ 系统工具和实用程序 Casks(桶) 用途: 安装 macOS 原生应用程序、字体、驱动等...

Hertz使用笔记

Hertz的优缺点 优点 中文社区维护 稳定,字节产品,有相关的开源项目参考,比如coze和coze studio hz的模板支持,使得代码生成更加灵活 缺点 工程体验上,不如go-kratos等项目。比如不能很好得支持buf等第三方生态。代码生成的使用场景,如多service模式下体验不好。 Template 模板 之所以将模板放在第一,是因为Hertz里面模板是过不去的坎。😄官方的一个mvc的template 或者 cwgo内置的模板 自动生成路由注册 新建一个template/package.yaml layouts: # 覆盖默认 router.go 模板 # 关键:将 Register 函数名改为包含服务名的唯一名称 - path: router.go delims: ['{{', '}}'] body: |- // Code generated by hertz generator. DO NOT EDIT. package {{$.PackageName}} import ( "github.com/cloudwego/hertz/pkg/app/server" {{- range $k, $v := .HandlerPackages}} {{$k}} "{{$v}}" {{- end}} ) /* This file will register all the routes of the services in the master idl....

Omarchy 使用笔记

omarchy是DHH发布的一款Arch内核的Linux发行版。最近安装了下,稍作记录 特色功能 命令行 可以使用 eza替换ls 快捷键 导航快捷键 Super + Space:应用启动器 Super + Alt + Space:Omarchy 控制菜单 Super + Escape:锁定、暂停、重启、关机 Super + Ctrl + L:锁定计算机 Super + W:关闭窗口 Ctrl + Alt + Del:关闭所有窗口 Super + T:切换窗口的平铺/浮动模式 Super + O:切换窗口为粘性浮动模式 Super + F:全屏显示 Super + Alt + F:全宽度显示 工作区快捷键 Super + 1/2/3/4:跳转到指定工作区 Super + Tab:跳转到下一个工作区 Super + Shift + Tab:跳转到上一个工作区 Super + Ctrl + Tab:跳转到之前的工作区 Super + Shift + 1/2/3/4:移动窗口到指定工作区 Super + Shift + Alt + 方向键:将工作区移动到指定显示器 窗口管理快捷键 Super + 方向键:将焦点移动到指定方向的窗口 Super + Shift + 方向键:与指定方向的窗口交换位置 Super + Equal:向左扩展窗口 Super + Minus:向右扩展窗口 Super + Shift + Equal:向下扩展窗口 Super + Shift + Minus:向上扩展窗口 Super + G:切换窗口分组 Super + Alt + G:将窗口移出分组 Super + Alt + Tab:在分组中的窗口间循环切换 Super + Alt + 1/2/3/4:跳转到分组中的指定窗口 Super + Alt + 方向键:将窗口移动到指定方向的分组中 Super + Ctrl + 方向键:在平铺分组中的窗口间移动 Super + S:显示便签工作区覆盖层 Super + Alt + S:将窗口移动到便签工作区 系统控制快捷键 Super + Ctrl + A:音频控制(wiremix) Super + Ctrl + B:蓝牙控制(bluetui) Super + Ctrl + W:WiFi 控制(impala) Super + Ctrl + S:共享菜单(通过 LocalSend) Super + Ctrl + T:活动监视器(btop) 应用启动快捷键 Super + Return:终端 Super + Shift + B:浏览器 Super + Shift + Alt + B:浏览器(隐私/无痕模式) Super + Shift + F:文件管理器 Super + Shift + M:音乐(Spotify) Super + Shift + /:密码管理器(1password) Super + Shift + N:Neovim Super + Shift + C:日历(HEY) Super + Shift + E:邮件(HEY) Super + Shift + A:AI(ChatGPT) Super + Shift + G:消息(Signal) Super + Shift + Alt + G:消息(WhatsApp) Super + Shift + Ctrl + G:消息(Google) Super + Shift + D:Docker(LazyDocker) Super + Shift + O:Obsidian Super + Shift + X:X 通用剪贴板快捷键(统一系统) Super + C:复制 Super + X:剪切(终端中不可用) Super + V:粘贴 Super + Ctrl + V:剪贴板管理器 注意:在 Linux 上,通常需要在终端中使用 Ctrl + Shift + C/V 进行复制粘贴,而在其他地方使用 Ctrl + C/V。Omarchy 的统一剪贴板快捷键在所有地方都有效(文件管理器除外)。...

Arch NVIDIA 驱动故障排查与修复指南

本文基于warp Terminal的修复操作使用deepseek进行复盘 问题描述 在EndeavourOS系统更新后,显示器因NVIDIA驱动问题停止工作,主要症状如下: nvidia-smi 命令报错: NVIDIA-SMI 失败:无法与NVIDIA驱动通信 检测不到显示设备: xrandr --listproviders 提供方数量:0 内核模块缺失: modprobe: 致命错误:在/lib/modules/6.16.6-arch1-1中找不到nvidia模块 问题根源 版本不匹配 nvidia=580.82.07-2 与 nvidia-utils=580.82.07-1 版本不一致 内核兼容性问题 预编译的nvidia驱动不支持新内核(6.16.6-arch1-1) 驱动类型限制 标准nvidia软件包无法自动重建内核模块 完整解决方案 1. 排除问题包进行系统更新 paru -Syyu --ignore nvidia,nvidia-utils,nvidia-settings --noconfirm 2. 卸载问题驱动并安装DKMS版本 paru -R nvidia --noconfirm # 移除问题驱动包 paru -S nvidia-dkms --noconfirm # 安装DKMS版本 3. 加载NVIDIA模块并验证 sudo modprobe nvidia # 强制加载驱动模块 nvidia-smi # 验证驱动状态 预期输出示例: +-----------------------------------------------------------------------------+ | NVIDIA-SMI 580.82.07 驱动版本: 580.82.07 CUDA版本: 12.1 | |-------------------------------+----------------------+----------------------+ | GPU 名称 持久性| Bus-Id 显存使用 | 易失性非校正ECC | | 风扇 温度 性能 功耗上限 | 显存使用率 | GPU利用率 计算模式 | |===============================+======================+======================| | 0 NVIDIA RTX 3050 关闭 | 00000000:01:00....