高级开发指南
概述
本指南面向需要深度定制毕昇平台功能的高级开发者,涵盖自定义组件开发、高级工作流设计、插件系统、API开发等核心技术内容。通过本指南,您将能够充分利用毕昇平台的扩展能力,构建满足特定业务需求的企业级AI应用。
自定义组件开发
毕昇平台支持开发自定义组件来扩展工作流的功能。组件是工作流的基本构建单元,每个组件封装特定的业务逻辑。
组件开发基础
1. 组件结构
一个标准的毕昇组件包含以下文件:
custom_components/
└── my_component/
├── __init__.py
├── component.py # 组件主逻辑
├── schema.py # 组件配置架构
├── frontend.py # 前端展示逻辑
└── README.md # 组件说明文档
2. 组件基类
所有自定义组件都需要继承BaseComponent基类:
from bisheng.components.base import BaseComponent
from bisheng.field_typing import Input, Output, Text, Integer
from typing import Optional
class MyCustomComponent(BaseComponent):
display_name = "我的自定义组件"
description = "这是一个示例自定义组件"
icon = "🔧"
inputs = [
Input(
display_name="输入文本",
name="input_text",
field_type=Text,
required=True,
placeholder="请输入要处理的文本"
),
Input(
display_name="处理参数",
name="param",
field_type=Integer,
required=False,
value=10,
info="处理参数,范围1-100"
)
]
outputs = [
Output(
display_name="处理结果",
name="result",
field_type=Text
)
]
def build_config(self):
return {
"input_text": {"display_name": "输入文本"},
"param": {"display_name": "处理参数", "value": 10}
}
def build(self, input_text: str, param: Optional[int] = 10) -> str:
"""
组件的核心处理逻辑
"""
# 在这里实现您的业务逻辑
processed_text = self.process_text(input_text, param)
return processed_text
def process_text(self, text: str, param: int) -> str:
"""
具体的文本处理逻辑
"""
# 示例:简单的文本处理
if param > 50:
return text.upper()
else:
return text.lower()
3. 高级组件特性
异步处理
对于需要长时间执行的任务,可以使用异步组件:
import asyncio
from bisheng.components.base import BaseComponent
class AsyncProcessComponent(BaseComponent):
display_name = "异步处理组件"
async def build(self, input_data: str) -> str:
# 模拟长时间运行的任务
await asyncio.sleep(2)
# 执行实际的处理逻辑
result = await self.async_process(input_data)
return result
async def async_process(self, data: str) -> str:
# 异步处理逻辑
return f"异步处理结果: {data}"
流式输出
支持流式输出的组件,适用于文本生成等场景:
from typing import Iterator
class StreamingComponent(BaseComponent):
display_name = "流式输出组件"
def build(self, prompt: str) -> Iterator[str]:
"""
返回生成器,支持流式输出
"""
for i, chunk in enumerate(self.generate_text(prompt)):
yield chunk
def generate_text(self, prompt: str) -> Iterator[str]:
# 模拟流式文本生成
words = prompt.split()
for word in words:
yield f"{word} "
状态管理
组件可以维护内部状态,支持复杂的有状态处理:
class StatefulComponent(BaseComponent):
display_name = "有状态组件"
def __init__(self):
super().__init__()
self.state = {}
self.counter = 0
def build(self, input_data: str) -> dict:
self.counter += 1
# 更新状态
self.state[f"request_{self.counter}"] = {
"input": input_data,
"timestamp": datetime.now().isoformat(),
"processed": True
}
return {
"result": f"处理了第{self.counter}个请求",
"state_size": len(self.state)
}
高级组件开发模式
1. 复合组件
将多个简单组件组合成复杂的复合组件:
class CompositeComponent(BaseComponent):
display_name = "复合处理组件"
def __init__(self):
super().__init__()
# 初始化子组件
self.preprocessor = TextPreprocessor()
self.analyzer = TextAnalyzer()
self.formatter = ResultFormatter()
def build(self, raw_text: str) -> dict:
# 预处理
cleaned_text = self.preprocessor.clean(raw_text)
# 分析
analysis_result = self.analyzer.analyze(cleaned_text)
# 格式化输出
formatted_result = self.formatter.format(analysis_result)
return formatted_result
2. 插件化组件
支持动态加载插件的组件架构:
class PluginableComponent(BaseComponent):
display_name = "插件化组件"
def __init__(self):
super().__init__()
self.plugins = {}
self.load_plugins()
def load_plugins(self):
"""动态加载插件"""
plugin_dir = "plugins/"
for plugin_file in os.listdir(plugin_dir):
if plugin_file.endswith('.py'):
plugin_name = plugin_file[:-3]
plugin_module = importlib.import_module(f"plugins.{plugin_name}")
self.plugins[plugin_name] = plugin_module.Plugin()
def build(self, input_data: str, plugin_name: str = "default") -> str:
if plugin_name in self.plugins:
return self.plugins[plugin_name].process(input_data)
else:
return f"插件 {plugin_name} 未找到"
3. 配置驱动组件
通过配置文件驱动组件行为:
import yaml
class ConfigDrivenComponent(BaseComponent):
display_name = "配置驱动组件"
def __init__(self, config_path: str = "component_config.yaml"):
super().__init__()
self.config = self.load_config(config_path)
def load_config(self, config_path: str) -> dict:
with open(config_path, 'r', encoding='utf-8') as file:
return yaml.safe_load(file)
def build(self, input_data: str) -> str:
# 根据配置选择处理策略
strategy = self.config.get('processing_strategy', 'default')
if strategy == 'advanced':
return self.advanced_process(input_data)
elif strategy == 'simple':
return self.simple_process(input_data)
else:
return self.default_process(input_data)
def advanced_process(self, data: str) -> str:
# 高级处理逻辑
return f"高级处理: {data}"
def simple_process(self, data: str) -> str:
# 简单处理逻辑
return f"简单处理: {data}"
def default_process(self, data: str) -> str:
# 默认处理逻辑
return f"默认处理: {data}"
高级工作流设计
条件分支与循环
1. 复杂条件分支
创建包含多个条件的复杂分支逻辑:
class AdvancedConditionalFlow:
def design_flow(self):
"""设计复杂的条件分支工作流"""
return {
"nodes": [
{
"id": "input",
"type": "InputNode",
"config": {"input_type": "text"}
},
{
"id": "analyzer",
"type": "TextAnalyzer",
"config": {
"analysis_type": ["sentiment", "intent", "language"]
}
},
{
"id": "router",
"type": "ConditionalRouter",
"config": {
"conditions": [
{
"name": "positive_sentiment",
"expression": "sentiment_score > 0.7",
"next_node": "positive_handler"
},
{
"name": "negative_sentiment",
"expression": "sentiment_score < 0.3",
"next_node": "negative_handler"
},
{
"name": "neutral_sentiment",
"expression": "0.3 <= sentiment_score <= 0.7",
"next_node": "neutral_handler"
}
],
"default_node": "fallback_handler"
}
}
],
"edges": [
{"from": "input", "to": "analyzer"},
{"from": "analyzer", "to": "router"}
]
}