首页 > 其他分享 >通往人工智能的 Go 之路

通往人工智能的 Go 之路

时间:2024-01-07 12:34:41浏览次数:27  
标签:集成 err 人工智能 通往 API openai Go 日志


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 框架,能够根据自己的需求灵活选择并使用所需的功能,那么您可以考虑使用这个框架。

快速入门

  1. 运行使用
  2. 配置路由
  3. 处理请求参数
  4. 操作数据库
  5. 编译成二进制文件

进阶

  1. 自定义编写中间件及使用
  2. 统一定义错误码并进行语言汉化
  3. 接口返回值规范的最佳实践方法
  4. 开发环境下实现代码的热更新部署
  5. 集成 aes 对称加密算法
  6. 集成 rsa 非对称加密算法
  7. 集成 snowflake 实现生成唯一 ID
  8. 集成 cors 实现允许前端跨域请求
  9. 集成 swag 实现自动生成接口文档
  10. 集成 pprof 实现应用程序性能分析
  11. 集成 jwt 实现身份认证及验证中间件
  12. 集成 prometheus 客户端实现注册和暴露指标
  13. 自定义调试方法,支持将调试日志收集到上下文日志中
  14. 集成 gorm 操作 MySQL 数据,支持将操作日志收集到上下文日志中
  15. 集成 redis/v8 操作 Redis 数据,支持将操作日志收集到上下文日志中
  16. 集成 resty/v2 请求 HTTP 接口,支持将请求/响应日志收集到上下文日志中
  17. 集成 mongo-driver 操作 MongoDB 数据,支持将操作日志收集到上下文日志中
  18. 强大的日志收集功能,根据「请求唯一ID」可串联请求日志、响应日志、调试日志、MySQL 操作日志、Redis 操作日志、Mongo 操作日志、三方 HTTP 请求响应日志等


标签:集成,err,人工智能,通往,API,openai,Go,日志
From: https://blog.51cto.com/u_15183360/9133831

相关文章

  • Go 语言为什么不支持并发读写 map?
    大家好,我是frank,「Golang语言开发栈」公众号作者。01介绍在Go语言项目开发中,我们经常会使用哈希表map,它的时间复杂度是O(1),Go语言中的map使用开放寻址法避免哈希碰撞。Go语言中的map并非原子操作,不支持并发读写操作。Go官方认为map在大多数情况下是使用map进行并......
  • dbeaver 链接 mongodb
    如何使用DBeaver连接MongoDB作为一名经验丰富的开发者,我将教你如何使用DBeaver连接MongoDB数据库。以下是整个过程的步骤:步骤操作1安装DBeaver2安装MongoDBJDBC驱动程序3配置数据库连接下面是每个步骤需要做的事情以及相应的代码:步骤1:安装DB......
  • Django quertset、set的序列化
    一、几种序列化importjson#序列化querysetdefxuliehuaQueryset(request):querylist=models.LsTable.objects.all()querylist_json=serializers.serialize("json",querylist)returnHttpResponse(querylist_json)#序列化setdefxuliehuaQueryset(......
  • 2024-01-06:用go语言,在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧 在
    2024-01-06:用go语言,在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧在桥上有一些石子,青蛙很讨厌踩在这些石子上由于桥的长度和青蛙一次跳过的距离都是正整数我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0...L其中L是桥的长度,坐标为0的点表示桥的起点,坐......
  • 用 Go 编写日志中间件的指南
    这是关于如何为GoWeb服务编写可扩展日志记录中间件的指南。我收到了很多请求,要求向gorilla/mux添加内置记录器并扩展gorilla/handlers记录的内容,但它们很难分类。许多要求都是针对不同的事情,因为记录“什么”、记录多少以及使用哪个库并不是所有人都同意的。此外,特别是在mux的情......
  • MongoDB中的聚合函数
    当然可以!以下是MongoDB中聚合函数的使用方法和一些具体示例,带有注释解释:$match:用途:筛选符合条件的文档。示例:筛选出age大于20的文档。db.collection.aggregate([{$match:{age:{$gt:20}}}])$group:用途:对文档进行分组,并计算每组的聚合......
  • Django中的URL模式
    Django中的URL模式是一种用于处理HTTP请求和将请求映射到相应的视图函数的技术。URL模式是Django路由系统的基础,它负责接收客户端发送的请求,并将其映射到相应的视图函数进行处理。URL模式的核心功能是URL匹配和视图函数的调用。URL模式底层逻辑主要包括以下几个方面:URL模式类:Django......
  • Windows平台安装MongoDB数据库
    一、前言MongoDB是一种流行的文档型NoSQL数据库,它具有高性能、高可用、可伸缩性等优点,因此被广泛应用于web应用程序、分布式系统、云计算等领域。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类......
  • SSH 协议 和 Go SSH 库 转载
    导读 SSH,TheSecureShellProtocol(安全Shell协议),是一个使用广泛的网络协议。在中文互联网世界,关于SSH协议的介绍,往往都把重点放到了安全(Secure)方面的细节。这样的文章对于开发者来说,意义并不大,原因在于:此类文章是以密码学为基础的。而密码学专业程度较高,对于开发......
  • 2016 2019 李世石 人机大战 谷歌人工智能AlphaGo 韩国人工智能"韩豆"
    2016年3月,谷歌围棋人工智能机器人“阿尔法狗”与韩国棋手李世石进行较量,“阿尔法狗”获得比赛胜利,最终双方总比分定格在4:1。首场人机大战结束后,“阿尔法狗”之父、德米斯·哈萨比斯表示,人工智能的下一步目标是让计算机自己学棋。也就是说,下个版本的“阿尔法狗”将从零开始,不接受......