eino_adk调用大模型

2026年1月12日 · 138 字 · 1 分钟

通过eino的adk封装agent调用大模型

通过adk调用大模型

在adk中基本单元是agent,如果想要运行一个模型,需要封装成一个agent(有点仿照谷歌adk的意思)

创建一个agent

	ctx := context.Background()
	messages := CreateMessage() //创建一个消息,请看关于enio调用大模型的文章
	//deepseekModel := CreateDeepseekModel()
	arkModel := CreateArkModel() //关于ark的模型创建,请看关于enio调用大模型的文章
	//这里创建一个agent
	a, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
		Name:        "timeConter",           //agent的名称
		Description: "时间计算器",                //agent的描述
		Instruction: `你是时间计算器,请根据用户的问题计算时间`, //agent的指令
		Model:       arkModel,
		//毕竟是agent,在这里可以添加工具就先不添加了
	})
	if err != nil {
		log.Fatal(fmt.Errorf("failed to create chatmodel: %w", err))
	}

Run调用

在这里调用刚刚创建的agent

	//runner调用agent
	runner := adk.NewRunner(ctx, adk.RunnerConfig{
		Agent: a,
	})
	//返回一个迭代器
	//iter := runner.Query(ctx, "现在时"+time.Now().Format("2006-01-02 15:04:05")+"距离2027年还有几天")
	//也可以通过messages来调用
	iter := runner.Run(ctx, messages)
	//定义一下最后的msg
	var lastMsg adk.Message
	//循环迭代器
	for {
		//迭代器获取事件
		event, ok := iter.Next()
		if !ok {
			break
		}
		if event.Err != nil {
			log.Fatal(event.Err)
		}
		msg, err := event.Output.MessageOutput.GetMessage()
		if err != nil {
			log.Fatal(err)
		}
		fmt.Printf("%s", msg.Content)
		lastMsg = msg
	}
	fmt.Println()
	fmt.Println("lastMsg:", lastMsg.Content)

返回的内容

从2026年1月12日09:19:58到2027年1月1日00:00:00,距离2027年还有353天。

计算过程说明:
1. 2026年为平年(2月有28天),全年共365天。
2. 从2026年1月12日到2026年12月31日的天数为:365 - 12 = 353天(扣除1月1日至1月12日的12天,剩余时间即为到2027年1月1日00:00的整天数)。
lastMsg: 从2026年1月12日09:19:58到2027年1月1日00:00:00,距离2027年还有353天。

计算过程说明:
1. 2026年为平年(2月有28天),全年共365天。
2. 从2026年1月12日到2026年12月31日的天数为:365 - 12 = 353天(扣除1月1日至1月12日的12天,剩余时间即为到2027年1月1日00:00的整天数)。
从2026-01-12 09:20:31到2027年1月1日00:00:00,剩余的时间为**353天14小时39分28秒**。