Skip to content

01. 应用配置的存储流程 ​

在 LLMOps 应用编排页面,应用的配置可以划分成几种,例如:1.草稿配置:用户在前端编排页面修改 Agent 配置时,实时存储的就是 草稿配置,草稿配置只会在 编排页面 调试中生效,在开放 API 或者 WebApp 中均不会起效果。2.当前发布的运行配置:即当前 Agent 智能体在开放 API 或者在 WebApp 中使用的配置信息,由 草稿配置 发布得到。3.历史发布的运行配置:记录每一次发布的运行配置,便于在编排页面对配置进行 回退操作,当执行 回退操作 时会将对应的运行配置同步到 草稿配置 中,完成对 草稿配置 的覆盖。 其运行流程如下

所以在 LLMOps 项目中,可以考虑使用两张表来完成该运行流程,这两张表分别是: 1.app_config:应用运行配置表,用于存储该 Agent 应用实际运行的配置信息(WebApp、开放 API 运行的 Agent 配置)。 2.app_config_version:应用配置历史版本表,该表用于存储每次发布的配置信息历史+草稿信息,通过 config_type 来标识记录是 历史配置 还是 草稿,通过 version 字段来标识不同的版本。 那么不同的操作执行的逻辑如下:1.创建应用:创建应用的同时添加 app_config_version 记录,并在记录中存储 默认草稿配置信息。2.更新应用草稿配置:将数据同步到 app_config_version 的草稿配置记录中。3.发布应用:取出应用的 app_config_version 草稿配置,同步添加到 app_config 中,同时在 app_config_version 中添加一个历史配置信息记录,并更改应用的状态,从而完成发布应用流程。4.更新应用:取出应用的 app_config_version 草稿配置,并同步更新 app_config 中的配置,同时在 app_config_version 中添加一条历史配置信息记录,从而完成应用更新流程。5.取消发布:删除 app_config 中的配置,并更改应用的状态。

02. 应用配置数据结构设计 ​

在 Agent 应用编排页面中,为了便于后续的扩展,对于 启用 类字段,均使用 {"enable": true} 而非单纯 boolean 类型的标识来代替,便于后期扩展某项功能,例如 长期记忆是否启用,该字段配置如下

后期如果想对 长期记忆 的 内容长度 进行配置,只需要在配置中新增字段 length_limit 即可,例如{"long_term_memory": {"enable": true, "length_limit": 2000}}

除了上述的特殊部分,在 草稿配置 以及 历史配置 中,还会存储存储 关联工具列表 、关联知识库列表、关联工作流列表,这些数据涉及到跨表的引用,所以考虑使用 jsonb列表 来存储对应的引用,在每次 Agent 使用之前均会检测对应数据是否存在,并进行更新,例如 { "datasets": [ "1cbb6449-5463-49a4-b0ef-1b94cdf747d7", "f3f28f75-8e60-4eba-b6df-4d1b390bbd89" ] } 基于该思路,对应用配置的数据结构设计如下

json
{
    # 模型配置,涵盖提供者、模型名字、模型运行参数信息
    "model_config": {
        "provider": "openai",
        "model": "gpt-4o-mini",
        "parameters": {
            "temperature": 0.5,
            "top_p": 0.5,
            "presence_penalty": 0.2,
            "frequency_penalty": 0.3,
            "max_tokens": 4500
        }
    },
    # 携带上下文轮数
    "dialog_round": 3,
    # 人设与回复逻辑/预设prompt
    "preset_prompt": "你是一个拥有10年经验的翻译官,请帮助用户解决问题。",
    # 关联工具列表
    "tools": [
        {
            "type": "builtin_tool",
            "provider_id": "google",
            "tool_id": "google_serper"
        },
        {
            "type": "api_tool",
            "provider_id": "5e7834dc-bbca-4ee5-9591-8f297f5acded",
            "tool_id": "e1baf52a-1be2-4b93-ad62-6fad72f1ec37"
        }
    ],
    # 关联工作流列表
    "workflows": [
        "5e7834dc-bbca-4ee5-9591-8f297f5acded",
        "9f5e42d4-e184-4e2c-88f2-0ef843749e3f"
    ],
    # 关联知识库列表
    "datasets": [
        "1cbb6449-5463-49a4-b0ef-1b94cdf747d7",
        "f3f28f75-8e60-4eba-b6df-4d1b390bbd89"
    ],
    # 检索配置
    "retrieval_config": {
        "retrieval_strategy": "semantic",
        "k": 5,
        "score": 0.5
    },
    # 长期记忆配置
    "long_term_memory": {
        "enable": true
    },
    # 对话开场白
    "opening_statement": "嘿!🎉 我是你的好朋友,Gauthmath 导师机器人。",
    # 开场白建议问题列表
    "opening_questions": [
        "你能解释一下二次方程的概念吗?",
        "如何解线性方程组?",
        "求解x^2-4x+4=0"
    ],
    # 语音转文本
    "speech_to_text": {
        "enable": true
    },
    # 文本转语音
    "text_to_speech": {
        "enable": false,
        "voice": "echo",
        "auto_play": false
    },
    # 审核配置
    "review_config": {
        "enable": true,
        "keywords": ["敏感词", "慕课网"],
        "inputs_config": {
            "enable": true,
            "preset_response": "很抱歉,该问题无法回复"
        },
        "outputs_config": {
            "enable": true
        }
    },
}

设计好 应用配置 结构后,即可考虑完成对应 Agent 智能体的配置,实现一个 Agent(或者说一个 Class),通过接收不同的 config 能实现不同的功能,从而完成 可视化编排Agent 的整个流程

总结 ​

  1. LLMOps应用配置分为草稿配置、当前发布运行配置、历史发布运行配置三类,通过app_config和app_config_version两张表实现配置的存储、发布、回退等操作。
  2. 应用配置数据结构设计采用可扩展的字段格式(如{"enable": true}),跨表引用数据使用jsonb列表存储,涵盖模型、工具、知识库、审核等多维度配置项。
  3. 基于统一的配置结构可实现Agent的可视化编排,通过接收不同配置实现不同功能,提升Agent的灵活性和可扩展性。

Talk is cheap, show me the code!