Skip to main content

A Python library for quickly building applications with large language models.

Project description

GPTS Builder

GPTS Builder 是一个高度模块化的 Python 库,专为快速构建和部署基于大型语言模型(如 GPT-3 或 GPT-4)的应用而设计。它提供了一系列工具,使开发者能够轻松管理会话、创建提示词模板、构建对话流程,并进行配置管理。

特点

  • 上下文管理器:有效管理对话状态,支持多种存储模式。
  • 提示词模板构建器:快速生成和管理提示词模板,提高对话生成的效率和质量。
  • 大模型对话构建器:继承自提示词模板构建器,提供高效的对话管理。
  • 配置管理器:灵活配置模型参数,包括模型名称和最大 Token 数量。
  • 存储模式支持:支持全局变量和 Redis 存储,确保灵活性和扩展性。

架构概览

GPTS Builder 采用模块化设计,主要包括以下四个核心组件:

  1. 上下文管理器:管理用户会话和状态,支持全局变量和 Redis 存储模式。
  2. 提示词模板构建器:构建和维护用于生成模型提示词的模板。
  3. 大模型对话构建器:基于提示词模板生成对话,支持快速部署和测试模型应用。
  4. 配置管理器:中心化管理所有模型和应用配置。

开发计划

功能 状态
上下文管理器
提示词模板构建器
大模型对话构建器
配置管理器
Redis 存储模式支持
全局变量存储模式
支持流式输出
知识库集成
GPTS缓存

知识库集成:将提供与大型知识库的集成,增强模型的应答能力。 GPTS缓存:为了提高响应速度和减少API调用成本,将实现请求结果的缓存机制。

快速开始

LLM 部分

大模型对话构建器

大模型对话构建器继承自提示词模板构建器,集成模板管理与对话生成的功能,支持复杂的对话流程控制,使得生成的对话更加自然和流畅。

可用类:

  • LLM: 大模型对话管理。
  • LLMAsync: 异步大模型对话管理。
from gpts_builder.builder import LLM
from gpts_builder.builder_async import LLMAsync
from gpts_builder.session_manager.storage.redis_storage_async import RedisStorageAsync

from gpts_builder.config import config_manager

from gpts_builder.util.logger import logger

import asyncio

"""
大语言模型的demo
"""

‘’‘python
# 查看所有模型的配置
configs = config_manager.list_models_config()
print(configs)
config_manager.base_url = "https://www.lazygpt.cn/api【可以改成自己的url,我这里使用的代理】"
config_manager.apikey = "lazygpt-XXXXXXXXXXXX"改成自己的apikey


async def llm_async_demo():
    """
    llm_async_demo 测试异步LLM的demo
    """
    ### example0: 初始化LLM(开启一轮对话)
    # 异步的session存储需要设置,目前只支持异步redis存储
    session_storage = RedisStorageAsync("redis://localhost:6379")
    llm = LLMAsync(model="gpt-3.5-turbo", session_storage=session_storage)
    # 设置系统提示词和用户输入
    await llm.set_system("你是一个AI助理").set_prompt("测试回复").build()

    ### example1: 测试一轮对话,返回所有结果
    # 获取非流式回复
    reply = await llm.chat_completions()
    print(f"Received reply {reply}")
    content = reply.get("choices")[0].get("message",{}).get("content") if reply.get("choices") else ""
    print(f"Received content {content}")

    ### example2: 测试一轮对话,流式返回所有结果(获取流式回复:流式返回为一个异步生成器,需要迭代生成)
    async for content in llm.chat_completions_stream():
        print(f"Received content: {content}")
    
    ### example3: 查看当前会话的历史消息
    session = llm.session
    print(f"Session messages: {session.to_json()}")


def llm_sync_demo():
    """
    llm_sync_demo 测试同步LLM的demo
    """
    ### example0: 初始化LLM(开启一轮对话)
    # session存储支持redis存储|全局变量存储,如果不传session_storage则默认使用全局变量存储
    llm = LLM(model="gpt-3.5-turbo")
    llm.set_system("这里填系统提示词").set_prompt("这里填提示词模板和参数或者内容").build()

    ### example1: 测试一轮对话,返回所有结果
    replay = llm.chat_completions()
    content = replay.get("choices")[0].get("message",{}).get("content") if replay.get("choices") else ""
    print(f"Received content: {content}")

    ### example2: 测试一轮对话,流式返回所有结果(流式返回为一个异步生成器,需要迭代生成)
    for content in llm.chat_completions_stream():
        print(f"Received content: {content}")

    ### example3: 查看当前会话的历史消息
    session = llm.session
    print(f"Session messages: {session.to_json()}")

    ### example4: 清除当前会话(如果不需要上下文管理,存储设置成全局变量存储,然后手动清除会话即可)
    llm.clear_session()
    

if __name__ == "__main__":
    # asyncio.run(llm_async_demo())
    llm_sync_demo()

数据检索增强模块测试代码

为什么要做检索增强(参考文档)

