Bisheng组件系统:模块化AI应用构建

【免费下载链接】bisheng Bisheng is an open LLM devops platform for next generation AI applications. 【免费下载链接】bisheng 项目地址: https://gitcode.com/GitHub_Trending/bi/bisheng

Bisheng的组件系统采用高度模块化的架构设计,通过类型化的接口定义和灵活的扩展机制,为AI应用构建提供了强大的基础设施支撑。系统核心基于Python类型注解和动态代码解析技术,实现了组件间的无缝集成和类型安全的数据流传递。

组件架构设计与类型系统分析

Bisheng的组件系统采用高度模块化的架构设计,通过类型化的接口定义和灵活的扩展机制,为AI应用构建提供了强大的基础设施支撑。系统核心基于Python类型注解和动态代码解析技术,实现了组件间的无缝集成和类型安全的数据流传递。

核心架构设计

Bisheng组件架构采用分层设计模式,主要包含以下几个核心层次:

基础组件层(CustomComponent基类)

class CustomComponent(Component):
    display_name: Optional[str] = None
    description: Optional[str] = None
    icon: Optional[str] = None
    code: Optional[str] = None
    field_config: dict = {}
    field_order: Optional[List[str]] = None
    code_class_base_inheritance: ClassVar[str] = 'CustomComponent'
    function_entrypoint_name: ClassVar[str] = 'build'

类型系统层(Field Typing) 系统定义了丰富的类型注解,支持从基础数据类型到复杂AI组件的完整类型体系:

mermaid

类型系统详细分析

Bisheng的类型系统通过field_typing模块实现,提供了完整的类型定义和验证机制:

基础类型定义

# 核心数据类型
class Data:
    """通用数据容器,支持任意类型的数据传递"""
    value: Any

# LangChain集成类型
BaseLLM = Union[BaseLanguageModel, BaseChatModel]
BaseLoader = Union[DocumentLoader, BaseLoader]
VectorStore = Union[BaseRetriever, VectorStore]

类型支持矩阵

类型类别 具体类型 用途描述 是否支持自定义
语言模型 BaseLLM, BaseLanguageModel 大语言模型接口
文档处理 BaseLoader, Document 文档加载和解析
向量存储 VectorStore, BaseRetriever 向量检索和存储
记忆管理 BaseMemory, BaseChatMemory 对话记忆管理
工具调用 Tool, Callable 函数工具调用
提示工程 PromptTemplate, ChatPromptTemplate 提示词模板

组件构建机制

Bisheng采用动态代码解析和编译技术实现组件的运行时构建:

构建流程分析 mermaid

核心构建方法

def get_build_method(self):
    """动态解析组件代码中的build方法"""
    if not self.code:
        return {}

    component_classes = [cls for cls in self.tree['classes'] 
                        if self.code_class_base_inheritance in cls['bases']]
    
    build_methods = [
        method for method in component_class['methods'] 
        if method['name'] == self.function_entrypoint_name
    ]
    return build_methods[0] if build_methods else {}

类型安全与验证

系统通过多层验证机制确保类型安全:

编译时类型检查

def validate_function_signature(code: str, entrypoint: str):
    """验证函数签名是否符合类型要求"""
    tree = ast.parse(code)
    for node in ast.walk(tree):
        if isinstance(node, ast.FunctionDef) and node.name == entrypoint:
            # 检查参数和返回类型注解
            return _validate_annotations(node.args, node.returns)

运行时类型转换

class TypeAdapter:
    """运行时类型适配器,处理类型转换和验证"""
    
    @staticmethod
    def adapt_value(value: Any, target_type: Type) -> Any:
        if target_type == Data:
            return Data(value=value)
        elif hasattr(target_type, 'parse_obj'):
            return target_type.parse_obj(value)
        return value

扩展性设计

Bisheng组件系统支持多种扩展方式:

自定义组件创建

class MyCustomComponent(CustomComponent):
    def build_config(self):
        return {
            "model_name": {
                "type": "str",
                "required": True,
                "display_name": "Model Name"
            },
            "temperature": {
                "type": "float",
                "default": 0.7,
                "range": [0.0, 1.0]
            }
        }
    
    def build(self, model_name: str, temperature: float) -> str:
        return f"Model: {model_name}, Temp: {temperature}"

