当前位置: 首页 > news >正文

一文学会大模型开发Eino框架的模型调用方法

本文主要介绍在Eino框架中如何构造和模型的交互
包括但不限于介绍官方demo以及其他调用方式

文章目录

  • 什么是ChatModel
  • 如何调用
    • 数据结构定义
    • 直接调用
        • 流式Demo
    • 放在图中调用
  • 如何实现自定义的ChatModel

什么是ChatModel

参考官方定义
总的来说就是通过流式or非流式的方式调用部署在某处的大模型以获取结果的组件

如何调用

数据结构定义

type BaseChatModel interface {Generate(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.Message, error)Stream(ctx context.Context, input []*schema.Message, opts ...Option) (*schema.StreamReader[*schema.Message], error)
}type ToolCallingChatModel interface {BaseChatModel// WithTools returns a new ToolCallingChatModel instance with the specified tools bound.// This method does not modify the current instance, making it safer for concurrent use.WithTools(tools []*schema.ToolInfo) (ToolCallingChatModel, error)
}

实现了上述三个方法的就可以在任何地方被视为一个ChatModel组件,但是现在在最新的代码中官方建议实现ToolCallingChatModel,比如这样
在这里插入图片描述
以火山引擎上的模型为例
其余的一些模型平台的实现大家自行参考https://www.cloudwego.io/zh/docs/eino/ecosystem_integration/chat_model/,目前字节,阿里,百度,openai等平台的模型都可以传参快速调用了,如果上述平台没有覆盖就需要自己实现,后面会给大家demo
豆包的话不光可以通过API_KEY也可以通过EndPointID进行参考这里

直接调用

模型的参数建议写配置文件里,实际生产环境下这东西应该是支持独立于代码快速发布的,但是自己玩的话怎么来都行,截图如下
在这里插入图片描述

package mainimport ("context""fmt""os""time""github.com/cloudwego/eino-ext/components/model/ark""github.com/cloudwego/eino/schema""github.com/joho/godotenv"
)func Generate() {// 	// 加载.env文件err := godotenv.Load("./model.env")if err != nil {fmt.Println("Error loading.env file:", err)return}//openAIBaseURL := os.Getenv("OPENAI_BASE_URL")ctx := context.Background()timeout := 30 * time.Second// 初始化模型model, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{APIKey:  os.Getenv("OPENAI_API_KEY"),Model:   os.Getenv("OPENAI_MODEL_NAME"),Timeout: &timeout,})if err != nil {panic(err)}// 准备消息messages := []*schema.Message{schema.SystemMessage("你是一个助手"),schema.UserMessage("你好"),}// 生成回复response, err := model.Generate(ctx, messages)if err != nil {panic(err)}// 处理回复println(response.Content)// 获取 Token 使用情况if usage := response.ResponseMeta.Usage; usage != nil {println("提示 Tokens:", usage.PromptTokens)println("生成 Tokens:", usage.CompletionTokens)println("总 Tokens:", usage.TotalTokens)}
}

非流式的调用结果如下在这里插入图片描述

流式Demo
package mainimport ("context""fmt""os""time""github.com/cloudwego/eino-ext/components/model/ark""github.com/cloudwego/eino/schema""github.com/joho/godotenv"
)func Generate() {// 	// 加载.env文件err := godotenv.Load("./model.env")if err != nil {fmt.Println("Error loading.env file:", err)return}//openAIBaseURL := os.Getenv("OPENAI_BASE_URL")ctx := context.Background()timeout := 30 * time.Second// 初始化模型model, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{APIKey:  os.Getenv("OPENAI_API_KEY"),Model:   os.Getenv("OPENAI_MODEL_NAME"),Timeout: &timeout,})if err != nil {panic(err)}// 准备消息messages := []*schema.Message{schema.SystemMessage("你是一个助手"),schema.UserMessage("你好"),}// 生成回复// response, err := model.Generate(ctx, messages)// if err != nil {// 	panic(err)// }// // 处理回复// println(response.Content)// // 获取 Token 使用情况// if usage := response.ResponseMeta.Usage; usage != nil {// 	println("提示 Tokens:", usage.PromptTokens)// 	println("生成 Tokens:", usage.CompletionTokens)// 	println("总 Tokens:", usage.TotalTokens)// }st, _ := model.Stream(ctx, messages)for {msg, err := st.Recv()if err != nil {st.Close()break}if msg.Content != "" {fmt.Printf("流式调用当前包结果:%s\n", msg.Content)}}
}

