具有模型上下文协议(MCP)的Gemini工具感知CLI聊天机器人 该项目是一个基于Node.js的命令行界面(CLI)聊天机器人,它通过模型上下文协议(MCP)将谷歌的Gemini AI与工具调用功能集成在一起。它支持人工智能辅助的函数调用、动态工具执行和对话界面。这对于希望构建与API、工具或服务实时交互的AI代理的开发人员来说是理想的。
🧠 项目概述 此CLI聊天机器人使用:
Google Gemini(生成式人工智能)用于处理和生成对话响应。
MCP(模型上下文协议)用于注册和调用外部工具。
SSE(服务器发送事件)用于实时工具交互。
一个由Node.js和readline支持的简单交互式CLI界面。
AI接收上下文,根据需要调用工具,并返回增强的响应——所有这些都在聊天循环中。
📁 项目结构 bash 复制 编辑 客户/ │ ├── index.js#主要入口点 ├── package.json#项目元数据和依赖关系 ├── .env#环境变量(Gemini API密钥) └── README.md#文档(此文件) 🚀 特性 ✅ 基于文本的CLI界面
✅ Gemini 2.0 Flash模型集成
✅ 支持使用Gemini的functionDeclarations调用函数/工具
✅ 通过MCP动态工具列表
✅ 工具结果注入聊天历史记录
✅ 刀具执行后Gemini的自动重新调用
✅ 干净的错误处理(包括Gemini 503响应)
✅ 完全异步流
🔧 使用的技术 工具/库用途 @google/genai连接到google Gemini API @modelcontextprotocol/sdk通过SSE与工具服务器交互 dotenv安全地管理API密钥 readline/promises异步CLI输入处理 Node.js(ESM)运行时和生态系统
⚙️ 先决条件 在运行项目之前,请确保已安装以下内容:
Node.js v18+
有效的Google Gemini API密钥
运行在以下位置的MCP兼容工具服务器http://localhost:3001/sse
📦 安装 克隆存储库:
bash 复制 编辑 克隆https://github.com/your-username/gemini-mcp-chatbot.git cd gemini mcp聊天机器人 安装依赖项:
bash 复制 编辑 npm安装 创建.env文件:
环境 复制 编辑 GEMINI_API_KEY=您的\_ oogle_GEMINI_API_KEY_here 🧠 它是如何工作的——一步一步
- 启动并连接
当应用程序启动时,它使用服务器发送事件(SSEClientTransport)连接到MCP服务器。
然后,它通过listTools()动态检索所有注册的工具,并将它们的模式注册到Gemini。
- 读取用户输入
它使用readline.promises在终端中提示用户。
输入已添加到聊天历史记录中。
- 呼叫Gemini模型
Google Gemini的generateContent方法被调用。
它接收聊天历史记录和工具列表(functionDeclarations)作为上下文。
- 函数调用处理
如果Gemini选择调用一个工具,它将返回一个functionCall对象。
提取工具名称和参数,并通过mcpClient.callTool将其发送到MCP服务器。
- 将工具结果插入聊天
从工具返回的结果被插入回对话中,就像用户提供的一样。
更新的历史记录将再次传递给Gemini,以进行后续响应。
- 显示响应
如果没有工具调用,响应将简单地打印到终端。
循环继续,等待下一个用户输入。
🔍 示例工具调用 假设工具服务器有一个名为getWeather的工具:
工具架构: 数据 复制 编辑 { “name”:“getWeather”, “description”:“根据城市返回天气”, “参数”:{ “类型”:“对象”, “属性”:{ 城市 “type”:“string” } }, “必填”:\[“城市”\] } } 对话: 程序设计 复制 编辑 你:德里的天气怎么样?
AI:调用工具getWeather
AI:工具结果:德里气温32°C,阳光明媚。
你:谢谢! 🧪 示例用例 🤖 构建自动调用API/工具的AI代理。
🔧 运行shell命令的AI DevOps助手。
🛠️ 使用后端工具检索答案的产品聊天机器人。
📊 具有实时工具访问功能的AI仪表板。
🔌 人工智能封装在微服务之上。
📄 文件:index.js--说明 第节它的作用 dotenv/config加载.env变量(Gemini键) readline/promises创建异步CLI接口 GoogleGenAI初始化Gemini API客户端 Client/SSEClientTransport连接到MCP服务器 listTools()获取工具列表+模式 generateContent()向Gemini发送提示和工具 函数调用检查Gemini是否要调用工具 mcpClient.callTool()通过MCP执行该工具 chatHistory.push()维护来回内存 chatLoop()管理整个进程的主循环
🛠️ 故障排除 问题修复 401未经授权检查您的Gemini API密钥 工具返回未定义确保工具在MCP中正确定义 503来自Gemini请求太多--稍后重试 CLI冻结使用CTRL+C并重新启动 SSE连接错误确保MCP服务器正在以下位置运行http://localhost:3001/sse
📈 未来改进 🧠 多圈记忆存储
💾 在本地保存对话
🌐 WebSocket支持实时更新
🛡️ 使用OAuth进行工具身份验证
📦 代理的NPM包版本
👨💻 贡献 如果你想改进这个项目,可以随时打开问题或拉取请求。
📝 许可证 该项目在MIT许可证下是开源的。
🙌 致谢 谷歌双子座
模型上下文协议
OpenAI函数调用灵感
社区贡献者
