easya2a: 一键将 LangChain Agent 发布为 A2A 服务

easya2a: 一键将 LangChain Agent 发布为 A2A 服务

随着 A2A (Agent-to-Agent) 协议的发布,相关的实践项目也逐渐涌现。对于许多希望体验 A2A 功能,但又担心学习成本和开发时间的开发者来说,推荐使用 easya2a——一个可以快速、无缝地将现有 LangChain Agent 转换为在线 A2A URL 的 Python 包。

https://github.com/whillhill/easya2a

快速开始

第一步:安装 easya2a

首先,通过 pip 安装 easya2a 包。

pip install easya2a

第二步:代码实例

下面是一个完整且可直接运行的示例。我们会先创建一个常规的 LangChain Agent,然后展示如何用 easya2a 将其“打包”成一个 A2A 服务。

1. 创建一个常规的 LangChain Agent

这部分代码展示了如何创建一个集成了高德地图工具的 Agent,这在 easya2a 介入之前是标准的 LangChain Agent 创建流程。

from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from mcpstore import MCPStoredemo_mcp = {"mcpServers": {"amap-amap-sse": {"url": "[https://mcp.amap.com/sse?key=da2c9c39f9edad643b9c53f506fb381c](https://mcp.amap.com/sse?key=da2c9c39f9edad643b9c53f506fb381c)"}}
}
store = MCPStore.setup_store()
store.for_store().add_service(demo_mcp)
tools = store.for_store().for_langchain().list_tools()llm = ChatOpenAI(temperature=0,model="deepseek-chat",openai_api_key="sk-...", # 请替换为您的 DeepSeek API Keyopenai_api_base="[https://api.deepseek.com](https://api.deepseek.com)"
)# --- 创建提示模板 (Prompt) ---
prompt = ChatPromptTemplate.from_messages([("system", "你是一个乐于助人的助手,回答的时候请带上可爱的表情符号。"),("human", "{input}"),("placeholder", "{agent_scratchpad}"),
])# --- 创建并运行 Agent ---
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)# 到此为止,我们拥有了一个标准的、可执行的 agent_executor
2. 使用 easya2a 进行封装和发布

接下来是见证奇迹的时刻!只需几行代码,我们就能将上面创建的 agent_executor 封装成一个功能强大的 A2A 服务。

# 导入 a2a 封装器
from easya2a import A2AAgentWrapper# --- 核心步骤:初始化并设置 Agent 信息 (必填) ---
easya2a_agent = A2AAgentWrapper.set_up(agent=agent_executor,name="高德地图路线查询Agent",description="这是一个拥有高德地图MCP功能的Agent,可以查询路线和地理位置的经纬度。"
)# --- 可选配置:为 Agent 添加具象化的技能 (可选) ---
# 这能让其他 Agent 更好地理解您的 Agent 能做什么
easya2a_agent.add_skill(skill_id="query_poi",name="城市景点查询",description="根据用户提供的城市名称,返回该城市的著名景点和对应的经纬度。",examples=["你好,山东有什么值得一去的景点吗?","我想知道北京有哪些好玩的景点?"],tags=["query", "conversation", "nlp", "location", "poi"]
)# --- 可选配置:设置元数据和能力开关 (可选) ---# 设置版本号
easya2a_agent.set_version("1.2.3")# 启用流式响应
easya2a_agent.enable_streaming()# 启用会话历史记录
easya2a_agent.enable_history()# 启用多模态能力
easya2a_agent.enable_multimodal()# 设置支持的输入/输出模式
easya2a_agent.set_input_modes(["text","text/plain","application/json","text/markdown"
])easya2a_agent.set_output_modes(["text","text/plain","application/json","text/markdown","text/html"
])# --- 最后一步:启动服务! ---
easya2a_agent.run_a2a(port=10012, host="0.0.0.0")# 启动后,您可以访问 [http://127.0.0.1:10012/](http://127.0.0.1:10012/) 来查看 A2A 服务的 OpenAPI 文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919130.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原学之设计模式- 设计模式来源

