🦞 一只用 AI Agent 搭副业产线的程序员


前面几篇讲了概念、做了对比。我知道你在想什么——「啥时候能让我上手跑一个?」

就现在。5 分钟。从注册 API Key 到看到 AI 返回结果。


第 1 分钟:拿到 Key

打开 platform.deepseek.com,手机号注册,进「API Keys」点「新建」,复制。

DeepSeek 新用户默认送 100 万 token 免费额度。够你跑一个月实验。

设置环境变量:

export DEEPSEEK_API_KEY="sk-你的key"

第 2 分钟:装 Go(如果还没有)

Go 1.21+ 都行:

go version
# go version go1.22.0 windows/amd64

没装的话,go.dev/dl 下载安装,3 分钟的事。


第 3 分钟:新建项目

mkdir hello-ai && cd hello-ai
go mod init hello-ai

新建 main.go,贴入以下代码:

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
    "os"
)

const baseURL = "https://api.deepseek.com/anthropic"

type Message struct {
    Role    string `json:"role"`
    Content string `json:"content"`
}

type Request struct {
    Model       string    `json:"model"`
    MaxTokens   int       `json:"max_tokens"`
    Temperature float64   `json:"temperature"`
    Messages    []Message `json:"messages"`
}

func main() {
    apiKey := os.Getenv("DEEPSEEK_API_KEY")
    if apiKey == "" {
        fmt.Println("请先设置 DEEPSEEK_API_KEY 环境变量")
        os.Exit(1)
    }

    req := Request{
        Model:       "deepseek-v4-flash", // 先用免费的
        MaxTokens:   200,
        Temperature: 0.1,
        Messages: []Message{
            {Role: "user", Content: "你好!用 Go 写一个打印 'Hello, AI!' 的程序。"},
        },
    }

    body, _ := json.Marshal(req)
    httpReq, _ := http.NewRequest(
        "POST",
        baseURL+"/v1/messages",
        bytes.NewReader(body),
    )
    httpReq.Header.Set("x-api-key", apiKey)
    httpReq.Header.Set("anthropic-version", "2023-06-01")
    httpReq.Header.Set("Content-Type", "application/json")

    resp, err := http.DefaultClient.Do(httpReq)
    if err != nil {
        fmt.Printf("请求失败: %v\n", err)
        os.Exit(1)
    }
    defer resp.Body.Close()

    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)

    // 提取回复内容
    content, _ := result["content"].([]interface{})
    if len(content) > 0 {
        text, _ := content[0].(map[string]interface{})["text"].(string)
        fmt.Println(text)
    }
}

第 4 分钟:跑

go run main.go

3 秒后,终端输出:

当然可以!以下是一个打印 "Hello, AI!" 的 Go 程序:

package main

import "fmt"

func main() {
    fmt.Println("Hello, AI!")
}

你写了 50 行代码,AI 回了 50 行代码。一个完整的对话循环跑通了。


第 5 分钟:加个流式输出,看着 AI 一个字一个字写

刚才那个是非流式,等 AI 全写完了一次返回。改成流式,看 AI 一个字一个字往外蹦,体验完全不一样。

在 main.go 里把请求改成流式 (Stream: true),然后加一个 SSE 解析器:

type Request struct {
    // ... 其他字段
    Stream bool `json:"stream"`
}

func main() {
    // ... 前面一样
    req.Stream = true

    body, _ := json.Marshal(req)
    // ... 发起请求一样

    scanner := bufio.NewScanner(resp.Body)
    for scanner.Scan() {
        line := scanner.Text()
        if !strings.HasPrefix(line, "data: ") {
            continue
        }
        data := line[6:]
        if data == "[DONE]" {
            break
        }
        var event map[string]interface{}
        json.Unmarshal([]byte(data), &event)
        if delta, ok := event["delta"].(map[string]interface{}); ok {
            if text, ok := delta["text"].(string); ok {
                fmt.Print(text) // 一个字一个字打出来
            }
        }
    }
    fmt.Println()
}

再跑一次。你会看到终端里文字像打字机一样逐字输出——这才是 ChatGPT 那个味道。


你刚刚完成了什么

不只是「调了一次 API」。你完成了一个程序员跟 LLM 通信的完整链路:

你的 Go 程序
  → HTTP POST(JSON 格式的 Prompt + 参数)
    → DeepSeek 服务器
      → 模型推理
    ← SSE 流式响应
  ← 你的程序逐字打印

这个链路是所有 AI 应用的基础。 后面不管你写多复杂的 Agent,底层都是这个东西。


常见踩坑(刚才你可能遇到了)

Q:x-api-key header is required

没设环境变量。echo $DEEPSEEK_API_KEY 看看有没有。没有就 export 一下。

Q:connect: connection timed out

国内访问 DeepSeek 偶尔不稳定。换个时间,或者 curl 测试一下:

curl -H "x-api-key: $DEEPSEEK_API_KEY" \
     -H "anthropic-version: 2023-06-01" \
     -H "Content-Type: application/json" \
     -d '{"model":"deepseek-v4-flash","max_tokens":50,"messages":[{"role":"user","content":"hi"}]}' \
     https://api.deepseek.com/anthropic/v1/messages

Q:返回了但内容是空的

MaxTokens 设得太小。试试改成 200。

Q:go run 报 no required module provides package

go mod init 忘了。在项目目录下跑一次。


接下来做什么

你现在手里有一个能跟 AI 对话的 Go 程序。接下来三条路:

  1. 想深入 → 下一篇做 API 价格实测,了解每次调用到底花多少钱
  2. 想实用 → 跳到模块二,把 Prompt 做成可复用的模板系统
  3. 想玩 → 把 DeepSeek 换成 Ollama 本地模型,看看不联网能跑成什么样

下一篇我们算一笔账:各家 API 每次调用的真实成本。不是官方的「每 1M token X 元」,而是你实际跑 100 次调用的账单。

关注我,别错过。


🦞 一只用 AI Agent 搭副业产线的程序员

全平台同名:虾哥不加班
需要定制 AI 工具?来聊聊 → lob_ai

源码:GitHub - lobster-bujiaban/hello-ai

Logo

免费领 100 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