新增依赖

为了支持调用 OpenAl 模型,以及在环境变量中读取 API-KEY 等信息,需要先安装如下依赖:

# 进入相关路径,新建mcp-client文件夹uv init mcp-client# 进入mcp-client目录cd mcp-client# 创建虚拟环境,默认为.venvuv venv# 激活虚拟环境(windows).venv\Scripts\activate# 安装依赖uv add mcp openai python-dotenv

配置大模型信息(DeepSeek官网)

接下来,在mcp-client目录中新建一个.env文件,用于存放大模型的base_url、model及API key等信息。

比如我们配置DeepSeek官网API KEY相关信息如下。

ds_base_url="https://api.deepseek.com"ds_model="deepseek-chat"ds_api_key="YOUR_API_KEY"

出于与 OpenAI 兼容考虑,您也可以将 base_url 设置为 https://api.deepseek.com/v1 来使用,但注意,此处 v1 与模型版本无关。 deepseek-chat 和 deepseek-reasoner 都已经升级为 DeepSeek-V3.2-Exp。deepseek-chat 对应 DeepSeek-V3.2-Exp 的非思考模式deepseek-reasoner 对应 DeepSeek-V3.2-Exp 的思考模式

编写client.py文件

接下来编写客户端代码(cilent.py文件):

import asyncioimport osfrom openai import OpenAIfrom dotenv import load_dotenvfrom contextlib import AsyncExitStack# 加载.env文件,确保API Key受到保护load_dotenv()class MCPClient:    """    MCP客户端类,用于与OpenAI API进行交互并处理用户查询。    属性:        exit_stack (AsyncExitStack): 异步上下文管理器堆栈,用于资源清理。        openai_api_key (str): 从环境变量中读取的OpenAI API密钥。        base_url (str): 从环境变量中读取的基础URL。        model (str): 从环境变量中读取的模型名称。        client (OpenAI): OpenAI客户端实例。    """    def __init__(self):        """初始化 MCP 客户端"""        self.exit_stack = AsyncExitStack()        self.openai_api_key = os.getenv("ds_api_key") # 读取 OpenAI API Key        self.base_url = os.getenv("ds_base_url") # 读取 BASE URL        self.model = os.getenv("ds_model") # 读取 model        if not self.openai_api_key:            raise ValueError("未找到 OpenAI API Key,请在 .env 文件中设置 OPENAI_API_KEY")        self.client = OpenAI(api_key=self.openai_api_key, base_url=self.base_url)    async def process_query(self, query: str) -> str:        """        调用 OpenAI API 处理用户查询(异步包装版)        参数:            query (str): 用户输入的问题或指令。        返回:            str: 来自OpenAI API的回答内容;如果出现异常则返回错误信息。        """        messages = [            {"role": "system", "content": "你是一个智能助手,帮助用户回答问题。"},            {"role": "user", "content": query}        ]        try:            # 使用run_in_executor在单独线程中运行同步API调用            loop = asyncio.get_running_loop()            response = await loop.run_in_executor(                None,                lambda: self._sync_call_api(messages)            )            return response.choices[0].message.content        except Exception as e:            return f"! 调用 OpenAI API 时出错:{str(e)}"    def _sync_call_api(self, messages):        """        同步方式调用OpenAI Chat Completion接口        参数:            messages (list): 包含对话历史的消息列表。        返回:            对象: OpenAI API响应对象。        """        return self.client.chat.completions.create(            model=self.model,            messages=messages        )    async def chat_loop(self):        """        运行一个交互式的聊天循环,持续接收用户输入并输出AI回复,        直到用户输入'quit'为止。        """        print("\n# MCP客户端已启动!输入'quit'退出")        while True:            try:                query = input("\n你:").strip()                if query.lower() == 'quit':                    break                response = await self.process_query(query)  # 正确传递query参数                print(f"\nOpenAI: {response}")            except Exception as e:                print(f"\n!发生错误:{str(e)}")    async def cleanup(self):        """        清理所有通过exit_stack注册的异步资源。        """        await self.exit_stack.aclose()async def main():    """    主函数,创建MCPClient实例,并启动聊天循环。    在程序结束前执行必要的清理操作。    """    client = MCPClient()    try:        await client.chat_loop()    finally:        if hasattr(client, 'cleanup'):            await client.cleanup()if __name__ == "__main__":    asyncio.run(main())

这段代码实现了一个异步的、基于OpenAI API的交互式聊天客户端。下面是对代码的详细解释:

导入模块

  • asyncio: 用于编写异步代码。
  • os: 用于访问操作系统变量,如环境变量。
  • openai: OpenAI的Python库,用于与OpenAI API交互。
  • dotenv: 用于从.env文件中加载环境变量。
  • contextlib.AsyncExitStack: 用于管理异步资源的清理。

加载环境变量

  • load_dotenv(): 加载.env文件中的环境变量,这些变量通常用于存储敏感信息,如API密钥。