数据检索增强模块测试代码:为什么要做检索增强(https://platform.openai.com/docs/guides/prompt-engineering/strategy-use-external-tools)

可用类:

  • DatasetBuilder: 知识库管理(检索增强用)。
  • DatasetBuilderAsync 异步知识库管理(检索增强用)。
from gpts_builder.session_manager.storage.redis_storage import RedisStorage
from gpts_builder.session_manager.storage.redis_storage_async import RedisStorageAsync

from gpts_builder.config import config_manager

import asyncio

config_manager.base_url = "https://www.lazygpt.cn/api【可以改成自己的url,我这里使用的代理】"
config_manager.apikey = "lazygpt-XXXXXXXXXXXX"改成自己的apikey


def dataset_demo():
    """
    dataset_demo 检索增强数据集的demo
    """
    from gpts_builder.builder import DatasetBuilder
    from gpts_builder.util import PostgresVector
    # 使用知识库,知识库需要一个向量数据库(目前只支持pgvector)
    ### example1: 初始化向量数据库
    db_driver = PostgresVector(dbname="postgres", user="myuser", password="mypassword", host="localhost", port=5432)
    dataset_builder = DatasetBuilder(db_driver=db_driver)
    dataset_id = dataset_builder.create_dataset("测试知识库")

    ### example2: 根据id获取知识库详情
    dataset_details = dataset_builder.get_dataset(filters={dataset_builder.dataset_schema.id: dataset_id})
    print(f"dataset_details1: {dataset_details}")
    
    ### example3: 根据名称获取知识库详情
    dataset_details = dataset_builder.get_dataset(filters={dataset_builder.dataset_schema.name: "测试知识库"})
    print(f"dataset_details2: {dataset_details}")

    ### example4: 向知识库中增加数据【一个答案(内容)对应多个问题(索引)】
    res = dataset_builder.create_datas(dataset_id, "这是一个答案", ["问题1", "问题2"])
    print(f"datas: {res}")

    ### example5: 根据文本在库中查询相似度
    datas_similarity = dataset_builder.query_similarity(text="这是测试数据", dataset_ids=[1, 2, dataset_id])
    print(f"datas_similarity: {datas_similarity}")

    ### example6: 根据文本在库中正则匹配
    datas_regex = dataset_builder.query_regex(regex=".*问题.*", dataset_ids=[dataset_id])
    print(f"datas_regex: {datas_regex}")

async def dataset_asnyc_demo():
    """
    dataset_asnyc_demo 异步操作知识库模块
    """
    from gpts_builder.builder_async import DatasetBuilderAsync
    from gpts_builder.util import PostgresVectorAsync
    # 使用知识库,知识库需要一个向量数据库(目前只支持pgvector)
    db_driver = PostgresVectorAsync(dbname="postgres", user="myuser", password="mypassword", host="127.0.0.1", port=5432)
    dataset_builder = DatasetBuilderAsync(db_driver=db_driver)
    
    ### example1: 创建知识库
    dataset_id = await dataset_builder.create_dataset("测试知识库")

    ### example2: 通过名称获取知识库详情
    dataset_details = await dataset_builder.get_dataset(filters={dataset_builder.dataset_schema.id: dataset_id})

    ### example3: 根据名称获取知识库详情
    dataset_details = await dataset_builder.get_dataset(filters={dataset_builder.dataset_schema.name: "测试知识库"})
    print(f"dataset_details: {dataset_details}")

    ### example4: 向知识库中增加数据【一个答案(内容)对应多个问题(索引)】
    datas = await dataset_builder.create_datas(dataset_id, "这是一个答案", ["问题1", "问题2"])
    print(f"datas: {datas}")

    ### example5: 根据文本在库中查询相似度
    datas_similarity = await dataset_builder.query_similarity(text="这是测试文本", dataset_ids=[dataset_id])
    print(f"datas_similarity: {datas_similarity}")

    ### example6: 根据文本在库中正则匹配
    datas_regex = await dataset_builder.query_regex(regex="*问题*", dataset_ids=[dataset_id])
    print(f"datas_regex: {datas_regex}")


if __name__ == "__main__":
    #dataset_demo()
    asyncio.run(dataset_asnyc_demo())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gpts_builder-0.1.20.tar.gz (36.6 kB view details)

Uploaded Source

Built Distribution

gpts_builder-0.1.20-py3-none-any.whl (50.6 kB view details)

Uploaded Python 3

File details

Details for the file gpts_builder-0.1.20.tar.gz.

File metadata

  • Download URL: gpts_builder-0.1.20.tar.gz
  • Upload date:
  • Size: 36.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.10.13

File hashes

Hashes for gpts_builder-0.1.20.tar.gz
Algorithm Hash digest
SHA256 a15abcad8cb29d522c0efbd6229e1b8dadfe9bd18b207f1360e5c0acda521131
MD5 7d8e9d066624254cdd61641ef9b84254
BLAKE2b-256 04d60baa03177563792e17e19619985943a74f7b13f8aab38afb5d5f315f16cb

See more details on using hashes here.

File details

Details for the file gpts_builder-0.1.20-py3-none-any.whl.

File metadata

File hashes

Hashes for gpts_builder-0.1.20-py3-none-any.whl
Algorithm Hash digest
SHA256 871681c16338e30c19b7847eec6f4121e8aab06e1854a7a29d789fd61d959768
MD5 9139b7d37fb9113de6f82eafb63e5ea0
BLAKE2b-256 f4bf57e2871e292c0dadd2573a0ebd9df0ce4fa785152065b725528c390ec95a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page