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

测试使用的代码如下

import streamlit as st
from langchain_aws import ChatBedrockdef chat_with_model(prompt, model_id):llm = ChatBedrock(credentials_profile_name="default", model_id=model_id, region_name="us-east-1")res = llm.invoke(prompt)return res.content# Streamlit app
st.title("LangChain AWS Chat Interface")# Sidebar for model selection
models = {"Claude-3 Sonnet": "anthropic.claude-3-sonnet-20240229-v1:0","titan": "amazon.titan-text-express-v1","Claude-3 haiku": "anthropic.claude-3-haiku-20240307-v1:0"
}model_choice = st.sidebar.selectbox("Select a Model", list(models.keys()))
model_id = models[model_choice]# Text area for user input
prompt = st.text_area("Enter your prompt here:", "")if st.button("Send"):if prompt:response = chat_with_model(prompt, model_id)st.write(f"模型返回的结果:\n{response}")else:st.write("Please enter a prompt.")

运行代码

streamlit run app.py

运行结果如下

为了实现更友好的界面,修改源码如下

import streamlit as st
from langchain_aws import ChatBedrock# 定义与模型交互的函数
def chat_with_model(prompt, model_id, history):llm = ChatBedrock(credentials_profile_name="default", model_id=model_id, region_name="us-east-1")full_prompt = "\n".join(history + [prompt])res = llm.invoke(full_prompt)return res.content# 初始化 Streamlit 应用
st.set_page_config(page_title="Bedrock Client", layout="wide")
st.title("Bedrock Client")# 定义 CSS 样式
st.markdown("""<style>.sidebar .sidebar-content {background-color: #f0f0f5;}.main .block-container {padding: 2rem;}.chat-history {max-height: 400px;overflow-y: auto;padding: 1rem;background-color: #ffffff;border: 1px solid #ddd;border-radius: 8px;margin-bottom: 1rem;}.chat-input {width: 100%;padding: 1rem;border: 1px solid #ddd;border-radius: 8px;}</style>""",unsafe_allow_html=True
)# 模型字典
models = {"Claude-3 Sonnet": "anthropic.claude-3-sonnet-20240229-v1:0","titan": "amazon.titan-text-express-v1","Claude-3 haiku": "anthropic.claude-3-haiku-20240307-v1:0"
}# 侧边栏选择模型
st.sidebar.header("选择模型")
model_choice = st.sidebar.selectbox("Select a Model", list(models.keys()))
model_id = models[model_choice]# 检查 session_state 中是否有对话历史记录
if "history" not in st.session_state:st.session_state.history = []# 主界面布局
st.sidebar.title("会话")
st.sidebar.button("新建对话", on_click=lambda: st.session_state.update({"history": []}))
st.sidebar.markdown(f"**当前会话** ({len(st.session_state.history) // 2} 条对话)")# 显示对话历史记录
st.markdown("### 对话记录")
chat_history_container = st.container()
with chat_history_container:if st.session_state.history:for message in st.session_state.history:st.markdown(f"<div class='chat-history'>{message}</div>", unsafe_allow_html=True)else:st.markdown("<div class='chat-history'>暂无对话记录</div>", unsafe_allow_html=True)# 输入区域和发送按钮
prompt = st.text_input("Enter your prompt here:", "", key="input", placeholder="输入消息,Shift + Enter 换行 / 触发补全,触发命令", label_visibility="collapsed")if st.button("发送"):if prompt:response = chat_with_model(prompt, model_id, st.session_state.history)st.session_state.history.append(f"User: {prompt}")st.session_state.history.append(f"Model: {response}")st.experimental_rerun()  # 刷新页面以显示新对话else:st.write("Please enter a prompt.")

运行之后界面如下所示

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/24892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mathtype最新注册码下载2024最新分享地址

数学公式编辑器MathType&#xff0c;让在线教育更“数”利 在当今这个数字化、信息化飞速发展的时代&#xff0c;无论是学术研究、教育教学还是日常工作中&#xff0c;都离不开对各种复杂公式的输入与编辑。特别是对于教育工作者和科研工作者而言&#xff0c;如何高效准确地输入…

Webapp前端框架模板:探索、实践与创新

Webapp前端框架模板&#xff1a;探索、实践与创新 在数字化浪潮席卷而来的今天&#xff0c;webapp前端框架模板已成为开发者们不可或缺的工具。它们不仅简化了开发流程&#xff0c;还提高了项目的质量和效率。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入…

C++开源项目:pathcopycopyV20源码及运行程序

PathCopyCopy 是一个开源的 Windows 资源管理器扩展项目&#xff0c;旨在为用户提供一个更加高效、便捷的文件路径复制和管理工具。以下是关于 PathCopyCopy 开源项目的详细介绍&#xff1a; 1. 项目概述 2. 项目技术分析 3. 项目功能 4. 项目特点 5. 项目应用场景 6. 项目…

8. C#多线程基础概念

文章目录 一. 目标二. 技能介绍① 进程和线程② 为什么需要多线程③ C#实现多线程的方式④ 线程的操作(创建_终止_挂起_恢复) 一. 目标 进程和线程基本概念为什么需要多线程?C#实现多线程的方式?线程Thread的创建,终止,挂起和恢复? 二. 技能介绍 ① 进程和线程 什么是进程…

Java 包装类 - 基本数据类型、包装类与字符串相互转换

在Java中&#xff0c;基本数据类型&#xff08;如int, double, boolean等&#xff09;有对应的包装类&#xff08;如Integer, Double, Boolean等&#xff09;。这些包装类提供了很多有用的方法&#xff0c;比如类型转换、与字符串之间的转换等。下面是一些关于基本数据类型、包…

