Skip to content

智能体系统设计

本文介绍了智能体相关的体系结构,工作流程以及组件,并定义了Restful接口

1. 体系结构

system_structure

2. 工作流

  • a. 初始工作,将数据库连接信息传递给Agent Server进行数据库连接管理
  • b. 当Agent Server接收到用户消息后传递给Agent Executor按照ReAct模式执行任务
  • c. Agent Executor调用Structed Chat Agent进行推理
  • d. 然后Agent Executor根据Structed Chat Agent的反馈确定是否要调用工具,将返回结果和工具返回结果合并.
  • e. 循环c, d两步直到AgentFinish将最终结果返回用户

3. 组件

Agent Server: 接受用户请求并执行相关操作,将中间对应步骤和最终结果返回用户,其中包含以下子组件:

SQL Connection Manager: 数据库连接信息管理器, 对数据库进行预连接,并管理所有要用到的数据库
Agent Executor: 智能体执行器,循环调用Agent并根据反馈信息决定下一步任务
Structured Chat Agent: 结构化聊天智能体,根据固定的ReAct提示词模板推理任务,并将结果反馈给Agent Executor
SQL Agent Tool: SQL智能体工具,通过SOL ToolKits完成所有数据库查询任务
Charts Chain Tool: 图表智能工具,根据输入整理生成可供前端渲染的图表数据
Knowledge Base Tool: 知识库组件,提供知识库查询和信息整合

LM Server: 大模型服务, 执行单次的请求推理
MySQL: 数据库
K8S: 容器编排调度系统,对参与的微服务进行管理调度

4. LangChain Agent Execute Sequence Diagram

langchain_agent_executer

5. 接口

连接数据库: User->Agent System

协议接口

传输协议 HTTP(POST)
URI PATH /uran/agent/db-connects
Headers Content-Type:application/json;charset=UTF-8
Version v1.0

请求字段

名称 类型 是否必须 说明
uri String Y 数据库链接uri
dbs StringArray Y 要用到的数据库数组

响应字段

名称 类型 是否必须 说明
status Int Y 状态码200为成功, 其余为出错
message String Y 当status=200为”success”, 其余为错误信息
data Object N 返回有用的数据

示例 :

请求

{
    "uri":"mysql://root:Koala_MySQL#20Xx..A..@10.10.8.5:43306",
    "dbs":["koala_ai_alarm", "xxx", ...]
}

响应

{
    "status": 200,
    "message": "success"
}

断开数据库: User->Agent System

协议接口

传输协议 HTTP(DELETE)
URI PATH /uran/agent/db-connects
Headers Content-Type:application/json;charset=UTF-8
Version v1.0

请求字段

名称 类型 是否必须 说明
uri String Y 数据库链接uri
dbs StringArray Y 要用到的数据库数组

响应字段

名称 类型 是否必须 说明
status Int Y 状态码200为成功, 其余为出错
message String Y 当status=200为”success”, 其余为错误信息
data Object N 返回有用的数据

示例 : 请求

{
    "uri":"mysql://root:Koala_MySQL#20Xx..A..@10.10.8.5:43306",
    "dbs":["koala_ai_alarm", "xxx", ...]
}

响应

{
    "status": 200,
    "message": "success"
}

对话交流: User <->Agent System

协议接口

传输协议 HTTP(POST)
URI PATH /uran/agent/chat
Headers Content-Type:application/json;charset=UTF-8
Version v1.0

请求字段

名称 类型 是否必须 说明
message Object Y 用户发送消息
+content String Y 消息体
maxTokens Int Y 限制最大token数
temperature Float Y 想象力
model String Y 模型名
database String N 指定要搜索的数据库
session String N 会话id,如果没有或者为""或null,在第一次对话后会返回

响应字段 ( 流式text/event-stream )

名称 类型 是否必须 说明
data Object Y 返回产生的结果[DONE]表示完成
+choices ObjectArray Y
++delta Object Y
+++role/step/content String Y role=assistant,step=当前正在发生进行的步骤, content=模型回复的消息
+++generation Object N 模型生成的渲染图表数据
++++type String Y 图表类型table表格/histogram直方图/linechart折线图/piechart饼图
++++chart Object Y ECharts支持的图结构数据,或者如果为table则是简单分类的json数据,见示例
++session String Y 本次对话session id, 在一次对话过程请求中需要带上
++finish_reason String Y null or  结束原因

示例 : 请求

{
    "maxTokens": 128,
    "temperature": 0.7,
    "message": {
         "content": "按天统计人员报警数量,并生成直方图"
    },
    "model": "koala-mm",
    "database": "koala_ai_alarm",
    "session": "abcd-xxx-iiii"
}

响应

data: { "choices": [{"delta": {"step": "正在使用工具:......"}, "session": "abcd-xxx-iiii", "finish_reason": null}, ]}
data: { "choices": [{"delta": {"step": "正在使用工具:......"}, "session": "abcd-xxx-iiii", "finish_reason": null}]}
data: { "choices": [{"delta": {"content": "火灾"}, "session": "abcd-xxx-iiii", "finish_reason": null}]}
data: { "choices": [{"delta": {"content": "发生"}, "session": "abcd-xxx-iiii", "finish_reason": null}]}
data: { "choices": [{"delta": {"generation": 
     { 
        "type" : "table",
        "chart" : {
            "数学": [84, 120, 115, ....],
            "语文": [99, 120, 115, ....],
            "外语": [66, 120, 115, ....]
        }
    },
      "session": "abcd-xxx-iiii",
      "finish_reason": "stop"
    }}]}

...