Agency
该库旨在为那些希望通过清晰、高效且符合 Go 语言惯例的方法来探索大型语言模型(LLMs)和其他生成式人工智能的开发人员而设计。
特点
- 纯 Go 语言:快速、轻量级,静态类型,无需涉及 Python 或 JavaScript
- 编写清晰的代码并遵循清晰的架构,将业务逻辑与具体实现分离
- 通过实现简单接口轻松创建自定义操作
- 将操作组合成流程,并通过拦截器观察每个步骤
- OpenAI API 绑定(可用于任何兼容 OpenAI API 的 API:文本到文本(完成),文本到图像,文本到语音,语音到文本)
为什么需要 Agency?
Agency 的核心目标是赋予用户构建自主代理的能力。虽然适用于从聊天界面到复杂数据分析的各种生成式人工智能应用,但我们的库的最终目标是简化自主人工智能系统的创建过程。无论您是构建个体助手还是协调代理群集,Agency 提供了所需的工具和灵活性,以轻松高效地实现这些先进概念。
在生成式人工智能领域,基于 Go 语言的库并不常见。最著名的是 LangChainGo,它是 Python LangChain 的 Go 语言移植版。然而,将 Python 转换为 Go 可能会显得笨拙,并且可能与 Go 的惯用风格不太匹配。此外,即使在 Python 中,一些人也对 LangChain 的设计提出质疑。这种情况表明,需要一种符合 Go 语言特点的替代方案。
我们的目标是用以 Go 为中心的库来填补这一空白,强调清晰、简单的代码,并避免不必要的复杂性。Agency 的设计核心小巧而稳健,易于扩展,并完全适应 Go 语言在静态类型和性能方面的优势。它是我们对生成式人工智能中缺乏本地 Go 解决方案的回应。
示例
package main
import (
"bufio"
"context"
"fmt"
"os"
_ "github.com/joho/godotenv/autoload"
"github.com/neurocult/agency"
"github.com/neurocult/agency/providers/openai"
)
func main() {
assistant := openai.
New(openai.Params{Key: os.Getenv("OPENAI_API_KEY")}).
TextToText(openai.TextToTextParams{Model: "gpt-3.5-turbo"}).
SetPrompt("You are helpful assistant.")
messages := []agency.Message{}
reader := bufio.NewReader(os.Stdin)
ctx := context.Background()
for {
fmt.Print("User: ")
text, err := reader.ReadString('\n')
if err != nil {
panic(err)
}
input := agency.UserMessage(text)
answer, err := assistant.SetMessages(messages).Execute(ctx, input)
if err != nil {
panic(err)
}
fmt.Println("Assistant: ", answer)
messages = append(messages, input, answer)
}
}
go-openai
该库为 OpenAI API 提供非官方的 Go 客户端。支持以下功能:
- ChatGPT
- GPT-3,GPT-4
- DALL·E 2
- Whisper
获取 OpenAI API 密钥的步骤:
- 访问OpenAI网站,网址为 https://platform.openai.com/account/api-keys。
- 如果您没有账号,请点击"注册"创建一个账号。如果已有账号,请点击"登录"。
- 登录后,进入API密钥管理页面。
- 点击"创建新的密钥"。
- 输入您的新密钥名称,然后点击"创建密钥"。
- 新的API密钥将显示出来。请将此密钥用于与OpenAI API进行交互。
注意:您的API密钥是敏感信息,请不要与他人分享。
示例
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
client := openai.NewClient("your token")
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: openai.GPT3Dot5Turbo,
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "Hello!",
},
},
},
)
if err != nil {
fmt.Printf("ChatCompletion error: %v\n", err)
return
}
fmt.Println(resp.Choices[0].Message.Content)
}
gin-api-mono
如果您目前在 Go 方面的经验不足,需要一个 简洁、轻量级的 API 框架,能够根据自己的需求灵活选择并使用所需的功能,那么您可以考虑使用这个框架。
快速入门
- 运行使用
- 配置路由
- 处理请求参数
- 操作数据库
- 编译成二进制文件
进阶
- 自定义编写中间件及使用
- 统一定义错误码并进行语言汉化
- 接口返回值规范的最佳实践方法
- 开发环境下实现代码的热更新部署
- 集成 aes 对称加密算法
- 集成 rsa 非对称加密算法
- 集成 snowflake 实现生成唯一 ID
- 集成 cors 实现允许前端跨域请求
- 集成 swag 实现自动生成接口文档
- 集成 pprof 实现应用程序性能分析
- 集成 jwt 实现身份认证及验证中间件
- 集成 prometheus 客户端实现注册和暴露指标
- 自定义调试方法,支持将调试日志收集到上下文日志中
- 集成 gorm 操作 MySQL 数据,支持将操作日志收集到上下文日志中
- 集成 redis/v8 操作 Redis 数据,支持将操作日志收集到上下文日志中
- 集成 resty/v2 请求 HTTP 接口,支持将请求/响应日志收集到上下文日志中
- 集成 mongo-driver 操作 MongoDB 数据,支持将操作日志收集到上下文日志中
- 强大的日志收集功能,根据「请求唯一ID」可串联请求日志、响应日志、调试日志、MySQL 操作日志、Redis 操作日志、Mongo 操作日志、三方 HTTP 请求响应日志等