npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ylicai

v1.0.0

Published

AI对话助手终端程序

Readme

AI对话助手 - 支持MCP协议的智能终端程序

基于DeepSeek API的命令行AI对话助手,支持与AI进行自然语言对话,并集成了MCP (Model Context Protocol) 功能来扩展AI的能力。

🚀 功能特性

  • 🤖 智能对话: 基于DeepSeek API的高质量AI对话
  • 🔌 MCP协议支持: 连接外部工具和服务,大幅扩展AI能力
  • 💬 交互式界面: 友好的命令行交互体验
  • 📝 对话历史: 完整的对话记录和管理
  • 🎨 彩色输出: 丰富的终端视觉效果
  • ⚙️ 命令系统: 丰富的控制命令
  • 🛠️ 自动工具调用: AI可以智能调用MCP工具完成复杂任务
  • 🔄 热重载: 支持运行时重新加载MCP配置
  • 📦 结果折叠: 智能折叠长内容,优化终端显示效果

📋 目录

🛠️ 安装与运行

前置要求

  • Node.js 18+
  • npm

安装依赖

npm install

运行程序

npm start
# 或
node index.js

📖 使用方法

启动程序后,您可以:

1. 直接对话

输入任何文字与AI进行自然语言对话

2. 使用命令

  • /help - 显示帮助信息
  • /clear - 清空对话历史
  • /history - 显示对话历史
  • /mcp - 显示MCP服务器和工具信息
  • /reload-mcp - 重新加载MCP配置
  • /toggle-collapse - 切换工具结果折叠显示
  • /exit/quit - 退出程序

示例对话

💬 请输入您的问题: 你好,请介绍一下自己

🤖 AI助手:
你好!我是一个基于DeepSeek的AI助手。我可以帮助你解答各种问题,包括:

- 回答知识性问题
- 协助解决问题
- 提供建议和分析
- 进行创意讨论
- 编程相关帮助

有什么我可以帮助你的吗?

💬 请输入您的问题: 帮我搜索最新的AI技术发展


▼ 折叠内容 (还有 1240 个字符)
使用 /toggle-collapse 命令可以关闭折叠显示

🔌 MCP功能详解

什么是MCP?

MCP (Model Context Protocol) 是一个标准协议,允许AI助手连接到外部工具和服务,大大扩展AI的能力。通过MCP,AI可以:

  • 搜索互联网信息
  • 生成图像
  • 访问数据库
  • 调用API服务
  • 处理文件系统
  • 更多扩展功能...

配置MCP服务器

编辑 mcpserver.json 文件来配置MCP服务器:

  "mcpServers": {
      "filesystem": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem@latest", "${CWD}"],
        "disabled": false,
        "timeout": 30,
        "description": "文件系统访问工具"
      }
    }
}

### MCP工具调用示例

AI可以自动调用MCP工具。例如:

**用户**: "请帮我搜索Python机器学习的最新教程"

**AI会自动调用搜索工具**:
```xml
<use_mcp_tool>
<server_name>tavily-mcp</server_name>
<tool_name>tavily-search</tool_name>
<arguments>{"query": "Python machine learning tutorial 2024", "search_depth": "advanced"}</arguments>
</use_mcp_tool>

用户: "请帮我生成一张猫咪的图片"

AI会自动调用图像生成工具:

<use_mcp_tool>
<server_name>modelscope-image-server</server_name>
<tool_name>generate_image</tool_name>
<arguments>{"prompt": "cute cat, high quality, detailed"}</arguments>
</use_mcp_tool>

查看MCP状态

使用 /mcp 命令查看:

  • 连接的MCP服务器状态
  • 可用的工具列表及描述
  • 可用的资源列表
  • 连接状态和错误信息

📦 结果折叠功能

功能说明

为了优化终端显示效果,程序提供了智能的结果折叠功能:

  • 自动折叠: 当MCP工具返回的内容超过150个字符时自动折叠显示
  • 预览显示: 显示前150个字符作为预览,并提示剩余字符数
  • 一键切换: 使用 /toggle-collapse 命令可以开启/关闭折叠功能
  • 智能提示: 在折叠状态下会显示切换提示

▼ 折叠内容 (还有 856 个字符) 使用 /toggle-collapse 命令可以关闭折叠显示


#### 切换折叠设置
输入 `/toggle-collapse` 可以切换折叠显示:
- **开启折叠**: 长内容会被折叠,只显示预览
- **关闭折叠**: 完整显示所有内容

### 配置选项
程序内置了以下折叠配置:
- **折叠阈值**: 150个字符(超过此长度会被折叠)
- **默认状态**: 折叠功能默认开启
- **自动展开**: 短内容会自动完整显示

## 🏗️ 技术架构

### 核心技术栈
- **OpenAI SDK**: 与DeepSeek API通信
- **MCP SDK**: Model Context Protocol实现
- **Readline**: 命令行交互处理
- **Colors**: 终端彩色输出
- **ES Modules**: 现代JavaScript模块系统

### 架构组件

1. **主程序 (index.js)**
   - AI对话逻辑
   - 命令处理
   - MCP工具调用协调

2. **MCP客户端管理器 (mcpClient.js)**
   - 多服务器连接管理
   - 工具和资源访问接口
   - 传输协议支持(stdio, sse, streamableHttp)

3. **配置管理**
   - 动态配置加载
   - 热重载支持
   - 错误恢复机制

## 🔧 MCP工具调用处理改进

### 改进背景

项目参考了Cline项目的MCP工具调用处理流程,解决了原始实现中的关键问题,实现了最佳实践。

### 解决的问题

1. **完全替换AI响应**: 原实现直接替换XML标签为工具结果,覆盖了AI的思考过程
2. **用户体验不佳**: 用户无法看到AI的完整思考流程
3. **对话上下文缺失**: 工具结果未正确添加到对话历史中

### 改进后的处理流程

#### 1. 保留AI思考过程
```javascript
// 显示AI的原始响应(保留思考过程)
console.log('🤖 AI助手:');
console.log(originalAiResponse);

