wangyf10 2 zile în urmă
părinte
comite
096828a373

+ 25 - 0
yusys-ai-plus/pom.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-platform</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-plus</artifactId>
+    <name>yusys-ai-plus</name>
+    <packaging>pom</packaging>
+    <description>yusys-ai-plus</description>
+
+    <modules>
+        <module>yusys-ai-harness</module>
+        <module>yusys-ai-market</module>
+        <module>yusys-ai-monitor</module>
+        <module>yusys-ai-plus-starter</module>
+    </modules>
+</project>

+ 23 - 0
yusys-ai-plus/yusys-ai-harness/pom.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-plus</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-harness</artifactId>
+    <name>yusys-ai-harness</name>
+    <packaging>pom</packaging>
+    <description>harness</description>
+
+    <modules>
+        <module>yusys-ai-harness-core</module>
+        <module>yusys-ai-harness-starter</module>
+    </modules>
+</project>

+ 40 - 0
yusys-ai-plus/yusys-ai-harness/yusys-ai-harness-core/pom.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-harness</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-harness-core</artifactId>
+    <name>yusys-ai-harness-core</name>
+    <description>harness 核心</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.agentscope</groupId>
+            <artifactId>agentscope-harness</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.agentscope</groupId>
+            <artifactId>agentscope-extensions-model-dashscope</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.agentscope</groupId>
+            <artifactId>agentscope-extensions-agui</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 36 - 0
yusys-ai-plus/yusys-ai-harness/yusys-ai-harness-core/src/main/java/cn/com/yusys/ai/plus/harness/config/HarnessAgentConfig.java

@@ -0,0 +1,36 @@
+package cn.com.yusys.ai.plus.harness.config;
+
+import io.agentscope.core.agent.Agent;
+import io.agentscope.extensions.model.dashscope.DashScopeChatModel;
+import io.agentscope.harness.agent.HarnessAgent;
+import io.agentscope.harness.agent.memory.compaction.CompactionConfig;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+@Configuration
+public class HarnessAgentConfig {
+    @Bean
+    public DashScopeChatModel yuspModel(Environment env) {
+        DashScopeChatModel model = DashScopeChatModel.builder()
+                .baseUrl(env.getProperty("harness.baseUrl"))
+                .apiKey(env.getProperty("harness.api-key"))
+                .modelName(env.getProperty("harness.model"))
+                .build();
+        return model;
+    }
+
+    @Bean
+    public Agent harnessAgent(DashScopeChatModel yuspModel) {
+        return HarnessAgent.builder()
+                .name("HarnessAgent")
+                .sysPrompt("你是一个乐于助人的助手")
+                .model(yuspModel)
+                .maxIters(20)
+                .compaction(CompactionConfig.builder()
+                        .triggerMessages(40)
+                        .keepMessages(15)
+                        .flushBeforeCompact(true)
+                        .build())
+                .build();
+    }
+}

+ 66 - 0
yusys-ai-plus/yusys-ai-harness/yusys-ai-harness-core/src/main/java/cn/com/yusys/ai/plus/harness/config/UserAwareAgent.java