类型系统扩展 开发者可以通过注册新的类型到类型系统中:

# 注册自定义类型
from bisheng.field_typing import register_type

@register_type("MyCustomType")
class MyCustomType:
    def __init__(self, data: dict):
        self.data = data
    
    def process(self):
        return processed_data

性能优化策略

系统采用多种性能优化技术:

缓存机制

from cachetools import TTLCache, cachedmethod

class CustomComponent(Component):
    def __init__(self, **data):
        self.cache = TTLCache(maxsize=1024, ttl=60)
        super().__init__(**data)
    
    @cachedmethod(operator.attrgetter('cache'))
    def get_build_method(self):
        # 缓存解析结果,避免重复解析
        pass

懒加载策略 类型导入采用懒加载方式,避免循环依赖:

def __getattr__(name: str) -> Any:
    # 避免循环导入,按需加载模块
    if name == 'TemplateField':
        return _import_template_field()
    elif name == 'RangeSpec':
        return RangeSpec

Bisheng的组件架构通过精心的类型系统设计和模块化的组件结构,为AI应用开发提供了强大的基础设施。其类型安全的接口定义、灵活的扩展机制和性能优化策略,使得开发者能够快速构建复杂的AI工作流,同时保证系统的稳定性和可维护性。

自定义组件开发与集成指南

Bisheng的组件系统提供了强大的自定义能力,允许开发者根据特定业务需求创建专属的AI组件。通过自定义组件,您可以扩展平台功能,集成第三方服务,或者实现特定的数据处理逻辑。

组件基础结构

每个自定义组件都需要继承自 CustomComponent 基类,并实现核心的 build 方法。以下是组件的基本结构:

from bisheng import CustomComponent
from bisheng.field_typing import Data, Document, TextSplitter
from typing import List, Optional

class MyCustomComponent(CustomComponent):
    display_name: str = "文本处理组件"
    description: str = "用于文本预处理和清洗的自定义组件"
    icon: str = ":gear:"
    
    def build_config(self):
        return {
            "input_text": {
                "display_name": "输入文本",
                "info": "需要处理的原始文本内容",
                "type": "Data"
            },
            "clean_options": {
                "display_name": "清洗选项",
                "options": ["去除标点", "转换为小写", "去除停用词"],
                "type": "str",
                "is_list": True
            }
        }
    
    def build(self, input_text: Data, clean_options: List[str]) -> Data:
        # 组件核心逻辑实现
        processed_text = self.process_text(input_text, clean_options)
        return processed_text
    
    def process_text(self, text: str, options: List[str]) -> str:
        """文本处理逻辑"""
        if "转换为小写" in options:
            text = text.lower()
        if "去除标点" in options:
            text = ''.join(char for char in text if char.isalnum() or char.isspace())
        return text

组件配置系统

Bisheng提供了灵活的配置系统,通过 build_config 方法定义组件的输入参数:

配置属性 类型 说明 示例
display_name str 参数显示名称 "模型温度"
info str 参数描述信息 "控制生成文本的随机性"
type str 参数数据类型 "Data", "str", "int"
is_list bool 是否为列表类型 True
options List[str] 可选值列表 ["选项1", "选项2"]
required bool 是否必需 True

支持的数据类型

Bisheng提供了丰富的数据类型支持,确保组件间的数据兼容性:

from bisheng.field_typing import (
    Data, Document, TextSplitter, BaseLLM, BaseLanguageModel,
    BaseRetriever, VectorStore, Embeddings, Tool, Chain,
    PromptTemplate, ChatPromptTemplate, AgentExecutor
)

class AdvancedComponent(CustomComponent):
    def build(self, 
              documents: List[Document],
              llm: BaseLanguageModel,
              retriever: BaseRetriever) -> List[Document]:
        # 处理文档并使用LLM和检索器
        processed_docs = []
        for doc in documents:
            # 组件逻辑
            pass
        return processed_docs

组件生命周期管理

自定义组件支持完整的生命周期管理,包括创建、更新、删除和版本控制:

mermaid

错误处理与验证

组件开发时需要包含完善的错误处理机制:

