系统信息
我正在使用Langchain的Human Tool作为应用程序的一部分。然而,我在将其集成到streamlit时遇到了困难。
我主要想改变函数中的input_func参数:Human_Tool =load_tools(["human"], lm=llm, input_func=get_input)
我已经尝试了许多不同的方法,但还没有成功。
我想请教一下,对于langchains的Human Tool,可能是什么get_input
函数可以成功地与streamlit集成?
需要帮助的人
@hwchase17
@agola11
信息
- 官方示例笔记本/脚本
- 我自己的修改过的脚本
相关组件
- LLMs/聊天模型
- 嵌入模型
- 提示/提示模板/提示选择器
- 输出解析器
- 文档加载器
- 向量存储/检索器
- 内存
- 代理/代理执行器
- 工具/工具包
- 链
- 回调/跟踪
- 异步
重现过程
以下是我尝试过的一些事情:
import streamlit as st
def get_input() -> str:
st.write("Insert your text below.")
# Updated this line to include a label and hide it using label_visibility
user_input = st.text_area(label="Your Text", value="", height=100, key=None, help=None, on_change=None, args=None, kwargs=None, label_visibility="hidden")
submit_button = st.button("Submit")
if submit_button:
return user_input.strip() # This will return the text entered by the user
if not submit_button:
with st.empty():
for remaining in range(3600, 0, -1):
st.write(f"You have {remaining//60} minutes and {remaining%60} seconds to enter the text.")
time.sleep(1)
st.empty()
return "" # Returning empty if no input after an hour or not submitted
上面的代码打开了一个streamlit框,接受用户的输入,但没有将用户的输入传递给代理。
import streamlit as st
import uuid
def get_input() -> str:
unique_key = str(uuid.uuid4())
user_input = st.text_area(
"Insert your text below:",
key=f"uniqueTextAreaKey_{unique_key}",
value="",
height=200,
)
if st.button("Submit", key=f"uniqueButtonKey_{unique_key}"):
if user_input: # check if user input is not empty
st.session_state['user_input'] = user_input
st.session_state['submitted'] = True
st.success("Input submitted successfully!")
return user_input.strip()
elif 'submitted' in st.session_state and st.session_state['submitted']:
st.success("Input already submitted.")
return st.session_state['user_input'].strip()
else:
st.warning("Please enter text and press submit.")
return ""
这段代码也打开了一个streamlit文本框,但陷入了无限循环。
预期行为
我希望human tool能够与streamlit集成。
9条答案
按热度按时间l5tcr1uw1#
你好,
感谢你联系并提供详细的信息关于你的问题。看起来你正在尝试用一个与Streamlit集成的函数替换
input_func
在HumanInputRun
类中。HumanInputRun
类中的input_func
字段是一个可调用的函数,用于从用户那里获取输入。默认情况下,它被设置为Python内置的input
函数。然而,你可以将其替换为一个与Streamlit集成的函数。以下是如何修改
HumanInputRun
类以使用Streamlit的text_input
函数:在这个修改中,
st.text_input
被用作input_func
的默认工厂。这个函数接受一个字符串参数,这是Streamlit应用程序中文本输入字段的标签。当调用_run
时,它将使用prompt_func
显示查询,然后在Streamlit应用程序中显示一个文本输入字段并返回用户的输入。请注意,这种修改只有在你的应用程序运行在Streamlit环境中时才会起作用。如果不是这样,
st.text_input
将无法显示文本输入字段并获取用户输入。希望这对你有所帮助!如果你有任何其他问题或遇到任何问题,请告诉我。
参考资料
这个回复是为了节省你的时间和提高效率而编写的。它并不是精确的解决方案,而是你自己研究的一个起点。
帮助我变得更有用!如果你觉得这个回复有帮助的话请给我一个👍,如果不相关就给一个👎。
如果你想继续对话,请以@dosu-bot开始你的回复。
sqxo8psd2#
你好,@sharifamlani,你解决了这个问题吗?
irlmq6kh3#
对我有用,但当我回应时,它会重新加载页面,我必须从头开始。
fgw7neuy4#
感谢@dosu-bot提供的代码。有人能让它正常工作吗?我无法让新的HumanInputRun与代理正确集成。
vjhs03f75#
你好,@sharifamlani,如果你能解决这个问题,请发布解决方案。
h4cxqtbf6#
是的,已经成功运行。代码在这里:https://github.com/Definitive-AI/Agents
55ooxyrt7#
@jfjeschke当我们添加输入时,它仍然会重新加载应用程序(更改状态),对吗?我尝试实现它,但没有成功。
g9icjywg8#
@jfjeschke 尽管如此,当我们添加输入时,它仍然会重新加载应用程序(更改状态),对吗?我尝试实现它,但没有成功。
只需使用单个示例,如下所示:
streamlit_tool = StreamlitInput()
否则,它将尝试创建多个字段。
h6my8fg29#
@jfjeschke:当我们添加输入时,它仍然会重新加载应用程序(更改状态),对吗?我尝试实现它,但没有成功。
请使用单个示例,如下所示:
streamlit_tool = StreamlitInput()
否则,它将尝试创建多个字段。
我尝试了这个方法,但它会重新加载应用程序,然后从头开始。你遇到过这个问题吗?