精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于Agent的金融問答系統:Agent框架的構建 原創

發布于 2024-11-22 15:53
瀏覽
0收藏

前言

上一章【項目實戰】基于Agent的金融問答系統:RAG檢索模塊初建成,我們已經完成了RAG的基本流程,本章我將梳理Agent的運行框架以及介紹如何將RAG數據和SQL查詢數據進行整合,實現金融問題的自主回答。

核心問題

在進行Agent框架介紹之前,我們需要探討一個核心問題,即:??用戶輸入一個問題后,如何實現用戶問題的自動查詢(是SQL查詢還是RAG檢索)?? 。

意圖識別方案

關于這個問題,我們曾有一個方案如下:

基于Agent的金融問答系統:Agent框架的構建-AI.x社區

  • 對于用戶輸入的問題,是需要查詢SQL,還是需要去RAG檢索,我們通過一個意圖識別模塊來實現;
  • 意圖識別模塊會接受用戶的問題,然后將用戶的問題交給大模型去分辨;
  • 大模型我們提前做了sft微調(few-shot少樣本訓練也可以達到同樣效果),讓大模型知道什么樣的問題屬于SQL查詢問題,什么樣的問題屬于RAG檢索問題,例如:

# 準備few-shot樣例
  examples =[
{
"inn":"我想知道東方阿爾法優勢產業混合C基金,在2021年年度報告中,前10大重倉股中,有多少只股票在報告期內取得正收益。",
"out":"rag_question***我想知道東方阿爾法優勢產業混合C基金,在2021年年度報告中,前10大重倉股中,有多少只股票在報告期內取得正收益。"
},
{
"inn":"森赫電梯股份有限公司產品生產材料是什么?",
"out":"rag_question***森赫電梯股份有限公司產品生產材料是什么?"
},
{
"inn":"20210930日,一級行業為機械的股票的成交金額合計是多少?取整。",
"out":"agent_question***20210930日,一級行業為機械的股票的成交金額合計是多少?取整。"
},
...
  ]
  • 意圖識別結果之后,在代碼中通過if...else對識別結果進行不同類別的后續處理,如下:

if intent =="rag_question":
# 如果是RAG相關的問題
            result = self.rag.get_result(question=question)

return result

elif intent =="agent_question":
# 如果是Agent相關的問題
            result, result_list = self.agent.get_result(input=question)

return result
else:
# 其他類問題
            result = self.chat.invoke(input=question).content
return result

意圖識別方案的問題

這一方案有個核心問題:

  1. 如果意圖識別錯了,那么后續的處理就失效了,答案一定會錯;
  2. 我們固然可以給if...else...增加修正策略,比如:rag檢索不到那就去sql里再查一下....但是如果我們需求很復雜呢,這個策略編寫和維護成本也是指數級上升;
  3. 最為重要的一點是:這種方式我覺得一點都不智能!

這種方式還是傳統開發的思維:由開發者來清晰地控制著程序的每一步驟,大模型在其中只是扮演一個輔助工具角色(例如:做個問題分類)

但是,在我首次接觸Agent時,Agent的自主思考和自主行動給我留下了深刻的印象,所以我決定換一種方式:使用Agent來進行用戶問題的自主判斷、自主解決。

Agent框架

在【課程總結】day30:大模型之Agent的初步了解中,我們曾初步了解Agent框架如下:

基于Agent的金融問答系統:Agent框架的構建-AI.x社區

由上圖可知,如果我們給Agent賦予相應的工具,那么Agent依托于大模型的思考力,可以自主開展相應的planning以及action。因此,我們首要解決如何給Agent賦予相應的工具。

1、賦予Agent工具

因為我們的需求是查詢結構化的SQL數據庫和非結構化的RAG數據,所以我們需要給Agent賦予兩個工具,具體如下:

1.1、創建Agent的管理類

代碼文件及目錄:??app/finance_bot_ex.py??

import logging
import datetime
from langgraph.prebuilt import create_react_agent
from langchain.tools.retriever import create_retriever_tool
from langchain_community.utilities importSQLDatabase
from langchain_community.agent_toolkits importSQLDatabaseToolkit
from rag.rag importRagManager
import settings


