字
字节笔记本
2026年2月22日
Breeze:使用 Go 语言构建的简单 ChatGPT 克隆项目
本文介绍 Breeze,一个使用 Go 语言和 langchaingo 库构建的简单 ChatGPT 克隆项目。该项目由 Sau Sheong Chang 开发,展示了如何使用 Go 语言快速构建基于 OpenAI API 的聊天应用。
项目简介
Breeze 是一个简洁的 ChatGPT 克隆应用,使用 Go 语言开发。它利用 OpenAI 的 GPT 模型作为后端 LLM,通过 langchaingo 库与 OpenAI API 进行交互。项目代码开源在 GitHub 上,目前获得了 39+ stars。
作者 Sau Sheong Chang 在文章中提到,由于 Python 拥有丰富的 LLM 开发生态(如 LangChain、LlamaIndex、HuggingFace),他之前一直使用 Python 编写 LLM 应用。但在发现 langchaingo 这个全面的 Go 语言 LLM 库后,他决定尝试用 Go 构建一个 ChatGPT 克隆版。
核心特性
- 简洁的 Web 界面:基于 Bootstrap 5 构建的响应式聊天界面
- OpenAI 集成:使用 langchaingo 与 OpenAI API 无缝集成
- 代码高亮:支持 Markdown 格式和代码语法高亮
- 轻量级:代码简洁,易于理解和扩展
技术栈
| 技术 | 用途 |
|---|---|
| Go 1.20 | 后端编程语言 |
| langchaingo | Go 语言的 LangChain 实现 |
| go-chi/chi | HTTP 路由和中间件 |
| godotenv | 环境变量管理 |
| Bootstrap 5 | 前端 UI 框架 |
| Highlight.js | 代码语法高亮 |
| Showdown.js | Markdown 渲染 |
安装指南
前置要求
- Go 1.20 或更高版本
- OpenAI API Key
安装步骤
- 克隆仓库
bash
git clone https://github.com/sausheong/breeze.git
cd breeze- 安装依赖
bash
go mod download- 配置环境变量
bash
cp .env.example .env编辑 .env 文件,填入你的 OpenAI API Key:
text
OPENAI_API_KEY=your-api-key-here
OPENAI_MODEL=gpt-3.5-turbo
PORT=1100- 启动应用
bash
go run main.go应用将在 http://localhost:1100 启动。
代码解析
后端实现 (main.go)
go
package main
import (
"context"
"encoding/json"
"log"
"net/http"
"os"
"text/template"
"github.com/go-chi/chi"
"github.com/go-chi/chi/middleware"
"github.com/joho/godotenv"
"github.com/tmc/langchaingo/llms/openai"
"github.com/tmc/langchaingo/schema"
)
func init() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
}
func main() {
r := chi.NewRouter()
r.Use(middleware.Logger)
r.Handle("/static/*", http.StripPrefix("/static", http.FileServer(http.Dir("./static"))))
r.Get("/", index)
r.Post("/run", run)
log.Println("\033[93mBreeze started. Press CTRL+C to quit.\033[0m")
http.ListenAndServe(":"+os.Getenv("PORT"), r)
}
func index(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("static/index.html")
t.Execute(w, nil)
}
func run(w http.ResponseWriter, r *http.Request) {
prompt := struct {
Input string `json:"input"`
}{}
err := json.NewDecoder(r.Body).Decode(&prompt)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
llm, err := openai.NewChat(openai.WithModel(os.Getenv("OPENAI_MODEL")))
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
chatmsg := []schema.ChatMessage{
schema.SystemChatMessage{Content: "Hello, I am a friendly AI assistant."},
schema.HumanChatMessage{Content: prompt.Input},
}
aimsg, err := llm.Call(context.Background(), chatmsg)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
response := struct {
Input string `json:"input"`
Response string `json:"response"`
}{
Input: prompt.Input,
Response: aimsg.GetContent(),
}
json.NewEncoder(w).Encode(response)
}关键代码说明
- 环境加载:使用
godotenv从.env文件加载配置 - 路由设置:使用
chi路由库,配置静态文件服务和两个路由 - LLM 调用:使用
langchaingo/openai创建聊天会话 - 消息格式:使用
schema.ChatMessage定义系统消息和用户输入
前端界面
前端使用 Bootstrap 5 构建,主要包含:
- 聊天消息显示区域
- 输入框和发送按钮
- Markdown 渲染和代码高亮
使用示例
启动应用后,在浏览器中访问 http://localhost:1100,即可看到简洁的聊天界面。输入问题(如 "How to use channels in Go?"),应用会调用 OpenAI API 并显示回答。
扩展建议
- 对话历史:添加数据库支持,保存对话历史
- 多用户支持:添加用户认证和会话管理
- 本地模型:参考作者的后续文章,集成 Llama-2 等本地模型
- 流式响应:实现 SSE (Server-Sent Events) 支持流式输出
项目链接
- GitHub 仓库:https://github.com/sausheong/breeze
- 原始教程:Creating a simple ChatGPT clone with Go
- 本地运行版本教程:Creating a ChatGPT Clone that Runs on Your Laptop with Go
总结
Breeze 是一个优秀的入门项目,展示了如何使用 Go 语言和 langchaingo 构建 LLM 应用。代码简洁清晰,适合作为学习 Go 语言 LLM 开发的起点。
分享: