English · 中文
大模型AI Agent
的多会话服务
- 支持纯文本的agent,无需JSON Spec
- 支持 OpenAPI/OpenRPC/OpenModbus/OpenTool 的JSON文本描述
- 支持 大模型的Function calling 到
HTTP API
/json-rpc 2.0 over HTTP
/Modbus
以及自定义工具的执行
- 准备OpenSpec的JSON文件,可参照
/example/json/open*/*.json
作为样例,并且文件描述的接口真实可调用 - 启动你的工具服务,对应的服务描述即为步骤1的JSON文件描述
- 如果需要运行example,在
example
文件夹增加.env
文件,并且.env
文件需要增加如下内容:baseUrl = https://xxx.xxx.com # 大模型接口的BaseURL apiKey = sk-xxxxxxxxxxxxxxxxxxxx # 大模型接口的ApiKey
- 使用下方的方法运行Agent服务
- 例子:
/example/service_example
- 支持多Agent会话,通过
session id
区分不同会话 - 支持同一Agent多任务,通过
taskId
区分不同任务,任务完成后才放到会话上下文供后续任务作为上下文使用
Future<void> main() async {
CapabilityDto capabilityDto = CapabilityDto(
llmConfig: _buildLLMConfig(), // 大模型相关配置
systemPrompt: _buildSystemPrompt(), // 系统提示词
openSpecList: await _buildOpenSpecList() // OpenSpec的接口描述
);
SessionDto sessionDto = await agentService.initChat(
capabilityDto,
listen // 订阅Agent与用户、客户端、大模型、工具等角色的交互消息 AgentMessage
); // 获得Session Id
String prompt = "<用户消息,例如:调用某个工具>";
UserTaskDto userTaskDto = UserTaskDto(taskId: "<用于区分不同任务,不超过36个字符>", contentList: [UserMessageDto(type: UserMessageDtoType.text, message: prompt)]); // 用户指令支持text/imageUrl
await agentService.startChat(sessionDto.id, userTaskDto);
}
- MultiAgent支持
Future<void> main() async {
SessionDto sessionDto1 = await _buildTextAgent();
SessionDto sessionDto2 = await _buildToolAgent();
CapabilityDto capabilityDto = CapabilityDto(llmConfig: llmConfig, systemPrompt: systemPrompt,
sessionList: [sessionDto1, sessionDto2]
);
SessionDto sessionDto = await agentService.initChat(capabilityDto, listen);
UserTaskDto userTaskDto = UserTaskDto(contentList: [UserMessageDto(type: UserMessageDtoType.text, message: prompt)]);
await agentService.startChat(sessionDto.id, userTaskDto);
}
- Reflection支持
Future<void> main() async {
CapabilityDto capabilityDto = CapabilityDto(
llmConfig: _buildLLMConfig(),
systemPrompt: _buildSystemPrompt(),
openSpecList: await _buildOpenSpecList(),
/// Add reflection prompt list here
toolReflectionList: await _buildToolReflectionList()
);
SessionDto sessionDto = await agentService.initChat(capabilityDto, listen);
String prompt = "<用户消息,例如:调用某个工具>";
UserTaskDto userTaskDto = UserTaskDto(taskId: "<用于区分不同任务,不超过36个字符>", contentList: [UserMessageDto(type: UserMessageDtoType.text, message: prompt)]);
await agentService.startChat(sessionDto.id, userTaskDto);
}
- 例子:
/example/agent_example
- 更底层的调用,自由度更大,仅单一会话
- 方法1的AgentService是对ToolAgent的较为友好的封装
Future<void> main() async {
ToolAgent toolAgent = ToolAgent(
llmRunner: _buildLLMRunner(),
session: _buildSession(),
toolRunnerList: await _buildToolRunnerList(),
systemPrompt: _buildSystemPrompt()
);
String prompt = "<用户消息,例如:调用某个工具>";
toolAgent.userToAgent(taskId: "<用于区分不同任务,不超过36个字符>", contentList: [Content(type: ContentType.text, message: prompt)]);
}