code/05-agents/workflow_vs_agent.py

38 Zeilen · 1.6 KB

Code 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()