通往人工智能的 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 请求响应日志等

学会后,你将达到了 Go 的中级水平。在这个过程中,你将会学习到框架的核心设计思路和封装思想,并获得宝贵的学习经验。

了解更多:简洁、轻量级的 Go API 框架

32a1c81e480ab89dc70b52885521f690.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/290892.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能趋势报告解读:ai野蛮式生长的背后是机遇还是危机?

近期,Enterprise WordPress发布了生成式人工智能在营销中的应用程度的报告,这是一个人工智能迅猛发展的时代,目前人工智能已经广泛运用到内容创作等领域,可以预见的是人工智能及其扩展应用还将延伸到我们工作与生活中的方方面面。…

gradle --腾讯国内镜像源

distributionUrlhttps\://mirrors.cloud.tencent.com/gradle/gradle-7.3.3-bin.zip 1.进入到自己工程目录下的wrapper文件夹。 2.编辑gradle-wrapper文件 使用https://mirrors.cloud.tencent.com/gradle/gradle-4.6-all.zip来代替原来的 https\://services.gradle.org/distri…

高精度、大电流、低压差电压调整器芯片 D2632,可以用于电池供电设备等产品上

D2632是一款高精度、大电流、低压差电压调整器。主要作为电源装置提供高效的电压调整。 最大输出电流可达3A,并且外接器件少,拥有输出电压(ADJ) 可调特点。 主要特点: 1. 低压差(满载350mV); 2. 地电流小; …

Oracle导出CSV文件

利用spool spool基本格式: spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置: set colsep ;    //域输出分隔符 set echo off;    //显示start启动的脚本中的每个sql命令,缺…

利用Embedding优化搜索功能

我们继续用Gemini学习LLM编程之旅。 Embedding是一种自然语言处理 (NLP) 技术,可将文本转换为数值向量。Embedding捕获语义含义和上下文,从而导致具有相似含义的文本具有更接近的Embedding。例如,句子“我带我的狗去看兽医”和“我带我的猫去…

Mysql 动态链接库配置步骤+ 完成封装init和close接口

1、创建新项目 动态链接库dll 2、将附带的文件都删除,创建LXMysql.cpp 3、项目设置 3.1、预编译头,不使用预编译头 3.2、添加头文件 3.3、添加类 3.4、写初始化函数 4、项目配置 4.1、右键解决方案-属性-常规-输出目录 ..\..\bin 4.2、生成lib文件 右…

MAC 签名证书替换

1.概述 在用开发者签名过期后导致签名失效,需要更新证书 当过期时,点击证书时显示“此证书无效” 2.证书分类 3.登录 首先登陆Apple Developer官网开发者账号登陆。登录网址Apple Developer点击Account输入账号登录 4.需要的证书 本司现阶段只在MacO…

客服智能管理系统是如何应用的

客服系统有很多种类,针对不同场景的客服使用的客服系统也不同,如有网店里的在线客服、实体店里的电话客服、网站上的在线客服、公共服务型的热线客服、售后服务客服等等。所谓客服智能管理系统就是一种可以把多个客服场景都管理起来的系统,提…

全面解析vcruntime140_1.dll无法继续执行代码问题

在使用电脑的过程中,我们可能会遇到各种问题,如“找不到vcruntime140_1.dll无法继续执行代码”。vcruntime140_1.dll是Visual C Runtime Library(视觉C运行时库)的一个组件,主要用于支持应用程序的运行。这个文件包含了…

服务器磁盘挂载及格式化

一边学习,一边总结,一边分享! 写在前面 最近一直折腾组装的电脑,来回折腾了很久关于我花费六千多组了台window+Linux主机,目前基本是可以使用了。对于Windows主机配置基本是没问题,一直在使用,以及桌面化软件,都可以自己安装,只是说这台主机有些软件可能一时半会安装…

爆火小游戏敲木鱼流量主小程序源码系统+完整的代码包以及安装搭建教程

随着移动互联网的快速发展,小程序已成为一种新的应用形态,深入到人们生活的方方面面。其中,小游戏由于其简单、有趣的特点,吸引了大量用户,也成为了许多开发者的首选。敲木鱼小游戏,以其独特的玩法和轻松的…

Transformer从菜鸟到新手(二)

引言 这是Transformer的第二篇文章,上篇文章中我们了解了分词算法BPE,本文我们继续了解Transformer中的位置编码和核心模块——多头注意力。 位置编码 我们首先根据BPE算法得到文本切分后的子词标记,然后经过输入嵌入层将每个标记转换为对…

摆烂式学习ssh

摆烂式学习ssh ssh工作原理ssh基本使用sshd配置文件密钥登录1.客户端2.服务器3.注意事项4.使用密钥登录测试 ssh高级使用技巧1.在非正规端口启动2.rsync 命令3.透过 ssh 通道加密原本无加密的服务4.以ssh信道配合x server 传递图形接口5.ssh配合virtualbox虚拟机使用技巧 ssh工…

【Docker】docker部署conda并激活环境

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、新建dockerfile文件二、使用build创建镜像1.报错:Your shell has not been properly configured to use conda activate.…

ubuntu远程桌面连接之novnc

一、前言 该操作是为了实现vnc桌面连接为url连接方式,且在浏览器中可以对ubuntu进行操作。在使用novnc进行操作前,需要先安装vnc才可。ubuntu下如何安装vnc,可看博主前面写的一篇文,ubuntu远程桌面连接之vnc-CSDN博客,…

保湿剂,预计2026年市场规模将达到约230亿美元

全球市场分析 从全球市场来看,保湿剂市场规模正在快速增长。主要集中在欧美和亚太地区的市场,据市场调研机构的数据显示,预计2026年,全球保湿剂市场规模将达到约230亿美元。保湿剂的应用领域不断拓展,包括从化妆品到个…

纹理贴图解释

在线工具推荐:3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 不同类型的纹理的编码方式 -sRGB:这是一个 8 位映射&#xff0c…

设计领域不可缺少的10款PS插件,2023年必知!

即时设计 即时设计是一个更快更简单的产品协作设计平台。即时设计主要用户人群涵盖产品经理,设计师和工程师,其核心功能点包括:智能标注、一键切图、多样批注、快速交互、全貌画板、团队管理。从产品到开发,真正实现了只要一个文…

学习华为企业无线网络,有这篇文章就够了(一)

华为HCIA视频教程:超级实用,华为VRP系统文件详解 华为HCIA视频教程:不会传输层协议,HCIA都考不过 华为HCIA视频教程:网络工程师的基本功:网络地址转换NAT 华为HCIP视频教程:DHCP协议原理与配…

Unity3D Shader 之透视效果XRay

1、 Shader "Unlit/XRay" {Properties{_MainTex("Texture", 2D) "white" {}// 漫反射_Diffuse("Diffuse", COLOR) (1,1,1,1)// XRay 效果_XRayColor("XRay Color", COLOR) (0,1,1,1)_XRayPower("XRay Power",…