跳转至

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有哪些工具。为确保有效性,必须精准描述:

  1. 工具功能
  2. 预期输入格式

利用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)

  1. 思考 (Thought):智能体的大语言模型 (LLM) 部分决定下一步应该是什么。
  2. 一步步来,通过prompt让大模型把任务分解为子任务
  3. 行动 (Action):智能体通过使用相关参数调用工具来采取行动。
  4. JSON 智能体:要执行的动作以 JSON 格式指定。
  5. 代码智能体: 智能体编写代码块,由外部解释执行。
  6. 一个关键点:是在动作完成时能够停止生成新的token

  7. 观察 (Observation):模型对工具的响应进行反思。

这里有一个手搓演示Agent如何使用工具的notebook

例子

我克隆了huggingface space,然后

  1. 在个人设置里创建一个Read Token
  2. 在克隆的项目的设置里,Variables and secrets处添加这个token,名字为hf_token(和下面对的上就行)
  3. 在app.py中,添加import os
  4. 在app.py中,在model_id='xxxx'下面,即调用LLM的参数中,添加token=os.getenv('hf_token'),这样就可以从huggingface调用该模型。

以上解决方法来自HF讨论区

是挺神奇的,知道自己用工具。

image-20250331224505884