成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

基于Llama 3和LangChain,使用自然語言進行SQL查詢 精華

發布于 2024-7-16 08:48
瀏覽
0收藏

在數據泛濫的今天,如何高效地從海量信息中提取有價值的洞察,已成為開發者面臨的共同挑戰。本文介紹一個創新項目——基于Streamlit的應用程序,它能夠理解自然語言并直接與SQL數據庫進行交互,從而簡化數據分析流程。

1 環境設置

在本項目中,我們選擇PostgreSQL作為后端數據庫。用戶需自行安裝并配置PostgreSQL,同時需要搭建Ollama環境以及OpenWebUI界面。具體的安裝和配置步驟,建議參考相應的官方文檔或社區指南進行操作。

2 創建用于生成SQL的自定義模型

接著是創建自定義LLM,根據用戶輸入生成SQL查詢。這里會使用OpenWebUI完成這項任務。以下是設置方法:

創建新模型文件:

  • 命名并描述您的自定義模型。
  • 定義模型內容,基于Llama 3,溫度設置為零。
  • 在系統消息中,指示模型為PostgreSQL生成SQL,整合數據庫架構和關系。

模型內容定義:

  • 提供數據庫架構。
  • 包括有關查詢結構和表連接的指南。
  • 專注于SQL查詢生成,忽略響應中的格式。

保存模型:

  • 添加提示建議和相關類別。
  • 保存模型文件,使其在Ollama生態系統中可用。

3 構建LangChain集成

LangChain是開源的框架,用于構建基于大型語言模型的應用程序。它通過將語言模型與內部數據源相結合,自動化地串聯起一系列操作,生成智能響應。

利用LangChain,我們能夠實現數據庫與自然語言之間的無縫交互。這一解決方案的實現,是通過在Python的??app.py??文件中編寫代碼來完成的。

首先,確保環境已安裝以下包:

  • langchain
  • langchain-community
  • streamlit

4 建立數據庫連接

將數據庫憑據保存在本地變量中,并創建一個使用LangChain的SQLDatabase包裝器建立連接的函數。

pwd = os.environ['PGPASS']
uid = os.environ['PGUID']
server = "localhost"
db = "adventureworks"
port = 5432

def init_database() -> SQLDatabase:
  db_uri = f"postgresql://{uid}:{pwd}@{server}:{port}/{db}"
  return SQLDatabase.from_uri(db_uri, schema="sales")

5 使用自定義LLM生成SQL查詢

創建自定義函數,根據用戶輸入生成SQL。這個函數使用Ollama訪問自定義模型。

def llm_query(question):
  # 第一個sql llm
  llm = ChatOllama(model="llama-sql")
  prompt = ChatPromptTemplate.from_template(" {topic}")
  # 鏈
  chain = prompt | llm | StrOutputParser()
  # 鏈調用
  sql = chain.invoke({"topic": f"{question}"})
  sql = re.sub(r'(?:(?<=_) | (?=_))','',sql)
  # 返回sql查詢
  return sql

6 創建完整鏈

開發一個功能強大的函數,它能夠實現與數據庫的自然語言交互。該函數能夠接收用戶的查詢、數據庫的連接信息以及之前的聊天記錄,從而為用戶提供一個連貫且上下文相關的交互體驗。

def get_response(user_query: str, db: SQLDatabase, chat_history: list):
  sql_query = llm_query(user_query)

  template = """
  您是公司中經驗豐富的數據分析師。您正在與詢問公司數據庫問題的用戶進行交互。
  根據表架構、問題、SQL查詢和SQL響應,用自然語言編寫回答。

  對話歷史:{chat_history}
  用戶問題:{question}
  SQL響應:{response}
  """

  prompt = ChatPromptTemplate.from_template(template)

  # llm
  llm = ChatOllama(model="llama3",  temperature=0)

  chain = (
    RunnablePassthrough.assign(
        response=lambda vars: db.run(sql_query),
    )
    | prompt
    | llm
    | StrOutputParser()
  )

  return chain.invoke({
    "question": user_query,
    "chat_history": chat_history,
  })

7 構建Streamlit應用程序

創建Streamlit組件以存儲聊天歷史和管理用戶交互。

初始化數據庫:

# 初始化數據庫
db = init_database()
st.session_state.db = db
st.success("已連接到數據庫!")

處理用戶輸入:

user_query = st.chat_input("輸入一個問題...")
if user_query is not None and user_query.strip() != "":
    st.session_state.chat_history.append(HumanMessage(content=user_query))
    
    with st.chat_message("用戶"):
        st.markdown(user_query)
        
    with st.chat_message("AI"):
        response = get_response(user_query, st.session_state.db, st.session_state.chat_history)
        st.markdown(response)

8 測試應用程序

用幾個查詢來測試應用程序,以確保其能正常運行。

1)總銷售額:

  • Query: “What is the total sales?”

基于Llama 3和LangChain,使用自然語言進行SQL查詢-AI.x社區

2)銷售額Top 10

  • Query: “What are the top ten products by sales?”

基于Llama 3和LangChain,使用自然語言進行SQL查詢-AI.x社區

3)按國家/地區銷售情況:

  • Query: “Show me the sales by country.”

基于Llama 3和LangChain,使用自然語言進行SQL查詢-AI.x社區

LangChain和LLM的這種集成為數據分析打開了無數可能性,特別是對于特定的架構。用戶現在可以使用自然語言獲取答案,從而增強和補充現有的商業智能解決方案。

本文轉載自 ??AI科技論談??,作者: AI科技論談

收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 精品亚洲二区 | 精品国产视频 | 蜜桃视频成人 | 免费一级毛片 | 亚洲精品久久久9婷婷中文字幕 | 在线免费观看视频你懂的 | 草久久久 | 福利网站在线观看 | 一区免费 | 国产在线视频99 | 精品一区二区三区在线视频 | www.狠狠干 | 天天干在线播放 | 色五月激情五月 | 国产黄色av网站 | 成人18亚洲xxoo | 九九色九九| 91免费在线视频 | 97免费在线视频 | caoporn免费在线视频 | 福利精品在线观看 | 作爱视频免费观看 | 欧美视频一区二区三区 | 国产探花在线精品一区二区 | 自拍第一页| 中文在线一区 | 99看片网| www.99热这里只有精品 | 日韩精品一区二区三区在线观看 | 在线看成人av | 国产精品久久久久久久7电影 | 在线成人免费视频 | 婷婷久久综合 | 国产一区二区三区四区五区加勒比 | ririsao久久精品一区 | 免费特级黄毛片 | 久久成人综合 | 国产福利免费视频 | 亚洲欧美成人在线 | 色狠狠一区 | 国产不卡一区在线观看 |