@@ -0,0 +1,66 @@
+package cn.com.yusys.ai.plus.harness.config;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import io.agentscope.core.agent.Agent;
+import io.agentscope.core.agent.RuntimeContext;
+import io.agentscope.core.agent.StreamOptions;
+import io.agentscope.core.agui.adapter.AguiAgentAdapter;
+import io.agentscope.core.message.Msg;
+import io.agentscope.core.tool.Toolkit;
+import io.agentscope.core.agent.Event;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.util.List;
+import java.util.Map;
+
+public class UserAwareAgent implements Agent {
+
+    private final Agent delegate;
+
+    public UserAwareAgent(Agent delegate) {
+        this.delegate = delegate;
+    }
+
+    /** adapter.run() 最终调的就是这个 3 参 stream —— 在这里注入 userId。 */
+    @Override
+    @SuppressWarnings("deprecation")
+    public Flux<Event> stream(List<Msg> msgs, StreamOptions options, RuntimeContext ctx) {
+        return delegate.stream(msgs, options, withUserId(ctx));
+    }
+
+    private RuntimeContext withUserId(RuntimeContext ctx) {
+        String userId = null;
+        Object fp = ctx.get(AguiAgentAdapter.RUNTIME_CONTEXT_FORWARDED_PROPS_KEY);
+        if (fp instanceof Map<?, ?> map && map.get("userId") != null) {
+            userId = String.valueOf(map.get("userId"));
+        }
+        if (userId == null || userId.isBlank()) {
+            userId = "anonymous";
+        }
+        return RuntimeContext.builder().from(ctx).userId(userId).build();
+    }
+
+    // ---- 其余全部透传 ----
+    @Override public Toolkit getToolkit() { return delegate.getToolkit(); } // adapter 注入前端工具要用
+    @Override public String getAgentId() { return delegate.getAgentId(); }
+    @Override public String getName() { return delegate.getName(); }
+    @Override public void interrupt() { delegate.interrupt(); }
+    @Override public void interrupt(Msg msg) { delegate.interrupt(msg); }
+
+    @Override public Mono<Msg> call(List<Msg> msgs) { return delegate.call(msgs); }
+    @Override public Mono<Msg> call(List<Msg> msgs, Class<?> m) { return delegate.call(msgs, m); }
+    @Override public Mono<Msg> call(List<Msg> msgs, JsonNode s) { return delegate.call(msgs, s); }
+
+    @Override @SuppressWarnings("deprecation")
+    public Flux<Event> stream(List<Msg> msgs, StreamOptions o) { return delegate.stream(msgs, o); }
+    @Override @SuppressWarnings("deprecation")
+    public Flux<Event> stream(List<Msg> msgs, StreamOptions o, Class<?> m) { return delegate.stream(msgs, o, m); }
+    @Override @SuppressWarnings("deprecation")
+    public Flux<Event> stream(List<Msg> msgs, StreamOptions o, JsonNode s) { return delegate.stream(msgs, o, s); }
+
+    @Override public Mono<Void> observe(Msg msg) { return delegate.observe(msg); }
+    @Override public Mono<Void> observe(List<Msg> msgs) { return delegate.observe(msgs); }
+
+
+}

+ 59 - 0
yusys-ai-plus/yusys-ai-harness/yusys-ai-harness-core/src/main/java/cn/com/yusys/ai/plus/harness/controller/HarnessAgentRest.java

