程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

python如何使用streamlit调用自己的智能体

hfteth 2025-06-24 13:48:44 技术文章 1 ℃

前面我们已经通过编写自己的MCP服务,并且成功将MCP服务添加到智能体中,那如何通过streamlit 构建一个属于自己的对话框,并调用智能体就是本文的内容了。

依赖包安装

  1. 阿里云sdk安装

使用阿里云灵积sdk包dashscope

pip install dashscope
  1. streamlit 包安装
pip install streamlit
  1. 部署环境建议

本文环境参考:

pycharm、python版本使用3.13,python版本尽量使用新一点版本的,对ai相关sdk支持较好

阿里云智能体调用方法

使用灵积sdk将阿里云调用智能体简单封装一个函数,方便后续复用

代码如下:

def call_AI_api(appid,prompt,sessionid=""):
    responseNext = Application.call(
        # 若没有配置环境变量,可用百炼API Key将下行替换为:api_key="sk-xxx"。但不建议在生产环境中直接将API Key硬编码到代码中,以减少API Key泄露风险。
        api_key=api_key,
        app_id=appid,
        prompt=prompt,
        # rag_options={
        #     "session_file_ids": filelist,  # FILE_ID1 替换为实际的临时文件ID,逗号隔开多个
        # },
        session_id=sessionid)  # 上一轮response的session_id
    if responseNext.status_code != HTTPStatus.OK:
        print(f'request_id={responseNext.request_id}')
        print(f'code={responseNext.status_code}')
        print(f'message={responseNext.message}')
        print(f'请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code')
    else:
        session_id = responseNext.output.session_id
        out = responseNext.output.text
        return out, session_id

streamlit 调用智能体方法

代码如下:

def mcp_streameamlit():
    st.title("我是智能客服机器人")
    if "guser_id" not in st.session_state:
        session = traceid() # 一个生成session方法,用于区分阿里云调用的会话id,可以自己随便一个字符串区分,
        st.session_state["guser_id"] = session # 将生成的session保存在session_state中,方便下次使用
        st.write("guser_id initialized", session)
    else:
        session = st.session_state["guser_id"] # 从session_state中取出session
        st.write("guser_id read", session)
    if 'chat_history' not in st.session_state:
        st.session_state.chat_history = []  # 历史记录
    user_prompt = st.chat_input("我是智能客服机器人,请输入你的问题吧")
    for message in st.session_state.chat_history:
        # 通过取出来的信息,构建st.chat_message,不同的角色会有不同的ui样式,这里就是做这个的
        with st.chat_message(message['role']):
            # 把内容展示出来
            st.markdown(message['content'])
    mcp_id_session = "mcp-" + session
    if user_prompt:
        # mcp_apppid 填入自己的阿里云百炼中智能体id
        res, mcp_id_session = call_AI_api(mcp_apppid, user_prompt, mcp_id_session)
        st.session_state.chat_history.append({'role': 'user', 'content': user_prompt})
        with st.chat_message('user'):
            st.markdown(user_prompt) # 打印用户输入
            myloger(msg="用户输入:>> %s<< :>> %s <<" % (session, user_prompt))
        # 保存历史,上面用来遍历显示,避免后面覆盖前面的显示
        st.session_state.chat_history.append({'role': 'assistant', 'content': res})
        with st.chat_message('assistant'):
            st.markdown(res)  # 打印输出
            myloger(msg="assistant:>> %s<< :>> %s <<" % (session, res))

智能体id

mcp_apppid 取智能体应用ID

测试效果

运行MCP服务

python mcp_demo_server.py

注意:这里需要在终端使用steamlit运行,会自动打开游览器,展示一个对话框,这里没有使用流输出,需要等模型全部输出完成才会打印结果

streamlit run mcp_ai_streamlit.py

运行结果

后端运行

mcp服务运行

结语

这样通过以下步骤,基本形成一个完整的闭环,当然写的比较简单,对话框也是简陋存在很多优化的空间,如果有更好框架可以参与讨论,如有不清晰可以参考我往期文章

  1. python构建自定义的MCP服务,
  2. 添加自定义MCP到阿里云百炼平台
  3. 自定义MCP与智能体结合使用
  4. 通过streamlit编写对话框并调用阿里云智能体

后续

实战改造现有业务为MCP服务和思路

最近发表
标签列表