知识库 ✕ Skills 链:打造可开发的智能流程编排引擎

0 阅读6分钟

1. 引言:为什么需要知识库与 Skills 链协同

在大型语言模型(LLM)应用开发中,我们经常面临两个核心痛点:

  • 上下文不稳定——每次对话都要重新组织背景信息,效率低且容易遗漏
  • 任务执行不可控——LLM 的自由发挥无法保证步骤的完整性与结果的确定性

解决方案是分层解耦:用知识库提供稳定的、结构化的上下文,用 Skills 链将复杂任务拆解为可复用、可约束、可检查的执行单元,再通过流程编排引擎把它们串联起来。

本文将深入探讨这套架构的设计思路与实现要点。

2. 知识库设计:不只是向量检索

2.1 知识库的语义分层

传统知识库往往被简化为“文档切片 + 向量检索”,但作为 LLM 的上下文提供者,知识库需要更丰富的语义类型:

存储层内容类型典型用途检索方式
长期记忆用户偏好、历史决策、领域术语个性化上下文键值匹配 + 向量检索
领域知识业务规则、技术文档、FAQ问题解答、约束校验向量检索 + 关键词图谱
运行时状态当前会话的中间变量、技能输出缓存链式传递上下文Session Store 直接读取

2.2 上下文注入策略

[用户输入] 
    │
    ├── 长期记忆匹配 → [用户偏好片段]
    ├── 领域知识检索 → [Top-K 相关文档]
    └── 运行时状态读取 → [上一步技能输出]
            │
            ▼
    [拼接为系统提示词注入 LLM]

关键在于 注入优先级:运行时状态 > 长期记忆 > 领域知识。因为越靠近当前任务的上下文,对决策的影响越直接。

3. Skills 链:原子化任务单元

3.1 Skill 的定义模型

每个 Skill 是一个自包含的执行单元,包含三个核心要素:

class SkillDefinition:
    name: str              # 技能名称,如 "extract_entities"
    description: str       # 功能描述,用于 LLM 路由选择
    input_schema: dict     # 输入参数的 JSON Schema
    output_schema: dict    # 输出格式的 JSON Schema
    preconditions: list    # 前置条件:需要的上下文或状态
    execution: callable    # 具体执行逻辑(LLM 调用 / API / 脚本)
    post_checks: list      # 后置校验:对输出进行格式与内容检查

3.2 可约束与可检查的设计

可约束通过 input_schemapreconditions 实现:

  • 每个 Skill 声明自己的输入类型与前置依赖,流程编排引擎在调用前自动校验
  • 不满足约束的调用会被提前拦截,而非让 LLM 自由发挥后才发现问题

可检查通过 post_checks 实现:

post_checks = [
    lambda output: 10 <= len(output.get("keywords", [])) <= 20,
    lambda output: all(isinstance(k, str) for k in output["keywords"]),
    lambda output: output.get("confidence", 0) >= 0.7
]

任何检查不通过,Skill 返回结构化错误而非吞掉异常,让下游 Skill 可以做出降级处理。

4. 流程编排:DSL 定义与执行引擎

4.1 编排 DSL 设计

为了让业务流程可读、可维护、可版本控制,我们定义一套声明式的编排语言:

pipeline: content_generation_pipeline
version: "1.0"
context:
  - long_term_memory: [user_preferences]
  - domain_knowledge: [style_guide, compliance_rules]

steps:
  - id: topic_research
    skill: search_relevant_docs
    input:
      query: "{{user_request}}"
      top_k: 5
    output_as: research_material

  - id: outline_generation
    skill: generate_outline
    input:
      topic: "{{user_request}}"
      references: "{{research_material.summaries}}"
      style_constraints: "{{domain_knowledge.style_guide}}"
    output_as: outline
    post_check: 
      - "len(outline.sections) >= 3"
      - "outline.total_estimated_words >= 1000"

  - id: draft_writing
    skill: write_section
    input:
      section: "{{item}}"
      context: "{{research_material.raw_docs}}"
    loop: "{{outline.sections}}"
    output_as: draft_sections

  - id: review_and_polish
    skill: review_content
    input:
      draft: "{{draft_sections}}"
      rules: "{{domain_knowledge.compliance_rules}}"
    output_as: final_output

4.2 执行引擎核心逻辑

class PipelineEngine:
    def __init__(self, skill_registry, knowledge_base):
        self.skill_registry = skill_registry
        self.knowledge_base = knowledge_base
    
    def execute(self, pipeline: Pipeline, context: dict):
        state = context.copy()
        
        for step in pipeline.steps:
            # 1. 加载 Skill 定义
            skill = self.skill_registry.get(step.skill)
            
            # 2. 注入知识库上下文
            enriched_state = self.knowledge_base.enrich(
                state, 
                step.context_requirements
            )
            
            # 3. 校验前置条件
            if not self.check_preconditions(skill, enriched_state):
                raise PipelineError(f"前置条件不满足: {step.id}")
            
            # 4. 解析输入(支持模板变量与循环)
            resolved_input = self.resolve_input(step, enriched_state)
            
            # 5. 执行 Skill
            output = skill.execute(resolved_input)
            
            # 6. 后置校验
            if not self.check_post_conditions(skill, output):
                self.handle_failure(step, output)
                continue
            
            # 7. 将输出写入状态
            state[step.output_as] = output
        
        return state["final_output"]

