惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

博客园 - ymworkroom

命令行在银河麒麟的达梦数据库中创建新的数据库 Python中包的导入 Python中__name__与__all__两个特殊变量的作用 Python中模块导入方式 国内安装Claude方案 连接mysql8.0时报:KeyNotFoundException: 给定关键字不在字典中 vscode中运行的vue项目,vscode关闭后仍然运行,如何停止 [INS-30131] 执行安装程序验证所需的初始设置失败 Java中CornExpression说明 java项目开发常用配置文件模板 oracle数据库导入dmp文件,两种方法 Oracle dmp文件导入(还原)到不同的表空间和不同的用户下 pdf.js在IIS中配置使用笔记 禁止达梦数据库中not null字段插入空字符串 错误:java.lang.NoClassDefFoundError: org/jaxen/JaxenException 服务器级的urn筛选器无效:筛选器必须为空,或服务器属性必须等于实际的服务器名称处理方法 oracle下安装logminer笔记 .net导出图片到Excel .net获取网络图片 Lotus Notes连接Domino服务器时出错 配置Mysql远程访问 mysql Access denied for user root@localhost错误处理备忘 MsSql判断表是否有自增标识 .net用NPOI生成Word表格 .net读取Lotus Domino文件数据库并写入DataTable中
Python学习——Ai+streamlit实现Ai伴侣(练习流式输出)
ymworkroom · 2026-07-08 · via 博客园 - ymworkroom
 1 import streamlit as st
 2 import os
 3 from zhipuai import ZhipuAI
 4 
 5 st.set_page_config(
 6     page_title="AI智能伴侣",
 7     layout="wide",
 8     initial_sidebar_state="expanded",
 9     menu_items={},
10     page_icon="🤖"
11 )
12 key=os.environ.get("ZHIPUAI_API_KEY")
13 if not key:
14     print("未找到key")
15     st.stop()
16 
17 
18 client=ZhipuAI(api_key=key)
19 st.title("AI智能伴侣")
20 def_personality="一个性格开朗大方的东北妹子。"
21 if "message_list" not in st.session_state:
22     #st.session_state["message_list"] = []
23     st.session_state.message_list = []
24 if "nick_name" not in st.session_state:
25     #st.session_state["nick_name"] = "小美"
26     st.session_state.nick_name = "小美"
27 if "personality" not in st.session_state:
28     #st.session_state["personality"] = "一个性格开朗大方的东北妹子。"
29     st.session_state.personality =def_personality
30 
31 with st.sidebar:
32     st.sidebar.title("AI伴侣控制面板")
33     nick_name=st.sidebar.text_input("昵称:",value=st.session_state.nick_name)
34     personality=st.sidebar.text_area("性格:",value=st.session_state.personality)
35     if nick_name:
36         st.session_state.nick_name= nick_name
37     if personality:
38         st.session_state.personality = personality
39 
40 
41 #由于每次执行streamlit都会刷新页面,所以在这里将历史对话都输出来
42 for message in st.session_state.message_list:
43     st.chat_message(message["role"]).write(f" {message['content']}")
44 
45 
46 role_prompt=f"你叫{st.session_state.nick_name},{st.session_state.personality}"
47 prompt = st.chat_input("说点什么呢?")
48 if prompt:
49     st.chat_message("user").write(f" {prompt}")
50     st.session_state["message_list"].append({"role":"user","content":f"{prompt}"})
51     response=client.chat.completions.create(
52         model="glm-4.6v",
53         messages=[
54             {"role":"system","content":role_prompt},
55             #解包列表中的元素,滚雪球式将历史消息按顺序一起发送,解决AI记忆问题。
56             *st.session_state["message_list"]
57         ],
58         stream=True
59     )
60     #流式输出大模型返回的结果
61     msg_container=st.empty()
62     full_content = ""
63     for chunk in response:
64         if chunk.choices[0].delta.reasoning_content is not None:
65             content=chunk.choices[0].delta.reasoning_content
66             full_content+=content
67             msg_container.chat_message("assistant").write(full_content)
68         if chunk.choices[0].delta.content is not None:
69             content = chunk.choices[0].delta.content
70             full_content += content
71             msg_container.chat_message("assistant").write(full_content)
72     st.session_state["message_list"].append({"role":"assistant","content":f"{full_content}"})