使用transformers.agents构建Gradio UI(2)——定义大模型引擎Engines

本系列文章目录如下:

  1. 《使用transformers.agents构建Gradio UI(1)——代理概念、类型和构建方法》
  2. 《使用transformers.agents构建Gradio UI(2)——定义大模型引擎Engines》
  3. 《使用transformers.agents构建Gradio UI(3)——创建和使用工具Tools》
  4. 《使用transformers.agents构建Gradio UI(4)——系统提示system prompt》
  5. 《使用transformers.agents构建Gradio UI(5)——其它设置》
  6. 《使用transformers.agents构建Gradio UI(6)——通过transformers.agents构建Gradio UI》

本篇摘要

本部分章开始使用代理方式构建用户界面,包括三种代理方式:transformers.agents、langchain agents和langgraph。因为Agents作为连接各大模型和工具的桥梁,是打通人工通用智能(AGI)的最后一公里,对从业者和人工智能行业都是至关重要的一环,所以文章重点放在Agents智能体的原理及应用步骤拆解,然后才是通过Gradio构建UI。作者为此阅读了大量文献,以尽量阐述清楚智能代理,请读者不吝三连和评论,共同进步变强。

12. 使用transformers.agents构建Gradio UI

Gradio的组件Chatbot原生支持显示中间思考过程和工具使用情况(参考其参数metadata用法),这使得它非常适合为LLM Agent、思维链(Chain-of-Thought, CoT)或推理演示创建用户界面,本章将展示如何使用gr.Chatbot和gr.ChatInterface来显示transformers.agents代理的思考过程和工具使用情况。

本章讲述如何使用transformers.agents构建Gradio UI,内容包括代理概念类型和构建、定义大模型引擎Engines、创建和使用Tools、系统提示、其它设置和使用transformers.agents构建Gradio UI。关于库transformers的介绍请参考Hugging Face章节中的六大工具库实战。

12.2 定义大模型引擎Engines

我们可以自由创建和使用用于代理框架的引擎Engines,但需要满足以下条件:

  • 它遵循输入消息的消息格式(List[Dict[str, str]]),并返回一个字符串;
  • 它在传入的参数stop_sequences指定的序列处停止生成输出。

下面就来了解下四种不同的创建引擎方法:模型函数llm_engine、TransformersEngine、HfApiEngine和HfEngine,请注意区分它们适用的场景。

12.2.1 引擎函数:llm_engine

我们可以通过定义一个接受消息列表并返回文本的函数llm_engine来构建LLM引擎,这个可调用对象还需要接受一个stop参数以指示何时停止生成。

from huggingface_hub import login, InferenceClient

login("<YOUR_HUGGINGFACEHUB_API_TOKEN>")

client = InferenceClient(model="meta-llama/Meta-Llama-3-70B-Instruct")

def llm_engine(messages, stop_sequences=["Task"]) -> str:
    response = client.chat_completion(messages, stop=stop_sequences, max_tokens=1000)
    answer = response.choices[0].message.content
    return answer

此外,llm_engine还可以接受一个grammar参数。如果在代理初始化时指定了grammar,这个参数将连同初始化时定义的grammar一起传递给llm_engine的调用,以实现受约束的生成,从而强制代理生成格式正确的输出。

12.2.2 TransformersEngine类

为了方便起见,我们可以添加一个TransformersEngine,它通过预初始化的Pipeline作为输入实现上述功能,或可选的使用model_id,以便使用transformers在本地机器上运行推理。示例代码如下:

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, TransformersEngine

model_name = "HuggingFaceTB/SmolLM-135M-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
engine = TransformersEngine(pipe)
engine([{"role": "user", "content": "Ok!"}], stop_sequences=["great"])
# 输出
"What a "

12.2.3 HfApiEngine类

由于代理行为通常需要更强的模型,如Llama-3.1-70B-Instruct,这些模型目前较难在本地运行,因此我们还提供了HfApiEngine类,HfApiEngine是一个封装了Hugging Face Inference API客户端的引擎,即在底层初始化了一个huggingface_hub.InferenceClient,用于执行大语言模型(LLM)的调用。

该引擎通过Hugging Face的推理API与语言模型进行通信,它可以在无服务器模式(serverless)下使用,也可以与专用端点(dedicated endpoint)一起使用,并支持诸如停止序列(stop sequences)和语法自定义(grammar customization)等功能。程序中甚至可以留空llm_engine参数,默认情况下会创建一个HfApiEngine。示例代码如下:

from transformers import HfApiEngine

llm_engine = HfApiEngine(model="meta-llama/Meta-Llama-3-70B-Instruct")

12.2.4 HfEngine类

对于本地部署的具有Inference API的LLM,我们还可以直接使用包中提供的 HfEngine 类来获取一个调用我们自己的Inference API的LLM引擎,示例代码如下:

from transformers.agents import HfEngine

llm_engine = HfEngine("meta-llama/Meta-Llama-3-70B-Instruct")

参考文献

  1. Gradio - guides - Chatbots
  2. License to Call: Introducing Transformers Agents 2.0
  3. Hugging Face - Transformers - Agents and tools
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值