# 调用CoMi已发布的Agent API

# 适用场景

在CoMiBuilder后台制作发布了Agent(不包含工作流),第三方支持通过程序调用Agent API的形式进行集成。

1768792289894.png

# 适配方法

# 1、前提准备

# 1-1、准备Apikey

协同OA系统管理员后台 → CoMiBuilder → 应用中心 → API服务 → Api Key → 创建API Key给第三方调用使用,默认可选择全部接口:

1768532207695.png

# 1-2、获取远程调用Agent服务编码

首先,确保计划调用的Agent已经设计完成并正式发布。

然后,通过协同OA系统管理员后台 → CoMiBuilder → 应用中心 → Agent页签 → 搜索到计划调用的Agent,获得“服务编码”:

1768532386500.png

# 2、执行远程调用

# 2-1、非流式调用Agent

非流式调用Agent请求地址: http(https)://Nginx地址/seeyon/ai-platform/ai-manager/agent/svc/call/rest
请求方式:POST
Content-Type:application/json
Request Header:api-key

请求参数:

参数 类型 含义 是否必填
chatSessionId string 每次会话的唯一标识,需要调用者生成,使用uuid即可。 Y
sessionId Long Ai-manager生成的会话,可不传,仅当需要记忆上下文时需要传。对应上一次调用comi agent的输出data.aiSessionId N
input String 用户的输入内容 Y
agentCode String ComiBuilder侧已发布的agentCode,从comiBuilder侧查看 Y

CURL请求示例:

curl -X POST \
  http://10.101.68.10/seeyon/ai-platform/ai-manager/agent/svc/call/rest \
  -H "Content-Type: application/json" \
  -H "api-key: sjoaOMDf1Ze5YJOZUaXwD8iS87bbBOXHBOR42aTY9DijGpCidS" \
  -d '{
    "chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
    "sessionId": null,
    "input": "翻译成英文:好好学习天天向上",
    "agentCode": "tansfer"
  }'

CURL请求结果输出示例:

{
    "code": "0",
    "message": "success",
    "data": {
        "id": "4481045495456417230",
        "chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
        "aiSessionId": "4698884980493336821",
        "aiSessionName": null,
        "callId": "8056787592516619398",
        "agentId": "-2161078899843117468",
        "agentCode": "tansfer",
        "agentType": null,
        "assistantId": "0",
        "assistantCode": "",
        "sessionType": 1,
        "input": null,
        "messageType": 1,
        "content": "[翻译后的内容]:Study hard and make progress every day.",
        "citationsJson": null,
        "citationList": [],
        "messageTime": 1768534203520,
        "runStepId": null,
        "stepType": "",
        "stepName": "",
        "stepInput": "",
        "runStepStatus": "",
        "stepTime": null,
        "startedAt": 1768534203520,
        "completedAt": null,
        "expiredAt": null,
        "cancelledAt": null,
        "failedAt": null,
        "totalTime": null,
        "errorMsgTag": null,
        "errorCode": null,
        "promptTokens": null,
        "completionTokens": null,
        "totalTokens": null,
        "finish": null,
        "createUserName": null,
        "modelCode": null,
        "createTime": 1768534203523,
        "updateTime": 1768534203523,
        "runningStatus": null,
        "sourceType": null,
        "runSteps": null,
        "hitKnowledgeRunSteps": null,
        "needMarkBlueRunSteps": null,
        "recordSaveStatus": true,
        "assistant": null,
        "needHistoryRecord": true,
        "isInterrupt": 0,
        "currentNodeType": null
    }
}

CURL执行命令效果图:

1768534500627.png

Java远程调用代码示例:

/***
* Maven基础依赖:spring-boot-starter、spring-web、jackson-databind、spring-boot-starter-test
**/
@SpringBootTest
class DemoApplicationTests {

    @Test
    void contextLoads() {

        // CoMi Agent API地址(非流式)
        String apiUrl = "http://10.101.68.10/seeyon/ai-platform/ai-manager/agent/svc/call/rest";
        // CoMi API Key
        String apiKey = "sjoaOMDf1Ze5YJOZUaXwD8iS87bbBOXHBOR42aTY9DijGpCidS";
        // CoMi Agent 之 翻译助手编码
        String agentCode = "tansfer";


        // POST请求消息体
        Map<String, Object> requestBodyMap = new HashMap<>();
        // 通过UUID创建每次对话的chatSessionId
        requestBodyMap.put("chatSessionId", UUID.randomUUID().toString().replace("-", ""));
        requestBodyMap.put("sessionId", null);
        // 用户提示词
        requestBodyMap.put("input", "翻译成英文:好好学习天天向上");
        requestBodyMap.put("agentCode", agentCode);

        // 创建 RestTemplate 实例
        RestTemplate restTemplate = new RestTemplate();

        // 设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("api-key", apiKey);

        // 创建 HttpEntity,直接使用 Map 对象
        HttpEntity<Map<String, Object>> entity = new HttpEntity<>(requestBodyMap, headers);

        try {
            // 添加JSON消息转换器
            MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
            ObjectMapper objectMapper = new ObjectMapper();
            jsonConverter.setObjectMapper(objectMapper);
            restTemplate.getMessageConverters().add(jsonConverter);

            // 更改响应类型为Map
            ResponseEntity<Map> response = restTemplate.exchange(
                    apiUrl,
                    HttpMethod.POST,
                    entity,
                    Map.class  // 返回类型为Map
            );

            // 输出响应状态和结果
            System.out.println("Status Code: " + response.getStatusCode());
            System.out.println("Response Body: " + response.getBody());
			System.out.println("Agent返回内容:" + ((Map)(response.getBody().get("data"))).get("content") );

        } catch (Exception e) {
            System.err.println("Error occurred while calling the API: " + e.getMessage());
            e.printStackTrace();
        }

    }
}

