构建无状态式智能体
核心思路
如果能预判模型极大概率会调用工具X,就不要反复走「模型输出调用指令→后端拉取数据」的Token往返流程。
提前用确定性代码预取数据,直接塞进上下文,省去一轮模型推理与接口请求开销。

反面示例:让模型自己发起查询
提示词原文
代码块
Plain Text
处理发布相关任务时,你需要先获取已发布的Git版本标签,才能执行生产环境部署。
以下是当前流程记录:
{{ thread.events }}
请判断下一步操作,以JSON格式输出,可选意图如下:
{
"intent": "deploy_backend_to_prod",
"tag": 字符串版本号
}
或
{
"intent": "list_git_tags"
}
或
{
"intent": "done_for_now",
"message": 文本说明
}
对应业务代码
代码块
Python
这套方案存在多余损耗:模型先输出查询标签的工具调用,后端再请求接口、回填上下文,多一轮完整LLM交互。
优化方案一:预取数据,直接注入提示词
修改后的提示词(移除查询标签的可选意图)
代码块
Plain Text
处理发布相关任务时,你需要基于Git版本标签执行生产环境部署。
当前已获取全部Git标签:
{{ git_tags }}
以下是当前流程记录:
{{ thread.events }}
优化代码
代码块
Python
thread = {"events": [initial_message]}
# 提前确定性拉取版本标签,无需等待模型指令
优化方案二:把预取记录写入会话事件流(推荐,统一上下文格式)
直接将「查询动作+查询结果」作为事件存入会话,完全复用前文统一上下文结构,无需额外传参:
代码块
Python
thread = {"events": [initial_message]}
# 1. 先写入发起查询事件
thread["events"].append({"type": "list_git_tags"})
# 2. 确定性预拉取标签
git_tags = await fetch_git_tags()
# 3. 将查询结果写入会话上下文
thread["events"].append({
"type": "list_git_tags_result",
"data": git_tags
})
# 仅传入会话对象即可,数据已内置在上下文
next_step = await determine_next_step(thread)
while True:
match next_step.intent:
总结核心准则
只要你能预判模型后续必然会调用某类工具,就提前通过确定性代码主动拉取数据。
把「拉取原始数据」交给后端固定代码处理,让大模型专注完成更复杂的逻辑:如何利用已获取的数据做出业务决策。