[langchaingo] 智谱GLM-4在线模型体验

简介: 本文介绍如何使用Go语言版的Langchain框架——langchaingo,结合清华大学KEG实验室开发的GLM-4模型,在本地运行AI项目。GLM-4是一个先进的自然语言处理模型,支持多种任务。通过智谱AI开放平台注册可获1000w token用于测试。文章展示了langchaingo的基本配置、构建聊天内容及生成回复的过程,并简要总结了项目的现状和未来更新计划。

今天我们初次体验大名鼎鼎的人工智能开源框架 langchain 的Go语言版 langchaingo。本文将初步介绍基于智谱的AI开放平台,通过 GLM-4 模型运行本地 langchaingo 项目。

GLM-4模型介绍

GLM-4(General Language Modeling-4)模型是一个先进的自然语言处理模型,它属于GLM系列模型,这个系列模型是由清华大学知识工程实验室(KEG)提出的。GLM模型结合了BERT和GPT的优势,旨在处理多种语言任务,包括但不限于文本分类、序列标注、自然语言推理、机器翻译、文本生成等。

此外,GLM-4模型在注册账号后,会赠送 500w token用于测试使用。实名认证成功后,

image.png

会再赠送500w token用于测试。

langchaingo 介绍

根据官方介绍,LangchainGo 是 LangChain 的 Go 语言的版本。目前社区非常活跃,这篇文章将会介绍在本地通过 Go 语言环境进行 langchaingo 项目的使用介绍。

go get github.com/tmc/langchaingo

导入 langchaingo package到本地后,还需要通过注册智谱AI开放平台,获取API-KEY。

该步骤较为简单,只需要访问复制即可。
image.png


package main

import (
  "context"
  "fmt"
  "github.com/tmc/langchaingo/llms"
  "github.com/tmc/langchaingo/llms/openai"
  "log"
)

func main() {
   
  // 配置 glm-4 模型基础必要信息
  llm, err := openai.New(
    openai.WithModel("glm-4"),
    openai.WithBaseURL("https://open.bigmodel.cn/api/paas/v4/"),
    openai.WithToken("*****************************************"),
  )
  if err != nil {
   
    panic(err)
  }
  ctx := context.Background()
  // 构建聊天消息内容
  // 该部分代码用于创建并填充一个包含系统消息和人类消息的content切片。
  // content切片将包含关于项羽和刘邦的介绍请求
  var content []llms.MessageContent
  // 增加 system 消息
  content = append(content, llms.TextParts(llms.ChatMessageTypeSystem, "You are a chatbot."))
  // 增加 human 消息
  content = append(content, llms.TextParts(llms.ChatMessageTypeHuman, "帮我介绍一下项羽和刘邦."))
  // 调用模型生成回复
  if _, err = llm.GenerateContent(ctx, content,
    // 设置最大生成长度
    llms.WithMaxTokens(2048),
    // 设置 temperature
    llms.WithTemperature(0.9),
    // 设置流式输出
    llms.WithStreamingFunc(func(ctx context.Context, chunk []byte) error {
   
      fmt.Print(string(chunk))
      return nil
    })); err != nil {
   
    log.Fatal(err)
  }
}

上面的代码部分,主要分为3个部分:

配置 LLM。即配置模型的基本必要信息,如模型名称、模型的base-url以及模型的密钥部分。这块的基础信息都可以从智谱AI开放平台以及“接口文档-langchain sdk使用” 中直接获取。

构建基本聊天内容。其中 llms.ChatMessageTypeSystem 可以理解为 langchain 框架中的 system 角色,即用于传递系统级别的指示或设置对话的背景。这种消息通常由系统或开发者设定,用来影响对话的整体方向或提供背景信息。例如,你可以使用 system 消息来设定AI助手的角色、提供对话的背景信息或指定特定的行为规范;llms.ChatMessageTypeHuman 则对应代表 human 角色,即代表由用户或对话中的人类参与者发送的消息。这些消息是对话的主要输入,AI助手基于这些输入生成响应。

发送请求并构建返回内容。通过调用 llm 的 GenerateContent 方法,同时通过 llm 的 WithStreamingFunc 方法流式输出(即 stream=True);当然同样也可以通过 GenerateContent 方法直接返回 *llms.ContentResponse,并进行取值输出,如下所示:


response, err := llm.GenerateContent(ctx, content,
    // 设置最大生成长度
    llms.WithMaxTokens(2048),
    // 设置 temperature
    llms.WithTemperature(0.9),
  )
  if err != nil {
   
    log.Fatal(err)
  }
  fmt.Println(response.Choices[0].Content)

