今天干了什么

今天主要工作是对昨天接入系统的MCP服务做了工程化收口工作,抽离了项目配置、增加异常处理并完善了项目文档。目的当然是为了方便未来项目的迁移并增加项目的鲁棒性和完整性。

核心变化

1.抽离MCP配置

系统用到了智谱的MCP搜索服务,关注这个服务的一些配置,比如API、URL以及一些调用服务所要用到的基础参数,我是写死在项目中的,前面也讲过这种方式的问题,所以今天首先做的工作就是抽离项目配置。首先,在app/config.py中补几项新的配置信息:

ZHIPU_API_KEY = os.getenv("ZHIPU_API_KEY")
MCP_SEARCH_URL = os.getenv(
    "MCP_SEARCH_URL",
    "https://open.bigmodel.cn/api/mcp/web_search_prime/mcp"
)

MCP_SEARCH_RECENCY = os.getenv("MCP_SEARCH_RECENCY", "oneMonth")
MCP_SEARCH_CONTENT_SIZE = os.getenv("MCP_SEARCH_CONTENT_SIZE", "medium")
MCP_SEARCH_LOCATION = os.getenv("MCP_SEARCH_LOCATION", "us")

然后在用到这些配置信息的地方也就是app/mcp_tools.py文件中引入这些配置,并在相应的使用位置做出使得的修改:

from app.config import (
    ZHIPU_API_KEY,
    MCP_SEARCH_URL,
    MCP_SEARCH_RECENCY,
    MCP_SEARCH_CONTENT_SIZE,
    MCP_SEARCH_LOCATION,
)

最后一小步,就是在.env文件中写入需要统一管理的信息:

MCP_SEARCH_URL=https://open.bigmodel.cn/api/mcp/web_search_prime/mcp
MCP_SEARCH_RECENCY=oneMonth
MCP_SEARCH_CONTENT_SIZE=medium
MCP_SEARCH_LOCATION=us

2.异常处理

今天所做的第二项工作是给项目增加异常处理,原因前面也讲到过,在写系统时,要默认自己写的功能回运行失败,所以需要给功能模块加上必要的异常处理,在web_search_tool()中给功能逻辑块增加异常处理:

def web_search_tool(query: str) -> str:
    logger.info(f"[web_search_tool] query: {query}")

    try:
        raw_result = asyncio.run(
            _call_zhipu_web_search(
                query=query,
                recency=MCP_SEARCH_RECENCY,
                content_size=MCP_SEARCH_CONTENT_SIZE,
                location=MCP_SEARCH_LOCATION,
            )
        )

        items = _parse_mcp_search_result(raw_result)

        if not items:
            logger.warning("[web_search_tool] parsed result is empty, fallback to raw text")
            return str(raw_result)

        lines = []
        for idx, item in enumerate(items[:5], start=1):
            title = item.get("title", "No title")
            link = item.get("link", "")
            content = item.get("content", "")

            lines.append(
                f"[{idx}] {title}\n"
                f"{content}\n"
                f"{link}"
            )

        final_text = "\n\n".join(lines)
        logger.info("[web_search_tool] search finished successfully")
        return final_text

    except Exception as e:
        logger.exception("[web_search_tool] search failed")
        return f"Web search failed: {str(e)}"

3.文档维护

以前关于这个项目的文档只是写了未来将要接入MCP服务,如今这个项目已经接入了这个服务,所以需要对项目的相关介绍做必要的修改,需要修改的有项目的总体介绍、项目的当前特性、技术栈、项目目录、工具介绍、配置说明、测试用例和未来工作做出适当调整。

如果这篇文章对你有帮助,可以点个赞~
完整代码地址:https://github.com/1186141415/Paper-RAG-Agent-with-LangGraph

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