18.MCP工程化接入实践:配置抽离、异常兜底与项目文档收口
目 录今天干了什么核心变化1.抽离MCP配置2.异常处理3.文档维护今天干了什么今天主要工作是对昨天接入系统的MCP服务做了工程化收口工作抽离了项目配置、增加异常处理并完善了项目文档。目的当然是为了方便未来项目的迁移并增加项目的鲁棒性和完整性。核心变化1.抽离MCP配置系统用到了智谱的MCP搜索服务关注这个服务的一些配置比如API、URL以及一些调用服务所要用到的基础参数我是写死在项目中的前面也讲过这种方式的问题所以今天首先做的工作就是抽离项目配置。首先在app/config.py中补几项新的配置信息ZHIPU_API_KEYos.getenv(ZHIPU_API_KEY)MCP_SEARCH_URLos.getenv(MCP_SEARCH_URL,https://open.bigmodel.cn/api/mcp/web_search_prime/mcp)MCP_SEARCH_RECENCYos.getenv(MCP_SEARCH_RECENCY,oneMonth)MCP_SEARCH_CONTENT_SIZEos.getenv(MCP_SEARCH_CONTENT_SIZE,medium)MCP_SEARCH_LOCATIONos.getenv(MCP_SEARCH_LOCATION,us)然后在用到这些配置信息的地方也就是app/mcp_tools.py文件中引入这些配置并在相应的使用位置做出使得的修改fromapp.configimport(ZHIPU_API_KEY,MCP_SEARCH_URL,MCP_SEARCH_RECENCY,MCP_SEARCH_CONTENT_SIZE,MCP_SEARCH_LOCATION,)最后一小步就是在.env文件中写入需要统一管理的信息MCP_SEARCH_URLhttps://open.bigmodel.cn/api/mcp/web_search_prime/mcp MCP_SEARCH_RECENCYoneMonth MCP_SEARCH_CONTENT_SIZEmedium MCP_SEARCH_LOCATIONus2.异常处理今天所做的第二项工作是给项目增加异常处理原因前面也讲到过在写系统时要默认自己写的功能回运行失败所以需要给功能模块加上必要的异常处理在web_search_tool()中给功能逻辑块增加异常处理defweb_search_tool(query:str)-str:logger.info(f[web_search_tool] query:{query})try:raw_resultasyncio.run(_call_zhipu_web_search(queryquery,recencyMCP_SEARCH_RECENCY,content_sizeMCP_SEARCH_CONTENT_SIZE,locationMCP_SEARCH_LOCATION,))items_parse_mcp_search_result(raw_result)ifnotitems:logger.warning([web_search_tool] parsed result is empty, fallback to raw text)returnstr(raw_result)lines[]foridx,iteminenumerate(items[:5],start1):titleitem.get(title,No title)linkitem.get(link,)contentitem.get(content,)lines.append(f[{idx}]{title}\nf{content}\nf{link})final_text\n\n.join(lines)logger.info([web_search_tool] search finished successfully)returnfinal_textexceptExceptionase:logger.exception([web_search_tool] search failed)returnfWeb search failed:{str(e)}3.文档维护以前关于这个项目的文档只是写了未来将要接入MCP服务如今这个项目已经接入了这个服务所以需要对项目的相关介绍做必要的修改需要修改的有项目的总体介绍、项目的当前特性、技术栈、项目目录、工具介绍、配置说明、测试用例和未来工作做出适当调整。如果这篇文章对你有帮助可以点个赞完整代码地址https://github.com/1186141415/Paper-RAG-Agent-with-LangGraph