TraeCN的大模型,是没见过MCP吗?

给了它一套现成的mcpServer的调用代码。

{
  "mcpServers": {
    "tavily-mcp": {
      "args": [
        "-y",
        "tavily-mcp@0.1.4"
      ],
      "autoApprove": [],
      "command": "npx",
      "disabled": false,
      "env": {
        "TAVILY_API_KEY": "your-api-key-here"
      }
    }
  }
}

它给我自定义了一套工具类,本地subprocess调用npx,关键还不能用。

最后改用CodeBuddy,给了一份参考文档进行重构。

修改总结

① 删除所有关于tavily-mcp的相关代码

  • 删除了完整的TavilyMCPTool自定义工具类(约400行代码)
  • 删除了相关的导入语句:subprocesssignal
  • 从函数描述列表中移除了tavily-mcp工具定义

② 重新配置tavily-mcp为MCP服务器方式

  • 参考CY_stock_query_assistant.py的配置方式
  • 将tavily-mcp配置为MCP服务器,使用npx命令启动
  • 保留了API密钥配置和环境变量支持
  • 更新了系统提示中的相关描述

修改后的配置特点

  • 简洁性:从自定义工具类简化为MCP服务器配置
  • 兼容性:保持了与CY_stock_query_assistant.py相同的配置方式
  • 功能性:保留了tavily-mcp的所有搜索功能
  • 维护性:减少了代码复杂度,更易于维护

简易tavily-MCP

import os
import asyncio
from typing import Optional
from qwen_agent.agents import Assistant

def init_agent_service():
    """初始化搜索助手服务"""
    llm_cfg = {
        'model': 'qwen-flash',
        'timeout': 30,
        'retry_count': 3,
    }
    
    # MCP 工具配置 - 只保留tavily-mcp搜索功能
    tools = [{
        "mcpServers": {
            "tavily-mcp": {
                "command": "npx",
                "args": ["-y", "tavily-mcp@0.1.4"],
                "env": {
                    "TAVILY_API_KEY": "tvly-dev-xxxxxx"
                },
                "disabled": False,
                "autoApprove": []
            }
        }
    }]

    try:
        bot = Assistant(
            llm=llm_cfg,
            name='网络搜索助手',
            description='基于tavily-mcp的网络搜索工具',
            system_message="""我是网络搜索助手,专门使用tavily-mcp进行网络搜索。
            我会根据用户的搜索关键词,返回相关的网络搜索结果和信息。""",
            function_list=tools
        )
        print("搜索助手初始化成功!")
        return bot
    except Exception as e:
        print(f"助手初始化失败: {str(e)}")
        raise

def search_app():
    """终端搜索应用"""
    try:
        bot = init_agent_service()
        print("=" * 50)
        print("网络搜索助手已启动")
        print("输入搜索关键词进行搜索,输入'quit'退出")
        print("=" * 50)
        
        while True:
            try:
                # 获取用户输入的搜索关键词
                query = input('\n请输入搜索关键词: ').strip()
                
                if query.lower() in ['quit', 'exit', '退出']:
                    print("感谢使用,再见!")
                    break
                    
                if not query:
                    print('搜索关键词不能为空!')
                    continue
                
                print(f"正在搜索: {query}")
                print("-" * 30)
                
                # 执行搜索
                messages = [{'role': 'user', 'content': query}]
                full_response = ""
                
                # 遍历生成器获取响应
                for chunk in bot.run(messages):
                    if hasattr(chunk, 'content'):
                        content = chunk.content
                    elif isinstance(chunk, dict) and 'content' in chunk:
                        content = chunk['content']
                    elif isinstance(chunk, str):
                        content = chunk
                    else:
                        content = str(chunk)
                    
                    full_response += content
                    print(content, end='', flush=True)
                
                print("\n" + "-" * 30)
                
            except KeyboardInterrupt:
                print("\n\n程序被用户中断")
                break
            except Exception as e:
                print(f"搜索过程中出错: {str(e)}")
                print("请重试或输入新的搜索关键词")
                
    except Exception as e:
        print(f"启动搜索助手失败: {str(e)}")

if __name__ == '__main__':
    search_app()

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