引言 各位旅行者们你们好,我是小森,首先我为啥是程序员。学了技术快六年了,但一直都是断断续续,本身自己的条件,从2021年11月份开始下载原神,总而言之不了解一些抽卡机制导致退了并且删除了具体账号打算重新…

有鹿机器人:AI技术如何重新定义「扫地」这件小事?

当扫地成为一门“技术活”扫地,可能是人类最古老的清洁行为之一。从扫帚到吸尘器,再到今天的无人驾驶清洁设备,我们一直在寻找更高效、更彻底的方式维护环境整洁。但有鹿机器人的出现,让“扫地”这件事有了新的定义——它不再只是…

62.不同路径

dp问题描述 62.不同路径 确定本题的状态表示 dp[i,j]表示的是从左上角走到这个位置的路径条数 确定本题的状态转移方程 根据已知条件:dp[0,0]1,dp[0,1]1,dp[1,0]1 本题的状态转移方程是: dp[i,j]dp[i,j-1]dp[i-1,j] 填表求…

python---包

文章目录包的基本概念创建包的基本结构__init__.py文件导入包和模块相对导入(在包内部使用)导入包和导入模块的区别包是Python中组织模块的一种方式,它允许你将相关的模块分组在一起,形成一个层次结构。包的主要目的是帮助避免命名…

超详细yolov8/11-obb旋转框全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c++/python)详解

因为yolo的检测/分割/姿态/旋转/分类模型的环境配置、训练、推理预测等命令非常类似,这里不再详细叙述环境配置,主要参考【超详细yolo8/11-detect目标检测全流程概述:配置环境、数据标注、训练、验证/预测、onnx部署(c/python)详解】&#xf…

创世理论达成 全关联的动态振动网:量子世界的“底层逻辑”

全关联的动态振动网:量子世界的“底层逻辑”(不带公式,超级详细)要真正理解量子世界的本质,我们需要跳出“粒子”和“波”的传统框架,从量子场论的核心逻辑出发,用最生活化的类比和日常经验&…

银行间交易IMIX协议加密相关

加密流程 字段筛选与序列化 提取业务报文中标记为敏感的字段&#xff0c;生成待加密的数据块 <!-- 示例&#xff1a;原始交易指令 --> <Order><Symbol>ABC123</Symbol> <!-- 非敏感 --><Price>100.50</Price> …

ABM和强化学习-2015年全国大学生数学建模竞赛B题

多智能体系统&#xff08;Agent-Based Model, ABM&#xff09;和强化学习&#xff08;Reinforcement Learning, RL&#xff09;是两个不同但可结合的概念&#xff0c;尤其在复杂系统建模和人工智能领域有重要应用。下面分别解释它们&#xff0c;并说明二者的关联&#xff1a; …

ALBEF/BLIP/BLIP2/Instruct BLIP/X Instruct BLIP

ALBEF 研究动机 ALBEF之前的一些方式&#xff0c; 视觉分支基本都是基于 dector的方式&#xff08;检出目标框&#xff09;&#xff0c;如下图所示&#xff0c;由于大量的数据没有标框&#xff0c;因此视觉预训练的受限于dector的检测方式。创新点 能不能不再采用dector的方式训…

数据结构——排序算法(简单篇:冒泡排序、选择排序、插入排序)

1️⃣ 冒泡排序&#xff08;Bubble Sort&#xff09; 基本思想 重复地比较相邻的两个元素&#xff0c;如果顺序错误就交换它们。一趟冒泡结束后&#xff0c;最大&#xff08;或最小&#xff09;的元素会“浮”到末尾。下一趟时可以少比较一次&#xff0c;因为最后的元素已经排好…

配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题