from fastapi import HTTPException

class RobustComponent(CustomComponent):
    def build(self, input_data: Data) -> Data:
        try:
            if not input_data:
                raise ValueError("输入数据不能为空")
            
            # 业务逻辑
            result = self.process_data(input_data)
            
            if not result:
                raise HTTPException(
                    status_code=400,
                    detail={"error": "处理失败", "message": "无法生成有效结果"}
                )
                
            return result
            
        except Exception as e:
            self.repr_value = f"处理错误: {str(e)}"
            raise

组件测试与调试

Bisheng提供了组件测试框架,支持本地测试和验证:

# 组件测试示例
def test_custom_component():
    component = MyCustomComponent()
    
    # 测试配置生成
    config = component.build_config()
    assert "input_text" in config
    
    # 测试构建逻辑
    test_input = "Hello, World!"
    test_options = ["转换为小写", "去除标点"]
    
    result = component.build(test_input, test_options)
    assert result == "hello world"
    
    print("组件测试通过!")

高级功能集成

自定义组件可以集成高级功能,如工作流调用、内存管理和状态持久化:

class WorkflowComponent(CustomComponent):
    async def build(self, flow_id: str, input_data: Data) -> Data:
        # 加载并执行其他工作流
        flow_vertices = await self.load_flow(flow_id)
        
        # 处理流程执行结果
        results = []
        for vertex in flow_vertices:
            result = await vertex.build(input_data=input_data)
            results.append(result)
        
        return self.aggregate_results(results)
    
    def aggregate_results(self, results: List[Any]) -> Data:
        """聚合多个流程的执行结果"""
        return {"results": results, "count": len(results)}

最佳实践指南

  1. 命名规范:使用清晰的显示名称和描述
  2. 错误处理:提供有意义的错误信息和状态反馈
  3. 性能优化:避免在build方法中进行重型初始化
  4. 类型安全:正确使用类型注解确保数据兼容性
  5. 文档完善:为每个参数提供详细的信息说明

组件部署与分发

完成开发后,组件可以通过以下方式分发:

  • 直接导入Python代码
  • 通过平台界面创建和保存
  • 导出为可共享的组件包
  • 集成到企业私有组件库

通过遵循这些指南,您可以创建出高质量、可维护的自定义组件,有效扩展Bisheng平台的能力边界。

LLM、Embedding、VectorStore组件详解

Bisheng作为企业级LLM应用开发平台,其核心组件系统提供了强大的模块化能力,让开发者能够快速构建复杂的AI应用。本文将深入解析LLM、Embedding和VectorStore三大核心组件的设计理念、实现机制和使用方法。

LLM组件:统一的大语言模型接口

Bisheng的LLM组件采用了统一的抽象设计,通过BishengLLM类封装了多种大语言模型服务,实现了标准化的调用接口。

核心架构设计

mermaid

支持的LLM服务类型

Bisheng支持丰富的LLM服务提供商,通过统一的配置管理实现多模型切换:

服务类型 对应客户端 主要特性
OpenAI ChatOpenAI 官方API服务,支持GPT系列模型
Azure OpenAI AzureChatOpenAI 微软Azure云服务
Ollama ChatOllama 本地推理框架,支持多种开源模型
通义千问 ChatTongyi 阿里云大模型服务
百度千帆 QianfanChatEndpoint 百度智能云大模型平台
智谱清言 ChatZhipuAI 智谱AI大模型服务
讯飞星火 ChatSparkOpenAI 科大讯飞大模型
MiniMax MiniMaxChat 深度求索大模型
月之暗面 MoonshotChat Kimi大模型服务
配置示例
# 使用BishengLLM组件配置示例
from bisheng.interface.llms.custom import BishengLLM

# 初始化LLM组件
llm = BishengLLM(
    model_id=123,           # 模型ID
    model_name="gpt-4",     # 模型名称
    streaming=True,         # 启用流式输出
    temperature=0.7,        # 生成温度
    cache=False             # 禁用缓存
)

# 调用生成接口
response = llm.generate([
    {"role": "user", "content": "你好,请介绍一下Bisheng平台"}
])

Embedding组件:统一的向量化服务

Bisheng的Embedding组件提供了标准化的文本向量化接口,支持多种嵌入模型服务。

