2026/5/21 14:08:18
网站建设
项目流程
建立自己的网站需要多少钱,快速开发软件,做村易通网站站长要收费吗,网站建设的公司工作室本文将带你从零开始#xff0c;使用 Go 语言和字节跳动开源的 Eino 框架#xff0c;构建一个能够调用工具的 AI Agent。我们会分别实现 Function Calling 和 ReAct 两种主流模式#xff0c;并对比分析它们的区别一、什么是 AI Agent#xff1f;
在聊 Agent 之前#xff0c…本文将带你从零开始使用 Go 语言和字节跳动开源的 Eino 框架构建一个能够调用工具的 AI Agent。我们会分别实现 Function Calling 和 ReAct 两种主流模式并对比分析它们的区别一、什么是 AI Agent在聊 Agent 之前我们先看一个场景用户北京今天天气怎么样如果是普通的 LLM它只能基于训练数据编造一个答案。但如果是AI Agent它会AI Agent LLM 工具调用能力 决策能力简单说Agent 让 LLM 从只会说变成能做事。二、两种主流模式实现 Agent 有两种主流模式模式核心思想特点Function CallingLLM 直接输出要调用的函数简单直接适合明确任务ReActReasoning Acting先思考再行动推理过程可见适合复杂任务接下来我们用代码实现这两种模式。三、准备工作本篇文章我们用字节的开源AI Agent框架eino和字节doubao大模型来做例子。3.1 获取字节豆包大模型 API Key我们使用字节跳动的豆包大模型需要先获取 API KeyStep 1注册火山引擎账号访问 火山引擎官网 注册并登录Step 2进入火山方舟控制台访问 火山方舟控制台Step 3创建 API Key左侧菜单选择「API Key 管理」点击「创建 API Key」复制生成的 API Key格式xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxStep 4创建推理接入点左侧菜单选择「模型推理」→「创建推理接入点」选择模型推荐doubao-pro-32k或doubao-lite-32k创建后获得接入点 ID格式ep-20240101120000-xxxxx提示新用户通常有免费额度doubao-lite系列价格最低适合学习测试。3.2 创建项目mkdir eino-example cd eino-examplego mod init eino-example3.3 安装依赖go get github.com/cloudwego/einogo get github.com/cloudwego/eino-ext/components/model/ark3.4 定义工具首先我们需要定义一个工具供 Agent 调用。创建tools/tools.gopackage tools import ( context encoding/json fmt github.com/cloudwego/eino/components/tool github.com/cloudwego/eino/schema ) // WeatherTool 查询天气的工具 type WeatherTool struct{} // NewWeatherTool 创建工具实例 func NewWeatherTool() *WeatherTool { return WeatherTool{} } // Info 返回工具的元信息名称、描述、参数 func (t *WeatherTool) Info(ctx context.Context) (*schema.ToolInfo, error) { return schema.ToolInfo{ Name: get_weather, Desc: 查询指定城市的天气信息, ParamsOneOf: schema.NewParamsOneOfByParams(map[string]*schema.ParameterInfo{ city: { Type: schema.String, Desc: 城市名称如北京、上海, Required: true, }, }), }, nil } // InvokableRun 工具的执行逻辑 func (t *WeatherTool) InvokableRun(ctx context.Context, args string, opts ...tool.Option) (string, error) { // 解析参数 var input struct { City string json:city } if err : json.Unmarshal([]byte(args), input); err ! nil { return , fmt.Errorf(invalid input: %w, err) } // 模拟天气查询实际项目中调用天气 API result : map[string]interface{}{ city: input.City, temperature: 25°C, weather: 晴, humidity: 65%, } output, _ : json.Marshal(result) return string(output), nil }关键点Info()这个方法告诉 LLM 这个工具的名称、功能和参数InvokableRun()这个方法是工具的实际执行逻辑LLM 会以 JSON 格式传入参数四、模式一Function CallingFunction Calling 是最直接的方式LLM 分析用户输入后直接输出要调用的函数名和参数。4.1 工作流程用户: 北京天气怎么样 ↓LLM 分析意图输出: { name: get_weather, arguments: {city: 北京} } ↓框架执行工具返回: {city: 北京, temperature: 25°C, ...} ↓LLM 根据工具结果生成回复: 北京今天天气晴朗气温25°C...4.2 代码实现// RunFunctionCallingAgent 运行 ADK 模式的 AgentFunction Calling func RunFunctionCallingAgent() { ctx : context.Background() // 1. 创建 LLM火山引擎 - doubao-seed 模型 llm, err : ark.NewChatModel(ctx, ark.ChatModelConfig{ APIKey: 27330803-5982-4cb8-a359-55d0c375d15d, // 火山引擎 API Key Model: doubao-seed-1-6-lite-251015, // 推理接入点 ID }) if err ! nil { panic(err) } // 2. 创建工具 weatherTool : tools.NewWeatherTool() // 3. 创建 Agent agent, err : adk.NewChatModelAgent(ctx, adk.ChatModelAgentConfig{ Name: WeatherAssistant, Description: 一个能查询天气的 AI 助手, Instruction: 你是一个友好的天气助手。 当用户询问天气时使用 get_weather 工具查询然后用自然语言回复用户。, Model: llm, ToolsConfig: adk.ToolsConfig{ ToolsNodeConfig: compose.ToolsNodeConfig{ Tools: []tool.BaseTool{weatherTool}, }, }, MaxIterations: 10, }) if err ! nil { panic(err) } // 4. 运行 Agent关闭流式模式确保完整的对话流程 runner : adk.NewRunner(ctx, adk.RunnerConfig{ Agent: agent, EnableStreaming: false, }) // 5. 发送消息 messages : []adk.Message{ schema.UserMessage(北京今天天气怎么样), } iter : runner.Run(ctx, messages) // 6. 处理响应 var finalContent string for { event, ok : iter.Next() if !ok { break } if event.Err ! nil { panic(event.Err) } // 显示 Action 信息工具调用 if event.Action ! nil { fmt.Printf([Action] Agent: %s\n, event.AgentName) } if event.Output ! nil event.Output.MessageOutput ! nil { msg : event.Output.MessageOutput.Message if msg ! nil { switch msg.Role { case schema.Assistant: if msg.Content ! { finalContent msg.Content fmt.Println([Assistant], msg.Content) } for _, tc : range msg.ToolCalls { fmt.Printf([Tool Call] %s(%s)\n, tc.Function.Name, tc.Function.Arguments) } case schema.Tool: fmt.Printf([Tool Result] %s\n, msg.Content) } } } } // 如果没有最终回复说明模型没有生成总结 if finalContent { fmt.Println(\n⚠️ 模型未生成最终回复可能是模型配置问题或该模型不支持完整的 Function Calling 流程) } }4.3 核心概念ADK (Agent Development Kit)Eino 提供的 Agent 开发工具包ChatModelAgent基于聊天模型的 Agent支持 Function CallingRunnerAgent 运行器负责消息循环和工具执行MaxIterations最大迭代次数一次用户输入可能触发多次工具调用4.4 输出可以看到最后一行Assistant输出了北京的天气运行 ADK 模式 Agent (Function Calling)... [Tool Call] get_weather({city:北京}) [Tool Result] {city:北京,humidity:65%,temperature:25°C,weather:晴} [Tool Call] get_weather({city:北京}) [Tool Result] {city:北京,humidity:65%,temperature:25°C,weather:晴} [Assistant] 北京今天天气晴气温25°C湿度65%五、模式二ReActReAct Reasoning Acting核心思想是让 LLM 交替进行「推理」和「行动」。5.1 工作流程用户: 北京和上海今天天气怎么样比较一下 ↓Thought: 用户想知道两个城市的天气并比较我需要分别查询Action: get_weather({city: 北京})Observation: {city: 北京, temperature: 25°C, weather: 晴} ↓Thought: 已获取北京天气还需要查询上海Action: get_weather({city: 上海}) Observation: {city: 上海, temperature: 28°C, weather: 多云} ↓Thought: 两个城市的天气都获取到了可以进行比较Final Answer: 北京今天晴朗气温25°C上海多云气温28°C。上海比北京热3度...ReAct 的优势推理过程透明便于调试适合需要多步推理的复杂任务可以处理需要组合多个工具的场景5.2 代码实现package main import ( context fmt eino-example/tools github.com/cloudwego/eino-ext/components/model/ark github.com/cloudwego/eino/components/tool github.com/cloudwego/eino/compose github.com/cloudwego/eino/flow/agent/react github.com/cloudwego/eino/schema ) // RunReActAgent 运行 ReAct 模式的 Agent // ReAct Reasoning Acting模型会交替进行推理和行动 func RunReActAgent() { ctx : context.Background() // 1. 创建 LLM火山引擎 - doubao 模型 llm, err : ark.NewChatModel(ctx, ark.ChatModelConfig{ APIKey: 27330803-5982-4cb8-a359-55d0c375d15d, Model: doubao-seed-1-6-lite-251015, }) if err ! nil { panic(err) } // 2. 创建工具 weatherTool : tools.NewWeatherTool() // 3. 创建 ReAct Agent agent, err : react.NewAgent(ctx, react.AgentConfig{ // 使用支持工具调用的模型 ToolCallingModel: llm, // 配置可用的工具 ToolsConfig: compose.ToolsNodeConfig{ Tools: []tool.BaseTool{weatherTool}, }, // 最大执行步数防止无限循环 MaxStep: 10, }) if err ! nil { panic(err) } // 4. 准备输入消息直接在消息中包含系统提示替代已弃用的 NewPersonaModifier messages : []*schema.Message{ schema.SystemMessage(你是一个智能助手擅长使用工具来回答用户问题。 当用户询问天气时请使用 get_weather 工具查询然后用友好的语言回复。 请在回答前先思考需要采取什么行动。), schema.UserMessage(北京和上海今天天气怎么样帮我比较一下), } // 5. 流式运行 Agent fmt.Println( ReAct Agent 开始执行 ) fmt.Println() stream, err : agent.Stream(ctx, messages) if err ! nil { panic(err) } // 6. 处理流式响应 for { chunk, err : stream.Recv() if err ! nil { break // 流结束 } // 输出模型的思考和回复 if chunk.Content ! { fmt.Print(chunk.Content) } // 显示工具调用信息 for _, tc : range chunk.ToolCalls { if tc.Function.Name ! { fmt.Printf(\n[调用工具: %s, 参数: %s]\n, tc.Function.Name, tc.Function.Arguments) } } } fmt.Println() fmt.Println() fmt.Println( ReAct Agent 执行完成 ) }5.3 核心配置MaxStep最大步数防止无限循环5.4 输出可以看到最后一行大模型输出了答案运行 ReAct 模式 Agent... ReAct Agent 开始执行 北京和上海今天的天气情况如下 北京晴气温25°C湿度65% 上海晴气温25°C湿度65% 两者天气完全一致都是晴朗舒适的状态~ ReAct Agent 执行完成 六、两种模式对比对比项Function CallingReAct思维方式直觉式直接决策分析式逐步推理透明度黑盒只看到结果白盒能看到思考过程适用场景简单明确的任务复杂多步的任务Token 消耗较少较多包含推理文本可控性较低较高调试难度较难较易选择建议用 Function Calling任务明确、追求效率、Token 敏感用 ReAct任务复杂、需要可解释性、需要多工具协作七、完整项目结构eino-example/├── main.go # 入口文件├── react_agent.go # ReAct Agent 实现├── tools/│ └── tools.go # 工具定义├── go.mod└── go.summain.go支持模式切换func main() { // 通过命令行参数选择模式 // go run . adk - ADK Agent (Function Calling) // go run . react - ReAct Agent mode : adk if len(os.Args) 1 { mode os.Args[1] } switch mode { case react: fmt.Println(运行 ReAct 模式 Agent...) RunReActAgent() default: fmt.Println(运行 ADK 模式 Agent (Function Calling)...) RunFunctionCallingAgent() } }运行方式# Function Calling 模式go run .# ReAct 模式go run . react八、总结本文介绍了使用 Go Eino 框架构建 AI Agent 的两种主流模式Function Calling简单直接LLM 直接决定调用哪个工具ReAct先推理再行动适合复杂任务无论哪种模式核心都是让 LLM 具备「使用工具」的能力从而完成更复杂的任务。相当于给大模型的使用注入了左臂右膀让大模型可以获取我们工作中的领域知识。过去在各业务中落地算法能力都是先定义专属算法框架再基于业务数据训练出定制化模型来使用BERT 模型问世后行业开始更多通过基于 BERT 的微调方式将业务知识植入模型以适配场景而到了与 BERT 同属 Transformer 框架的大模型时代AI Agent 为大模型赋予了自主获取私域业务知识的能力大模型只需专注核心的文本理解工作无需再为适配业务做额外的训练、预训练或微调。想入门 AI 大模型却找不到清晰方向备考大厂 AI 岗还在四处搜集零散资料别再浪费时间啦2025 年AI 大模型全套学习资料已整理完毕从学习路线到面试真题从工具教程到行业报告一站式覆盖你的所有需求现在全部免费分享扫码免费领取全部内容一、学习必备100本大模型电子书26 份行业报告 600 套技术PPT帮你看透 AI 趋势想了解大模型的行业动态、商业落地案例大模型电子书这份资料帮你站在 “行业高度” 学 AI1. 100本大模型方向电子书2. 26 份行业研究报告覆盖多领域实践与趋势报告包含阿里、DeepSeek 等权威机构发布的核心内容涵盖职业趋势《AI 职业趋势报告》《中国 AI 人才粮仓模型解析》商业落地《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》领域细分《AGI 在金融领域的应用报告》《AI GC 实践案例集》行业监测《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。3. 600套技术大会 PPT听行业大咖讲实战PPT 整理自 2024-2025 年热门技术大会包含百度、腾讯、字节等企业的一线实践安全方向《端侧大模型的安全建设》《大模型驱动安全升级腾讯代码安全实践》产品与创新《大模型产品如何创新与创收》《AI 时代的新范式构建 AI 产品》多模态与 Agent《Step-Video 开源模型视频生成进展》《Agentic RAG 的现在与未来》工程落地《从原型到生产AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。二、求职必看大厂 AI 岗面试 “弹药库”300 真题 107 道面经直接抱走想冲字节、腾讯、阿里、蔚来等大厂 AI 岗这份面试资料帮你提前 “押题”拒绝临场慌1. 107 道大厂面经覆盖 Prompt、RAG、大模型应用工程师等热门岗位面经整理自 2021-2025 年真实面试场景包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题每道题都附带思路解析2. 102 道 AI 大模型真题直击大模型核心考点针对大模型专属考题从概念到实践全面覆盖帮你理清底层逻辑3. 97 道 LLMs 真题聚焦大型语言模型高频问题专门拆解 LLMs 的核心痛点与解决方案比如让很多人头疼的 “复读机问题”三、路线必明 AI 大模型学习路线图1 张图理清核心内容刚接触 AI 大模型不知道该从哪学起这份「AI大模型 学习路线图」直接帮你划重点不用再盲目摸索路线图涵盖 5 大核心板块从基础到进阶层层递进一步步带你从入门到进阶从理论到实战。L1阶段:启航篇丨极速破界AI新时代L1阶段了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理、关键技术以及大模型应用场景。L2阶段攻坚篇丨RAG开发实战工坊L2阶段AI大模型RAG应用开发工程主要学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3阶段跃迁篇丨Agent智能体架构设计L3阶段大模型Agent应用架构进阶实现主要学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造Agent智能体。L4阶段精进篇丨模型微调与私有化部署L4阶段大模型的微调和私有化部署更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。L5阶段专题集丨特训篇 【录播课】四、资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容2025 年想抓住 AI 大模型的风口别犹豫这份免费资料就是你的 “起跑线”