Enio 与 VeADK-Go 对应规则——模具行业从业者必备知识手册
-
<h2>Enio 与 VeADK-Go 对应规则</h2>
<p>你可以通过下面的介绍,来了解 Enio 与 VeADK-Go 对应规则。具体的 VeADK-Go 定义方法可以参照 <code>references/samples/</code> 目录中的内容。</p>
<h3>Enio 常用类型</h3>
<ul>
<li>ReAct Agent 和 ChatModel 节点:对应 VeADK-Go的 LLM Agent,请参照 <code>references/common/agent.md</code></li>
<li>RetrieverNode: 对应VeADK-Go的KnowledgeBase,请参照 <code>references/common/knowledgebase.md</code> 中的知识库定义和使用方法</li>
<li>工具节点/ToolsNode:对应VeADK-Go的工具,请参照 <code>references/common/tools.md</code></li>
<li>Chain和Graph的固定流程编排:直接用 Go 代码实现。</li>
<li>其中不包含大模型的逻辑节点,按照该节点与模型调用以及工具调用的相对位置,封装于 callBack</li>
</ul>
<p> 函数中,VeADK-Go的callBack函数,请参照 <code>references/common/callback.md</code></p><h3>Enio 与 VeADK-Go 代码映射示例</h3>
<h4>1、Agent</h4>
<p>Enio 代码实现</p>
<p>React Agent 代码实现</p>
<pre><code>
func main() {
// 先初始化所需的 chatModel
toolableChatModel, err := openai.NewChatModel(...)// 初始化所需的 tools tools := compose.ToolsNodeConfig{ InvokableTools: []tool.InvokableTool{mytool}, StreamableTools: []tool.StreamableTool{myStreamTool}, } // 创建 agent agent, err := react.NewAgent(ctx, &react.AgentConfig{ ToolCallingModel: toolableChatModel, ToolsConfig: tools, ... }}
</code></pre><p>基于chain编排的Agent实现</p>
<pre><code>
func main() {
// 初始化 tools
todoTools := []tool.BaseTool{
getAddTodoTool(), // NewTool 构建
}// 创建并配置 ChatModel chatModel, err := openai.NewChatModel(context.Background(), &openai.ChatModelConfig{ Model: "...", APIKey: os.Getenv("OPENAI_API_KEY"), }) if err != nil { log.Fatal(err) } // 获取工具信息并绑定到 ChatModel toolInfos := make([]*schema.ToolInfo, 0, len(todoTools)) for _, tool := range todoTools { info, err := tool.Info(ctx) if err != nil { log.Fatal(err) } toolInfos = append(toolInfos, info) } err = chatModel.BindTools(toolInfos) if err != nil { log.Fatal(err) } // 创建 tools 节点 todoToolsNode, err := compose.NewToolNode(context.Background(), &compose.ToolsNodeConfig{ Tools: todoTools, }) if err != nil { log.Fatal(err) } // 构建完整的处理链 chain := compose.NewChain[[]*schema.Message, []*schema.Message]() chain. AppendChatModel(chatModel, compose.WithNodeName("chat_model")). AppendToolsNode(todoToolsNode, compose.WithNodeName("tools")) // 编译并生成 agent agent, err := chain.Compile(ctx) if err != nil { log.Fatal(err) }}
</code></pre>
<p>VeADK-Go 代码实现</p>
<pre><code>
func main() {
ctx := context.Background()
rootAgent, err := veagent.New(&veagent.Config{
Config: llmagent.Config{
Tools: []tool.Tool{utils.Must(AddTodoTool())},
},
ModelName: "...",
ModelAPIKey: os.Getenv("OPENAI_API_KEY"),
})if err != nil { log.Fatalf("Failed to create agent: %v", err) }}
</code></pre>
<h4>2、Tool</h4>
<p>Enio 代码实现</p>
<ul>
<li>请注意:VeADK-Go的函数工具参数中,jsonschema标签下的说明,禁止包含'describr=' 或者任何 '<em>*</em>=' 的说明样式。</li>
</ul><pre><code>
// 处理函数
func AddTodoFunc(_ context.Context, params *TodoAddParams) (string, error) {
// Mock处理逻辑
return{"msg": "add todo success"}, nil
}func getAddTodoTool() tool.InvokableTool {
// 工具信息
info := &schema.ToolInfo{
Name: "add_todo",
Desc: "Add a todo item",
ParamsOneOf: schema.NewParamsOneOfByParams(map[string]*schema.ParameterInfo{
"content": {
Desc: "The content of the todo item",
Type: schema.String,
Required: true,
},
"started_at": {
Desc: "The started time of the todo item, in unix timestamp",
哪个方案更实用?欢迎投票讨论。
</code></pre>