从零开始之快速搭建一个出行Agent(一)
文章目录
- 背景介绍
- 前置依赖
- 上代码
- mcp构造
- 主函数
背景介绍
和同学聚会时分散在同城各地,找一个离大家都不远的商圈一直是比较困难的事。这里我们可以借助eino框架去超快的构建一个丐版的出行agent,帮我们解决这个问题
之所以说是丐版一是背景丐,而是实现丐
前置依赖
MCP选择:这里选择是百度千帆平台中的百度地图MCP工具
模型选择:这里大家可以自行选择支持tool call的模型即可,具体的调用过程可以参考之前的文章
上代码
因为寻找合适目的地的过程不属于一个简单问题,模型无法通过一次思考+模型调用就得出结果,所以这一定是一个react的过程,在eino中实现react agent的其中一个方式就是直接使用官方实现好的react框架,提供prompt + model + tool即可快速完成,当然你自己去写graph也是可以的,后面我们都会带大家试一试
官方代码:https://www.cloudwego.io/zh/docs/eino/core_modules/flow_integration_components/react_agent_manual/
mcp构造
这里参考的是https://www.cloudwego.io/zh/docs/eino/ecosystem_integration/tool/tool_mcp/
同时结合千帆平台提供的mcp server的地址和密钥即可
func GetBaiDuMapTool(ctx context.Context) []tool.BaseTool {sseURL := "https://mcp.map.baidu.com/sse?ak=xxxxx"cli, err := client.NewSSEMCPClient(sseURL)if err != nil {log.Fatal(err)}err = cli.Start(ctx)if err != nil {log.Fatal(err)}initRequest := mcp.InitializeRequest{}_, err = cli.Initialize(ctx, initRequest)if err != nil {log.Fatal(err)}tools, err := mcpp.GetTools(ctx, &mcpp.Config{Cli: cli})if err != nil {log.Fatal(err)}return tools
}
主函数
package mainimport ("context""soccerAgent/util""github.com/cloudwego/eino/compose""github.com/cloudwego/eino/flow/agent/react""github.com/cloudwego/eino/schema"
)func main() {ctx := context.Background()model, _ := util.GetModel()tools := util.GetBaiDuMapTool(ctx)agent, err := react.NewAgent(ctx, &react.AgentConfig{ToolCallingModel: model,ToolsConfig: compose.ToolsNodeConfig{Tools: tools},MaxStep: 20,})if err != nil {panic(err)}prompt := "请帮我查询从北京到天津的路线,并且推荐沿途的餐馆。"res, err := agent.Stream(ctx, []*schema.Message{{Role: schema.User,Content: prompt,},})if err != nil {panic(err)}for true {chunk, err := res.Recv()if err != nil {break}println("Response:", chunk.Content)}
}
这里的demo给出的是流式调用,但非流式也是可以的就是时间会久一些,大致代码如下

后续会对这个简单的agent进行持续优化,一步步熟悉用eino搭建agent的方法