classFinanceBotEx:
def__init__(self, llm=settings.llm, chat=settings.chat, embed=settings.embed):
        self.llm = llm
        self.chat = chat
        self.embed = embed
        self.tools =[]

        self.rag =RagManager(llm=llm, embed=embed)

1.2、創建數據庫SQL工具

為FinanceBotEx類添加

def init_sql_tool(self, path):
        # 連接數據庫
        db = SQLDatabase.from_uri(f"sqlite:///{path}")
        toolkit = SQLDatabaseToolkit(db=db, llm=self.llm)
        sql_tools = toolkit.get_tools()  # 工具

        return sql_tools

說明:

  • 上述函數中path用來傳入SQlite數據庫的路徑
  • 使用langchain封裝的 SQLDatabase 連接數據庫
  • 使用langchain封裝的 SQLDatabaseToolkit 得到SQL相關的工具,用以后續提供給Agent

1.3、創建RAG檢索工具

為FinanceBotEx類添加

def init_rag_tools(self):
        # 給大模型 RAG 檢索器工具
        retriever = self.rag.get_retriever()
        retriever_tool = create_retriever_tool(
            retriever=retriever,
            name="rag_search",
            description="按照用戶的問題搜索相關的資料,對于招股書類的問題,you must use this tool!",
        )
        return retriever_tool

說明:

  • 該函數中的??self.rag?? 是我們封裝的RAG管理類
  • 通過這個管理類的get_retriever()得到RAG的檢索器
  • 借助langchain封裝的create_retriever_tool(),將檢索器創建為一個工具:

工具的??name??? 為??rag_search??

工具的??description?? 用于告訴大模型,這個工具能做什么用(這一點很重要)

2、告訴Agent的工作邏輯:Prompt

為FinanceBotEx類添加

def create_prompt():
        system_prompt = """你是一位金融助手,可以幫助用戶查詢數據庫中的信息。
            你要盡可能的回答用戶提出的問題,為了更好的回答問題,你可以使用工具進行多輪的嘗試。

            # 關于retriever_tool工具的使用:
            1、你需要結合對檢索出來的上下文進行回答問題。
            2、如果你不知道答案,就說你不知道。請使用不超過三句話的簡潔回答。

            # 關于sql類工具的使用: 
            ## 工具使用規則                                     
            1、你需要根據用戶的問題,創建一個語法正確的SQLite查詢來運行,然后查看查詢的結果并返回答案。
            2、除非用戶指定了他們希望獲得的特定數量的示例,否則總是將查詢限制為最多5個結果。
            3、您可以按相關列對結果進行排序,以返回數據庫中最有趣的示例。
            4、永遠不要查詢指定表的所有列以避免查詢性能問題,你只查詢給定問題的相關列即可。
            5、你必須在執行查詢之前仔細檢查查詢。如果執行查詢時出現錯誤,請重新編寫查詢并重試。
            6、請勿對數據庫進行任何DML語句(INSERT,UPDATE,DELETE,DROP等)。

            ## 工具使用過程
            1、首先,你應該始終查看數據庫中的表,看看可以查詢什么,這一步驟很重要,注意不要跳過。
            2、然后,你應該查詢最相關表的schema。

            ## 工具使用注意事項:
            1、如果生成的SQL語句中,字段帶有英文括號(),請使用雙引號包裹起來,例如:收盤價(元) 雙引號包裹為 "收盤價(元)"。
            2、如果查詢過程中SQL語句有語法錯誤,減少查詢量,總體查詢次數應控制在15次以內。      

            # 關于你的思考和行動過程,請按照如下格式:
            問題:你必須回答的輸入問題
            思考:你應該總是考慮該怎么做
            行動:你應該采取的行動,應該是以下工具之一:{tool_names}
            行動輸入:行動的輸入
            觀察:行動的結果
            ... (這個思考/行動/行動輸入/觀察可以重復N次)
            思考: 我現在知道最終答案了
            最終答案:原始輸入問題的最終答案


            Begin!

            """
        return system_prompt

