MLflow akasha也可以利用MLflow來保存執行紀錄,您需要自行建立MLflow server。 並將tracking server的url放在程序的同一目錄下的 .env 文件,TRACKING_SERVER_URI= {YOUR_TRACKING_SERVER_URI}。
1 2 3 ##.env file TRACKING_SERVER_URI= YOUR_TRACKING_SERVER_URI
在創建了 .env 文件之後,您可以使用 record_exp 來設置實驗名稱,它將自動記錄實驗指標和結果到 mlflow 服務器。
1 2 3 4 5 6 7 8 9 10 11 12 import akasha import os from dotenv import load_dotenv load_dotenv() os.environ["OPENAI_API_KEY"] = "your openAI key" data_source = "doc/" prompt = "「塞西莉亞花」的花語是什麼? 「失之交臂的感情」 「赤誠的心」 「浪子的真情」 「無法挽回的愛」" exp_name = "exp_akasha_rag" ak = akasha.RAG(record_exp=exp_name) response = ak.(data_source, prompt)
在你指定的實驗名稱中,可以看到不同次實驗的紀錄,每個紀錄的名稱是embedding, search type and model name的組合
你也可以直接比較不同次實驗的結果
call_model 若要呼叫語言模型,可以使用輔助函數call_model
1 2 3 4 5 6 7 8 9 10 11 12 import akashaimport akasha.helper as ahfrom akasha.utils.prompts.gen_prompt import format_sys_promptsystem_prompt = "用中文回答" prompt = "五軸是什麼?" model_obj = ah.handle_model("openai:gpt-e3.5-turbo" , False , 0.0 ) input_text = format_sys_prompt(system_prompt, prompt, "gpt" ) response = ah.call_model(model_obj, input_text)
call_stream_model 若要呼叫語言模型即時回答,可以使用輔助函數call_stream_model
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import akashaimport akasha.helper as ahfrom akasha.utils.prompts.gen_prompt import format_sys_promptsystem_prompt = "用中文回答" prompt = "五軸是什麼?" model_obj = ah.handle_model("openai:gpt-e3.5-turbo" , False , 0.0 ) input_text = format_sys_prompt(system_prompt, prompt, "gpt" ) streaming = ah.call_stream_model(model_obj, input_text) for s in streaming: print (s)
call_batch_model 如果你有大量不需要連貫的推理需求,可以使用akasha.helper.call_batch_model 來進行批量推理來提升速度。
1 2 def call_batch_model(model: LLM, prompt: List[str], system_prompt: Union[List[str], str] = "") -> List[str]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import akasha.helper as ahfrom akasha.utils.prompts.gen_prompt import default_doc_grader_promptmodel_obj = ah.handle_model("openai:gpt-3.5-turbo" , False , 0.0 ) SYSTEM_PROMPT = default_doc_grader_prompt() documents = ["Doc1..." , "Doc2..." , "Doc3..." , "Doc4..." ] question = "五軸是什麼?" prompts = ["document: " + doc +"\n\n" + "User Question: " + question for doc in documents] response_list = ah.call_batch_model(model_obj, prompt, SYSTEM_PROMPT)
如果你想強制使語言模型輸出符合JSON格式的回答,可以使用 call_JSON_formatter ,會轉換語言模型的輸出為字典或字典串列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import akasha.helper as ahfrom pydantic import BaseModelPROMPT3 = """ openai_model = "openai:gpt-3.5-turbo" # need environment variable "OPENAI_API_KEY" gemini_model="gemini:gemini-1.5-flash" # need environment variable "GEMINI_API_KEY" anthropic_model = "anthropic:claude-3-5-sonnet-20241022" # need environment variable "ANTHROPIC_API_KEY" huggingface_model = "hf:meta-llama/Llama-2-7b-chat-hf" #need environment variable "HUGGINGFACEHUB_API_TOKEN" to download meta-llama model qwen_model = "hf:Qwen/Qwen2.5-7B-Instruct" quantized_ch_llama_model = "hf:FlagAlpha/Llama2-Chinese-13b-Chat-4bit" taiwan_llama_gptq = "hf:weiren119/Taiwan-LLaMa-v1.0-4bits-GPTQ" mistral = "hf:Mistral-7B-Instruct-v0.2" mediatek_Breeze = "hf:MediaTek-Research/Breeze-7B-Instruct-64k-v0.1" """ model_obj = ah.handle_model("openai:gpt-4o" , False , 0.0 ) class Model_Type (BaseModel ): model_type: str model_name: str json_response = ah.call_JSON_formatter(model_obj, PROMPT3, keys=Model_Type) print (json_response)
計算token數量 Tokenizer.compute_tokens ,此函數回傳該語言模型輸入的文字所需要的token數量get_doc_length ,此函數使用jieba計算字串長度sim_to_trad ,此函數將字串簡轉繁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import akasha.helper as ahtext = "你是一個歷史學家詳細介紹札幌的歷史" model = "openai:gpt-3.5-turbo" num_tokens = ah.myTokenizer.compute_tokens( text=text, model_id=model) print (num_tokens)doc_length = ah.get_doc_length(TEXT) ret = ah.sim_to_trad(TEXT)
從字串中取出dictionary extract_json 將字串中的json格式轉成字典,若找不到則回傳None
1 2 3 4 5 6 7 8 9 10 11 import akasha.helper as ahTEXT2 = """工業4.0是甚麼? { "title": "工業4.0", "description": "工業4.0是一場製造業的數位轉型,融合了物聯網、人工智慧與自動化技術,提升生產效率與靈活性。" } """ text_dict = ah.extract_json(TEXT2)
相似度分數 此函式利用bert, rouge, llm計算兩字串的相似度分數(0~1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import akasha.helper as ahDEFAULT_MODEL = "openai:gpt-4o" rf1 = """工業4.0是指智慧與互聯的生產系統,旨在感知、預測物理世界並與之互動,以便即時做出支持生產的決策。這一概念最早於2011年在漢諾威工業博覽會上提出,並被 納入德國、美國、中國等國家的高科技產業發展策略中。工業4.0的核心在於利用物聯網、人工智慧、大數據等技術,將生產從自動化提升到智慧化,實現更高效的生 產管理和決策。""" rf2 = """工業 4.0 是一種智慧與互聯的生產系統,旨在感知、預測物理世界並與之互動,以便即時做出支持生產的決策。 簡單來說,它利用像是物聯網、AI、大數據和雲端等技術,讓製造業更加智能化和自動化。 """ bert_score = ah.get_bert_score(rf1, rf2) rouge_score = ah.get_rouge_score(rf1, rf2) llm_score = ah.get_llm_score(rf1, rf2, DEFAULT_MODEL)