MCPClient类

  • 初始化方法 (__init__):
  • 创建一个AsyncExitStack实例,用于管理异步资源的清理。
  • 从环境变量中读取OpenAI API密钥、基础URL和模型名称。
  • 如果未找到OpenAI API密钥,则抛出ValueError
  • 使用读取的API密钥和基础URL初始化OpenAI客户端。
  • 异步处理查询方法 (process_query):
  • 接收用户查询作为参数。
  • 构建一个消息列表,包括系统消息和用户查询。
  • 使用asyncio.get_running_loop().run_in_executor在单独的线程中同步调用OpenAI API,以避免阻塞异步事件循环。
  • 返回API响应中的第一个选择项的消息内容。
  • 如果发生错误,返回错误信息。
  • 同步调用API方法 (_sync_call_api):
  • 这是一个私有方法,用于同步调用OpenAI的聊天完成API。
  • 接收消息列表作为参数,并使用这些消息调用API。
  • 聊天循环方法 (chat_loop):
  • 启动一个交互式聊天循环。
  • 提示用户输入查询,如果用户输入quit,则退出循环。
  • 调用process_query方法处理用户查询,并打印API的响应。
  • 如果发生错误,打印错误信息。
  • 清理资源方法 (cleanup):
  • 使用AsyncExitStackaclose方法清理异步资源。

主函数 (main)

  • 创建一个MCPClient实例。
  • 尝试启动聊天循环。
  • 无论聊天循环是否成功完成,都调用客户端的cleanup方法清理资源。

程序入口

  • 如果脚本作为主程序运行,则使用asyncio.run(main())启动异步主函数。

总结

这段代码实现了一个异步的聊天客户端,它使用OpenAI的API来响应用户的查询。客户端通过环境变量获取敏感信息,如API密钥,并使用异步编程模型来提高性能。聊天循环允许用户与AI进行交互,直到用户选择退出。

保存client.py文件后,在CMD中运行以下命令,运行这个客户端。

uv run client.py
``````plaintext
(base) E:\2025\大模型\mcp\学习\mcp入门\三、客户端接在线模型\mcp-client>uv run client.py# MCP客户端已启动!输入'quit'退出你:你是谁OpenAI: 你好!我是你的智能助手,可以帮助你解答问题、提供信息、完成任务或陪你聊天。如果你有任何需要,随时告诉我哦!�你:你是哪家大模型OpenAI: 我是由深度求索(DeepSeek)公司创造的智能助手——DeepSeek!�深度求索是一家专注于人工智能技术研发的公司,致力于打造更智能、更有用的AI助手。我拥有强大的文本理解和生成能力,支持128K的上下文长度,还能处理你上传的各种文件(图像、txt、pdf、ppt、word、excel等),从中读取文字信息来帮助你。最棒的是,我完全免费使用!你可以通过官方应用商店下载App,或者直接在网页端使用。如果需要联网搜索最新信息,记得在Web/App上手动点开联网搜索按键哦~有什么问题我可以帮你解答吗?无论是学习、工作还是生活上的疑问,我都很乐意协助你!✨你:quit(base) E:\2025\大模型\mcp\学习\mcp入门\三、客户端接在线模型\mcp-client>

​最后

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。

我整理出这套 AI 大模型突围资料包:

  • ✅AI大模型学习路线图
  • ✅Agent行业报告
  • ✅100集大模型视频教程
  • ✅大模型书籍PDF
  • ✅DeepSeek教程
  • ✅AI产品经理入门资料

如果你也想通过学大模型技术去帮助自己升职和加薪,可以扫描下方链接👇👇
​​
在这里插入图片描述

为什么我要说现在普通人就业/升职加薪的首选是AI大模型?

人工智能技术的爆发式增长,正以不可逆转之势重塑就业市场版图。从DeepSeek等国产大模型引发的科技圈热议,到全国两会关于AI产业发展的政策聚焦,再到招聘会上排起的长队,AI的热度已从技术领域渗透到就业市场的每一个角落。

img
智联招聘的最新数据给出了最直观的印证:2025年2月,AI领域求职人数同比增幅突破200% ,远超其他行业平均水平;整个人工智能行业的求职增速达到33.4%,位居各行业榜首,其中人工智能工程师岗位的求职热度更是飙升69.6%。

AI产业的快速扩张,也让人才供需矛盾愈发突出。麦肯锡报告明确预测,到2030年中国AI专业人才需求将达600万人,人才缺口可能高达400万人,这一缺口不仅存在于核心技术领域,更蔓延至产业应用的各个环节。

在这里插入图片描述

​​
在这里插入图片描述

资料包有什么?

①从入门到精通的全套视频教程

包含提示词工程、RAG、Agent等技术点
在这里插入图片描述

② AI大模型学习路线图(还有视频解说)

全过程AI大模型学习路线

在这里插入图片描述

③学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的

在这里插入图片描述

④各大厂大模型面试题目详解

在这里插入图片描述
⑤ 这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

所有的视频教程由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念‌,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势‌,构建起"前沿课程+智能实训+精准就业"的高效培养体系。

课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

​​​​在这里插入图片描述
在这里插入图片描述

如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能 ‌突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