# Agent-Interaction-Protocol
**Repository Path**: ScienceOne-AI/Agent-Interaction-Protocol
## Basic Information
- **Project Name**: Agent-Interaction-Protocol
- **Description**: Agent Interaction Protocol is a distributed agent interaction protocol. It defines communication mechanisms for multi-agent collaboration, multi-tool invocation, and multi-modal data access in scientific scenarios.
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-08-26
- **Last Updated**: 2025-08-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AIP Python SDK
English | 简体中文
## 📋 简介
**AIP智能体交互协议** (Agent Interaction Protocol) 是中国科学院自动化研究所开发的分布式智能体交互协议,定义了面向科学场景为代表的多智能体协作、多工具调用、多模态数据访问等通信机制,并提供相关功能组件,支持大规模科学智能体联动场景的快速构建。
### ✨ 特点
- **gRPC通信**:以gRPC作为底层通信框架,以二进制形式传输数据,相比JSON RPC更加轻量,序列化/反序列化速度更快。
- **路由模式**:除常见的点对点通信外,支持以 *网关* 为中心的路由通信模式,便于科学智能体群组管理。
- **统一接口**:同时支持 *智能体-智能体* 双向流式交互和 *智能体-工具/数据* 访问
- **兼容MCP**:定义了MCP代理节点,可将MCP服务直接接入基于AIP构建的系统,通过网关进行统一的管理与调用,无需修改协议格式。
### 框架示意图

## 📦 安装
```
git clone https://github.com/ScienceOne-AI/Agent-Interaction-Protocol.git
cd ./Agent-Interaction-Protocol
pip install .
```
## 🚀 快速入门示例
一些简单的示例位于目录 `./example` 中,可以按照以下步骤进行测试:
### 1. 运行网关
```bash
python run_gateway.py
```
```python
# run_gateway.py
from atlink_aip.module import Gateway
# 设置网关地址、ID
gateway = Gateway(host_address=args.host_address, gateway_id=args.gateway_id)
# 启动网关
await gateway.start()
```
### 2. 运行工具,并注册到网关
```bash
python run_and_register_tool.py
```
```python
# run_and_register_tool.py
from atlink_aip.module import ToolBox
# 设置工具箱地址、名字、ID
toolbox = ToolBox(host_address=args.host_address, name=args.toolbox_name, toolbox_id=args.toolbox_id)
# 在工具箱中加入一个工具
@toolbox.tool()
async def calculate_sum(a: int, b: int) -> int:
"""Adds two numbers and returns the sum."""
return int(a) + int(b)
# 启动工具箱并注册到网关
await toolbox.start()
await toolbox.register_to_gateway(args.gateway_address)
```
### 3. 运行Agent,并注册到网关
```bash
pip install requests # install `requests` to call LLM API
python run_and_register_agent.py --llm_url "api url of a LLM" --api_key "api key of a LLM" --model "LLM name"
```
```python
# run_and_register_agent.py
from atlink_aip.grpc_service.type import Mode
from atlink_aip.module import Agent
# 设置Agent地址、名字、ID
agent = Agent(
agent_id=args.agent_id,
host_address=args.host_address,
name=args.agent_name,
description=f"LLM Mode:{args.model}"
)
# 启动Agent并注册到网关
await agent.start()
await agent.register_to_gateway(args.gateway_address)
asyncio.create_task(process_message(agent, args))
```
```python
# 通过调用LLM API处理AIP消息
async def process_message(agent, args):
async def call_LLM(url: str, api_key: str, model: str, text: str) -> str:
headers = {
"Authorization": api_key,
"Content-Type": "application/json"
}
system_prompt = "You are an agent that communicates using the AIP protocol."
user_prompt = f"{text}"
params = {
"model": model,
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
],
"stream": False
}
try:
response = requests.post(url, json=params, headers=headers)
response.raise_for_status()
result = response.json()
output = result['choices'][0]['message']['content']
return output
except Exception as e:
return f"{str(e)}"
try:
while True:
request = await agent.receive_inquiry()
session_id = request.session_id
handlers = [
partial(
call_LLM,
url=args.llm_url,
api_key=args.api_key,
model=args.model,
text=request.content[0]._text
)
]
# Agent接收到消息后会调用call_LLM方法
results = await agent.invoke_session_handlers(session_id, handlers)
for text in results:
await agent.submit_feedback(
session_id=request.session_id,
receiver_id=request.sender_id,
request_session_status=request.session_status,
content=text,
content_mode=[Mode.TEXT]
)
except:
await agent.stop()
```
### 4. 通过客户端Agent访问网关上的工具和服务端Agent。
```bash
python run_client_agent.py
```
```python
# run_client_agent.py
# 通过网关调用示例工具
toolbox_id = "example_tool"
await agent.create_tool_client(receiver_id=toolbox_id) # 创建一个tool客户端
response = await agent.call_tool(
toolbox_id="example_tool",
tool_name="calculate_sum",
arguments=json.dumps({"a": 111, "b": 333})
)
await agent.close_tool_client(toolbox_id=toolbox_id) # 主动关闭tool客户端
print(f"Results from example_tool: {response}")
# 通过网关调用示例Agent
agent_id = "example_agent"
session_id = await agent.create_agent_client(agent_id) # 创建一个agent客户端,agent客户端无需手动关闭
await agent.submit_inquiry(
session_id=session_id,
receiver_id=agent_id,
content="Who are you?"
)
await agent.submit_inquiry(
session_id=session_id,
receiver_id=agent_id,
content="GoodBye!",
session_status=SessionStatus.STOP_QUEST # 若需要结束本次通信,需要将SessionStatus设置为STOP_QUEST
)
while True:
response = await agent.receive_feedback(session_id, receiver_id=agent_id)
result = ""
for content_item in response.content:
if content_item._text:
result += content_item._text
print(f"Response received from <{response.sender_id}>: {result}")
# 若接收到消息中的SessionStatus为STOP_RESPONSE,则该消息是本次通信的最后一条消息
if response.session_status == SessionStatus.STOP_RESPONSE:
break
```
## 🛠️ 实际应用示例
🔖 **案例**: AIP用于小核酸siRNA效力分析

## ⏳ 未来计划
- [ ] AIP 将支持安全连接的身份验证
- [ ] 支持科学数据 Resource 节点