架构设计

mermaid

核心特性
  1. 统一接口设计:提供embed_documentsembed_query标准化方法
  2. 自动归一化:对输出向量进行L2归一化处理,确保向量质量
  3. 状态监控:实时监控模型服务状态,自动处理异常情况
  4. 多服务支持:兼容OpenAI、Azure、Ollama等多种嵌入服务
使用示例
from bisheng.interface.embeddings.custom import BishengEmbedding

# 初始化Embedding组件
embedding = BishengEmbedding(
    model_id=456,                   # 嵌入模型ID
    embedding_ctx_length=8192,      # 上下文长度
    max_retries=6,                  # 最大重试次数
    request_timeout=200             # 请求超时时间(秒)
)

# 批量文档嵌入
documents = ["文档1内容", "文档2内容", "文档3内容"]
vectors = embedding.embed_documents(documents)

# 查询文本嵌入
query_vector = embedding.embed_query("查询文本")

VectorStore组件:智能向量存储与检索

Bisheng的VectorStore组件提供了强大的向量存储和检索能力,支持多种向量数据库。

核心实现

mermaid

支持的向量数据库
数据库类型 实现类 主要特性
Milvus MilvusWithPermissionCheck 高性能向量数据库,支持多集合检索
Elasticsearch ElasticKeywordsSearch 全文检索与向量检索结合
Chroma Chroma 轻量级向量数据库
Pinecone Pinecone 云原生向量数据库
Weaviate Weaviate 图神经网络向量数据库
Qdrant Qdrant 高性能向量搜索引擎
Milvus向量存储示例

Bisheng对Milvus进行了深度定制,增加了权限检查和多集合支持:

from bisheng.interface.vector_store.custom import MilvusWithPermissionCheck

# 初始化Milvus向量存储
vector_store = MilvusWithPermissionCheck(
    embedding_function=embedding,           # 嵌入模型实例
    collection_name=["collection1", "collection2"],  # 多集合支持
    connection_args={
        "host": "localhost",
        "port": "19530"
    },
    consistency_level="Session",
    index_params={
        "metric_type": "L2",
        "index_type": "IVF_FLAT",
        "params": {"nprobe": 10}
    }
)

# 相似度搜索
results = vector_store.similarity_search(
    query="查询文本",
    k=5,                    # 返回前5个结果
    expr="knowledge_id='123'"  # 过滤条件
)
高级特性
  1. 多租户支持:通过partition_field实现数据隔离
  2. 权限控制:集成权限检查机制,确保数据安全
  3. 混合检索:支持向量检索与关键词检索的结合
  4. 自动索引管理:智能创建和优化向量索引

组件集成与工作流

Bisheng的三大核心组件可以无缝集成,构建完整的RAG(检索增强生成)流水线:

mermaid

配置管理最佳实践

LLM配置示例
# config.yaml 配置示例
llm_servers:
  - name: "OpenAI服务"
    type: "openai"
    config:
      openai_api_key: "${OPENAI_API_KEY}"
      openai_api_base: "https://api.openai.com/v1"
    models:
      - name: "GPT-4"
        model_name: "gpt-4"
        model_type: "llm"
        config:
          max_tokens: 4096
          temperature: 0.7
Embedding配置示例
embedding_servers:
  - name: "OpenAI嵌入服务"
    type: "openai"
    config:
      openai_api_key: "${OPENAI_API_KEY}"
    models:
      - name: "text-embedding-ada-002"
        model_name: "text-embedding-ada-002"
        model_type: "embedding"
        config:
          chunk_size: 1000

性能优化建议

  1. 批量处理:使用embed_documents进行批量嵌入,减少API调用次数
  2. 缓存机制:启用LLM缓存提升重复查询响应速度
  3. 索引优化:根据数据特性选择合适的向量索引类型
  4. 连接池:配置数据库连接池减少连接开销

通过Bisheng的模块化组件系统,开发者可以快速构建企业级AI应用,无需关注底层实现的复杂性,专注于业务逻辑的开发与优化。

企业级组件库管理与维护策略

