项目概述¶
在 AI 爆发的时代,开发者往往会面临以下痛点:
- 模型生态碎片化:今天用 OpenAI,明天想换 Anthropic(Claude)或 DeepSeek,但各个厂家的 API 结构、流式格式、甚至工具调用(Tool Calling)的规范都大相径庭,导致代码重构成本极高。
- 本地部署过于笨重:仅仅为了做文本向量化(Embedding)或简单的本地推理,就必须在服务器上额外部署 Ollama 甚至繁重的 Python 环境。
- 复杂业务代码变成“意大利面”:在构建 RAG(检索增强生成)或 Agent 智能体时,大量的 Prompt 拼接、API 调用、条件判断和重试逻辑交织在一起,代码迅速腐化且难以维护。
GoChat 正是为了彻底解决这些痛点而生。它不仅仅是一个 API Wrapper,而是一个现代化的、类型安全的 Go 语言大模型应用开发框架。它将多模型调度、本地向量化、复杂工作流编排完美融合在一个轻量级的 Go 库中。
核心特性¶
终极的“一次编写,到处运行”¶
使用 GoChat,您无需再去查阅不同模型厂商晦涩的 API 文档。
- 抹平厂商差异:无论是 OpenAI、Anthropic 还是国内的 Qwen、Deepseek、MiniMax,GoChat 将它们全部抽象为统一的
core.Client接口。 - 强化的 Tool Calling:不同大模型对函数调用(Function Calling)的底层 JSON 结构定义千奇百怪。GoChat 提供了一套统一的
core.Tool和core.ToolCall抽象,您只需定义一次工具,即可在所有支持该特性的模型间无缝切换。 - 内置韧性:遇到网络限流(HTTP 429)或超时?开发者无需手写
for循环,底层自动触发带抖动的指数退避(Exponential Backoff)重试。
脱离 Ollama 依赖的“零配置”向量化¶
如果您的核心诉求是向量检索(RAG),GoChat 的 Embedding 模块将是您的超级利器:
- 无需外部服务:直接基于 ONNX Runtime 在本地执行向量化,彻底摆脱对 Ollama 或任何外部 Python 服务的依赖。将 AI 能力内嵌到您的单体 Go 二进制文件中,极大地简化了部署拓扑。
- 内置模型下载器:还在为去 HuggingFace 寻找、比对、下载模型而烦恼?GoChat 提供了傻瓜式的
embedding.WithBEG/WithBERT工厂方法,只需提供名字,框架会在本地缺失时自动连接远端完成多文件分片下载与加载。 - 工业级批处理:内置
BatchProcessor,支持针对海量文本的并发分批处理,并且自动对相同文本进行哈希缓存,避免重复计算浪费 CPU。
将极其复杂的逻辑变优雅¶
Agent 和 RAG 系统的本质是“多步思考”与“数据流转”。GoChat 提供了一套极具表现力的泛型工作流引擎 (Pipeline):
- 告别
if err != nil地狱:通过Pipeline.AddStep().AddStep()链式调用,将庞杂的业务逻辑拆分为职责单一的 Step(步骤)。 - 强类型上下文 (Type-Safe Context):得益于 Go 1.24+ 的泛型支持,您可以在不同的 Step 之间传递自定义的强类型
struct作为上下文,IDE 完美补全,杜绝了传统map[string]any带来的类型转换异常和拼写错误。 - 可编程控制流:内置
IfStep(条件分支) 和LoopStep(循环),结合原生的 Hook (钩子) 机制,无论多么复杂的“思考-行动-反思”链条,都能被组织得如艺术品般优雅。
典型应用场景¶
- 一站式 AI 聚合网关:实现一套统一标准对接全球主流 LLM 提供商的服务代理。
- 重度 RAG (检索增强生成) 系统:使用 Pipeline 串联本地的 Embedding 模块与远程的 LLM 模块,实现无需额外基础设施部署的纯 Go 知识库问答系统。
- 复杂 Agent 智能体:利用统一的 Tool Calling 和 Pipeline 中的循环/条件节点,构建能够调用外部 API、执行自我验证和修正的自治智能体。
技术栈选型¶
- 语言要求:Go 1.18+(推荐 Go 1.24+ 以支持 Pipeline 包的顶级泛型特性)。
- 极简依赖:主要依赖 Go 标准库处理核心协议,仅在向量计算时依赖高性能的 ONNX 运行时抽象。