Pi Agent: 非交互模式
最后更新:2026-08-31
交互模式适合探索,非交互模式适合生产——无人值守、批量处理、流水线编排。
1. 什么是非交互模式
非交互模式(Non-interactive Mode)指 Agent 接收输入后自动执行,无需人工干预。适用于:
- CI/CD 流水线中的自动化任务
- 定时执行的批处理作业
- 管道操作(与其他命令行工具组合)
- 脚本集成的无人值守场景
2. CLI 非交互用法
(1) 单次执行
BASH
pi-agent run "解释这段代码的作用:def fib(n): return n if n < 2 else fib(n-1) + fib(n-2)"
(2) 从文件读取输入
BASH
pi-agent run --input code.py "审查这个文件的代码质量"
(3) 从标准输入管道
BASH
cat error.log | pi-agent run "分析这些错误日志,找出最常见的问题"
(4) 输出到文件
BASH
pi-agent run --input data.csv "分析数据趋势" --output report.md
3. Python 批处理
(1) 基本批处理
PYTHON
from pi_agent import Agent
agent = Agent(name="reviewer", system_prompt="你是代码审查专家")
files = ["main.py", "utils.py", "config.py"]
for f in files:
result = agent.run(f"审查 {f} 的代码质量,给出评分和改进建议")
print(f"=== {f} ===")
print(result)
print()
(2) 并行批处理
PYTHON
import asyncio
from pi_agent import AsyncAgent
async def review_file(filename):
agent = AsyncAgent(name="reviewer")
result = await agent.run(f"审查 {filename}")
return filename, result
async def main():
files = ["main.py", "utils.py", "config.py", "tests.py"]
tasks = [review_file(f) for f in files]
results = await asyncio.gather(*tasks)
for filename, result in results:
print(f"=== {filename} ===")
print(result)
asyncio.run(main())
4. 管道与脚本集成
▶ 示例 1:Git 提交消息生成器(难度⭐⭐)
BASH
git diff --staged | pi-agent run "根据代码变更生成一条简洁的 git commit message"
▶ 示例 2:日志分析管道(难度⭐⭐)
BASH
tail -100 /var/log/app.log | pi-agent run --skill log_analyzer "提取错误和警告,按频率排序"
▶ 示例 3:自动化测试报告(难度⭐⭐⭐)
PYTHON
from pi_agent import Agent
import subprocess
agent = Agent(
name="qa",
system_prompt="你是 QA 工程师,分析测试结果并生成报告"
)
result = subprocess.run(["pytest", "--tb=short"], capture_output=True, text=True)
report = agent.run(f"分析以下测试结果并生成报告:\n{result.stdout}\n{result.stderr}")
with open("test_report.md", "w") as f:
f.write(report.text)
5. 退出码与错误处理
非交互模式用退出码表示执行状态:
| 退出码 | 含义 |
|---|---|
| 0 | 成功 |
| 1 | 一般错误 |
| 2 | 配置错误 |
| 3 | API 调用失败 |
| 4 | 工具执行错误 |
在脚本中判断:
BASH
pi-agent run "检查部署状态" --skill devops
if [ $? -eq 0 ]; then
echo "检查通过"
else
echo "检查失败,退出码: $?"
fi
Python 方式:
PYTHON
from pi_agent import Agent, AgentError
agent = Agent(name="checker")
try:
result = agent.run("验证配置文件")
print("验证通过:", result.text)
except AgentError as e:
print(f"执行失败: {e}")
print(f"错误码: {e.code}")
6. 定时任务集成
BASH
# crontab -e
0 9 * * * pi-agent run --skill daily_report "生成今日项目进度报告" --output /reports/daily.md
0 0 * * 0 pi-agent run --skill code_review "审查本周代码变更" --output /reports/weekly.md
Bob 说:"非交互模式是 Pi Agent 的'劳动模式'——你配置好,它替你干活,结果发到你邮箱。"
❓ 常见问题
Q 非交互模式支持流式输出吗?
A 默认不支持,但可以用
--stream 标志启用。不过管道场景下通常不需要流式。Q 管道输入有长度限制吗?
A 没有硬性限制,但受模型上下文窗口约束。超长输入会被自动截断或分段处理。
Q 批处理时 API 限流怎么办?
A Pi Agent 内置重试机制。也可以在代码中加
asyncio.sleep() 控制请求频率。📖 小节
- 非交互模式适合 CI/CD、批处理、管道操作等无人值守场景
- CLI 用
pi-agent run,Python 用agent.run() - 支持标准输入管道、文件输入、文件输出
- 退出码区分不同错误类型,便于脚本集成
- 可与 cron、CI 系统集成实现定时自动化
📝 作业
- 基础题(难度⭐):用
pi-agent run单次执行一个任务,把结果保存到文件。 - 进阶题(难度⭐⭐):写一个批处理脚本,审查指定目录下所有 Python 文件的代码质量。
- 挑战题(难度⭐⭐⭐):搭建一个 git hook,在 commit 前自动用 Pi Agent 生成 commit message。