feat(module12): update code and environment dependencies
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
# 问题
|
||||
# 1. 命名不能中文
|
||||
# 2. chatgpt默认启用smith,要关闭它
|
||||
# 3. 如果不想关闭,需要配置一个api_key
|
||||
# 4. 哪怕配置好,chatgpt与这边连接延迟较高,tracing追踪也不稳定,而且之前我们已经讲了一个langsmith,所以这里不用它其实更好。
|
||||
|
||||
|
||||
import asyncio
|
||||
from openai.types.responses import ResponseTextDeltaEvent
|
||||
from agents import Runner
|
||||
from m12_agents_sdk_swarm.agent import triage_agent,amap_server
|
||||
from m12_agents_sdk_swarm.tools import context_variables
|
||||
|
||||
# 不启用Chatgpt官方提供的Tracing(无需配置api_key)
|
||||
from agents import set_tracing_disabled
|
||||
set_tracing_disabled(True)
|
||||
|
||||
# 启用Chatgpt官方提供的Tracing(需要配置api_key)
|
||||
# from config import CHATGPT_API_KEY
|
||||
# from agents import set_tracing_export_api_key
|
||||
# set_tracing_export_api_key(CHATGPT_API_KEY)
|
||||
|
||||
|
||||
async def main():
|
||||
print('✈️ 客服系统启动...\n')
|
||||
messages = [] # 对话历史
|
||||
cur_agent = triage_agent # 当前Agent
|
||||
|
||||
try:
|
||||
await amap_server[0].connect()
|
||||
print("✅ MCP Server (amap) connected.")
|
||||
except Exception as e:
|
||||
print(f"⚠️ Failed to connect MCP Server: {e}")
|
||||
|
||||
while True:
|
||||
# 获取用户输入
|
||||
user_input = input("\nUser: ")
|
||||
if user_input == "quit":
|
||||
break
|
||||
messages.append({"role": "user", "content": user_input})
|
||||
|
||||
# 启动流式响应
|
||||
result = Runner.run_streamed(cur_agent, input=messages, context=context_variables)
|
||||
|
||||
# 状态变量
|
||||
current_agent_name = None # 当前Agent名称
|
||||
is_printing = False # 是否正在打印文本
|
||||
|
||||
# 处理事件流
|
||||
async for event in result.stream_events():
|
||||
|
||||
# 事件1: 文本流(逐Token输出)
|
||||
if event.type == "raw_response_event":
|
||||
if isinstance(event.data, ResponseTextDeltaEvent):
|
||||
# 第一次打印时显示Agent标签
|
||||
if not is_printing:
|
||||
agent_label = f"[{current_agent_name}]" if current_agent_name else ""
|
||||
print(f"🤖 {agent_label} ", end="", flush=True)
|
||||
is_printing = True
|
||||
# 逐字输出
|
||||
print(event.data.delta, end="", flush=True)
|
||||
|
||||
# 事件2: Agent切换
|
||||
elif event.type == "agent_updated_stream_event":
|
||||
new_agent = event.new_agent.name
|
||||
if current_agent_name is None:
|
||||
# 第一次设置Agent名称
|
||||
current_agent_name = new_agent
|
||||
else:
|
||||
# Agent发生切换
|
||||
if is_printing:
|
||||
print() # 先换行
|
||||
is_printing = False
|
||||
print(f"🔀 [系统]: {current_agent_name} → {new_agent}")
|
||||
current_agent_name = new_agent
|
||||
|
||||
# 事件3: 工具调用
|
||||
elif event.type == "run_item_stream_event":
|
||||
# 工具调用开始
|
||||
if event.name == "tool_called":
|
||||
if is_printing:
|
||||
print() # 先换行
|
||||
is_printing = False
|
||||
tool_name = event.item.raw_item.name
|
||||
tool_args = event.item.raw_item.arguments # 获取工具参数 调试需要时可加入
|
||||
# 区分转接工具和业务工具
|
||||
if tool_name.startswith("transfer_"):
|
||||
print(f"📞 [转接]: {tool_name}")
|
||||
else:
|
||||
print(f"🔧 [工具]: {tool_name}")
|
||||
|
||||
# 工具输出结果
|
||||
elif event.name == "tool_output":
|
||||
print(f"✅ [结果]: {event.item.output}")
|
||||
is_printing = False
|
||||
|
||||
# 结束本轮,确保换行
|
||||
if is_printing:
|
||||
print()
|
||||
|
||||
# 更新状态
|
||||
messages = result.to_input_list() # 获取完整对话历史
|
||||
cur_agent = result.last_agent # 获取最后激活的Agent
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user