3、創建agent

在準備好相應的工具以及prompt之后,創建Agent并傳入提前準備好的工具和prompt。

為FinanceBotEx類添加

def init_agent(self):
# 初始化 RAG 工具
        retriever_tool = self.init_rag_tools()

# 初始化 SQL 工具
        sql_tools = self.init_sql_tool(settings.SQLDATABASE_URI)

# 創建系統Prompt提示語
        system_prompt = self.create_prompt()

# 創建Agent
        agent_executor = create_react_agent(
            self.chat,
            tools=[retriever_tool]+ sql_tools,
            state_modifier=system_prompt
)
return agent_executor

說明:

  • ??settings.SQLDATABASE_URI?? 是一個本地SQLite文件的路徑,我將它單獨維護在app/settings.py中,方便配置的修改。
  • 代碼文件:??app/settings.py????# 連接數據庫db文件的地址根據需要需要更換
    SQLDATABASE_URI = os.path.join(os.getcwd(), "app/dataset/dataset/博金杯比賽數據.db")?
    ?

4、驅動agent運行

為FinanceBotEx類添加

def handle_query(self, example_query):
# 流式處理事件
        events = self.agent_executor.stream(
{"messages":[("user", example_query)]},
            stream_mode="values",
)

# 打印流式事件的消息
for event in events:
            event["messages"][-1].pretty_print()

return event["messages"][-1].content

測試效果

在test_framework.py中增加測試函數如下:

# 測試 FinanceBotEx 主流程
deftest_financebot_ex():
from finance_bot_ex importFinanceBotEx
    llm, chat, embed = get_qwen_models()
    financebot =FinanceBotEx(llm=llm, chat=chat, embed=embed)

    example_query ="20210304日,一級行業為非銀金融的股票的成交量合計是多少?取整。"

    financebot.handle_query(example_query)

if __name__ =="__main__":
# test_rag()
# test_import()
    test_financebot_ex()

運行結果:

基于Agent的金融問答系統:Agent框架的構建-AI.x社區

基于Agent的金融問答系統:Agent框架的構建-AI.x社區

通過日志可以看到,Agent收到問題后,先去SQL數據庫中查詢看有哪些表可能有這些數據,通過返回的表信息自主實現對應的SQL語句,然后查詢結果后給出答案。

如果將上面的問題變成如下問題:

example_query = "根據聯化科技股份有限公司招股意見書,精細化工產品的通常利潤率是多少?"

運行結果:

基于Agent的金融問答系統:Agent框架的構建-AI.x社區

通過日志可以看到,Agent對于這個問題認為應該直接去RAG中搜索,所以直接調用工具rag_search。

內容小結

  • Agent的實現思想與傳統開發有著極大的不同:

     傳統開發對于程序的每個步驟都需要清晰地控制

     Agent的思想則是通過prompt告訴大模型的運行規則,然后由大模型自主思考和行動

  • 使用Agent時需要幾個步驟:
  • 創建相應的工具
  • 創建對應的prompt
  • 創建agent并賦予相應的工具和prompt
  • 通過agent的stream來處理輸入的問題

?

本文轉載自公眾號一起AI技術 作者:Dongming

原文鏈接:??https://mp.weixin.qq.com/s/mY2KUqZTm6a9Lkr-N8xRmA??

