更新时间:2024-08-29 GMT+08:00
分享

LLMs(语言模型)

LLMs模块用于对大语言模型API的适配封装,提供统一的接口快速地调用盘古、GALLERY三方模型等模型API。

  • 初始化:根据相应模型定义LLM类,如使用盘古LLM为: LLMs.of("pangu")。
    from pangukitsappdev.api.llms.factory import LLMs
    # 初始化盘古LLM
    llm_api = LLMs.of("pangu")
  • 基础问答:基础的模型文本问答(temperature等参数采用模型默认的设置)。
    llm_api.ask("你是谁?").answer
  • 自定义参数问答:自定义设置如temperature等参数,获得对应的效果。
    from pangukitsappdev.api.llms.llm_config import LLMConfig, LLMParamConfig
    from pangukitsappdev.api.llms.factory import LLMs
    # 设置模型参数,temperature为0.9
    llm_config = LLMConfig(llm_param_config=LLMParamConfig(temperature=0.9))
    
    # 初始化带参数的盘古LLM
    pangu_api = LLMs.of("pangu", llm_config)
    pangu_api.ask("写一篇五言律诗").answer
    支持调整的参数解释:
    max_tokens: Optional[int]           # 完成时要生成的令牌的最大数量
    temperature: Optional[float]        # 调整随机抽样的程度,温度值越高,随机性越大; 范围见模型API规范
    top_p: Optional[float]              # 核采样值, 和temperature不同时配置
    presence_penalty: Optional[float]   # 存在惩罚,增加模型谈论新主题的可能性,范围见具体模型API规范
    frequency_penalty: Optional[float]  # 频率惩罚,降低模型重复的可能性,提高文本的多样性、创新性(从参数盘古大模型暂不支持)
    stream: Optional[bool]              # 是否开启流式调用
  • 流式问答(只适用于ask接口):模型问答,开启流式效果,响应消息流式打印。
    import sys
    from pangukitsappdev.api.llms.factory import LLMs
    from pangukitsappdev.api.llms.llm_config import LLMConfig, LLMParamConfig
    # 设置模型参数,stream为true
    llm_config = LLMConfig(llm_param_config=LLMParamConfig(stream=True))
    # 盘古LLM
    pangu_llm = LLMs.of("pangu", llm_config)
    
    tokens = pangu_llm.ask("写一篇200字的散文")
    
    actual_tokens = []
    for token in tokens:
        sys.stdout.write(token)
        sys.stdout.flush()
        actual_tokens.append(token)
  • 流式问答:支持skill和agent流式输出。
    import sys
    from pangukitsappdev.api.llms.factory import LLMs
    from pangukitsappdev.api.llms.llm_config import LLMConfig, LLMParamConfig
    from pangukitsappdev.callback.StreamCallbackHandler import StreamCallbackHandler
    from typing import Dict, Any, List
    from langchain_core.messages import BaseMessage
    from langchain_core.outputs import LLMResult
    
    # 继承StreamCallbackHandler方法,实现流式输出
    class TextStreamCallBack(StreamCallbackHandler):
        def __init__(self):
            super().__init__()
    
        def on_chat_model_start(
            self,
            serialized: Dict[str, Any],
            messages: List[List[BaseMessage]],
            **kwargs: Any,
        ) -> Any:
            pass
    
        def on_llm_new_token(
            self,
            token: str,
            **kwargs: Any,
        ) -> Any:
            sys.stdout.write(token)
            sys.stdout.flush()
    
        def on_llm_end(
            self,
            response: LLMResult,
            **kwargs: Any,
        ) -> Any:
            pass
    
    # 设置模型参数,stream为true
    llm_config = LLMConfig(llm_param_config=LLMParamConfig(stream=True))
    # 盘古LLM
    pangu_llm = LLMs.of("pangu", llm_config)
    pangu_llm.set_callback(TextStreamCallBack())
    tokens = pangu_llm.ask("写一篇200字的散文")
    for token in tokens:
        pass
  • 多轮对话问答:传递历史问答记录,实现多轮对话问答能力,同时支持自定义参数问答、流式问答。
    from pangukitsappdev.api.llms.base import ConversationMessage, Role
    from pangukitsappdev.api.llms.factory import LLMs
    
    
    messages = [ConversationMessage(role=Role.SYSTEM, content="你是一个乐于助人的助手"),
                ConversationMessage(role=Role.USER, content="北京有什么好玩的地方"),
                ConversationMessage(role=Role.ASSISTANT, content="长城"),
                ConversationMessage(role=Role.USER, content="具体介绍一下")]
    pangu_llm = LLMs.of("pangu", llm_config)
    pangu_llm.ask(messages).answer
  • 带人设的问答:支持在LLM配置项中设置人设,在LLM问答时系统会自动加上该人设,同时支持以上问答功能(暂不支持GALLERY三方模型)。
    import sys
    from pangukitsappdev.api.llms.factory import LLMs
    from pangukitsappdev.api.llms.llm_config import LLMConfig, LLMParamConfig
    
    llm_config = LLMConfig()
    llm_config.llm_module_config.system_prompt = "你是华为开发的AI助手"
    # 盘古LLM
    pangu_llm = LLMs.of("pangu", llm_config)
    
    answer = pangu_llm.ask("你是谁")

相关文档