从github上拉取Spring-AI-Alibaba项目,并在根目录下执行:
mvn -f "spring-ai-alibaba-bom/pom.xml" -T 1C -DskipTests install && \
\
mvn -f "pom.xml" \
-T 1C -DskipTests -Dspotless.skip=true -Dcheckstyle.skip=true \
-pl :spring-ai-alibaba-core,:spring-ai-alibaba-graph-core,:spring-ai-alibaba-starter-dashscope \
-am install
从github上拉取Nacos对应分支,并在根目录下执行:
# 1. 编译nacos-server
mvn clean install -Prelease-nacos -DskipTests=true -Drat.skip=true
# 2. 启动nacos-server
nacos_version=`cat pom.xml | grep "<revision" | cut -d ">" -f 2 | cut -d "<" -f 1`
sed -i.bak "s/^\(nacos.core.auth.plugin.nacos.token.secret.key=\)$/\1VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=/" "distribution/target/nacos-server-$nacos_version/nacos/conf/application.properties"
sed -i.bak "s/^\(nacos.core.auth.server.identity.key=\)$/\1testKey/" "distribution/target/nacos-server-$nacos_version/nacos/conf/application.properties"
sed -i.bak "s/^\(nacos.core.auth.server.identity.value=\)$/\1testValue/" "distribution/target/nacos-server-$nacos_version/nacos/conf/application.properties"
配置NACOS_USERNAME
和NACOS_PASSWORD
环境变量用于登陆nacos,并配置API_KEY
用于使用模型
distribution/target/nacos-server-$nacos_version/nacos/bin/startup.sh -m standalone
# 3. 待启动完成后,初始化密码
curl -X POST "127.0.0.1:8848/nacos/v3/auth/user/admin?password=$NACOS_PASSWORD"
启动Nacos并设置密码
在resources/application.yml
中配置了暴露端口、自定义endpoint以及应用信息等配置
在resources/application.yml
中配置了模型的详细信息
当前的Runtime支持内存
、redis
以及mysql
三种记忆库,用来实现runtime的长期记忆管理
公有属性:
- auto-start:是否自动启动记忆服务(默认为true)
- health-check-on-start:是否在启动时执行健康检查(默认为true)
- default-top-k:在检索记忆的时候的默认top_k值(默认为5)
- default-page-size:在调用记忆检索API的时候的默认页面大小
memory配置属性:
无需进行额外配置
redis配置属性:
示例如下:
spring:
data:
redis:
host: localhost
port: 6379
database: 0
timeout: 2000ms
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: -1ms
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
- org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
mysql配置属性(如果想要使用mysql的话,需要首先执行sql文件夹下的schema.sql语句)
spring:
datasource:
url: jdbc:mysql://localhost:3306/memory_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC # 数据库url配置
username: # 数据库用户名
password: # 数据库密码
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
jpa:
hibernate:
ddl-auto: update
show-sql: false
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
format_sql: true
use_sql_comments: true
open-in-view: false
sql:
init:
mode: never
nacos:
address: localhost:8848
namespace: public
username: ${NACOS_USERNAME:nacos}
password: ${NACOS_PASSWORD}
执行如下命令,从阿里云镜像源拉取对应镜像:
# 基础镜像
docker pull agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-base:latest && docker tag agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-base:latest agentscope/runtime-sandbox-base:latest
# 文件系统镜像
docker pull agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-filesystem:latest && docker tag agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-filesystem:latest agentscope/runtime-sandbox-filesystem:latest
# 浏览器镜像
docker pull agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-browser:latest && docker tag agentscope-registry.ap-southeast-1.cr.aliyuncs.com/agentscope/runtime-sandbox-browser:latest agentscope/runtime-sandbox-browser:latest
在application-agent.yml
中配置Agents,Agents配置如下:
agents: # ReactAgent/SequentialAgent/LlmRoutingAgent/
- name: "prose_writer_agent" # Agent名称
type: "ReactAgent" # Agent的type,在构建Agent的时候会根据type来构建
description: "可以写各种散文" # Agent的描述
input_key: "messages" # 输入key
outputKey: "messages" # 输出key
instruction: "你是一个专业的作家,擅长写各种散文。请根据用户的要求创作高质量的散文。" # 给Agent中model的prompt
max_iterations: 6 # 在Agent执行过程中思考和调用工具的最大次数
tools: # 当前只支持使用沙箱中提供的工具,后续将逐步扩展范围
- "write_file" # 保存散文到文件
- "read_file" # 读取参考文件
resolver: toolCallbackResolver # 存在时优先于 tool,当前还未实现,可以直接使用默认
chat_options: { } # 预留 Builder.chatOptions,当前还未实现
compile_config: { } # 预留 Builder.compileConfig,当前还未实现
state:
strategies: # 针对keystrategy中的每个属性的策略,有append、replace和merge三种
messages: append
response: replace
hooks: # 预留,当前还未实现
pre_llm: [ ]
post_llm: [ ]
pre_tool: [ ]
post_tool: [ ]
model: # 使用的模型,可选,如果没有配置的话,会使用默认模型
provider: dashscope
name: qwen-max
apiKey: ${API_KEY}
options:
temperature: 0.3
top_p: 0.9
max_tokens: 4096
top_k: 1
chat_client_bean: optional_bean_name # Spring Bean 覆盖入口,当前还未实现
- name: "RootAgent"
type: "LlmRoutingAgent"
isRoot: true # 指定是否是对外暴露的rootAgent,如果没有指定的话,如果只有一个Agent会将其指定为rootAgent,如果有多个Agent会抛出异常
description: "助手代理"
input_key: "input"
outputKey: "topic"
instruction: "助手代理"
max_iterations: 6
tools:
- "browser_navigate" # 网页导航
resolver: toolCallbackResolver # 存在时优先于 tools
chat_options: { } # 预留 Builder.chatOptions
compile_config: { } # 预留 Builder.compileConfig
state:
strategies:
input: replace
output: replace
hooks: # 预留
pre_llm: [ ]
post_llm: [ ]
pre_tool: [ ]
post_tool: [ ]
subAgentNames: # 子Agent
- "prose_writer_agent"
- "poem_writer_agent"
- "CodeExecuteAgent"
基础工具:
- 运行python代码:
runpython
,run_python
,python
- 运行shell脚本:
runshell
,run_shell
,shell
文件系统工具:
- 读文件:
readfile
,read_file
,fs_read
- 读多个文件:
readmultiplefiles
,read_multiple_files
,fs_read_multiple
- 写文件:
writefile
,write_file
,fs_write
- 编辑文件:
editfile
,edit_file
,fs_edit
- 创建目录:
createdirectory
,create_directory
,fs_create_dir
- 罗列目录:
listdirectory
,list_directory
,fs_list
- 目录树:
directorytree
,directory_tree
,fs_tree
- 移动文件:
movefile
,move_file
,fs_move
- 搜索文件:
searchfiles
,search_files
,fs_search
- 获取文件信息:
getfileinfo
,get_file_info
,fs_info
- 列举可以访问的目录:
listalloweddirectories
,list_allowed_directories
,fs_allowed
浏览器工具:
- 浏览器导航:
browsernavigate
,browser_navigate
,browser_nav
- 浏览器点击元素:
browserclick
,browser_click
- 向元素中输入内容:
browsertype
,browser_type
- 进行截屏:
browsertakescreenshot
,browser_take_screenshot
,browser_screenshot
- 捕捉浏览器快照:
browsersnapshot
,browser_snapshot
- 创建新的标签页:
browsertabnew
,browser_tab_new
- 选择标签页:
browsertabselect
,browser_tab_select
- 关闭标签页:
browsertabclose
,browser_tab_close
- 让浏览器等待:
browserwaitfor
,browser_wait_for
- 更改浏览器的页面大小:
browserresize
,browser_resize
- 关闭浏览器:
browserclose
,browser_close
- 获取控制台消息:
browserconsolemessages
,browser_console_messages
- 处理对话框:
browserhandledialog
,browser_handle_dialog
- 上传文件:
browserfileupload
,browser_file_upload
- 模拟按键:
browserpresskey
,browser_press_key
- 后退:
browsernavigateback
,browser_navigate_back
- 前进:
browsernavigateforward
,browser_navigate_forward
- 获取网络请求:
browsernetworkrequests
,browser_network_requests
- 保存为PDF:
browserpdfsave
,browser_pdf_save
- 拖拽元素:
browserdrag
,browser_drag
- 悬停元素:
browserhover
,browser_hover
- 选择下拉选项:
browserselectoption
,browser_select_option
- 列出标签页:
browsertablist
,browser_tab_list