一、概述 记录时间 [2025-08-16] 在 Docker 学习中&#xff0c;可能会遇到诸如 docker 远程仓库无法访问、docker pull 拉取镜像失败、docker search 查询镜像失败等问题。 这是由于国内网络对 docker 远程仓库的访问受到限制。 那么在国内如何获取 docker 镜像呢&#xff1f…

【Python】Python 面向对象编程详解​

Python 面向对象编程详解​ 文章目录Python 面向对象编程详解​前言一、面向对象的基本概念​1.1 类&#xff08;Class&#xff09;​1.2 对象&#xff08;Object&#xff09;​1.3 属性&#xff08;Attribute&#xff09;​1.4 方法&#xff08;Method&#xff09;​二、类的定…

Redis 缓存和 Redis 分布式锁

目录 Redis 缓存 (Caching) 目的 核心逻辑 存储形式总结 典型场景 Redis 分布式锁 (Distributed Lock) 目的 核心作用 核心逻辑 典型场景 核心区别总结 Redis 缓存 (Caching) 在Redis中&#xff0c;数据是以键值对的形式存储的&#xff0c;其中键总是字符串类型&…

[ java 基础 ] 了解编程语言的第一步

目录 一. IDE (1). 使用IDE的原因: (2). 创建和使用: (3). 常用快捷方式与设置 (4). 注释 (5). 关键字 (6). 标识符 (7). 变量 (8). 数据类型 1) 整数类型 2) 浮点类型 3) 布尔类型(boolean) 4) 字符类型(char) 5) 字符串 6) 基本数据类之间的转换 (9). 运算符…

JavaScript 闭包与递归深度解析:从理论到实战

本文将系统梳理 JavaScript 中闭包与递归的核心概念、实战应用及面试要点,涵盖课堂知识点、作业实现、面试题解析等内容,帮助你全面掌握这两大重要概念。 一、闭包:函数与变量的绑定艺术 1.1 闭包的定义与核心特性 闭包是 JavaScript 中一种特殊的语言现象,其核心定义可…

牛 CDR3 单抗:抗病毒领域的 “纳米级精准导弹”

一、病毒防御的天然克星病毒感染的核心难题在于其表面的 “糖衣炮弹”—— 以 HIV 为例&#xff0c;其 Env 蛋白表面密集的糖链形成物理屏障&#xff0c;传统抗体难以穿透。而牛 CDR3 单抗的超长 CDR H3 结构&#xff08;50-60 个氨基酸&#xff09;如同 “纳米探针”&#xff…

鸿蒙应用开发和Vue网页开发中生命周期的区别

因为下节课就可以写讲解两者生命周期代码的实战了&#xff0c;写介绍一下理论方面的区别&#xff1a;鸿蒙应用开发&#xff08;ArkUI范式&#xff09;与Vue网页开发在生命周期管理上的核心区别&#xff0c;这直接反映了原生OS应用与Web应用在架构哲学和运行环境上的根本差异⚙️…

基于SpringBoot+Vue的轻手工创意分享平台(WebSocket即时通讯、协同过滤算法、Echarts图形化分析)

&#x1f388;系统亮点&#xff1a;WebSocket即时通讯、协同过滤算法、Echarts图形化分析&#xff1b;一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17前端&#xff1…

Java应届生求职八股(5)---并发编程篇

线程基础线程与进程的区别进程是程序的一次执行过程。它资源分配的单位。线程是程序执行的单位。并行和并发的区别单核CPU下&#xff0c;线程串行。&#xff08;并发&#xff1a;多线程轮流使用一个或多个CPU&#xff09;多核CPU下&#xff0c;每个核都可调度线程。&#xff08…

WSL 配置文件 wsl.conf 设置

WSL .wslconfig 小技巧 要在 WSL&#xff08;Windows Subsystem for Linux&#xff09;中增加内存&#xff0c;你需要编辑 WSL 配置文件 wsl.conf 或者直接调整虚拟机的资源限制。 文章目录WSL .wslconfig 小技巧以下是步骤&#xff1a; 找到或创建 .wslconfig 文件&#xff1…