【EINO】一、ENIO 大模型交互组件_[ChatModel; ChatTemplate]

一、ENIO 大模型交互组件

ChatModel

chatmodel组件是一个与大模型交互的组件,其是与大模型交互的核心组件,但我们使用的是其实现,其官方提供了很多实现例如:openai、gemini、qwen等等,本文先依据ark进行实现。

初始化一个go项目

go mod init awesome-eino

一个最简单的ChatDemo

main.go

go 复制代码
package main

import (
	"context"
	"os"

	"github.com/cloudwego/eino-ext/components/model/ark"
	"github.com/cloudwego/eino/schema"
	"github.com/joho/godotenv"
)

func main() {
	err := godotenv.Load(".env")
	if err != nil {
		panic(err)
	}
	ctx := context.Background()
	model, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{
		APIKey: os.Getenv("ARK_API_KEY"),
		Model:  os.Getenv("MODEL"),
	})
	input := []*schema.Message {
		schema.SystemMessage("你是一个可爱的高中女生"),
		schema.UserMessage("你好"),
	}
	response, err := model.Generate(ctx, input)
	if err != nil {
		panic(err)
	}
	print(response.Content)
}

.env

复制代码
ARK_API_KEY="xxxxxxxx"
MODEL="doubao-seed-1-6-flash-250828"
EMBEDDER="doubao-embedding-text-240715"

这里运行起来之后就就会有回复啦

流式返回

go 复制代码
package main

import (
	"context"
	"os"

	"github.com/cloudwego/eino-ext/components/model/ark"
	"github.com/cloudwego/eino/schema"
	"github.com/joho/godotenv"
)

func main() {
	err := godotenv.Load(".env")
	if err != nil {
		panic(err)
	}
	ctx := context.Background()
	model, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{
		APIKey: os.Getenv("ARK_API_KEY"),
		Model:  os.Getenv("MODEL"),
	})
	input := []*schema.Message{
		schema.SystemMessage("你是一个可爱的高中女生"),
		schema.UserMessage("你好"),
	}
	/*
		response, err := model.Generate(ctx, input)
		if err != nil {
			panic(err)
		}
		print(response.Content)
	*/
	reader, err := model.Stream(ctx, input)
	if err != nil {
		panic(err)
	}
	defer reader.Recv()
	
    // 这种无限循环的循环结束方式是,所有信息打印完毕之后的报错导致的循环推出,这是不好的写法,这里由于demo先这样写了
	for {
		chunk, err := reader.Recv()
		if err != nil {
			panic(err)
		}
		print(chunk.Content)
	}
}

ChatTemplate

ChatTemplate 是一个可以以更方便的形式进行自己的提示词传递和定制化大模型交互的组件,我们在使用大模型交互组件的时候,ChatTemplate可以帮助我们更好的实现大模型交互。

go 复制代码
package main

import (
	"context"
	"os"

	"github.com/cloudwego/eino-ext/components/model/ark"
	"github.com/cloudwego/eino/components/prompt"
	"github.com/cloudwego/eino/schema"
	"github.com/joho/godotenv"
)

func main() {
	err := godotenv.Load(".env")
	if err != nil {
		panic(err)
	}
	ctx := context.Background()
	model, err := ark.NewChatModel(ctx, &ark.ChatModelConfig{
		APIKey: os.Getenv("ARK_API_KEY"),
		Model:  os.Getenv("MODEL"),
	})
	// input := []*schema.Message{
	// 	schema.SystemMessage("你是一个可爱的高中女生"),
	// 	schema.UserMessage("你好"),
	// }

	// 这里是 ChatTemplate 的使用
	template := prompt.FromMessages(schema.FString,
		schema.SystemMessage("你是一个{role}"),
		&schema.Message{
			Role:    schema.User,
			Content: "请帮帮我,堂吉诃德先生:{task}",
		},
	)
	params := map[string]any{
		"role": "著名文学人物堂吉诃德",
		"task": "写一首关于周末的押韵的诗句",
	}
	message, err := template.Format(ctx, params)

	response, err := model.Generate(ctx, message)
	if err != nil {
		panic(err)
	}
	print(response.Content)
}
相关推荐
小龙报8 小时前
【AI】高效交互的艺术:AI提示工程与大模型对话指南
人工智能·深度学习·神经网络·自然语言处理·chatgpt·交互·语音识别
梓贤Vigo14 小时前
【Axure教程】拖动分组
交互·产品经理·axure·原型·教程
cy_cy00215 小时前
当历史遇见光影:投影创新点亮文化艺术展览
科技·3d·人机交互·交互·软件构建
放下华子我只抽RuiKe516 小时前
智聊机器人进阶:从 API 调试到全功能交互界面的完美落地
开发语言·人工智能·python·机器学习·分类·机器人·交互
国医中兴16 小时前
Flutter 三方库 toggleable 鸿蒙适配指南 - 实现声明式状态切换逻辑、在 OpenHarmony 上打造极简交互组件引擎实战
flutter·交互·harmonyos
小程故事多_802 天前
CLI Agent设计详解,架构、原理与流程实现(含业务Agent交互)
人工智能·架构·aigc·交互·ai编程
..过云雨2 天前
【负载均衡oj项目】04. oj_server题目信息获取、界面渲染、负载均衡、后台交互功能
运维·c++·html·负载均衡·交互
zjjsctcdl2 天前
开源模型应用落地-FastAPI-助力模型交互-进阶篇-中间件(四)
开源·交互·fastapi
互联网散修2 天前
鸿蒙应用开发UI基础第十八节:表单交互核心组件Button、Radio、Toggle示例演示
ui·交互·harmonyos
小温冲冲3 天前
C++与QML交互指南:从基础到实战
开发语言·c++·交互