在企业级AI应用开发中,组件库的管理与维护是确保系统稳定性和可扩展性的关键环节。Bisheng平台提供了一套完整的组件生命周期管理机制,从版本控制、依赖管理到部署发布,为企业用户提供了专业级的组件管理解决方案。

组件版本控制策略

Bisheng采用语义化版本控制(Semantic Versioning)来管理组件版本,确保组件更新的透明性和兼容性。每个组件都包含版本信息,系统会自动追踪组件的变更历史。

class ComponentBase(SQLModelSerializable):
    name: str = Field(max_length=50, index=True, description='保存的组件名称')
    description: Optional[str] = Field(default='', description='组件描述')
    version: str = Field(default='', index=True, description='组件版本')
    user_id: int = Field(default=None, index=True, description='创建人ID')
    user_name: str = Field(default=None, description='创建人姓名')
    create_time: Optional[datetime] = Field(default=None)
    update_time: Optional[datetime] = Field(default=None)

版本控制流程如下:

mermaid

组件依赖管理

企业级组件库需要处理复杂的依赖关系,Bisheng通过组件数据模型和依赖解析机制确保组件间的兼容性:

依赖类型 管理策略 解决机制
硬依赖 版本锁定 强制版本匹配
软依赖 版本范围 自动版本选择
可选依赖 条件加载 运行时检测
@router.post('/custom_component')
async def custom_component(
    raw_code: CustomComponentCode,
    Authorize: AuthJWT = Depends(),
):
    # 依赖解析和验证
    component = CustomComponent(code=raw_code.code)
    built_frontend_node = build_custom_component_template(
        component, user_id=current_user.get('user_id')
    )
    return resp_200(data=built_frontend_node)

组件存储与检索优化

Bisheng采用分层存储架构,支持大规模组件库的高效管理:

mermaid

组件检索支持多维度查询:

@classmethod
def get_user_components(cls, user_id: int) -> List[Component]:
    with session_getter() as session:
        statement = select(Component).where(
            Component.user_id == user_id
        ).order_by(Component.create_time.desc())
        return session.exec(statement).all()

组件安全与权限控制

企业环境对安全性有严格要求,Bisheng实现了基于RBAC的组件访问控制:

mermaid

权限控制代码实现:

@router.get('')
def get_all_components(*, Authorize: AuthJWT = Depends()):
    # JWT认证验证
    Authorize.jwt_required()
    current_user = json.loads(Authorize.get_jwt_subject())
    return ComponentService.get_all_component(current_user)

组件生命周期管理

完整的组件生命周期包括创建、更新、部署和退役四个主要阶段:

mermaid

性能监控与优化

企业级组件库需要实时监控性能指标,Bisheng提供了完整的监控体系:

监控指标 采集频率 告警阈值 处理策略
加载时间 实时 >200ms 缓存优化
内存占用 每分钟 >100MB 内存回收
调用频率 每5分钟 >1000次/分 负载均衡
错误率 实时 >1% 自动降级

灾难恢复与备份策略

为确保组件库的高可用性,Bisheng实现了多层次的备份和恢复机制:

@classmethod
def insert_component(cls, component: Component) -> Component:
    with session_getter() as session:
        session.add(component)
        session.commit()  # 事务保证数据一致性
        session.refresh(component)
        return component

备份策略包括:

  • 实时同步: 数据库主从复制
  • 定时快照: 每日全量备份
  • 增量备份: 每小时差异备份
  • 异地容灾: 跨机房数据同步

通过上述管理策略,企业可以构建稳定、高效、安全的组件库体系,支撑大规模AI应用的快速开发和部署。

总结

Bisheng的组件架构通过精心的类型系统设计和模块化的组件结构,为AI应用开发提供了强大的基础设施。其类型安全的接口定义、灵活的扩展机制和性能优化策略,使得开发者能够快速构建复杂的AI工作流,同时保证系统的稳定性和可维护性。通过企业级组件库管理与维护策略,包括版本控制、依赖管理、安全权限控制和灾难恢复机制,Bisheng能够支撑大规模AI应用的快速开发和部署。

【免费下载链接】bisheng Bisheng is an open LLM devops platform for next generation AI applications. 【免费下载链接】bisheng 项目地址: https://gitcode.com/GitHub_Trending/bi/bisheng

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