Solon v3.10.0

使用 SolonCode Core 定制智能体(或执行任务)

</> markdown
2026年3月30日 上午9:49:39

SolonCode 目前是一个 MIT 协议的开源项目。可以直接使用 soloncode-core 的 maven 仓库包,也可直接复制 soloncode-core 模块代码进一步定制。

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>soloncode-core</artifactId>
    <version>3.10.1-SNAPSHOT</version>
</dependency>

理论上可能内置预任意 Java 项目中。

1、示意代码

代码听配置类:

  • AgentProperties,用于配置智能体运行时,具体可参考:《config.yml 配置详解》
  • AgentDefinition,用于定义子代理(主要涉及系统提示词,与工具权限)
import org.noear.solon.ai.agent.AgentSession;
import org.noear.solon.ai.agent.AgentSessionProvider;
import org.noear.solon.ai.agent.react.ReActAgent;
import org.noear.solon.ai.agent.session.InMemoryAgentSession;
import org.noear.solon.ai.chat.ChatModel;
import org.noear.solon.ai.chat.prompt.Prompt;
import org.noear.solon.codecli.core.AgentProperties;
import org.noear.solon.codecli.core.AgentRuntime;
import org.noear.solon.codecli.core.agent.AgentDefinition;
import org.noear.solon.lang.NonNull;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class DemoApp {
    public static void main(String[] args) throws Throwable {
        //--- 初始化(AgentRuntime 建议单测)
        AgentProperties properties = new AgentProperties();
        ChatModel chatModel = ChatModel.of(properties.getChatModel()).build();
        AgentSessionProvider sessionProvider = new AgentSessionProvider() {
            private Map<String, AgentSession> sessionMap = new ConcurrentHashMap<>();

            @Override
            public @NonNull AgentSession getSession(String instanceId) {
                return sessionMap.computeIfAbsent(instanceId, k -> InMemoryAgentSession.of(k));
            }
        };

        AgentRuntime agentRuntime = AgentRuntime.builder()
                .properties(properties)
                .chatModel(chatModel)
                .sessionProvider(sessionProvider)
                .build();

        AgentSession session = agentRuntime.getSession(AgentRuntime.SESSION_DEFAULT);
        Prompt prompt = Prompt.of("hello"); //动态指定工作区;


        //--- 用主代理模式
        agentRuntime.getRootAgent().prompt(prompt)
                .session(session) //没有,则为临时会话
                .options(o -> {
                    //按需,动态指定工作区(没有,则为默认工作区)
                    o.toolContextPut(AgentRuntime.ATTR_CWD, "xxx");
                })
                .call();

        //--- 用子代理模式(好处理可以动态创建不同的工具权限)
        AgentDefinition definition = new AgentDefinition();
        definition.setSystemPrompt("xxx");
        definition.getMetadata().addTools("*");

        ReActAgent subagent = agentRuntime.createSubagent(definition).build();
        subagent.prompt(prompt)
                .session(session) //没有,则为临时会话
                .options(o -> {
                    //按需,动态指定工作区(没有,则为默认工作区)
                    o.toolContextPut(AgentRuntime.ATTR_CWD, "xxx");
                })
                .call();
    }
}