如何用agent做一个简单的聊天助手

需求分析

deepseek
打开deepseek网页,可以看到这个,把无关信息去掉,我们只需要一个聊天框,一个发送按钮;最主要的信息就是这些;

先看下我的实现结果,如下图:
我的实现

实现流程

这里主要用streamlit来实现页面,如下图:

st.set_page_config(
        page_title="DeepSeek 聊天助手",
        page_icon="🤖",
        layout="wide"
    )
# 初始化session state
if "chat_history" not in st.session_state:
    st.session_state.chat_history = []
if "excel_data" not in st.session_state:
    st.session_state.excel_data = None
if "processed_data" not in st.session_state:
    st.session_state.processed_data = None
if "agent" not in st.session_state:
    st.session_state.agent = None

    # 标题
st.title("🤖 DeepSeek 聊天助手")
st.markdown("---")

侧边栏配置

# 侧边栏 - 配置区域
with st.sidebar:
    st.header("⚙️ 配置设置")

    # API Key输入
    api_key = st.text_input(
        "🔑 输入DeepSeek API Key",
        type="password",
        placeholder="sk-xxxxxxxxxxxxxxxx",
        help="请从DeepSeek平台获取您的API Key"
    )

    # 初始化Agent按钮
    if st.button("🚀 初始化AI助手", type="primary"):
        if not api_key:
            st.error("❌ 请输入API Key")
        else:
            try:
                # 创建客户端
                external_client = AsyncOpenAI(
                    base_url="https://api.deepseek.com",
                    api_key=api_key,
                )

                # 设置默认客户端
                set_default_openai_client(external_client)

                # 创建模型
                deepseek_model = OpenAIChatCompletionsModel(
                    model="deepseek-chat",
                    openai_client=external_client
                )

                agent = Agent(name="Assistant",
                              instructions="你是一名助人为乐的助手。",
                              model=deepseek_model)

                st.session_state.agent = agent

               # st.session_state.agent = agent
                st.success("✅ AI助手初始化成功!")

            except Exception as e:
                st.error(f"❌ 初始化失败: {str(e)}")

聊天区域

st.header("💬 智能对话")

# 显示聊天历史
for message in st.session_state.chat_history:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

聊天输入框

 if prompt := st.chat_input("给deepseek发送信息"):
     # 添加用户消息到历史
     st.session_state.chat_history.append({"role": "user", "content": prompt})

     # 显示用户消息
     with st.chat_message("user"):
         st.markdown(prompt)

     # 显示AI回复
     with st.chat_message("assistant"):
         if st.session_state.agent is None:
             st.warning("⚠️ 请先在侧边栏初始化AI助手")
         else:
             try:
                 # 准备上下文信息
                 context = ""


                 # 运行Agent
                 with st.spinner("🤔 思考中..."):
                     result = asyncio.run(Runner.run(
                         st.session_state.agent,
                         [{"role": "user", "content": prompt + context}]
                     ))

             except Exception as e:
                 error_msg = f"❌ 处理请求时出错: {str(e)}"
                 st.error(error_msg)

总结

主要流程就是网页端发送一个信息,然后,通过agent,调用deepseek的模型,最后deepseek返回信息。因为代码都是用python写的,而python很多东西都是要跟C++交互的,都是语言层面的东西,有兴趣,可以去这里看看。结束,回头看看抽空写点跟streamlit相关的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值