4.3 循环与条件分支

对于需要批量处理的场景,编排引擎支持循环绑定:

- id: batch_analyze
  skill: analyze_feedback
  input:
    feedback: "{{item}}"
    context: "{{knowledge_base.product_info}}"
  loop: "{{raw_feedback_list}}"
  output_as: analyzed_results
  max_concurrency: 5

同时也支持条件分支,根据前置 Skill 的输出决定下一步路由:

- id: quality_gate
  skill: evaluate_quality
  input:
    content: "{{draft_sections}}"
  output_as: quality_report

- id: human_review
  skill: request_human_review
  condition: "quality_report.score < 0.8"
  input:
    content: "{{draft_sections}}"
    reason: "{{quality_report.details}}"

- id: auto_publish
  skill: publish_content
  condition: "quality_report.score >= 0.8"
  input:
    content: "{{draft_sections}}"

5. 可开发性保障:从脚本到平台

5.1 Skills Registry —— 技能的“应用商店”

将 Skills 注册到统一管理中心:

# skills/extract_keywords.py
@register_skill(
    name="extract_keywords",
    category="text_analysis",
    input_schema={
        "type": "object",
        "properties": {
            "text": {"type": "string"},
            "max_keywords": {"type": "integer", "default": 20}
        },
        "required": ["text"]
    }
)
def extract_keywords(text: str, max_keywords: int = 20) -> dict:
    # 具体实现:调用 LLM 或本地模型
    ...

所有注册的 Skill 可以通过管理面板查看、测试、版本管理,非技术人员也能通过合适的 UI 拖拽编排流程。

5.2 调试与可观测性

每个步骤的执行日志自动记录:

{
  "pipeline_id": "content_gen_20260702_001",
  "step_id": "outline_generation",
  "started_at": "2026-07-02T15:07:23Z",
  "completed_at": "2026-07-02T15:07:45Z",
  "input_summary": "用户请求: 写一篇关于云原生的文章",
  "output_summary": "大纲含5个章节",
  "knowledge_sources": ["kb_doc_042", "user_pref_v2"],
  "post_check_results": {
    "sections_count": {"passed": true, "value": 5},
    "word_count": {"passed": true, "value": 1200}
  },
  "status": "success"
}

所有日志可回溯,方便定位哪个步骤的哪个 Skill 输出不满足预期。

5.3 开发工具链

提供配套的 CLI 和 IDE 插件:

# 初始化技能项目
skills init my-content-pipeline

# 本地运行编排流程
skills run pipeline.yaml --watch

# 验证 Skill 定义是否符合规范
skills validate

# 导出流程为可视化图表
skills visualize pipeline.yaml --output flowchart.svg

在 VS Code 或 JetBrains IDE 中,安装插件后可获得 YAML 编排文件的自动补全、Skill input/output schema 的内联提示,以及一键本地调试的能力。

6. 实战案例:技术博客自动生成

把前面的设计串联起来,一个完整的技术博客生成流程如下:

flowchart TD
    A[&#34;用户输入:写一篇关于 Docker 的部署教程&#34;] --> B[&#34;知识库检索&#34;]
    B --> C[&#34;Skill: 提取关键词&#34;]
    C --> D[&#34;Skill: 搜索相关资料&#34;]
    D --> E[&#34;Skill: 生成大纲&#34;]
    E --> F{&#34;大纲质量检查&#34;}
    F -->|分值 ≥ 0.8| G[&#34;Skill: 逐节撰写&#34;]
    F -->|分值 < 0.8| H[&#34;Skill: 大纲修正&#34;]
    H --> E
    G --> I[&#34;Skill: 全文审校&#34;]
    I --> J{&#34;合规检查&#34;}
    J -->|通过| K[&#34;输出 Markdown 正文&#34;]
    J -->|不通过| L[&#34;Skill: 违规段落修正&#34;]
    L --> I
  • 知识库在这一流程中持续提供领域文档、风格指南与合规规则
  • Skills 链把生成任务拆为提取关键词、搜索资料、生成大纲、逐节撰写、审校五个原子步骤
  • 流程编排通过质量门与合规检查两个条件分支,确保最终输出达到质量标准

7. 结语:可组合的智能体架构

知识库 + Skills 链 + 流程编排引擎,三者共同构成了一个可开发、可演进、可复用的智能体架构基础。

  • 知识库负责“知道什么”——提供稳定、可检索的背景知识
  • Skills 链负责“会做什么”——把能力封装为输入输出可约束的原子单元
  • 流程编排引擎负责“如何串联”——通过声明式 DSL 与控制流,让复杂任务变得透明可控

核心价值在于:让 AI 应用的开发从“提示词试错”走向“工程化落地”