当前位置:   article > 正文

Coggle数据科学 | Streamlit + LangChain 问答可见即所得~_金融问答coggle

金融问答coggle

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。

原文链接:Streamlit + LangChain 问答可见即所得~

LangChain是一个框架,旨在开发由语言模型驱动的应用程序。它不仅仅是通过API调用语言模型,还提供了数据感知、代理性质和一系列模块支持,使开发者能够构建更强大、更灵活的应用程序。

https://github.com/langchain-ai/streamlit-agent

本文包含了各种LangChain代理的参考实现,这些代理以Streamlit应用程序的形式展示出来。

1 基础案例

https://github.com/langchain-ai/streamlit-agent/blob/main/streamlit_agent/minimal_agent.py

  • 导入了LangChain框架的相关模块以及Streamlit库。

  • 创建了一个OpenAI的语言模型对象(LLM),并设置了温度参数为0,以及启用了流式处理。

  • 在Streamlit应用程序中,当用户输入文本时,通过st.chat_input()获取用户的输入。

  1. from langchain.llms import OpenAI
  2. from langchain.agents import AgentType, initialize_agent, load_tools
  3. from langchain.callbacks import StreamlitCallbackHandler
  4. import streamlit as st
  5. llm = OpenAI(temperature=0, streaming=True)
  6. tools = load_tools(["ddg-search"])
  7. agent = initialize_agent(
  8.     tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
  9. )
  10. if prompt := st.chat_input():
  11.     st.chat_message("user").write(prompt)
  12.     with st.chat_message("assistant"):
  13.         st_callback = StreamlitCallbackHandler(st.container())
  14.         response = agent.run(prompt, callbacks=[st_callback])
  15.         st.write(response)

2 与DataFrame进行交互

https://github.com/langchain-ai/streamlit-agent/blob/main/streamlit_agent/chat_pandas_df.py

  • 上传文档并读取文件的内容

  • 创建了一个OpenAI的LLM

  • 创建对DataFrame进行交互的Agent

  1. uploaded_file = st.file_uploader(
  2.     "Upload a Data file",
  3.     type=list(file_formats.keys()),
  4.     help="Various File formats are Support",
  5.     on_change=clear_submit,
  6. )
  7. if uploaded_file:
  8.     df = load_data(uploaded_file)
  9. openai_api_key = st.sidebar.text_input("OpenAI API Key"type="password")
  10. if "messages" not in st.session_state or st.sidebar.button("Clear conversation history"):
  11.     st.session_state["messages"] = [{"role""assistant""content""How can I help you?"}]
  12. for msg in st.session_state.messages:
  13.     st.chat_message(msg["role"]).write(msg["content"])
  14. if prompt := st.chat_input(placeholder="What is this data about?"):
  15.     st.session_state.messages.append({"role""user""content": prompt})
  16.     st.chat_message("user").write(prompt)
  17.     if not openai_api_key:
  18.         st.info("Please add your OpenAI API key to continue.")
  19.         st.stop()
  20.     llm = ChatOpenAI(
  21.         temperature=0, model="gpt-3.5-turbo-0613", openai_api_key=openai_api_key, streaming=True
  22.     )
  23.     pandas_df_agent = create_pandas_dataframe_agent(
  24.         llm,
  25.         df,
  26.         verbose=True,
  27.         agent_type=AgentType.OPENAI_FUNCTIONS,
  28.         handle_parsing_errors=True,
  29.     )
  30.     with st.chat_message("assistant"):
  31.         st_cb = StreamlitCallbackHandler(st.container(), expand_new_thoughts=False)
  32.         response = pandas_df_agent.run(st.session_state.messages, callbacks=[st_cb])
  33.         st.session_state.messages.append({"role""assistant""content": response})
  34.         st.write(response)

3 与文档进行交互

https://github.com/langchain-ai/streamlit-agent/blob/main/streamlit_agent/chat_with_documents.py

  • 上传文档并读取文件的内容

  • 创建了一个OpenAI的LLM

  • 创建对文档进行交互的Agent

  1. uploaded_files = st.sidebar.file_uploader(
  2.     label="Upload PDF files"type=["pdf"], accept_multiple_files=True
  3. )
  4. retriever = configure_retriever(uploaded_files)
  5. # Setup memory for contextual conversation
  6. msgs = StreamlitChatMessageHistory()
  7. memory = ConversationBufferMemory(memory_key="chat_history", chat_memory=msgs, return_messages=True)
  8. # Setup LLM and QA chain
  9. llm = ChatOpenAI(
  10.     model_name="gpt-3.5-turbo", openai_api_key=openai_api_key, temperature=0, streaming=True
  11. )
  12. qa_chain = ConversationalRetrievalChain.from_llm(
  13.     llm, retriever=retriever, memory=memory, verbose=True
  14. )
  15. if len(msgs.messages) == 0 or st.sidebar.button("Clear message history"):
  16.     msgs.clear()
  17.     msgs.add_ai_message("How can I help you?")
  18. avatars = {"human""user""ai""assistant"}
  19. for msg in msgs.messages:
  20.     st.chat_message(avatars[msg.type]).write(msg.content)
  21. if user_query := st.chat_input(placeholder="Ask me anything!"):
  22.     st.chat_message("user").write(user_query)
  23.     with st.chat_message("assistant"):
  24.         retrieval_handler = PrintRetrievalHandler(st.container())
  25.         stream_handler = StreamHandler(st.empty())
  26.         response = qa_chain.run(user_query, callbacks=[retrieval_handler, stream_handler])

4 与数据库进行交互

https://github.com/langchain-ai/streamlit-agent/blob/main/streamlit_agent/chat_with_sql_db.py

  • 上传文档并读取文件的内容

  • 创建了一个OpenAI的LLM

  • 创建对数据库进行交互的Agent

  1. # Setup agent
  2. llm = OpenAI(openai_api_key=openai_api_key, temperature=0, streaming=True)
  3. @st.cache_resource(ttl="2h")
  4. def configure_db(db_uri):
  5.     if db_uri == LOCALDB:
  6.         # Make the DB connection read-only to reduce risk of injection attacks
  7.         # See: https://python.langchain.com/docs/security
  8.         db_filepath = (Path(__file__).parent / "Chinook.db").absolute()
  9.         creator = lambda: sqlite3.connect(f"file:{db_filepath}?mode=ro", uri=True)
  10.         return SQLDatabase(create_engine("sqlite:///", creator=creator))
  11.     return SQLDatabase.from_uri(database_uri=db_uri)
  12. db = configure_db(db_uri)
  13. toolkit = SQLDatabaseToolkit(db=db, llm=llm)
  14. agent = create_sql_agent(
  15.     llm=llm,
  16.     toolkit=toolkit,
  17.     verbose=True,
  18.     agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
  19. )
  20. if "messages" not in st.session_state or st.sidebar.button("Clear message history"):
  21.     st.session_state["messages"] = [{"role""assistant""content""How can I help you?"}]
  22. for msg in st.session_state.messages:
  23.     st.chat_message(msg["role"]).write(msg["content"])
  24. user_query = st.chat_input(placeholder="Ask me anything!")
  25. if user_query:
  26.     st.session_state.messages.append({"role""user""content": user_query})
  27.     st.chat_message("user").write(user_query)
  28.     with st.chat_message("assistant"):
  29.         st_cb = StreamlitCallbackHandler(st.container())
  30.         response = agent.run(user_query, callbacks=[st_cb])
  31.         st.session_state.messages.append({"role""assistant""content": response})
  32.         st.write(response)

THE END!

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/361910
推荐阅读
相关标签
  

闽ICP备14008679号