// 然后执行工具调用
let finalAiResponse = originalAiResponse;
if (mcpManager) {
    finalAiResponse = await executeMcpCalls(originalAiResponse);
}

▼ 折叠内容 (还有 XXX 个字符) 使用 /toggle-collapse 命令可以关闭折叠显示


#### 3. 正确的对话上下文管理
```javascript
// 将工具结果添加到对话历史中
conversationHistory.push({
    role: "user",
    content: `工具调用结果 (${call.serverName}.${call.toolName}): ${resultText}`
});

4. 错误处理和恢复

  • 工具执行失败时,错误信息也会添加到对话历史
  • 保持对话的连续性,即使工具调用失败
  • 清晰的错误提示和格式化显示
  • 错误信息同样支持折叠显示,避免终端被长错误信息淹没

5. 智能结果折叠

  • 长内容自动折叠,显示预览和剩余字符数
  • 用户可以通过命令切换折叠模式
  • 保持终端整洁,提升用户体验

技术实现细节

响应处理流程

  1. 获取AI原始响应
  2. 显示AI原始响应(保留思考过程)
  3. 解析MCP工具调用XML标签
  4. 执行工具调用并显示状态
  5. 单独显示工具执行结果
  6. 将工具结果添加到对话历史
  7. 返回清理后的AI响应(移除XML标签)

工具调用解析

function parseMcpToolCall(response) {
    const mcpToolRegex = /<use_mcp_tool>\s*<server_name>(.*?)<\/server_name>\s*<tool_name>(.*?)<\/tool_name>\s*<arguments>(.*?)<\/arguments>\s*<\/use_mcp_tool>/gs;
    // 解析工具调用和资源访问
    // 返回结构化的调用信息
}

📁 项目结构

ai-chat-assistant/
├── package.json          # 项目配置和依赖
├── package-lock.json      # 锁定的依赖版本
├── index.js              # 主程序文件
├── mcpClient.js          # MCP客户端管理器
├── mcpserver.json        # MCP服务器配置
├── README.md             # 项目说明文档
├── MCP_IMPROVEMENT.md    # MCP改进说明(已合并到此文档)
└── node_modules/         # 依赖包目录

文件说明

  • index.js: 主程序入口,包含AI对话逻辑、命令处理、MCP工具调用协调
  • mcpClient.js: MCP客户端管理器,负责服务器连接、工具调用、资源访问
  • mcpserver.json: MCP服务器配置文件,定义要连接的服务器和工具
  • package.json: 项目元数据和依赖定义

⚙️ 配置说明

API配置

  • 基础URL: https://api.deepseek.com
  • 模型: deepseek-chat
  • API密钥: 在index.js中配置

MCP服务器配置参数

{
  "mcpServers": {
    "server-name": {
      "type": "stdio|sse|streamableHttp",  // 传输类型
      "command": "command",                // 启动命令
      "args": ["arg1", "arg2"],           // 命令参数
      "cwd": "/working/directory",         // 工作目录
      "env": {                            // 环境变量
        "API_KEY": "your-key"
      },
      "disabled": false,                  // 是否禁用
      "timeout": 30,                      // 超时时间(秒)
      "url": "http://example.com",        // SSE/HTTP URL
      "headers": {                        // HTTP请求头
        "Authorization": "Bearer token"
      }
    }
  }
}

支持的传输类型

  1. stdio: 标准输入输出(推荐用于本地工具)
  2. sse: Server-Sent Events(用于远程服务)
  3. streamableHttp: 流式HTTP(用于特殊场景)

🎯 使用场景

1. 信息搜索

  • 实时网络搜索
  • 新闻查询
  • 技术文档查找

2. 内容创作

  • 图像生成
  • 文本处理
  • 创意写作辅助

3. 开发辅助

  • 代码搜索和分析
  • API调用测试
  • 技术问题解答

4. 数据处理

  • 文件操作
  • 数据转换
  • 批量处理任务

🔍 故障排除

常见问题

  1. MCP服务器连接失败

    • 检查服务器配置是否正确
    • 确认API密钥有效
    • 查看网络连接状态
  2. 工具调用超时

    • 增加timeout配置值
    • 检查服务器响应状态
    • 重新加载MCP配置
  3. 程序启动失败

    • 确认Node.js版本>=18
    • 重新安装依赖包
    • 检查配置文件格式

调试技巧

  • 使用/mcp命令查看连接状态
  • 使用/reload-mcp重新加载配置
  • 查看终端错误输出信息

📝 注意事项

  • 程序需要网络连接以访问DeepSeek API和MCP服务
  • 对话历史在程序重启后会清空
  • 可以使用 Ctrl+C 或 /exit 安全退出程序
  • MCP服务器配置修改后需要重新加载或重启程序

🤝 开发贡献

欢迎提交Issue和Pull Request来改进这个项目。主要改进方向:

  • 添加更多MCP服务器支持
  • 改进用户界面体验
  • 增加配置管理功能
  • 优化错误处理机制

📄 许可证

MIT License - 详见LICENSE文件

🔗 相关资源