网站首页 > 技术文章 正文
前面我们已经通过编写自己的MCP服务,并且成功将MCP服务添加到智能体中,那如何通过streamlit 构建一个属于自己的对话框,并调用智能体就是本文的内容了。
依赖包安装
- 阿里云sdk安装
使用阿里云灵积sdk包dashscope
pip install dashscope
- streamlit 包安装
pip install streamlit
- 部署环境建议
本文环境参考:
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服务运行
结语
这样通过以下步骤,基本形成一个完整的闭环,当然写的比较简单,对话框也是简陋存在很多优化的空间,如果有更好框架可以参与讨论,如有不清晰可以参考我往期文章
- python构建自定义的MCP服务,
- 添加自定义MCP到阿里云百炼平台
- 自定义MCP与智能体结合使用
- 通过streamlit编写对话框并调用阿里云智能体
后续
实战改造现有业务为MCP服务和思路
猜你喜欢
- 2025-06-24 Python调用Docker API的使用方式(pycharm docker 调试)
- 2025-06-24 青少年Python编程系列28:Python中函数的递归调用
- 2025-06-24 python调用sqlite数据库案例(python 调用数据库)
- 2025-06-24 【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 2025-06-24 通过pybind11来实现python调用C++接口(一)
- 2025-06-24 Python编程调用Deepseek API创建智能体
- 2025-06-24 python多装饰器针对函数、类、方法的调用顺序说明
- 2025-06-24 Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- 2025-06-24 Python | Django 外部脚本调用 models 数据库
- 2025-06-24 自学Python第九天——操作列表(python操作步骤)
- 06-24Python调用Docker API的使用方式(pycharm docker 调试)
- 06-24青少年Python编程系列28:Python中函数的递归调用
- 06-24python调用sqlite数据库案例(python 调用数据库)
- 06-24【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 06-24通过pybind11来实现python调用C++接口(一)
- 06-24Python编程调用Deepseek API创建智能体
- 06-24python多装饰器针对函数、类、方法的调用顺序说明
- 06-24Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- 270℃Python短文,Python中的嵌套条件语句(六)
- 268℃python笔记:for循环嵌套。end=""的作用,图形打印
- 266℃PythonNet:实现Python与.Net代码相互调用!
- 262℃Python实现字符串小写转大写并写入文件
- 261℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 121℃原来2025是完美的平方年,一起探索六种平方的算吧
- 101℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 96℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
-
- Python调用Docker API的使用方式(pycharm docker 调试)
- 青少年Python编程系列28:Python中函数的递归调用
- python调用sqlite数据库案例(python 调用数据库)
- 【Python机器学习系列】基于Flask来构建API调用机器学习模型服务
- 通过pybind11来实现python调用C++接口(一)
- Python编程调用Deepseek API创建智能体
- python多装饰器针对函数、类、方法的调用顺序说明
- Python Qt GUI设计:Python调用UI文件的两种方法(基础篇—3)
- Python | Django 外部脚本调用 models 数据库
- 自学Python第九天——操作列表(python操作步骤)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)