利用streamlit结合langchain_aws实现claud3的页面交互

梦见你的名字  金牌会员 | 2024-6-19 21:16:55 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 495|帖子 495|积分 1485

测试使用的代码如下
  1. import streamlit as st
  2. from langchain_aws import ChatBedrock
  3. def chat_with_model(prompt, model_id):
  4.     llm = ChatBedrock(credentials_profile_name="default", model_id=model_id, region_name="us-east-1")
  5.     res = llm.invoke(prompt)
  6.     return res.content
  7. # Streamlit app
  8. st.title("LangChain AWS Chat Interface")
  9. # Sidebar for model selection
  10. models = {
  11.     "Claude-3 Sonnet": "anthropic.claude-3-sonnet-20240229-v1:0",
  12.     "titan": "amazon.titan-text-express-v1",
  13.     "Claude-3 haiku": "anthropic.claude-3-haiku-20240307-v1:0"
  14. }
  15. model_choice = st.sidebar.selectbox("Select a Model", list(models.keys()))
  16. model_id = models[model_choice]
  17. # Text area for user input
  18. prompt = st.text_area("Enter your prompt here:", "")
  19. if st.button("Send"):
  20.     if prompt:
  21.         response = chat_with_model(prompt, model_id)
  22.         st.write(f"模型返回的结果:\n{response}")
  23.     else:
  24.         st.write("Please enter a prompt.")
复制代码
运行代码
streamlit run app.py
运行结果如下

为了实现更友好的界面,修改源码如下
  1. import streamlit as st
  2. from langchain_aws import ChatBedrock
  3. # 定义与模型交互的函数
  4. def chat_with_model(prompt, model_id, history):
  5.     llm = ChatBedrock(credentials_profile_name="default", model_id=model_id, region_name="us-east-1")
  6.     full_prompt = "\n".join(history + [prompt])
  7.     res = llm.invoke(full_prompt)
  8.     return res.content
  9. # 初始化 Streamlit 应用
  10. st.set_page_config(page_title="Bedrock Client", layout="wide")
  11. st.title("Bedrock Client")
  12. # 定义 CSS 样式
  13. st.markdown(
  14.     """
  15.     <style>
  16.     .sidebar .sidebar-content {
  17.         background-color: #f0f0f5;
  18.     }
  19.     .main .block-container {
  20.         padding: 2rem;
  21.     }
  22.     .chat-history {
  23.         max-height: 400px;
  24.         overflow-y: auto;
  25.         padding: 1rem;
  26.         background-color: #ffffff;
  27.         border: 1px solid #ddd;
  28.         border-radius: 8px;
  29.         margin-bottom: 1rem;
  30.     }
  31.     .chat-input {
  32.         width: 100%;
  33.         padding: 1rem;
  34.         border: 1px solid #ddd;
  35.         border-radius: 8px;
  36.     }
  37.     </style>
  38.     """,
  39.     unsafe_allow_html=True
  40. )
  41. # 模型字典
  42. models = {
  43.     "Claude-3 Sonnet": "anthropic.claude-3-sonnet-20240229-v1:0",
  44.     "titan": "amazon.titan-text-express-v1",
  45.     "Claude-3 haiku": "anthropic.claude-3-haiku-20240307-v1:0"
  46. }
  47. # 侧边栏选择模型
  48. st.sidebar.header("选择模型")
  49. model_choice = st.sidebar.selectbox("Select a Model", list(models.keys()))
  50. model_id = models[model_choice]
  51. # 检查 session_state 中是否有对话历史记录
  52. if "history" not in st.session_state:
  53.     st.session_state.history = []
  54. # 主界面布局
  55. st.sidebar.title("会话")
  56. st.sidebar.button("新建对话", on_click=lambda: st.session_state.update({"history": []}))
  57. st.sidebar.markdown(f"**当前会话** ({len(st.session_state.history) // 2} 条对话)")
  58. # 显示对话历史记录
  59. st.markdown("### 对话记录")
  60. chat_history_container = st.container()
  61. with chat_history_container:
  62.     if st.session_state.history:
  63.         for message in st.session_state.history:
  64.             st.markdown(f"<div class='chat-history'>{message}</div>", unsafe_allow_html=True)
  65.     else:
  66.         st.markdown("<div class='chat-history'>暂无对话记录</div>", unsafe_allow_html=True)
  67. # 输入区域和发送按钮
  68. prompt = st.text_input("Enter your prompt here:", "", key="input", placeholder="输入消息,Shift + Enter 换行 / 触发补全,触发命令", label_visibility="collapsed")
  69. if st.button("发送"):
  70.     if prompt:
  71.         response = chat_with_model(prompt, model_id, st.session_state.history)
  72.         st.session_state.history.append(f"User: {prompt}")
  73.         st.session_state.history.append(f"Model: {response}")
  74.         st.experimental_rerun()  # 刷新页面以显示新对话
  75.     else:
  76.         st.write("Please enter a prompt.")
复制代码
运行之后界面如下所示
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表