?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
標簽
收藏
回復
舉報
回復
相關推薦
成人一区二区三区仙踪林| 欧美一二三区| 在线观看亚洲欧美| 不卡中文字幕| 日韩一级高清毛片| 国产一区亚洲二区三区| 精品美女在线观看视频在线观看| 成人黄色小视频在线观看| 国产精品91一区| 欧美丰满艳妇bbwbbw| 国产精品一区高清| 欧美tk—视频vk| 久久久精品麻豆| 丁香影院在线| 亚洲欧洲av在线| 久久亚洲午夜电影| av免费观看在线| 日韩成人dvd| 国模精品视频一区二区三区| 亚洲女人毛茸茸高潮| 久久a爱视频| 91精品综合久久久久久| 午夜精品久久久内射近拍高清| 人人超在线公开视频| 中文文精品字幕一区二区| 精品一区在线播放| 黄色av免费观看| 激情图片小说一区| 国产99久久精品一区二区| 久久高清免费视频| 欧美.日韩.国产.一区.二区| 中日韩午夜理伦电影免费| 亚洲一区二区三区综合| 爱爱精品视频| 久久久综合视频| 国产精品麻豆视频| 精品蜜桃一区二区三区| 99免费在线视频| 日本三级亚洲精品| 欧美一区二区影院| 亚洲国产综合久久| 国产精品九九| 欧美激情成人在线视频| 欧美日韩精品在线观看视频| 97人人精品| 日韩在线视频观看正片免费网站| 亚洲av熟女国产一区二区性色| 亚洲最大在线| 亚洲天堂网站在线观看视频| 日本丰满少妇裸体自慰| 久久久久久久久久久久久久久久久久久久| 日韩午夜激情av| 自拍视频第一页| 亚洲一区网址| 欧美大胆一级视频| 91成人在线观看喷潮蘑菇| 亚洲超碰在线观看| 日韩精品一区二区三区视频在线观看 | 91麻豆国产视频| 麻豆成人在线观看| 成人精品视频99在线观看免费 | 精品国产1区2区3区| 成人做爰69片免费| 日韩极品在线| 亚洲色图17p| 亚洲高潮女人毛茸茸| 久久一区二区三区喷水| 久久人人爽亚洲精品天堂| 久久中文免费视频| 亚洲裸体俱乐部裸体舞表演av| 性欧美在线看片a免费观看| 中文字幕激情小说| 奇米影视一区二区三区| 成人在线视频网站| 人妻无码中文字幕| 久久精品人人做人人综合| 亚洲欧美99| 大桥未久在线播放| 色999日韩国产欧美一区二区| 国产又黄又猛又粗又爽的视频| 国产一区二区三区亚洲综合| 日韩欧美国产一二三区| 黄色短视频在线观看| 日韩精品免费一区二区在线观看 | 欧美老熟妇一区二区三区| 国产精品分类| 国产精品第七影院| 性欧美一区二区三区| 99久久精品免费看国产| 亚洲 日韩 国产第一区| 牛牛电影国产一区二区| 色综合激情五月| 国产精品久久久久野外| 国产成人三级| 欧美丰满少妇xxxxx| 亚洲精品一区二三区| 国产精品正在播放| 热re99久久精品国99热蜜月| 成人a在线视频免费观看| 日韩欧美国产成人| 日本一二三区在线| 久久不见久久见国语| 欧美理论片在线观看| 国产精品午夜一区二区| 成人丝袜18视频在线观看| 亚洲精品成人自拍| 午夜影视一区二区三区| 91精品在线免费| 国精产品一区二区三区| 黄色欧美成人| 亚洲综合av影视| 国产一级在线观看| 午夜精品久久久久久久久久久| 免费av不卡在线| 少妇一区二区视频| 午夜免费日韩视频| 国内精品国产成人国产三级| 国产精品网站在线观看| 午夜精品久久久内射近拍高清| 一本色道69色精品综合久久| 久久国产精品首页| 91丨porny丨在线中文| 国产性色一区二区| 九九九九免费视频| 欧美一级色片| 久久久这里只有精品视频| 国产乱码精品一区二区| 国产精品色噜噜| 久久精品午夜福利| 亚洲资源网你懂的| 2019av中文字幕| 涩涩视频免费看| 一区二区三区资源| 国产精品中文久久久久久| 国产精品久久久乱弄| 国产精品久久久久久久久久三级 | 狠狠综合久久av一区二区| 亚洲精品水蜜桃| 三级一区二区三区| 91日韩在线| 国产一区视频在线| 亚洲成人三级| 欧美久久久久久蜜桃| www.涩涩爱| 蜜桃免费网站一区二区三区| 色狠狠久久av五月综合|| 欧美三级网址| 一区二区欧美亚洲| 亚洲系列在线观看| 国产精品久久久久久久久动漫| 黄色一级二级三级| 久久国产亚洲精品| 91精品美女在线| 伊人电影在线观看| 精品91自产拍在线观看一区| 日本一级黄色录像| 91丝袜美腿高跟国产极品老师 | 中文字幕国产在线观看| 99麻豆久久久国产精品免费优播| 午夜免费福利小电影| 亚洲涩涩av| 国产精品欧美亚洲777777| jizzjizz在线观看| 91精品在线免费| 久久精品国产亚洲av无码娇色 | 国精产品一区一区| 久久66热偷产精品| 中国丰满熟妇xxxx性| 日本中文字幕在线一区| 国产精品电影网站| h视频在线免费观看| 精品噜噜噜噜久久久久久久久试看| 日本系列第一页| 日本一区二区动态图| 91亚洲免费视频| 激情综合激情| 日韩在线观看电影完整版高清免费| 精品亚洲a∨| 欧美美女操人视频| 欧美成人免费| 欧美精品久久一区二区三区| 久久精品国产亚洲av高清色欲| www国产成人免费观看视频 深夜成人网| youjizzxxxx18| 极品日韩av| 天天好比中文综合网| 国内不卡的一区二区三区中文字幕| 欧美激情一二三| 毛片免费在线观看| 日韩欧美一区二区不卡| 六月丁香婷婷综合| 亚洲乱码国产乱码精品精可以看 | 亚洲自拍偷拍色图| 在线观看欧美日韩电影| 理论片在线不卡免费观看| 五月色婷婷综合| 8x8x8国产精品| 国产精品人人人人| 一区av在线播放| 免费视频91蜜桃| 成人夜色视频网站在线观看| 中文av一区二区三区| 日韩视频中文| 欧美日韩一级在线| 精品国产123区| 国产偷国产偷亚洲高清97cao| 日韩美香港a一级毛片| 久久久久久综合网天天| 免费超碰在线| 在线观看亚洲视频| 手机福利小视频在线播放| 91精品欧美一区二区三区综合在 | 欧美成人三级在线| 波多野结衣家庭主妇| 五月天中文字幕一区二区| 乱h高h女3p含苞待放| 国产日韩欧美在线一区| 久久国产精品无码一级毛片| 国产成人免费在线视频| 潘金莲激情呻吟欲求不满视频| 日韩av一区二| 成人小视频在线看| 亚洲视频大全| 三上悠亚久久精品| 欧美先锋影音| 日本一道在线观看| 亚洲区综合中文字幕日日| 五月天丁香综合久久国产| 久久av综合| 老司机精品福利在线观看| 国产精品xxx在线观看| 99九九视频| 一本一道久久a久久| 97人人香蕉| 亚洲欧美日本国产| 成人av片网址| 久久综合另类图片小说| 国产精品一 二 三| 黄色美女久久久| 国产日韩二区| 欧美日韩一区二区三区四区不卡 | 欧美色区777第一页| 久久久蜜桃一区二区| 欧美性xxxxxx| 久久久久亚洲视频| 欧美日韩国产精品成人| 一级黄在线观看| 欧美一区二区三区四区五区| av网站免费大全| 日韩欧美久久久| 免费观看黄色av| 日韩av在线一区| 日韩在线观看视频网站| 亚洲精品美女视频| 九色视频在线播放| 在线观看欧美日韩国产| 免费黄色网页在线观看| 色综合久久88| 51漫画成人app入口| 欧美中文在线观看| 日韩一区精品| 亚洲xxxxx电影| 国产一区二区在线视频你懂的| 欧美第一黄网| 日韩黄色大片网站| 警花观音坐莲激情销魂小说| 亚洲理伦在线| 亚洲成人av免费看| 韩国三级在线一区| 无码精品一区二区三区在线播放| 国产亚洲美州欧州综合国| 国产白丝一区二区三区| 亚洲成av人片在线观看无码| 天天爱天天做天天爽| 69堂亚洲精品首页| 香蕉av一区二区三区| 在线观看欧美www| 久久香蕉av| 国产成人久久久| 亚洲精品国产九九九| 日本一区二区三区精品视频| 久久麻豆精品| 一本久道高清无码视频| 奇米影视7777精品一区二区| 粗大的内捧猛烈进出视频| 久久久久久久久一| 欧美日韩中文字幕在线观看| 一本到不卡精品视频在线观看| 国产精品爽爽久久| 国产视频自拍一区| 国产激情小视频在线| 日本久久久久亚洲中字幕| 国产精品99久久免费| 裸模一区二区三区免费| 亚洲乱码免费伦视频| 992kp快乐看片永久免费网址| 国产盗摄视频一区二区三区| 成人国产精品久久久网站| 亚洲二区在线观看| 国产又粗又黄又爽| 亚洲欧美日韩视频一区| 日本不卡影院| 成人精品视频99在线观看免费| 中文有码一区| 霍思燕三级露全乳照| 国产美女精品人人做人人爽| 亚洲色成人网站www永久四虎| 亚洲国产乱码最新视频| 国产精品一区二区三区在线免费观看| 亚洲欧美日韩国产成人| gogo久久| 99在线观看| 在线观看日韩| 91制片厂毛片| 久久久久久亚洲综合影院红桃| 国产精品99精品无码视| 欧美一区二区二区| 香港伦理在线| 国产精品视频久久久久| 亚洲国产最新| 国产免费成人在线| av午夜精品一区二区三区| 九九久久免费视频| 91精品国产综合久久久蜜臀粉嫩| av在线日韩国产精品| 国产精品久久久久久久av大片| 窝窝社区一区二区| 1024av视频| 99久久婷婷国产综合精品 | 欧美色综合网站| 久久经典视频| 欧美综合在线观看| 色橹橹欧美在线观看视频高清| 欧美又粗又长又爽做受| 成人涩涩免费视频| 欧美日韩中文视频| 欧美电影免费提供在线观看| 18视频在线观看网站| 成人免费视频观看视频| 午夜精品免费| 欧美一级片在线免费观看| 亚洲精品国产精品乱码不99| 国产草草影院ccyycom| 九九九久久国产免费| 亚洲一区二区免费在线观看| 成年人看的毛片| 91色综合久久久久婷婷| 中文字幕亚洲乱码熟女1区2区| 亚洲欧美日韩精品久久亚洲区| 日韩另类视频| 亚洲一区二区三区四区中文| 狠狠色狠狠色合久久伊人| 日本黄色小说视频| 亚洲а∨天堂久久精品9966| 97天天综合网| 日本午夜精品一区二区| 麻豆高清免费国产一区| 91九色丨porny丨极品女神| 日韩免费视频线观看| 欧美极品videos大乳护士| 欧美日韩精品综合| 免费的成人av| 黄页网站免费观看| 日韩av有码在线| 亚洲伦理影院| 在线一区日本视频| 成人爽a毛片一区二区免费| 探花视频在线观看| 日韩在线国产精品| 一区二区在线视频观看| 成人观看免费完整观看| 国产精品久99| 丁香六月色婷婷| 国产成人精品在线| 欧美淫片网站| 国产精品无码永久免费不卡| 欧美日韩三级视频| 国产精品一区hongkong| 日本在线观看一区二区三区| 国产最新精品免费| 国产精品男女视频| 欧美成人网在线| 久久不见久久见免费视频7| 久久久九九九热| 色综合久久中文字幕综合网 | 成人看的羞羞网站| 在线xxxxx| 欧美人伦禁忌dvd放荡欲情| h片在线观看| 亚洲欧洲精品一区二区| 丁香天五香天堂综合| 影音先锋黄色网址| 午夜精品在线视频| 久久久国产精品| 亚洲区免费视频| 精品久久久三级丝袜| 成人国产精品一区二区免费麻豆| 国产中文字幕乱人伦在线观看| 国产精品美女一区二区| 水莓100在线视频|