在这里插入图片描述
对速度有要求的话是一定要流式的

放在图中调用

package mainimport ("context""fmt""os""time""github.com/cloudwego/eino-ext/components/model/ark""github.com/cloudwego/eino/compose""github.com/cloudwego/eino/schema""github.com/joho/godotenv"
)func modelGrapg() {// 	// 加载.env文件err := godotenv.Load("./model.env")if err != nil {fmt.Println("Error loading.env file:", err)return}//openAIBaseURL := os.Getenv("OPENAI_BASE_URL")ctx := context.Background()timeout := 30 * time.Second// 初始化模型model, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{APIKey:  os.Getenv("OPENAI_API_KEY"),Model:   os.Getenv("OPENAI_MODEL_NAME"),Timeout: &timeout,})if err != nil {panic(err)}g := compose.NewGraph[[]*schema.Message, *schema.Message]()g.AddChatModelNode("model_node", model)g.AddEdge(compose.START, "model_node")g.AddEdge("model_node", compose.END)modelRunnable, err := g.Compile(ctx)if err != nil {panic(err)}res, err := modelRunnable.Invoke(ctx, []*schema.Message{schema.SystemMessage("你是一个助手"),schema.UserMessage("你好"),})if err != nil {panic(err)}fmt.Println(res.Content)
}

如何实现自定义的ChatModel

参考官方文档实现就好了,demo已经很详细了
https://www.cloudwego.io/zh/docs/eino/core_modules/components/chat_model_guide/#%E8%87%AA%E8%A1%8C%E5%AE%9E%E7%8E%B0%E5%8F%82%E8%80%83

http://www.dtcms.com/a/503203.html

相关文章:

  • Docker命令大全:从入门到精通
  • 沈阳网站制作公司思路留学网站建设
  • js封装一个双精度算法实现
  • 性能优化:提升软件效率的实用指南
  • 【FPGA】设计流程——Veriolg输入
  • 公共交通安全再讨论
  • C++蓝桥杯之结构体10.15
  • 从原理到实战:Java 队列(Queue)指南
  • 【C++】用红黑树封装map与set
  • php网络公司网站源码网站建设与管理的体会
  • 做网站要先申请域名吗做彩铃的网站
  • 零基础做地方门户网站装修网名大全
  • Docker入门手册
  • 谷歌 Gemini 2.5 Flash Image 震撼升级图像编辑
  • Spring Boot 3零基础教程,WEB 开发 整合 Thymeleaf 笔记36
  • [go 面试] 并发与数据一致性:事务的保障
  • gitee——代码托管平台(进行托管所需的相关软件)
  • JavaWeb后端-Maven、单元测试
  • 微网站后台怎么注册有哪些公众号是小黄油的
  • 【SayCan】LLM+价值函数:以言为引,量力而行
  • 做亚马逊外国网站需要语言好吗大都会app约
  • DaVinci4.2.3 | 无限次AI图片生成,可以预制多种风格,提示限制清理数据重新进即可
  • Linux 配置双栈协议(IPv4 + IPv6)详解
  • JAVA全栈JVM篇————初识JVM
  • 在PyTorch中实现自定义损失函数
  • Hoeffding树:数据流挖掘中的高效分类算法详解
  • 深入解析Java并发基石AQS框架的设计哲学与实战应用
  • 爬虫+Docker:让你的爬虫项目一键部署、可移植
  • 微信网站设计模板下载不用建网站怎么做淘宝客
  • wordpress主题 外贸网站模板下载新品发布会流程