code/05-agents/workflow_vs_agent.py
38 Zeilen · 1.6 KBCode und Programmausgaben stehen genau so da, wie sie gelaufen sind – Kommentare und Ausgaben sind daher auf Chinesisch.
"""同样的问题,交给固定流程(04 模块的 RAG:改写 → 检索 → 回答)和智能体(自己决定查什么),
比较调用次数、耗时、词元数和回答。
在 AI-Course 目录下运行:python code/05-agents/workflow_vs_agent.py
(04 模块的检索代码按相对路径 data/httpx-docs 读取文档,所以要在课程根目录运行)
"""
import sys
import time
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent / "../04-rag"))
import agent_loop # noqa: E402
from citations import answer as rag_answer # noqa: E402 导入时会建好检索索引
QUESTIONS = [
"httpx 默认会自动跟随重定向吗?",
"怎么给 httpx 设置代理?",
"httpx 的超时分成哪几种?每种管什么?",
]
model = agent_loop.RealModel()
for q in QUESTIONS:
start = time.time()
text, _, usage = rag_answer(q)
rag_time = time.time() - start
# 改写问题的那次调用结果已经缓存了,这里只算回答那一次
print(f"问:{q}")
print(f" 固定流程:1 次回答调用,{rag_time:.1f} 秒,输入 {usage.prompt_tokens} 词元,输出 {usage.completion_tokens} 词元")
print(f" {text.splitlines()[0][:80]}")
start = time.time()
text, stats = agent_loop.run_agent(model, q, verbose=False)
agent_time = time.time() - start
print(f" 智能体: {stats['steps']} 次调用,{agent_time:.1f} 秒,"
f"输入 {stats['prompt_tokens']} 词元,输出 {stats['completion_tokens']} 词元")
print(f" {(text or '(没有回答)').splitlines()[0][:80]}")
print()