模极社社区 - 制造业全产业链交流平台

    • 登录
    • 版块
    • 最新
    • 话题
    • 热门
    • 用户
    • 群组

    Enio 与 VeADK-Go 对应规则——模具行业从业者必备知识手册

    社区公告
    1
    1
    1
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • S
      system 2 最后由 编辑

      <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>

      1 条回复 最后回复 回复 引用 0
      • First post
        Last post
      Powered by NodeBB | Contributors