初步总结

langchaingo 项目目前距离 langchain 项目覆盖的功能还有段距离,但是社区的活跃度一直都比较稳定,此外最近测试,像 ollama 部署的 qwen1.5 模型,通过 langchaingo 测试整体效果也不错,可以持续关注。

后续除了继续深入 langchaingo 之外,也会不定期更新 ollama 的使用指南和 go 语言的其他场景~

参考内容

langchaingo: https://github.com/tmc/langchaingo

智谱AI开放平台: https://maas.aminer.cn/

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
12月前
|
存储 开发框架 Devops
eino — 基于go语言的大模型应用开发框架(一)
Eino 是一个受开源社区优秀LLM应用开发框架(如LangChain和LlamaIndex)启发的Go语言框架,强调简洁性、可扩展性和可靠性。它提供了易于复用的组件、强大的编排框架、简洁明了的API、最佳实践集合及实用的DevOps工具,支持快速构建和部署LLM应用。Eino不仅兼容多种模型库(如OpenAI、Ollama、Ark),还提供详细的官方文档和活跃的社区支持,便于开发者上手使用。
2542 8
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
7月前
|
人工智能 JSON Shell
go mod依赖管理
本文介绍了Go语言中如何管理并使用自己的包以及导入第三方包的方法。内容涵盖包的目录结构、go.mod文件的初始化、import的正确使用方式、init函数的作用及执行顺序,以及如何下载和管理第三方库。通过具体示例演示了包的导入、别名设置、函数调用和运行方式,帮助开发者更好地理解和掌握Go模块化编程的核心技巧。
407 5
|
12月前
|
开发框架 前端开发 Go
eino — 基于go语言的大模型应用开发框架(二)
本文介绍了如何使用Eino框架实现一个基本的LLM(大语言模型)应用。Eino中的`ChatModel`接口提供了与不同大模型服务(如OpenAI、Ollama等)交互的统一方式,支持生成完整响应、流式响应和绑定工具等功能。`Generate`方法用于生成完整的模型响应,`Stream`方法以流式方式返回结果,`BindTools`方法为模型绑定工具。此外,还介绍了通过`Option`模式配置模型参数及模板功能,支持基于前端和用户自定义的角色及Prompt。目前主要聚焦于`ChatModel`的`Generate`方法,后续将继续深入学习。
1550 7
|
人工智能 开发框架 数据可视化
Eino:字节跳动开源基于Golang的AI应用开发框架,组件化设计助力构建AI应用
Eino 是字节跳动开源的大模型应用开发框架,帮助开发者高效构建基于大模型的 AI 应用。支持组件化设计、流式处理和可视化开发工具。
1995 27
|
存储 JSON API
作为开发者,我如何提高任务型大模型应用的响应性能
本文基于实际场景,分享了作为开发者提高大模型响应性能的四个实用方法。
2860 58
|
数据采集 自然语言处理 搜索推荐
基于qwen2.5的长文本解析、数据预测与趋势分析、代码生成能力赋能esg报告分析
Qwen2.5是一款强大的生成式预训练语言模型,擅长自然语言理解和生成,支持长文本解析、数据预测、代码生成等复杂任务。Qwen-Long作为其变体,专为长上下文场景优化,适用于大型文档处理、知识图谱构建等。Qwen2.5在ESG报告解析、多Agent协作、数学模型生成等方面表现出色,提供灵活且高效的解决方案。
1405 49
|
12月前
|
算法 测试技术 Swift
Kimi开源Moonlight-16B-A3B:基于Muon优化器的高效大模型,性能与效率双突破!
最近,Muon优化器在训练小规模语言模型方面展示了强大的效果,但其在大规模模型上的可扩展性尚未得到验证。
686 0
|
人工智能 运维 Serverless
Serverless GPU:助力 AI 推理加速
近年来,AI 技术发展迅猛,企业纷纷寻求将 AI 能力转化为商业价值,然而,在部署 AI 模型推理服务时,却遭遇成本高昂、弹性不足及运维复杂等挑战。本文将探讨云原生 Serverless GPU 如何从根本上解决这些问题,以实现 AI 技术的高效落地。
1175 42
|
监控 数据中心
交换机的电口和光口,包括它们的定义、特点、区别及应用场景
本文详细介绍了交换机的电口和光口,包括它们的定义、特点、区别及应用场景。电口适用于短距离、低成本的网络环境,而光口则适合长距离、高速率、高可靠性的需求。文章还提供了选择和使用时的注意事项,帮助读者更好地理解和应用这一重要网络技术。
1893 8