如何将Langchain的Human Tool集成到Streamlit中

prdp8dxp  于 2个月前  发布在  其他
关注(0)|答案(9)|浏览(45)

系统信息

我正在使用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集成。

l5tcr1uw

l5tcr1uw1#

你好,
感谢你联系并提供详细的信息关于你的问题。看起来你正在尝试用一个与Streamlit集成的函数替换input_funcHumanInputRun类中。
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开始你的回复。

sqxo8psd

sqxo8psd2#

你好,@sharifamlani,你解决了这个问题吗?

irlmq6kh

irlmq6kh3#

对我有用,但当我回应时,它会重新加载页面,我必须从头开始。

fgw7neuy

fgw7neuy4#

感谢@dosu-bot提供的代码。有人能让它正常工作吗?我无法让新的HumanInputRun与代理正确集成。

vjhs03f7

vjhs03f75#

你好,@sharifamlani,如果你能解决这个问题,请发布解决方案。

h4cxqtbf

h4cxqtbf6#

是的,已经成功运行。代码在这里:https://github.com/Definitive-AI/Agents

55ooxyrt

55ooxyrt7#

@jfjeschke当我们添加输入时,它仍然会重新加载应用程序(更改状态),对吗?我尝试实现它,但没有成功。

g9icjywg

g9icjywg8#

@jfjeschke 尽管如此,当我们添加输入时,它仍然会重新加载应用程序(更改状态),对吗?我尝试实现它,但没有成功。
只需使用单个示例,如下所示:
streamlit_tool = StreamlitInput()
否则,它将尝试创建多个字段。

h6my8fg2

h6my8fg29#

@jfjeschke:当我们添加输入时,它仍然会重新加载应用程序(更改状态),对吗?我尝试实现它,但没有成功。
请使用单个示例,如下所示:
streamlit_tool = StreamlitInput()
否则,它将尝试创建多个字段。
我尝试了这个方法,但它会重新加载应用程序,然后从头开始。你遇到过这个问题吗?

相关问题