Netty向设备发送消息并等待设备响应

在使用netty开发和硬件对接时&#xff0c;经常会遇到服务端给硬件设备发送命令后需要等待设备反馈响应命令后执行逻辑。 一、定义同步等待 /*** author: 晨光* description: 同步等待* Version 1.0*/ public class SyncPromise {// 用于接收结果private BaseMessageInfoVo me…

计网总结☞物理层

五层协议体系结构->各层的功能有&#xff1a; 物理层 物理层的任务就是尽可能地屏蔽传输媒体的差异&#xff0c;透明地传送比特流&#xff08;注意&#xff1a;传递信息的物理媒体&#xff0c;如双绞线、同轴电缆、光缆等&#xff0c;是在物理层的下面&#xff0c;当做第 0…

Python AI 编程助手:Fitten Code插件

一. 简介 今天为大家推荐一款适配了 Viusal Studio&#xff0c;VS Code(本文使用)&#xff0c;JetBrains 系列(本文使用)以及Vim等多种编译器环境的插件 Fitten Code&#xff0c;Fitten Code 是由非十大模型驱动的 AI 编程助手&#xff0c;它可以自动生成代码&#xff0c;提升…

python --Datatframe 索引与列名操作

学习目标 知道如何查看索引及列名 知道如何修改索引及列名 1 数据准备 数据在文章顶部,找不到的可以主页私聊我 我们继续使用链家租房数据来学习本章节的API&#xff0c;导包并读取数据 import pandas as pd ​ # 加载数据集 df pd.read_csv(../data/LJdata.csv) # 获取天通…

【AIGC】基于大模型+知识库的Code Review实践

一、背景描述 一句话介绍就是&#xff1a;基于开源大模型 知识库的 Code Review 实践&#xff0c;类似一个代码评审助手&#xff08;CR Copilot&#xff09;。信息安全合规问题&#xff1a;公司内代码直接调 ChatGPT / Claude 会有安全/合规问题&#xff0c;为了使用 ChatGPT…

Mybatis CRUD操作

Mybatis 第一步-编写工具类 package com.ruoxue.utils;import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder;import jav…

集合中removeIf和stream流的filter差异比较

一、背景 今天在看同事写的代码的时候&#xff0c;看到了一个我很少使用的集合操作&#xff0c;一般我习惯过滤集合的数据的时候&#xff0c;采用stream流当中的filter操作&#xff0c;但是同事使用的是removeIf&#xff0c;对此简单看了看两者的区别&#xff0c;对此进行记录…

STM32F103C8开发板 STM32最小系统核心板 AD硬件原理图+PCB封装文件分享

STM32F103C8开发板原理图 原理图和PCB下载地址&#xff1a; STM32F103C8开发板 STM32最小系统核心板 AD硬件原理图PCB封装文件.zip: https://url83.ctfile.com/f/45573183-1269573020-8f85b2?p7526 (访问密码: 7526)

新手指南:如何使用Python快速上手深度学习

新手指南&#xff1a;如何使用Python快速上手深度学习 对于刚入门的新手而言&#xff0c;开始深度学习的旅程可能看起来既令人兴奋又略感困惑。Python是进行深度学习研究和应用的首选语言&#xff0c;因为它拥有丰富的库和框架&#xff0c;能够简化深度学习模型的开发和测试过…

前端使用axios下载文件和上传文件

首先&#xff0c;axios实例在发起下载文件请求时&#xff0c;应该配置responseType: ‘blob’&#xff0c;例如&#xff1a; // axios发起下载文档请求 export const downloadDoc (id: string) > {return request.get(/downloadDoc?id${id}, {// 参考官方文档https://www…

Bio-Info 每日一题:Rosalind-04-Rabbits and Recurrence Relations

&#x1f389; 进入生物信息学的世界&#xff0c;与Rosalind一起探索吧&#xff01;&#x1f9ec; Rosalind是一个在线平台&#xff0c;专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战&#xff0c;帮助用户从基础到高级掌握生物信息学知识。无论你是初…

指针在C/C++中的魔力:一级指针与二级指针

什么是指针&#xff1f; 指针是一个变量&#xff0c;它的值是另一个变量的地址。在C/C中&#xff0c;指针是一个强大的工具&#xff0c;可以让我们直接操作内存地址。指针的主要用途包括动态内存分配、数组和字符串处理、函数参数传递等。 一级指针 一级指针&#xff08;也称为…

聊一聊大数据需求的流程

大致的流程&#xff1a;需求对接、口径梳理、数据开发、任务发布、任务监控、任务保障 流程图 startuml skinparam packageStyle rectangleactor 需求方 participant 数据BP as 数据组 participant 离线数仓 participant 实时数仓需求方 -> 数据组: 提出需求 数据组 -> …

Android 日志实时输出

开发中如果只是单纯的应用开发&#xff0c;Android studio基本上可以满足&#xff0c;但是如果应用和系统联调那就得用logcat实时输出了&#xff0c;我这里都是总结的实用经验&#xff0c;没那么多花里胡哨 Android 日志实时输出 1、输出 android log //分步&#xff0c;进入s…

造假高手——faker

在测试写好的代码时通常需要用到一些测试数据&#xff0c;大量的真实数据有时候很难获取&#xff0c;如果手动制造测试数据又过于繁重无聊&#xff0c;显得不够优雅&#xff0c;今天我们介绍的faker这个轮子可以完美的解决这个问题。faker是一个用于生成各种类型假数据的库&…