LLM 引导
一个用于引导大型语言模型(LLM)回答朝向特定主题/主体的Python模块,并增强其能力(例如,使其更频繁地对棘手的逻辑谜题给出正确回答)。
这是一个实用工具,通过在大型语言模型(LLM)的不同层添加引导向量来使用激活工程。
它应与transformers库一起使用。
演示
Google Colab演示: https://colab.research.google.com/github/Mihaiii/llm_steer/blob/main/demo/llm_steer_demo.ipynb
基本用法
安装: pip install llm_steer
然后使用:
from llm_steer import Steer
steered_model = Steer(model, tokenizer)
在模型的特定层上添加具有给定系数和文本的引导向量。 系数也可以为负值。
steered_model.add(layer_idx=20, coeff=0.4, text="logical")
获取所有已应用的引导向量:
steered_model.get_all()
移除所有引导向量以恢复到初始模型:
steered_model.reset_all()
高级用法
所谓的"高级用法"涉及更改两个参数("try_keep_nr"和"exclude_bos_token")的默认值,根据我的实验,这几乎总是会导致LLM输出无意义的内容。在极少数情况下,当LLM输出的文本确实有意义时,基本用法提供更高质量的输出。
更多信息将在单独的文件中提供。
问答
问:llm_steer与在系统提示中提及你想要的内容有什么区别?
答:我将llm_steer视为增强器。它可以与系统提示一起使用。
问:如何确定要使用的最佳参数?
答:我没有具体方法;这全靠试错。我建议从小系数开始,然后慢慢增加。
问:支持哪些模型?
答:我在多种架构上进行了测试,包括LLaMa、Mistral、Phi、StableLM。 请记住,llm_steer旨在与HuggingFace的transformers库一起使用,所以它不适用于GGUF等格式。
问:我应用了引导向量,但LLM输出无意义内容。我该怎么办?
答:尝试降低系数值或选择另一层。
问:我可以在同一层添加多个引导向量吗?我可以在多个层上添加相同的引导向量吗?我可以添加带有负系数的引导向量吗?
答:可以,而且请尽管尝试。llm_steer是为实验而构建的。 查看Colab中的示例:https://colab.research.google.com/github/Mihaiii/llm_steer/blob/main/demo/llm_steer_demo.ipynb
问:我可以使用引导向量来增强角色扮演特征吗(例如,使角色更有趣或更自负)?
答:我相信这是可能的,但我还没有得到好的结果。我正在考虑进行更深入的测试,可能会为此撰写一个新的笔记本。
问:我可以使用负向引导向量来强制它不说"作为一个AI语言模型"吗?
答:可以。
致谢/感谢
- DL Explorers的激活工程视频,该视频讨论了一篇文章和他制作的colab。视频中提到的资源是llm_steer的起点。
- Gary Bernhardt的出色面向程序员的Python课程。我需要一个能帮助我学习Python基础知识而不把我当成开发新手对待的课程(大多数基础教程都这样对待他们的观众)。
- Andrej Karpathy的GPT现状视频。我一直想做一个开源项目,但我之前想到的每个想法都已经有相应的仓库了。不过在LLM工具方面确实还有机会!