PyData 波士顿 MCP 讲座示例
这个仓库包含了我在MCP(可能是指某个会议或研讨会,如“Microsoft Community of Practice”或其他相关缩写,具体需根据上下文确定)演讲中展示的代码示例 2025年10月8日波士顿PyData聚会。
设置
安装依赖项: uv sync。
然后创建一个 .env 包含OpenAI API密钥的文件:
OPENAI_API_KEY=概述
示例1
一个最小化的MCP服务器和客户端。这相当于MCP(消息传递中间件/通信协议等,具体含义根据上下文确定)的“Hello World”。
从那里运行它 example_1/ 使用文件夹
uv run python client.py示例2
一个包含所有客户端功能(引出、根节点、采样)的最小示例。它是 旨在演示如何设置服务器和客户端以实现这些功能 在基础层面工作。
从……运行它 example_2/ 使用文件夹
uv run python client.py示例3
一个关于如何使用提示、资源和工具的示例。它还具备以下特点: 引出(或诱发)和根源。这个例子稍微复杂一些,更贴近于 为了展示随着你开始(做某事),复杂性是如何扩展的,我们需要关注现实世界 与MCP一起做有意义的事情。
从……运行它 example_3/ 使用文件夹
uv run python client.py这个主题是一个应用程序,旨在帮助你共同撰写LinkedIn帖子。它可以起草 这是为你准备的(内容),但内容的提供和修改都是由你来完成的。
这个例子会向你询问一个关于……的问题 premise 并且 ending (针对)该职位并设立一个 在(此处)新建“项目文件夹” ./posts 目录。然后它启动一个简单的(程序/界面) 在你的终端中有一个聊天循环,允许你与一个基础的大型语言模型(LLM)进行对话。这个循环 最初对项目一无所知。你可以触发更复杂的(操作/流程) 使用以下命令进行交互:
- 使用“/”命令将临时更改系统提示符并启动一个
代理痕迹(见client.py文件第86行及之后) - /context 将触发大型语言模型(LLM)向您提出有关内容的问题 发布帖子并填充聊天历史记录。 - /outline 将使用您的聊天历史来起草要点大纲以 帖子中的 ./posts/ /outline.md。 - /prose 将利用聊天记录和大纲来起草一篇帖子 ./posts/ /prose.md. - 在代理轨迹完成后,系统提示符重置为 默认的OpenAI系统提示。
- “@”关键字将触发提示(参见client.py文件第105行及之后)。
- @brainstorm 将被以下提示替换: .src/prompts/brainstorm.md。 - @reflection 将被以下提示替换: .src/prompts/reflection.md。 - @reminder 将构建一个包含当前项目上下文的提示 “提醒”大型语言模型(LLM)当前的进度。 - 每个关键词都将被替换,这意味着你可以在(替换前)写一个提示,或者 之后,例如。 @brainstorm We need to come up with a better hook.
- 该大型语言模型(LLM)可以自主调用两种工具:
- write_file 这个工具写入一个 outline.md 或者 prose.md 文件至 当前项目目录。 - add_details 这个工具允许代理向你提问。它看起来 就像一个倒置的“正常”聊天回合,但通过MCP(可能是指某种特定的沟通或评估过程)来引导 其原因是,“澄清工具调用”不会中断 代理痕迹,它(a)允许大型语言模型(LLM)在其(中断或停止后)继续执行任务 得到了答案,并且(b)保留了追踪中的思考标记,而不是 像转弯一样将它们摧毁。“转弯”指的是轨迹结束时 将问题作为“助手”消息发送后,用户发送一个“用户”消息 消息,然后大型语言模型(LLM)与之前的助手和用户开始一个新的交互轨迹 在对话历史中的回复。
使用这个演示的方式是:
- 首先从回应(某事物/某问题)开始
premise并且ending启动时的提示。您
只有当这些文件在项目中不存在时,才会被询问。
- 接下来你会做
/context跑过去开始与客服聊天,关于
帖子。
- 不久之后你就会去做
/outline“run”来总结讨论内容为一个
大纲/轮廓。
- 你会阅读代理人生成的内容。(很可能只是平平无奇。)
- 你会使用
@brainstorm并且@reflection以完善内容
大纲/概要。
- 在这个过程中,你会使用(某种方法)来刷新/持久化保存讨论内容
/outline。 - 最终你会打电话
/prose来创建一份书面版本的
帖子。
- 再次强调,初稿可能会比较平庸,所以你需要利用提示来润色。
如果你需要重新开始讨论,可以使用 /reset 擦掉 对话历史记录或重启程序。在这种情况下,你可能会开始 和;与;带着 @reminder 将当前版本的大纲和散文内容重新添加进去 这次对话。