# 2-2、流式调用

流式调用Agent请求地址: http(https)://Nginx地址/seeyon/ai-platform/ai-manager/agent/svc/call/stream
请求方式:POST
Content-Type:application/json
Request Header:api-key

请求参数:

参数 类型 含义 是否必填
chatSessionId string 每次会话的唯一标识,需要调用者生成,使用uuid即可。 Y
sessionId Long Ai-manager生成的会话,可不传。仅当需要记忆上下文时需要传。对应上一次调用comi agent的输出data.aiSessionId N
input String 用户的输入内容 Y
agentCode String ComiBuilder侧已发布的agentCode,从comiBuilder侧查看 Y

流式输出-CURL请求示例(标准SSE接口):

curl -X POST \
  http://10.101.68.10/seeyon/ai-platform/ai-manager/agent/svc/call/stream \
  -H "Content-Type: application/json" \
  -H "api-key: sjoaOMDf1Ze5YJOZUaXwD8iS87bbBOXHBOR42aTY9DijGpCidS" \
  -d '{
    "chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
    "sessionId": null,
    "input": "翻译成英文:好好学习天天向上",
    "agentCode": "tansfer"
  }'

1768785635082.png

流式输出-CURL请求返回数据(第一段):

data: {
  "id": null,
  "chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
  "aiSessionId": "-4449259218539558771",
  "aiSessionName": "翻译成英文:好好学习天天向上",
  "callId": "-6430567852231800020",
  "agentId": "-2161078899843117468",
  "agentCode": "tansfer",
  "agentType": null,
  "assistantId": null,
  "assistantCode": null,
  "sessionType": 1,
  "input": "翻译成英文:好好学习天天向上",
  "messageType": 1,
  "content": "",
  "citationsJson": "",
  "citationList": null,
  "messageTime": null,
  "runStepId": null,
  "stepType": "",
  "stepName": "",
  "stepInput": "",
  "runStepStatus": "",
  "stepTime": null,
  "startedAt": null,
  "completedAt": null,
  "expiredAt": null,
  "cancelledAt": null,
  "failedAt": null,
  "totalTime": null,
  "errorMsgTag": null,
  "errorCode": null,
  "promptTokens": null,
  "completionTokens": null,
  "totalTokens": null,
  "finish": 0,
  "createUserName": null,
  "modelCode": null,
  "createTime": null,
  "updateTime": null,
  "runningStatus": null,
  "sourceType": null,
  "runSteps": [],
  "hitKnowledgeRunSteps": null,
  "needMarkBlueRunSteps": null,
  "recordSaveStatus": true,
  "assistant": null,
  "needHistoryRecord": true,
  "isInterrupt": 0,
  "currentNodeType": null
}

流式输出-CURL请求返回数据(最后一段):

data: {
  "id": null,
  "chatSessionId": "0d8adcfd95794adf9aab7b8dc06b0d8d",
  "aiSessionId": "-4449259218539558771",
  "aiSessionName": "翻译成英文:好好学习天天向上",
  "callId": "-6430567852231800020",
  "agentId": "-2161078899843117468",
  "agentCode": null,
  "agentType": null,
  "assistantId": null,
  "assistantCode": null,
  "sessionType": null,
  "input": null,
  "messageType": 5,
  "content": "",
  "citationsJson": null,
  "citationList": [],
  "messageTime": null,
  "runStepId": null,
  "stepType": null,
  "stepName": null,
  "stepInput": null,
  "runStepStatus": "completed",
  "stepTime": null,
  "startedAt": 1768785609087,
  "completedAt": 1768785609466,
  "expiredAt": null,
  "cancelledAt": null,
  "failedAt": null,
  "totalTime": "379",
  "errorMsgTag": null,
  "errorCode": null,
  "promptTokens": 0,
  "completionTokens": 0,
  "totalTokens": 0,
  "finish": 1,
  "createUserName": "admin",
  "modelCode": "qwen3-awq-32b",
  "createTime": 1768785609063,
  "updateTime": 1768785609466,
  "runningStatus": 1,
  "sourceType": null,
  "runSteps": null,
  "hitKnowledgeRunSteps": null,
  "needMarkBlueRunSteps": null,
  "recordSaveStatus": true,
  "assistant": null,
  "needHistoryRecord": true,
  "isInterrupt": null,
  "currentNodeType": null
}

# 2-3、流式结果messageType类型说明

1、messageType的各种情况

1:结果非流式
2:步骤
5:结果流式
7:命中知识源

2、消息中finish =1 代表本次会话结束,可以关闭接受消息。finish = 0 代表会话正在进行中,需要持续接收消息。

编撰人:het