Presie List-圣诞老人礼物申请代理
一个基于LangGraph的代理,它使用MCP(模型上下文协议)工具来帮助管理圣诞礼物请求。代理人会检查你是否淘气或友善,并向圣诞老人提交礼物请求。
建筑
该项目包括:
- LangGraph代理 (
src/agent/)-使用ChatGPT编排当前请求工作流
- 连接到独立的MCP HTTP服务器 - 将MCP工具包装为LangChain工具 - 代理和工具执行节点之间的路由
- MCP HTTP服务器 (
src/mcp/http-server.ts)-端口3100上的独立HTTP服务器提供:
- check_naughty_or_nice -检查某人是否淘气或友善 - request_presents -根据淘气/乖巧的状态向圣诞老人提交礼物请求 - 多个并发客户端的会话管理 - 基于HTTP的JSON-RPC与SSE用于通知
设置
- 安装依赖项:
npm install- 创建一个
.env使用您的OpenAI API密钥文件:
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY运行应用程序
该应用程序需要两个进程:MCP服务器和代理。
端子1 -启动MCP HTTP服务器:
npm run mcp:http2号航站楼 -运行代理:
交互模式 (与圣诞老人的精灵聊天):
npm run dev您将与圣诞老人的一位乐于助人的精灵聊天,他将:
- 听听你想要什么礼物
- 聊天时跟踪您的列表
- 智能地检测你何时完成(如“就这样”、“我完成了”等短语)
- 检查你是否淘气/友善,并将你的清单提交给圣诞老人
- 键入“exit”退出
示例会话:
🎅 Welcome to Santa's Present Request Service!
I'm one of Santa's elves, here to help you build your Christmas list.
You: I want a bike for Christmas
Elf: Great choice! I've added a bike to your list. What else would you like?
You: Also some books
Elf: Wonderful! Books are added. Anything else?
You: And a video game. That's all!
Elf: Perfect! Let me check if you've been naughty or nice...
🎄 Processing your request...
Elf: Good news! You've been nice this year! Santa has approved all 3 presents on your list.单请求模式:
npm run dev "I want a PlayStation 5 and some games"传统stdio模式:
npm run mcp # Old stdio-based server (deprecated)生产建设:
npm run build
npm start运作原理
- 初创公司:MCP HTTP服务器在端口3100上启动
- 连接:代理通过HTTP连接到服务器(
StreamableHTTPClientTransport) - 工具注册:MCP工具转换为LangChain动态结构化工具
- 用户请求:用户通过命令行输入当前请求
- Agent推理:ChatGPT根据请求决定调用哪些工具
- 工具执行:
- 首次通话 check_naughty_or_nice 通过HTTP获取用户状态 - 然后打电话 request_presents 淘气/漂亮的分数
- 回应:代理将圣诞老人的决定返回给用户
MCP工具
MCP服务器通过HTTP进行通信,并公开了两个工具:
检查8月或通知:
- 输入:
userName(必填),context(可选) - 退货:
{ status: 'naughty'|'nice', score: 0-100, reason: string }
请求_呈现:
- 输入:
userName,presents[],naughtyNiceScore - 退货:
{ approved: boolean, presents: Present[], message: string } - 逻辑:得分>=50=所有礼物均已批准,得分\<50=仅低优先级项目
