1.Agent入门
LLM¶
LLM基础知识,参考LLM入门!
聊天模板¶
将多轮消息转化为单个prompt。 如下
conversation = [
{"role": "user", "content": "I need help with my order"},
{"role": "assistant", "content": "I'd be happy to help. Could you provide your order number?"},
{"role": "user", "content": "It's ORDER-123"},
]
将会被 SmolLM2转化为下面的格式。注意不同家的大模型,会有不同的模板。
<|im_start|>system
You are a helpful AI assistant named SmolLM, trained by Hugging Face<|im_end|>
<|im_start|>user
I need help with my order<|im_end|>
<|im_start|>assistant
I'd be happy to help. Could you provide your order number?<|im_end|>
<|im_start|>user
It's ORDER-123<|im_end|>
<|im_start|>assistant
其中还包括system提示。
Note
Base模型只是预测下一个token。经过在不同聊天模板上的微调,可以产生Instruct模型。在实际调用时一定要用和微调同样的模板。
使用模板¶
如下是SmolLM的模板简化版本,可以很容易地理解怎么从多轮对话生成单个prompt。
{% for message in messages %}
{% if loop.first and messages[0]['role'] != 'system' %}
<|im_start|>system
You are a helpful AI assistant named SmolLM, trained by Hugging Face
<|im_end|>
{% endif %}
<|im_start|>{{ message['role'] }}
{{ message['content'] }}<|im_end|>
{% endfor %}
在python里,可以调用某个模型的tokenizer.apply_chat_template
方法。
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceH4/zephyr-7b-beta")
tokenized_chat = tokenizer.apply_chat_template(
messages,
tokenize=True, # 进行分词,这样直接就可以输入模型
add_generation_prompt=True, #加入系统prompt,比如你是个好模型,帮别人……
continue_final_message=False, #接着最后一条消息生成。注意一般模型不支持连续
return_tensors="pt"
)
Warning
add_generation_prompt=True
会默认开启新消息,即在模板最后加入<|assistant|>
标示从新生成一条模型回答。
这与continue_final_message=True
矛盾,所以不要同时将二者设为true。
huggingface的默认pipeline,会设置add_generation_prompt=True
,除非聊天中最后一条消息是<|assistant|>
,
因为一般LLM不支持assistant连发两条消息,so这时会设置continue_final_message=True
。
工具¶
工具是赋予 LLM 的函数,以下是 AI 智能体中常用的工具示例:
工具类型 | 描述 |
---|---|
网络搜索 | 允许智能体从互联网获取最新信息 |
图像生成 | 根据文本描述生成图像 |
信息检索 | 从外部源检索信息 |
API 接口 | 与外部 API 交互(GitHub、YouTube、Spotify 等) |
合格的工具应包含:
- 函数功能的文本描述
- 可调用对象(执行操作的实体)
- 带类型声明的参数
- (可选)带类型声明的输出
提供工具¶
在系统prompt里面告诉LLM有哪些工具。为确保有效性,必须精准描述:
- 工具功能
- 预期输入格式
利用python,可以使用装饰器或者类来定义工具,然后自动化构建工具描述,比如
@tool
def calculator(a: int, b: int) -> int:
"""Multiply two integers."""
return a * b
print(calculator.to_string())
工具名称: calculator,描述:将两个整数相乘。参数:a: int, b: int,输出:int
使用工具¶
智能体在一个持续的循环中工作:思考 (Thought) → 行动 (Act) 和观察 (Observe)。
- 思考 (Thought):智能体的大语言模型 (LLM) 部分决定下一步应该是什么。
- 一步步来,通过prompt让大模型把任务分解为子任务
- 行动 (Action):智能体通过使用相关参数调用工具来采取行动。
- JSON 智能体:要执行的动作以 JSON 格式指定。
- 代码智能体: 智能体编写代码块,由外部解释执行。
-
一个关键点:是在动作完成时能够停止生成新的token。
-
观察 (Observation):模型对工具的响应进行反思。
这里有一个手搓演示Agent如何使用工具的notebook
例子¶
我克隆了huggingface space,然后
- 在个人设置里创建一个Read Token
- 在克隆的项目的设置里,Variables and secrets处添加这个token,名字为hf_token(和下面对的上就行)
- 在app.py中,添加
import os
- 在app.py中,在
model_id='xxxx'
下面,即调用LLM的参数中,添加token=os.getenv('hf_token'),
这样就可以从huggingface调用该模型。
以上解决方法来自HF讨论区
是挺神奇的,知道自己用工具。