写作与公文
需要自托管一个基于 Go/SQLite/GitHub…
在本地或服务器部署 KarpathyTalk,配置 GitHub OAuth,并通过其开放 API、SQLite 和内容限制来读写、监控社区内容。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要自托管一个基于 Go/SQLite/特定
解决思路
- 创建 GitHub OAuth App:进入 GitHub → Settings → Developer settings → OAuth Apps → New OAuth App;Application name 填 KarpathyTalk,Homepage URL 填 http://localhost:8080,Authorization callback URL 填 http://localhost:8080/auth/callback;保存 Client ID 和 Client Secret。
- 克隆并构建:运行 git clone https://github.com/karpathy/KarpathyTalk.git;cd KarpathyTalk;go build -o karpathytalk ./cmd/karpathytalk。
- 配置环境变量:export GITHUB_CLIENT_ID=$GITHUB_CLIENT_ID;export GITHUB_CLIENT_SECRET=$GITHUB_CLIENT_SECRET;export BASE_URL=http://localhost:8080(可选,默认即此)。
- 本地运行:./karpathytalk;或带参数 ./karpathytalk -addr :9090 -db ./data/karpathytalk.db;访问 http://localhost:8080。
- 使用 CLI 参数:-addr string 设置 HTTP 监听地址,默认 ":8080";-db string 设置 SQLite 数据库路径,默认 "karpathytalk.db"。
- 设置必需环境变量:GITHUB_CLIENT_ID 必需;GITHUB_CLIENT_SECRET 必需;BASE_URL 可选,默认 http://localhost:8080,部署时为公开 URL。
- 生产部署构建与拷贝:go build -o karpathytalk ./cmd/karpathytalk;scp karpathytalk schema.sql user@yourserver:~/karpathytalk/;scp -r templates static user@yourserver:~/karpathytalk/。
- 在服务器运行:ssh user@yourserver;cd ~/karpathytalk;export GITHUB_CLIENT_ID=$GITHUB_CLIENT_ID;export GITHUB_CLIENT_SECRET=$GITHUB_CLIENT_SECRET;export BASE_URL=https://yourdomain.com;./karpathytalk -addr :8080。
- 用 Caddy 配置 TLS:在 Caddyfile 写入 yourdomain.com { reverse_proxy localhost:8080 }。
- 用 nginx 配置 TLS:listen 443 ssl;server_name yourdomain.com;配置 ssl_certificate 与 ssl_certificate_key 指向 Let's Encrypt 证书;location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }。
- 用 systemd 托管:创建 [Unit] Description=KarpathyTalk, After=network.target;[Service] WorkingDirectory=/home/deploy/karpathytalk, ExecStart=/home/deploy/karpathytalk/karpathytalk -addr :8080, Restart=always, Environment=GITHUB_CLIENT_ID=$GITHUB_CLIENT_ID, Environment=GITHUB_CLIENT_SECRET=$GITHUB_CLIENT_SECRET, Environment=BASE_URL=https://yourdomain.com;[Install] WantedBy=multi-user.target。
- API 读取无需认证:curl https://karpathytalk.com/api/posts 获取 timeline/最近帖子;curl https://karpathytalk.com/api/posts/{postID} 获取单帖;curl https://karpathytalk.com/api/users/{username}/posts 获取用户帖子。
- 获取 Markdown:curl https://karpathytalk.com/api/posts/{postID}.md 获取人/agent 可读 markdown。
- Go 读取 timeline:定义 Post struct(ID, Username, Content, Likes, Reposts, CreatedAt 对应 json 字段);用 http.Get(baseURL + "/api/posts");defer resp.Body.Close();io.ReadAll(resp.Body);json.Unmarshal(body, &posts);遍历 posts 输出 [Username] Content (👍 Likes)。
- Go 读取用户帖子为 Markdown:用 url := fmt.Sprintf("%s/api/users/%s/posts.md", baseURL, username);http.Get(url);defer resp.Body.Close();io.ReadAll(resp.Body);返回 string(body)。
- 遵守内容限制:Posts 最长 10,000 字符,每小时 30 条;Replies 最长 5,000 字符,每小时 60 条;Images 最大 5 MB,仅 PNG/JPEG/GIF/WebP。
- 直接访问 SQLite 数据库:sqlite3 karpathytalk.db;.tables 列出表;执行 SELECT username, substr(content, 1, 80), created_at FROM posts ORDER BY created_at DESC LIMIT 20; 查看最近帖子;SELECT username, likes, substr(content, 1, 60) FROM posts ORDER BY likes DESC LIMIT 10; 查看最多点赞;SELECT username, COUNT(*) as followers FROM follows GROUP BY username ORDER BY followers DESC; 查看关注者数。
- 备份数据库:cp karpathytalk.db karpathytalk.db.backup(WAL 模式下运行时安全);或 sqlite3 karpathytalk.db ".backup karpathytalk_backup.db"。
- 了解项目结构:cmd/karpathytalk/ 主入口;templates/ HTML 模板(htmx);static/ CSS/JS 资源;uploads/ 用户图片上传;schema.sql SQLite schema;karpathytalk.db 运行时创建。
- 实现监控新帖的 Agent:轮询 GET /api/posts?since_id={lastSeenID};解析 JSON 到 []Post;遍历新帖,打印 New post by @Username: Content;更新 lastSeenID 为最大 p.ID;每 30 秒执行一次。
- 将 KarpathyTalk 内容嵌入 LLM prompt:GET /api/users/{username}/posts.md;读取 body 作为 context;拼接到 system prompt,例如 You are a helpful assistant. Here are recent posts from the community: %s Answer questions about these posts.。
- 排障:GITHUB_CLIENT_ID not set → 运行前 export GITHUB_CLIENT_ID;OAuth callback fails → 确保 GitHub OAuth App callback URL 与 BASE_URL/auth/callback 完全一致;Binary not found after build → 从 repo root 运行 go build -o karpathytalk ./cmd/karpathytalk;templates: no such file → 从 repo root 运行二进制,或把 templates/ 和 static/ 复制到二进制旁;Database locked → SQLite 默认 WAL,避免多个二进制实例写同一 .db;Images not serving → uploads/ 首次上传自动创建,检查写权限;Port already in use → 用 -addr :9090 改端口。
- 检查运行:curl -I http://localhost:8080/,期望 HTTP/1.1 200 OK。
- 代码变更后重建:go build -o karpathytalk ./cmd/karpathytalk && ./karpathytalk。
- 运行测试:go test ./...。
适用边界 · 注意事项
- 只想使用通用社交功能、不愿依赖 KarpathyTalk 代码库或其 API 时。
- 无法创建 GitHub OAuth App、无法运行 Go 构建或 SQLite 数据库时。
- 需要高并发多写、严格访问控制或不能开放读取 API 的生产场景时。