适用版本:infiagent>=3.0.2
这份文档只讲当前 SDK 的实际用法,不讲过时接口。
核心结论先说清楚:
infiagent(...)用来定义运行时配置。run(..., task_id=...)和其他 task 方法用来操作具体任务。- 你应该把自己的 agent 开发放在一份独立的工作目录里,而不是直接改安装目录或源码仓库。
- 标准配置文件应该先从默认用户目录复制出来,再在你自己的目录里迭代。
适用代码位置:
- SDK: infiagent/sdk.py
- 用户目录与默认资源: utils/user_paths.py
- 配置加载器: utils/config_loader.py
- 后台任务启动: utils/task_runtime.py
推荐直接从 PyPI 安装:
python -m pip install -U infiagent==3.0.2安装完成后,可以检查版本:
python - <<'PY'
import importlib.metadata
print(importlib.metadata.version("infiagent"))
PY如果你有多个 Python 环境,请始终使用实际运行 agent 的那个解释器,例如:
/opt/anaconda3/bin/python -m pip install -U infiagent==3.0.2安装包本身包含默认配置和内置 skills,但运行时不会直接让你去改 site-packages。当前设计是:
- 配置、agent systems、tools 会种到用户数据目录 (必须启动一次才会到用户目录,因此可以使用下方代码)
from infiagent import infiagent
agent = infiagent()
print(agent.describe_runtime())- skills 会种到用户 skills 目录
默认路径如下:
- 用户数据根目录:
~/mla_v3 - LLM 配置:
~/mla_v3/config/llm_config.yaml - App 配置:
~/mla_v3/config/app_config.json - Agent systems:
~/mla_v3/agent_library/ - 动态工具目录:
~/mla_v3/tools_library/ - 会话/状态:
~/mla_v3/conversations/ - 日志:
~/mla_v3/logs/ - 运行时状态:
~/mla_v3/runtime/ - Skills 主库:
~/.agent/skills/
注意:
skills默认不跟随~/mla_v3,而是放在~/.agent/skills- 这是为了让 skills 更像全局可复用能力库,并且统一主流智能体格式
最稳的方法不是猜,而是直接用 SDK 打印运行时:
from infiagent import infiagent
agent = infiagent()
print(agent.describe_runtime())你会看到类似这些字段:
user_data_rootconfig_dirllm_config_pathagent_library_dirtools_dirskills_dirconversations_dirlogs_dirruntime_dirseed_builtin_resources
如果你是第一次安装,第一次实例化或运行时会自动补齐默认目录和样例配置。
如果你只是想基于官方标准配置开始开发,不要去改 site-packages 里的文件。应该以用户目录里已经种好的标准文件为基准。
你要找的就是这些:
~/mla_v3/config/llm_config.yaml
~/mla_v3/config/app_config.json
~/mla_v3/agent_library/
~/mla_v3/tools_library/
~/.agent/skills/
如果这些文件还没出现,可以先运行一次:
from infiagent import infiagent
infiagent()或者跑一次最小任务,让默认资源自动就位。
不要直接修改:
~/mla_v3~/.agent/skillssite-packages
推荐做法是新建你自己的项目目录,例如:
mkdir -p /path/to/my_agent_project/runtime
mkdir -p /path/to/my_agent_project/runtime/config
mkdir -p /path/to/my_agent_project/runtime/agent_library
mkdir -p /path/to/my_agent_project/runtime/tools_library然后把标准配置复制进去:
cp ~/mla_v3/config/llm_config.yaml /path/to/my_agent_project/runtime/config/
cp ~/mla_v3/config/app_config.json /path/to/my_agent_project/runtime/config/
cp -R ~/mla_v3/agent_library/OpenCowork /path/to/my_agent_project/runtime/agent_library/
cp -R ~/mla_v3/agent_library/Researcher /path/to/my_agent_project/runtime/agent_library/
cp -R ~/mla_v3/tools_library/. /path/to/my_agent_project/runtime/tools_library/如果你只想基于一套 system 开发,也可以只复制那一套。
例如只基于 OpenCowork:
cp -R ~/mla_v3/agent_library/OpenCowork /path/to/my_agent_project/runtime/agent_library/MyAgentSystem然后你再去改:
general_prompts.yamllevel_0_tools.yamllevel_3_agents.yaml- 其他 system 配置文件
你的项目代码应该显式指向自己的 runtime 目录,而不是依赖默认用户目录。
from infiagent import infiagent
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
default_agent_system="MyAgentSystem",
default_agent_name="alpha_agent",
)如果你的 runtime 目录已经包含:
config/llm_config.yamlconfig/app_config.jsonagent_library/...tools_library/...
通常就不需要再额外传:
llm_config_pathagent_library_dirtools_dir
一旦你指定:
user_data_root="/path/to/my_agent_project/runtime"下面这些目录都会一起切换:
/path/to/my_agent_project/runtime/config/path/to/my_agent_project/runtime/agent_library/path/to/my_agent_project/runtime/tools_library/path/to/my_agent_project/runtime/conversations/path/to/my_agent_project/runtime/logs/path/to/my_agent_project/runtime/runtime
其中:
share_context.jsonstack.jsonactions.json
都在 conversations/ 下。
例外:
skills默认仍然是全局目录~/.agent/skills- 只有显式传
skills_dir才会覆盖
from infiagent import infiagent
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
default_agent_system="MyAgentSystem",
default_agent_name="alpha_agent",
action_window_steps=20,
thinking_interval=20,
)
result = agent.run(
"请分析这个目录并给出重构建议",
task_id="/path/to/my_agent_project/tasks/refactor_task",
)
print(result)注意:
task_id现在是必填task_id本质上就是这个任务的工作目录绝对路径- 同一个
task_id对应同一份任务记忆、share_context、stack 和运行状态
最简单的方式是复制现有系统,然后改名、改 prompt、改 tools。
例如:
cp -R ~/mla_v3/agent_library/OpenCowork /path/to/my_agent_project/runtime/agent_library/MyAgentSystem你至少会改这几个文件:
general_prompts.yamllevel_0_tools.yamllevel_3_agents.yaml
常见做法:
- 改
general_prompts.yaml
- 写你自己的系统角色、规则、任务边界
- 改
level_0_tools.yaml
- 调整根 agent 能看到的工具
- 改
level_3_agents.yaml
- 定义你的执行 agent
- 配置不同 agent 用不同模型
SDK 支持动态工具目录。推荐把你自己的工具写在:
/path/to/my_agent_project/runtime/tools_library/
或者你的项目自定义目录里,然后在初始化时传给 SDK。
例如:
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
tools_dir="/path/to/my_agent_project/runtime/tools_library",
)如果你的工具目录已经放在 user_data_root/tools_library,一般不需要再重复传。
默认 skills 主库是:
~/.agent/skills/
内置技能和你安装的 skills 都应该进这个目录。
运行时逻辑是:
- agent 先发现
available_skills - 真正使用时通过
load_skill把 skill 部署到当前 task 的.skills/
也就是说:
- “能看到” skill
- 和 “当前任务已经加载使用” skill
是两件不同的事。
如果你想显式覆盖 skills 根目录,也可以:
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
skills_dir="/path/to/my_agent_project/skills",
)当前框架支持:
- 思考模型
- 执行模型
- 压缩模型
- 读图模型
- 不同 provider 混用
这些主要在 llm_config.yaml 里控制。
你可以在同一个配置里混用:
- OpenRouter
- OpenAI-compatible provider
- 本地模型网关
- 其他兼容接口
不同 agent 还可以在 agent system 配置里指定不同模型偏好字段:
execution_modelthinking_modelcompressor_modelimage_generation_modelread_figure_model
注意:
tool_choice不在 agent YAML 里配置,而是在llm_config.yaml里配置- 可以按用途配置:
executionthinkingcompressorimage_generationread_figure
- 也可以在某个模型对象里单独覆盖
tool_choice - 如果 agent YAML 没写某类模型,则回退到
llm_config.yaml该用途列表中的默认模型;没有显式默认时,使用该列表第一个模型
另外,每个 task_id 根目录下都可以放一个 system-add.md:
- 路径:
<task_id>/system-add.md - 作用:每次构建系统提示词时,都会把这个文件内容注入到系统提示词中
- 适合做任务级的长期附加规则,而不是临时用户消息
- 如果文件里存在
<cheapclaw_system_结构>...</cheapclaw_system_结构>,这一段是 CheapClaw 保留区;系统只会更新这一段,不会改动区块外内容 - 因此你或智能体可以把短小稳定的经验、风格偏好、输出约束写在区块外,避免被覆盖
建议:
- 小模型请用更短步长
- 但
action_window_steps不要低于10
agent.fresh(
task_id="/path/to/my_agent_project/tasks/task_a",
reason="reload runtime config",
)行为:
- 任务正在运行:发送定向 fresh 请求
- 任务未运行:重载配置后 resume
agent.add_message(
"补充需求:保留已有结果,只做增量修改。",
task_id="/path/to/my_agent_project/tasks/task_a",
source="user",
resume_if_needed=True,
)行为:
- 给同一个 task 追加消息
- 运行中的 agent 会在下一轮上下文构建时看到
- 不会被当成一个全新任务
agent.start_background_task(
task_id="/path/to/my_agent_project/tasks/task_b",
user_input="后台整理日志并生成总结",
agent_system="MyAgentSystem",
agent_name="alpha_agent",
force_new=True,
)行为:
- 启动独立后台 Python 进程
- 日志写到
<user_data_root>/runtime/launched_tasks
snapshot = agent.task_snapshot(task_id="/path/to/my_agent_project/tasks/task_a")
print(snapshot)适合外部应用或 dashboard 用来查看:
- 是否还在运行
- 最新 thinking
- 最新 final_output
- share_context / stack 路径
- 最新 instruction
agent.reset_task(
task_id="/path/to/my_agent_project/tasks/task_a",
reason="clear broken loop",
preserve_history=True,
kill_background_processes=True,
)你可以在任意工具调用前后挂钩:
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
tool_hooks=[
{
"name": "observe-final-output",
"callback": "/abs/path/to/my_hooks.py:on_tool_event",
"when": "after",
"tool_names": ["final_output"],
"include_arguments": False,
"include_result": True,
}
],
)适合做:
- 外部事件回流
- 审计
- 面板更新
- 与第三方应用集成
你也可以在上下文送进 LLM 前挂钩:
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
context_hooks=[
{
"name": "rewrite-context",
"callback": "/abs/path/to/my_hooks.py:on_context",
}
],
)适合做:
- 注入外部上下文
- 精简上下文
- 做额外安全规则
推荐你自己的项目长成这样:
my_agent_project/
├── runtime/
│ ├── config/
│ │ ├── llm_config.yaml
│ │ └── app_config.json
│ ├── agent_library/
│ │ └── MyAgentSystem/
│ ├── tools_library/
│ ├── conversations/
│ ├── logs/
│ └── runtime/
├── hooks/
│ └── my_hooks.py
├── tasks/
│ ├── task_a/
│ └── task_b/
└── main.py
这样做的好处是:
- 配置和任务状态都在你的项目内
- 不污染全局
~/mla_v3 - 更容易迁移、打包和部署
python -m pip install -U infiagent==3.0.2from infiagent import infiagent
infiagent()mkdir -p /path/to/my_agent_project/runtime/config
mkdir -p /path/to/my_agent_project/runtime/agent_library
mkdir -p /path/to/my_agent_project/runtime/tools_library
cp ~/mla_v3/config/llm_config.yaml /path/to/my_agent_project/runtime/config/
cp ~/mla_v3/config/app_config.json /path/to/my_agent_project/runtime/config/
cp -R ~/mla_v3/agent_library/OpenCowork /path/to/my_agent_project/runtime/agent_library/MyAgentSystem至少改:
general_prompts.yamllevel_0_tools.yamllevel_3_agents.yaml
from infiagent import infiagent
agent = infiagent(
user_data_root="/path/to/my_agent_project/runtime",
default_agent_system="MyAgentSystem",
default_agent_name="alpha_agent",
action_window_steps=20,
thinking_interval=20,
)
result = agent.run(
"先阅读项目,再生成一份改造计划",
task_id="/path/to/my_agent_project/tasks/plan_task",
)
print(result)- 不要直接改安装目录
- 包括
site-packages/infiagent/... - 升级后这些改动都会丢
- 不要把所有实验都堆在默认
~/mla_v3
- 先复制一份标准配置出来
- 再在你自己的
runtime/下开发 - 这是当前 SDK 最稳的使用方式
执行层开发粒度 skills->自写工具->钩子修改上下文构造方式/工具执行审查 应用层粒度 直接单个run-->串行调度层处理-->提供的工具进行需求控制,消息传递,在活动 agent 之间传递消息