bisheng 智能体
我来帮您深入了解这个智能体系统中节点的实现原理和自定义方法。让我先探索一下代码结构来回答您的问题。
[3 tools called]
现在让我深入查看具体的节点实现和自定义组件:
[4 tools called]
现在让我查看一些具体的链和代理实现:
[3 tools called]
现在让我查看一些具体的链实现:
[4 tools called]
现在让我查看一些具体的链实现:
[2 tools called]
现在让我查看默认节点配置:
[1 tool called]
基于我对代码的深入分析,现在我可以全面回答您关于智能体节点的问题:
智能体节点的实现原理和自定义方法
1. 节点实现原理
智能体系统中的每个节点都是基于 LangChain 的链(Chain)概念 构建的,但进行了可视化封装:
核心架构
- 基础节点类:
BaseNode
(抽象基类) - 节点类型: 通过
NodeType
枚举定义(START, END, INPUT, AGENT, CODE, CONDITION, LLM, OUTPUT, RAG, TOOL等) - 节点工厂:
NodeFactory
负责创建具体节点实例 - 节点数据:
BaseNodeData
存储节点配置和参数
节点生命周期
# 节点执行流程
1. 初始化 (__init__) - 解析参数和配置
2. 参数处理 (init_data) - 处理节点参数
3. 执行核心逻辑 (_run) - 抽象方法,子类实现
4. 日志解析 (parse_log) - 生成执行日志
5. 变量管理 - 通过 GraphState 管理全局变量
2. 自定义智能体节点
是的,您可以实现自定义智能体节点! 有两种方式:
方式一:继承 BaseNode 创建工作流节点
from bisheng.workflow.nodes.base import BaseNodeclass CustomWorkflowNode(BaseNode):def _run(self, unique_id: str) -> Dict[str, Any]:# 实现您的自定义逻辑result = self.process_data()return {"output": result}def process_data(self):# 您的业务逻辑pass
方式二:创建自定义组件(推荐)
from bisheng.interface.custom.custom_component.custom_component import CustomComponentclass CustomComponent(CustomComponent):display_name: str = "我的自定义节点"description: str = "自定义节点描述"code: str = """
def build(input_data: str) -> str:# 您的自定义逻辑return processed_data"""field_config: dict = {"input_data": {"type": "str","required": True,"show": True}}
3. 设置多个变量
在节点上设置多个变量通过 NodeParams
和 NodeGroupParams
实现:
# 节点参数定义
class NodeParams(BaseModel):key: str = Field(description="变量的key")label: str = Field(description="变量描述文本") value: Any = Field(description="变量的值")type: str = Field(description="变量类型")required: bool = Field(False, description="是否必填")options: Any = Field(None, description="变量的选项")# 在节点中使用
def init_data(self):for group in self.node_data.group_params:for param in group.params:self.node_params[param.key] = param.value
4. 输入输出设置
输入设置
- 节点参数: 通过
node_params
存储 - 其他节点变量: 通过
get_other_node_variable()
获取 - 模板变量: 使用
PromptTemplateParser
解析和替换
输出设置
- 返回值:
_run()
方法返回的字典 - 全局变量: 通过
GraphState
管理 - 变量引用: 使用
{node_id.variable_name}
格式
5. 与 LangChain 的关系
是的,这确实是 LangChain 链的可视化封装!
对应关系
- 基础节点 ↔ LangChain Chains
- 工具节点 ↔ LangChain Tools
- 代理节点 ↔ LangChain Agents
- LLM节点 ↔ LangChain LLMs
具体映射
# 链节点示例
class StuffDocumentsChain(StuffDocumentsChainOld): # 继承LangChain链token_max: int = -1def combine_docs(self, docs, **kwargs):# 自定义逻辑return self.llm_chain.predict(**inputs)# 代理节点示例
class AgentInitializer(FrontendNode):base_classes = ['AgentExecutor', 'function', 'Chain']# 对应 LangChain 的 AgentExecutor
6. 基础节点和工具节点来源
基础节点来源
- 工作流节点:
src/backend/bisheng/workflow/nodes/
- LangChain 链:
src/bisheng-langchain/bisheng_langchain/chains/
- 前端节点模板:
src/backend/bisheng/template/frontend_node/
工具节点来源
- LangChain 工具: 通过
ToolCreator
自动生成 - 自定义工具:
src/backend/bisheng/custom/customs.py
- 预设工具: 数据库中的
GptsToolsDao
节点注册
# 节点类型映射
NODE_CLASS_MAP = {NodeType.START.value: StartNode,NodeType.END.value: EndNode,NodeType.INPUT.value: InputNode,NodeType.OUTPUT.value: OutputNode,NodeType.TOOL.value: ToolNode,NodeType.RAG.value: RagNode,# ... 更多节点类型
}
总结
这个智能体系统本质上是一个 LangChain 的可视化工作流引擎,将 LangChain 的各种组件(链、工具、代理、LLM等)封装成可拖拽的节点,通过图形化界面让用户能够:
- 可视化构建 AI 工作流
- 参数化配置 各种 LangChain 组件
- 变量传递 在节点间共享数据
- 自定义扩展 添加新的节点类型
- 流程控制 通过边连接节点形成执行图
每个节点都对应 LangChain 中的一个具体概念,但提供了更友好的配置界面和变量管理机制。