@@ -0,0 +1,59 @@
+package cn.com.yusys.ai.plus.harness.controller;
+
+import io.agentscope.core.agent.Agent;
+import io.agentscope.core.agent.RuntimeContext;
+import io.agentscope.core.agui.adapter.AguiAdapterConfig;
+import io.agentscope.core.agui.adapter.AguiAgentAdapter;
+import io.agentscope.core.agui.encoder.AguiEventEncoder;
+import io.agentscope.core.agui.event.AguiEvent;
+import io.agentscope.core.agui.model.RunAgentInput;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.MediaType;
+import org.springframework.http.codec.ServerSentEvent;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Flux;
+
+import java.time.Duration;
+
+@RestController
+public class HarnessAgentRest {
+    AguiAgentAdapter adapter;
+    Agent harnessAgent;
+    private final AguiEventEncoder encoder = new AguiEventEncoder();
+
+    public HarnessAgentRest(@Qualifier("harnessAgent")
+                            Agent harnessAgent) {
+        this.harnessAgent = harnessAgent;
+        this.adapter = new AguiAgentAdapter(harnessAgent, AguiAdapterConfig.builder()
+                .enableReasoning(true)
+                .emitTokenUsage(true)
+                .emitToolCallArgs(true)
+                .runTimeout(Duration.ofMinutes(5))
+                .build());
+    }
+
+    @PostMapping(value = "/harness", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+    public Flux<ServerSentEvent<String>> run(
+            @RequestBody RunAgentInput input,
+            @RequestHeader(value = "x-user-id", required = true) String userId) {
+
+        RuntimeContext ctx = RuntimeContext.builder()
+                .userId(userId)          // null 也没关系 = 匿名
+                .build();
+        return adapter.run(input,ctx)
+                .map(this::toSse)
+                // 客户端断开时中断 agent 运行(对齐官方 handler 行为)
+                .doOnCancel(harnessAgent::interrupt);
+    }
+
+    private ServerSentEvent<String> toSse(AguiEvent event) {
+        // encodeToJson 带一个前导空格,配合 SSE 的 "data:" 前缀 => "data: {...}"
+        return ServerSentEvent.<String>builder()
+                .data(encoder.encodeToJson(event).trim())
+                .build();
+    }
+
+}

+ 38 - 0
yusys-ai-plus/yusys-ai-harness/yusys-ai-harness-starter/pom.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-harness</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-harness-starter</artifactId>
+    <name>yusys-ai-harness-starter</name>
+    <description>harness 自动装配</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.com.yusys.ai</groupId>
+            <artifactId>yusys-ai-harness-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+</project>

+ 23 - 0
yusys-ai-plus/yusys-ai-market/pom.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-plus</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-market</artifactId>
+    <name>yusys-ai-market</name>
+    <packaging>pom</packaging>
+    <description>能力市场</description>
+
+    <modules>
+        <module>yusys-ai-market-core</module>
+        <module>yusys-ai-market-starter</module>
+    </modules>
+</project>

+ 28 - 0
yusys-ai-plus/yusys-ai-market/yusys-ai-market-core/pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-market</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-market-core</artifactId>
+    <name>yusys-ai-market-core</name>
+    <description>能力市场核心</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 38 - 0
yusys-ai-plus/yusys-ai-market/yusys-ai-market-starter/pom.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-market</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-market-starter</artifactId>
+    <name>yusys-ai-market-starter</name>
+    <description>能力市场自动装配</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.com.yusys.ai</groupId>
+            <artifactId>yusys-ai-market-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+</project>

+ 23 - 0
yusys-ai-plus/yusys-ai-monitor/pom.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-plus</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-monitor</artifactId>
+    <name>yusys-ai-monitor</name>
+    <packaging>pom</packaging>
+    <description>监控</description>
+
+    <modules>
+        <module>yusys-ai-monitor-core</module>
+        <module>yusys-ai-monitor-starter</module>
+    </modules>
+</project>

+ 28 - 0
yusys-ai-plus/yusys-ai-monitor/yusys-ai-monitor-core/pom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-monitor</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-monitor-core</artifactId>
+    <name>yusys-ai-monitor-core</name>
+    <description>监控核心</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 38 - 0
yusys-ai-plus/yusys-ai-monitor/yusys-ai-monitor-starter/pom.xml

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-monitor</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-monitor-starter</artifactId>
+    <name>yusys-ai-monitor-starter</name>
+    <description>监控自动装配</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.com.yusys.ai</groupId>
+            <artifactId>yusys-ai-monitor-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-autoconfigure</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+</project>

+ 52 - 0
yusys-ai-plus/yusys-ai-plus-starter/pom.xml

@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>cn.com.yusys.ai</groupId>
+        <artifactId>yusys-ai-plus</artifactId>
+        <version>1.0</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>yusys-ai-plus-starter</artifactId>
+    <name>yusys-ai-plus-starter</name>
+    <description>yusys-ai-plus 应用入口</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.com.yusys.ai</groupId>
+            <artifactId>yusys-ai-harness-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.com.yusys.ai</groupId>
+            <artifactId>yusys-ai-market-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.com.yusys.ai</groupId>
+            <artifactId>yusys-ai-monitor-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 12 - 0
yusys-ai-plus/yusys-ai-plus-starter/src/main/java/cn/com/yusys/ai/plus/PlusApplication.java

@@ -0,0 +1,12 @@
+package cn.com.yusys.ai.plus;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class PlusApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(PlusApplication.class, args);
+    }
+}

+ 15 - 0
yusys-ai-plus/yusys-ai-plus-starter/src/main/resources/application.yml

@@ -0,0 +1,15 @@
+server:
+  port: 5555
+
+spring:
+  application:
+    name: yusys-ai-plus
+management:
+  endpoints:
+    web:
+      exposure:
+        include: health,info
+harness:
+  baseUrl: https://dashscope.aliyuncs.com
+  api-key: sk-ws-H.EDRHPPL.90jF.MEUCIGmnGBQKWzzBB3T97hEtvyRQfgYPZTrYRyaihbGAoiYbAiEAtLvFVgt_DlFfP0aqLNRu_yWvjeK6LARMbmbV11d-tpU
+  model: qwen-plus