news 2026/5/23 1:37:14

第二章:Go语言大模型调用框架 - Eino自定义工具调用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第二章:Go语言大模型调用框架 - Eino自定义工具调用

1. 自定义工具

1.1 模拟调用天气API获取数据
packagetoolimport"context"// WeatherRequest 工具的参数typeWeatherRequeststruct{Citystring`json:"city"`}// WeatherResponse 工具的返回集typeWeatherResponsestruct{Citystring`json:"city"`Tempstring`json:"temp"`Weatherstring`json:"weather"`}// GetWeather 工具的执行逻辑funcGetWeather(ctx context.Context,req*WeatherRequest)(*WeatherResponse,error){// 模拟天气的API返回结果mockData:=map[string]WeatherResponse{"北京":{City:"北京",Temp:"22°C",Weather:"晴"},"上海":{City:"上海",Temp:"26°C",Weather:"多云"},"深圳":{City:"深圳",Temp:"30°C",Weather:"阵雨"},}ifdata,ok:=mockData[req.City];ok{return&data,nil}return&WeatherResponse{City:req.City,Temp:"未知",Weather:"未知"},nil}

1.2 集成工具进行回复

packagemainimport("context"myTool"day03/tool""fmt""github.com/cloudwego/eino-ext/components/model/openai""github.com/cloudwego/eino/components/tool""github.com/cloudwego/eino/components/tool/utils""github.com/cloudwego/eino/compose""github.com/cloudwego/eino/flow/agent/react""github.com/cloudwego/eino/schema""log")// 自定义工具funcmain(){ctx:=context.Background()// 调用LLMmodel,err:=openai.NewChatModel(ctx,&openai.ChatModelConfig{BaseURL:"https://api-inference.modelscope.cn/v1/",APIKey:"xxx",Model:"Qwen/Qwen3.5-35B-A3B",})iferr!=nil{log.Fatalf("创建 ChatModel 失败: %v",err)}// 创建工具weatherTool:=utils.NewTool(&schema.ToolInfo{Name:"get_weather",Desc:"查询指定城市的实时天气信息,包括温度和天气状况",ParamsOneOf:schema.NewParamsOneOfByParams(map[string]*schema.ParameterInfo{"city":{Type:schema.String,Desc:"要查询天气的城市名称,如:北京、上海、深圳",Required:true,},}),},myTool.GetWeather,)// 验证工具信息/*info, _ := weatherTool.Info(ctx) fmt.Printf("工具名: %s\n", info.Name) fmt.Printf("工具描述: %s\n", info.Desc)*/// 创建ReAct Agentagent,err:=react.NewAgent(ctx,&react.AgentConfig{ToolCallingModel:model,ToolsConfig:compose.ToolsNodeConfig{Tools:[]tool.BaseTool{weatherTool},},})iferr!=nil{log.Fatalf("创建 Agent 失败: %v",err)}// 模拟参数// args := `{"city": "深圳"}`// 执行工具/*result, err := weatherTool.InvokableRun(ctx, args) if err != nil { log.Fatal(err) } fmt.Printf("执行结果: %s\n", result)*/// 解析结果/* var resp myTool.WeatherResponse json.Unmarshal([]byte(result), &resp) fmt.Printf("城市: %s, 温度: %s, 天气: %s\n", resp.City, resp.Temp, resp.Weather)*/// 向agent 提问answer,err:=agent.Generate(ctx,[]*schema.Message{schema.UserMessage("上海今天天气怎么样?"),})iferr!=nil{log.Fatalf("Agent 执行失败: %v",err)}fmt.Printf("Agent 执行结果: %s\n",answer.Content)}

输出结果:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 1:37:11

不是所有屏幕都能叫“电子后视镜”——揭秘它的三层“国际考核”

你有没有想过,当汽车开始用一块屏幕取代传统的玻璃后视镜,这块屏幕和它背后的摄像头系统,凭什么被允许“上路”?它需要经历怎样的考验,才能获得一张合法的“准生证”?答案藏在一套极其严密的、从国际到国内…

作者头像 李华
网站建设 2026/5/23 1:35:05

okbiye AI 写作:重构毕业论文创作链路,高校规范级全流程赋能

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 引言:毕业论文写作的现实困境与破局需求 本科及硕博阶段的毕业论文,是学术能力培养的核心闭环,也是学业…

作者头像 李华
网站建设 2026/5/23 1:23:40

Apple 账号转区与使用账户余额订阅服务指南

一句话总结:绑卡阶段没有none,vpn切成全局!付款时要绑定卡or手机,因为账户没钱去搞礼品卡就完事了!1. 适用场景本文适用于以下情况:已创建 Apple Account(Apple ID)。注册时使用的是…

作者头像 李华
网站建设 2026/5/23 1:23:39

JavaWeb从0到1-DAY10-JDBC

JDBC 学习笔记 一、这一章在讲什么 JDBC(Java Database Connectivity)是 Java 提供的统一数据库访问接口。不管底层是 MySQL、Oracle 还是 PostgreSQL,Java 程序都通过同一套 JDBC API 来操作数据库。核心价值是可移植性——换数据库只换驱动…

作者头像 李华