ai-agent
<dependency>
<groupId>com.litongjava</groupId>
<artifactId>ai-agent</artifactId>
<version>1.0.0</version>
</dependency>
import com.litongjava.llm.handler.ApiChatHandler;
// 获取 HTTP 请求路由器
HttpRequestRouter r = TioBootServer.me().getRequestRouter();
if (r != null) {
ApiChatHandler apiChatHandler = Aop.get(ApiChatHandler.class);
r.add("/api/v1/chat/recommend", apiChatHandler::recommend);
r.add("/api/v1/chat/create", apiChatHandler::createSession);
r.add("/api/v1/chat/list", apiChatHandler::listSession);
r.add("/api/v1/chat/delete", apiChatHandler::deleteSession);
r.add("/api/v1/chat/set/name", apiChatHandler::setSessionName);
r.add("/api/v1/chat/like", apiChatHandler::like);
r.add("/api/v1/chat/history", apiChatHandler::getChatHistory);
r.add("/api/v1/chat/stop", apiChatHandler::stop);
r.add("/api/v1/chat/send", apiChatHandler::send);
}
接口
获取推荐问题接口
请求方法:GET
接口路径:/api/v1/chat/recommend
请求参数:
参数 | 类型 | 描述 | 是否必填 |
---|---|---|---|
num | int | 推荐问题的数量 | 否 |
响应格式:
{
"data": [
{
"avatar": "https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_bd6fe904-94f1-4986-9d65-0175e22746eh.png?alt=media",
"title": "课程与教授",
"content": "我们有没有推荐的适合R区域的简单课程?"
},
{
"avatar": "https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_7b40632d-d0f6-4328-99ce-2e36d966709h.png?alt=media",
"title": "作业帮助",
"content": "SJSU主校区附近有哪些最好的或有名的餐厅?"
},
{
"avatar": "https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_32d2f8af-a364-4a10-a9b0-4a5d6686b27h.png?alt=media",
"title": "校园导览",
"content": "如何注册课程,以及注册的截止日期和程序是什么?"
},
{
"avatar": "https://firebasestorage.googleapis.com/v0/b/rumi-bdb43.appspot.com/o/public%2Ftmp%2Fimg_v3_02cd_e638ecb7-73d6-45d4-805d-001f2065142h.png?alt=media",
"title": "校园生活",
"content": "学生可以免费进入橄榄球比赛吗?"
}
],
"code": 1,
"msg": null,
"ok": true
}
会话管理
1. 创建会话
请求方法:
POST
接口路径:
/api/v1/chat/create
请求参数:
参数 类型 描述 是否必填 user_id String 用户 Id 否 name String 会话名称 是 school_id Long 学校 ID(可选,默认值为 1) 否 chat_type Integer 会话类型(默认值为 0) 否 type String 会话类型描述 否 app_id Long 应用 ID(可选) 否 响应格式:
{ "data": { "id": 12345, "name": "会话名称" }, "code": 1, "msg": null, "ok": true }
2. 列出会话
请求方法:
GET
接口路径:
/api/v1/chat/list
请求参数:
参数 类型 描述 是否必填 user_id String 用户 Id 否 offset Integer 页码(默认值为 1) 否 limit Integer 每页数量(默认值为 10) 否 school_id Long 学校 ID(可选) 否 chat_type Integer 会话类型(可选) 否 响应格式:
{ "data": [ { "id": 12345, "name": "会话名称", "user_id": "user123", "school_id": 1, "type": "类型描述", "chat_type": 0, "create_time": "2024-07-16T12:34:36.651846Z", "update_time": "2024-07-16T12:34:36.651846Z" } // 更多会话 ], "code": 1, "msg": null, "ok": true }
3. 设置会话名称
请求方法:
PUT
接口路径:
/api/v1/chat/set/name
请求参数:
参数 类型 描述 是否必填 user_id String 用户 Id 否 session_id Long 会话 ID 是 name String 新的会话名称 是 响应格式:
{ "data": null, "code": 1, "msg": null, "ok": true }
4. 删除会话
请求方法:
DELETE
接口路径:
/api/v1/chat/delete
请求参数:
参数 类型 描述 是否必填 user_id String 用户 Id 否 session_id Long 会话 ID 是 响应格式:
{ "data": null, "code": 1, "msg": null, "ok": true }
推理接口
1. 发送用户提问
请求方法:
POST
接口路径:
/api/v1/chat/send
请求头:
Content-Type: application/json
请求体:
{ "user_id": "452057544733368321", "session_id": "452057544733368320", "type": "general", "provider": "opneai", "school_id": 1, "app_id": "", "messages": [ { "role": "user", "content": "When is the last day of Kapiolani Community College in spring 2025" } ], "stream": true }
SSE 数据示例:
event:delta data:{"content":"- Think about your question: When is the last day of Kapiolani Community College in spring 2025\r\n"} event:progress data:The number of history records to be queried:0 event:message_id data:{"question_id":"452093442603847680"} event:progress data:Serach it is processed using ppl event:question data:When is the last day of Kapiolani Community College in spring 2025? event:delta data:{"content":"- Understand your intention: When is the last day of Kapiolani Community College in spring 2025?\r\n"} event:delta data:{"content":"- Searching... \r\n"} event:progress data:default event:input data:[] event:delta data:{"content":"- Reply to your question.\r\n\r\n"} event:citations data:["https://www.bhcc.edu/academic-calendar/academiccalendar-spring2025/","https://kellogg.edu/about/academic-calendar/","https://hawaii.hawaii.edu/sites/default/files/assets/catalog/docs/02-academic_calendar.pdf","https://www.kapiolani.hawaii.edu/classes/academic-calendar/","https://www.kapiolani.hawaii.edu/classes/"] event:delta data:{"content":"The"} event:delta data:{"content":" last day"} event:delta data:{"content":" of the"} event:delta data:{"content":" Spring "} event:delta data:{"content":"2025"} event:delta data:{"content":" semester at"} event:delta data:{"content":" Kapi"} event:delta data:{"content":"olani"} event:delta data:{"content":" Community College"} event:delta data:{"content":" is Friday"} event:delta data:{"content":", May"} event:delta data:{"content":" 16"} event:delta data:{"content":", "} event:delta data:{"content":"2025"} event:delta data:{"content":". This"} event:delta data:{"content":" marks the"} event:delta data:{"content":" end of"} event:delta data:{"content":" the semester"} event:delta data:{"content":", following"} event:delta data:{"content":" the final"} event:delta data:{"content":" examination period"} event:delta data:{"content":" which takes"} event:delta data:{"content":" place from"} event:delta data:{"content":" May "} event:delta data:{"content":"8 to"} event:delta data:{"content":" May "} event:delta data:{"content":"16[4]."} event:message_id data:{"answer_id":"452093453534203904"}
2. 停止推理
请求方法:
POST
接口路径:
/api/v1/chat/stop
请求参数:
参数 类型 描述 是否必填 session_id Long 会话 ID 是 请求示例:
POST /api/v1/chat/stop?session_id=452057544733368320
响应示例:
{ "data": null, "code": 1, "msg": null, "ok": true }
点赞/取消点赞
请求方法:
POST
接口路径:
/api/v1/chat/like
请求头:
Content-Type: application/json
请求体:
{ "question_id": "452075106336137216", "answer_id": "452075122110914560", "like": true }
请求示例:
POST /api/v1/chat/like Content-Type: application/json { "question_id": "452075106336137216", "answer_id": "452075122110914560", "like": true }
响应格式:
{ "data": null, "code": 1, "msg": null, "ok": true }
历史记录
请求方法:
GET
接口路径:
/api/v1/chat/history
请求参数:
参数 类型 描述 是否必填 user_id String 用户 Id 否 session_id Long 会话 ID 是 offset Integer 页码(默认值为 1) 否 limit Integer 每页数量(默认值为 100) 否 请求示例:
GET /api/v1/chat/history?session_id=12345&offset=1&limit=20
响应格式:
{ "data": [ { "id": 452075106336137216, "role": "user", "content": "如何注册课程,以及注册的截止日期和程序是什么?", "liked": true, "metadata": { "some_key": "some_value" }, "create_time": "2024-07-16T12:34:36.651846Z" }, { "id": 452075122110914560, "role": "assistant", "content": "您可以通过学校的在线系统注册课程,截止日期为每学期的最后一周。", "liked": false, "metadata": { "some_key": "some_value" }, "create_time": "2024-07-16T12:35:00.123456Z" } // 更多历史记录 ], "code": 1, "msg": null, "ok": true }