Skip to content

Latest commit

 

History

History
252 lines (190 loc) · 6.94 KB

File metadata and controls

252 lines (190 loc) · 6.94 KB

LLM 工具

一個用於大型語言模型(LLM)和嵌入模型的綜合工具包,支持聊天、嵌入向量和重排功能,具備靈活的配置選項和多引擎支持。無論是處理同步還是異步調用,LLM 工具都能高效處理各種 AI 模型集成任務。

功能特性

  • LLM 聊天功能:與大型語言模型(如 GPT)進行交互,支持流式輸出和格式化響應
  • 嵌入模型:支持單句和多句嵌入向量生成,用於語義分析和檢索
  • 重排模型:根據查詢相似度對文檔進行排序,支持單句和多句輸入
  • 高度可配置:通過 YAML 配置文件靈活調整參數
  • 多引擎支持:支持 Azure OpenAI、本地模型和各種嵌入引擎
  • 異步支持:提供異步接口以提升性能
  • 記憶管理:內置聊天記憶管理,可自定義歷史長度
  • 響應緩存:可選的 LLM 響應緩存以提高效率

支持的模型

  • LLM 引擎:兼容 openai sdk 格式
  • 嵌入模型:m3e-base、bge-m3 及其他嵌入模型
  • 重排模型:bge-reranker-large 及其他重排模型

安裝

使用 pip

# 克隆倉庫
git clone https://github.com/LLMSystems/llm_tools.git
cd llm_tools

# 安裝包
pip install -e .

# 或者安裝開發依賴
pip install -e ".[dev]"

配置

1. 模型配置

基於 example_configs/models.yaml 創建 configs/models.yaml 文件並配置模型參數:

params:
    default:
        temperature: 0.2
        max_tokens: 1000
        top_p: 1
        frequency_penalty: 1.4
        presence_penalty: 0

LLM_engines:
    gpt-4o:
        model: "gpt-4o"
        azure_api_base: "your_azure_api_base_url"
        azure_api_key: "your_azure_api_key"
        azure_api_version: "your_azure_api_version"
    Qwen2-7B-Instruct:
        model: "Qwen2-7B-Instruct"
        local_api_key: "Empty"
        local_base_url: "http://localhost:8887/v1"
        translate_to_cht: true  # 可選:翻譯為繁體中文

embedding_models:
    m3e-base:
        model: "m3e-base"
        local_api_key: "Empty"
        local_base_url: "http://localhost:8887/v1"

reranking_models:
    bge-reranker-large:
        model: "bge-reranker-large"
        local_api_key: "Empty"
        local_base_url: "http://localhost:8887/v1"

2. 配置參數說明

  • DEFAULT:默認參數,包括 temperaturemax_tokenstop_pfrequency_penaltypresence_penalty
  • Azure OpenAI:配置 azure_api_baseazure_api_keyazure_api_version(注意:使用可能產生費用)
  • 本地模型:配置 local_api_keylocal_base_url
  • translate_to_cht:設為 True 時自動將結果翻譯為繁體中文

快速開始

基礎聊天使用

from llm_chat import LLMChat

# 初始化 LLM 聊天
llmchat = LLMChat(model="gpt-4o", config_path="./configs/models.yaml")

# 簡單聊天
response, history = llmchat.chat(query="你好,你怎麼樣?")
print(response)

# 帶歷史記錄的交互聊天
history = []
while True:
    user_input = input("您:")
    if user_input.lower() == "quit":
        break
    response, history = llmchat.chat(query=user_input, history=history)
    print(f"AI:{response}")

流式聊天

from llm_chat import LLMChat

llmchat = LLMChat(model="gpt-4o", config_path="./configs/models.yaml")

# 流式響應
for chunk in llmchat.chat(query="給我講個故事", stream=True):
    print(chunk, end="", flush=True)
print()

聊天記憶管理

from llm_chat import LLMChat
from memory import ChatMemory

# 初始化聊天記憶
system_prompt = "你是一個專業的助手,會用繁體中文回答問題。"
chat_memory = ChatMemory(system_prompt=system_prompt, max_len=1000)

llmchat = LLMChat(model="gpt-4o", config_path="./configs/models.yaml")

# 流式處理帶記憶
while True:
    user_input = input("您:")
    if user_input.lower() == "quit":
        break
    
    text = ''
    for chunk in llmchat.chat(query=user_input, history=chat_memory.get_history(), stream=True):
        text += chunk
        print(chunk, end="", flush=True)
    print()
    
    chat_memory.add_user_message(user_input)
    chat_memory.add_system_response(text)

嵌入向量和重排

import numpy as np
from embed_rerank_model import EmbeddingModel, RerankingModel

# 嵌入向量生成
embed_model = EmbeddingModel(embedding_model="m3e-base", config_path="./configs/models.yaml")
query_embedding = np.array(embed_model.embed_query("食物很美味。"))
print(f"嵌入向量形狀:{query_embedding.shape}")

# 文檔嵌入
documents = ["食物很棒。", "服務很優秀。", "氣氛很不錯。"]
doc_embeddings = embed_model.embed_documents(documents)
print(f"文檔嵌入:{len(doc_embeddings)} 個向量")

# 文檔重排
rerank_model = RerankingModel(reranking_model="bge-reranker-large", config_path="./configs/models.yaml")
query = "告訴我食物質量如何"
ranked_docs = rerank_model.rerank_documents(documents, query)
print(f"重排後的文檔:{ranked_docs}")

異步使用

import asyncio
from async_llm_chat import AsyncLLMChat

async def async_chat_example():
    # 初始化異步 LLM 聊天
    async_llm = AsyncLLMChat(model="gpt-4o", config_path="./configs/models.yaml")
    
    # 並發請求
    async def query_a():
        response, _ = await async_llm.chat(query="什麼是人工智能?")
        return response
    
    async def query_b():
        response, _ = await async_llm.chat(query="什麼是機器學習?")
        return response
    
    # 並發執行
    responses = await asyncio.gather(query_a(), query_b())
    for i, response in enumerate(responses):
        print(f"響應 {i+1}{response}")

# 運行異步示例
asyncio.run(async_chat_example())

其它功能

響應緩存

from async_llm_chat import AsyncLLMChat

# 啟用緩存
cache_config = {
    'enable': True,
    'cache_file': './cache/llm_cache.json'
}

async_llm = AsyncLLMChat(
    model="gpt-4o", 
    config_path="./configs/models.yaml",
    cache_config=cache_config
)

項目結構

llm_tools/
├── llm_chat.py              # 同步 LLM 聊天功能
├── async_llm_chat.py        # 異步 LLM 聊天功能  
├── embed_rerank_model.py    # 嵌入和重排模型
├── memory.py                # 聊天記憶管理
├── llm_response_cache.py    # 響應緩存功能
├── tutorial.py              # 教程示例
├── tutorial.ipynb           # Jupyter 筆記本教程
├── example_configs/         # 配置示例
│   └── models.yaml         # 模型配置模板
├── pyproject.toml          # 項目配置
└── README_zh-CN.md         # 本文件
└── README.md               # 本文件(英文)

示例和教程

詳細使用示例請參考:

  • tutorial.py - Python 腳本示例
  • tutorial.ipynb - 帶有交互式示例的 Jupyter 筆記本

License

This project is licensed under the MIT License.