通过ADK调用AI Agent,以及历史消息的保存
2026年1月12日 · 419 字 · 2 分钟
通过通过ADK调用AI Agent,实现一个活动策划大师",调用了一些工具
通过ADK调用AI Agent,以及历史消息的保存
通过通过ADK调用AI Agent
调用agent
func WeatherAgent() {
ctx := context.Background()
//创建model
model := mytool.CreateDeepseekModel()//查看eino调用大模型文章
//创建工具集
tools := []tool.BaseTool{
//时间
mytool.CreateTimeTool(),//查看自行实现一个Eino工具文章
//天气
mytool.CreateWeatherTool(),//查看获取用户当前的位置坐标文章
//位置
mytool.CreateLocationTool(),//查看天气预报工具文章
}
//创建agent
agent, err := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Name: "activity_agent",
Description: "活动策划大师",
Instruction: "请根据未来天气安排活动", //一个agent可能是另一个agent的subagent,所以agent的功能需要描绘清楚
Model: model,
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: tools,
},
},
})
if err != nil {
panic(err)
}
//运行agent
runner := adk.NewRunner(ctx, adk.RunnerConfig{
Agent: agent,
})
//返回一个迭代器
iter := runner.Query(ctx, "明天的天气适合开运动会吗")
//循环迭代器
for {
//迭代器获取事件
event, ok := iter.Next()
if !ok {
break
}
if event.Err != nil {
panic(event.Err)
}
msg, err := event.Output.MessageOutput.GetMessage()
if err != nil {
panic(err)
}
fmt.Printf("%s:%s\n", msg.Role, msg.Content)
}
}
调用结果
assistant:我需要知道您所在的城市才能查询明天的天气情况。让我先获取您的位置信息。
tool:当前位置: 省:内蒙古自治区 市:呼和浩特市 城市编码:150000
assistant:现在我来查询呼和浩特市明天的天气情况。
tool:天气预报: 白天天气: 晴, 夜晚天气: 晴, 白天温度: 0℃, 夜晚温度: -13℃, 白天风向: 西南, 夜晚风向: 西南, 白天风力: 1-3, 夜晚风力: 1-3
assistant:根据呼和浩特市明天的天气预报:
**天气情况:**
- 白天:晴,温度0℃
- 夜晚:晴,温度-13℃
- 风向:西南风,风力1-3级
**是否适合开运动会的分析:**
**优点:**
1. **晴天** - 没有雨雪,适合户外活动
2. **风力较小** - 1-3级风对运动会影响不大
3. **天气稳定** - 白天和夜晚都是晴天
**需要考虑的因素:**
1. **温度较低** - 白天0℃,对于运动会来说偏冷,特别是对于需要长时间在户外活动的运动员和观众
2. **早晚温差大** - 白天0℃,夜晚-13℃,温差较大
**建议:**
1. 如果必须举办,建议安排在中午时段(温度相对较高)
2. 提醒参与者做好保暖措施,穿着适当的运动服装
3. 准备热饮和取暖设施
4. 考虑缩短活动时间,避免长时间暴露在低温环境中
如果想要只看最后结果,不需要打印分析过程
func WeatherAgent() {
ctx := context.Background()
//创建model
model := mytool.CreateDeepseekModel()
............
............
//返回一个迭代器
iter := runner.Query(ctx, "明天的天气适合开运动会吗")
//循环迭代器
var lastMsg adk.Message
for {
............
............
if err != nil {
panic(err)
}
// fmt.Printf("%s:%s\n", msg.Role, msg.Content)
lastMsg = msg
}
if lastMsg.Role == schema.Assistant && len(lastMsg.Content) > 0 {
fmt.Println("lastMsg:", lastMsg.Content)
}
}
最后结果
lastMsg: 根据呼和浩特市明天的天气预报:
**明天天气情况:**
- 白天:晴,温度0℃,西南风1-3级
- 夜晚:晴,温度-13℃,西南风1-3级
**是否适合开运动会:**
**适合的因素:**
1. **晴天**:没有雨雪,天气晴朗,适合户外活动
2. **风力适中**:1-3级微风,不会影响比赛
3. **能见度好**:晴天能见度高,适合各种运动项目
**需要注意的因素:**
1. **温度较低**:白天0℃,对运动员和观众来说可能有些冷
2. **早晚温差大**:白天0℃,夜晚-13℃,如果运动会持续到傍晚需要注意保暖
**建议:**
- 运动会可以正常举行,但要做好防寒保暖措施
- 建议运动员穿着适当的保暖运动服装
- 观众需要穿厚外套,准备热水等保暖物品
- 如果可能,尽量安排在中午前后温度相对较高的时段进行
总体来说,**明天适合开运动会**,天气条件良好,主要是需要注意防寒保暖。
历史消息的保存
就是定义一个消息切片,每次把问题和回答都append进入这个切片
func WeatherAgent() {
ctx := context.Background()
..............
..............
//运行agent
runner := adk.NewRunner(ctx, adk.RunnerConfig{
Agent: agent,
})
messages := []adk.Message{
{Role: schema.User, Content: "明天的天气适合开运动会吗"},
}
//返回一个迭代器
iter := runner.Run(ctx, messages)
..............
..............
if lastMsg.Role == schema.Assistant && len(lastMsg.Content) > 0 {
fmt.Println("lastMsg:", lastMsg.Content)
messages = append(messages, lastMsg)
}
fmt.Println("=======第一轮结束=======")
messages = append(messages, &schema.Message{Role: schema.User, Content: "运动会的晚上会结冰吗"})
//返回一个迭代器
iter = runner.Run(ctx, messages)
..............
..............
fmt.Println("=======第二轮结束=======")
}
func main() {
WeatherAgent()
}
最后调用结果
lastMsg: 根据呼和浩特市明天的天气预报:
**明天天气情况:**
- 白天:晴,气温0℃,西南风1-3级
- 夜晚:晴,气温-13℃,西南风1-3级
**关于是否适合开运动会的建议:**
**有利条件:**
1. **晴天无雨** - 非常适合户外活动
2. **风力较小** - 西南风1-3级,不会影响比赛
3. **天气稳定** - 全天都是晴天
**需要注意的方面:**
1. **温度较低** - 白天0℃,对于户外运动会来说偏冷
2. **早晚温差大** - 白天0℃到夜晚-13℃,温差较大
**建议:**
- **可以举办运动会**,但需要做好防寒保暖措施
- 建议运动员穿着适当的保暖运动服装
- 观众需要穿厚衣服,准备热水等保暖用品
- 如果可能,尽量将比赛安排在中午前后温度相对较高的时候
- 注意运动员热身要充分,避免因低温导致肌肉拉伤
总体来说,天气条件除了温度较低外,其他方面都很适合开运动会。只要做好防寒准备,是可以顺利举办的。
=======第一轮结束=======
lastMsg: 根据呼和浩特市明天的天气预报:
**明天晚上天气情况:**
- 天气:晴
- 温度:-13℃
- 风向:西南风
- 风力:1-3级
**关于晚上是否会结冰的分析:**
**会结冰的可能性很高,原因如下:**
1. **温度极低**:-13℃远低于水的冰点(0℃),这个温度下任何暴露在外的水都会迅速结冰。
2. **结冰风险因素:**
- 运动会场地如果有积水或湿滑区域,会很快结冰
- 洒水后的跑道、草坪等表面容易结冰
- 饮用水、饮料等液体如果洒在地上会结冰
- 运动员汗水形成的湿滑区域也可能结冰
3. **安全隐患:**
- 结冰的地面非常滑,容易导致运动员和观众摔倒受伤
- 运动器材表面结冰会影响使用
- 夜间照明设备周围如果有水汽凝结也可能结冰
**建议措施:**
1. 运动会结束后立即清理场地上的积水
2. 检查跑道和运动场地是否有湿滑区域
3. 提醒运动员和工作人员注意地面结冰情况
4. 如果晚上有活动,需要特别注意防滑安全
5. 考虑在可能结冰的区域撒盐或使用防滑材料
**结论:** 在-13℃的温度下,运动会场地晚上**几乎肯定会结冰**,需要提前做好防滑和安全准备。
=======第二轮结束=======