Files
agent-craft/m13_streamlit/s03_agent_single_mvp.py

75 lines
3.0 KiB
Python

import sys
import os
# 添加项目根目录到 Python 路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import streamlit as st
from agents import Runner, set_tracing_disabled
from agents.agent import Agent
from agents.models.openai_chatcompletions import OpenAIChatCompletionsModel
from openai import AsyncOpenAI
from config import OPENAI_API_KEY
set_tracing_disabled(True)
# 初始化模型
client = AsyncOpenAI(api_key=OPENAI_API_KEY,base_url="https://api.deepseek.com")
model = OpenAIChatCompletionsModel(model="deepseek-chat",openai_client=client)
# 定义一个通用Agent
smart_agent = Agent(
name="SmartAssistant",
instructions="""
你是航空公司智能客服助手,客户姓名:张三(白金会员),航班号:CA1234。
你具备以下能力:
- 用户说“退票”“退款”“取消” → 回复:✅ 退款申请已提交,预计3个工作日内原路返回。
- 用户说“改签”“换航班” → 回复:✅ 明日同航线航班尚有余座,已为您预留,可随时确认改签。
- 其他任何问题 → 礼貌、专业地直接回答
回复要简洁、自然、带表情符号,让用户感到温暖。
""",
model=model
)
# Streamlit UI组件
st.set_page_config(page_title="智能客服驾驶舱",layout="wide") # 标签页命名
st.title("✈️ 智能航天客服 Swarm") # 页面标题
# 侧边栏:驾驶舱监控(先固定不变动)
with st.sidebar:
st.header("🖥️ 驾驶舱监控")
st.success("当前坐席: 智能助理 SmartAssistant 🤖") # success用作高亮块显示
st.subheader("用户画像")
st.json({"user_name": "张三(白金会员)", "flight_no": "CA1234"})
# 会话状态与历史消息
if "messages" not in st.session_state: # 首次运行时,初始化空列表,用于存储聊天消息。
st.session_state["messages"] = []
for msg in st.session_state["messages"]: # 重新渲染历史消息,确保聊天上下文在页面刷新后依然可见
avatar = "👤" if msg['role'] == 'user' else "🤖"
with st.chat_message(msg['role'],avatar=avatar):
st.write(msg["content"])
# 用户输入与核心交互
prompt = st.chat_input("请输入您的问题(试试:我要退票 / 想改签 / 你好)")
if prompt:
# 显示用户信息
st.session_state.messages.append({"role":"user","content":prompt})
with st.chat_message("user",avatar="👤"):
st.write(prompt)
# 调用Agents SDK
with st.spinner("思考中..."): # 执行耗时操作时,显示旋转的加载动画
result = Runner.run_sync( # 同步运行智能体
smart_agent, # 参数:agent
st.session_state.messages # 参数:对话历史
)
# 显示AI回复
reply = result.final_output # 最终AI回复内容
st.session_state.messages.append({"role":"assistant","content":reply})
with st.chat_message("assistant",avatar="🤖"):
st.write(reply)