在人工智能和自然语言处理领域,大型语言模型(LLM)的兴起为各行各业带来了巨大变革。然而,如何有效地评估和优化这些模型的输出一直是一个挑战。为了解决这个问题,来自哈佛大学人机交互实验室的研究人员开发了ChainForge - 一个开源的可视化工具包,旨在简化提示词工程及评估测试的过程。
核心功能
ChainForge 的设计理念是提升提示工程和 LLM 评估的直观性和效率。其主要功能包括:
-
多模型同时查询:用户可以同时向多个大模型发送请求,快速对比不同模型的效果。
-
跨模型比较:支持在不同提示排列、模型和模型设置之间比较响应质量,帮助用户为特定用例选择最佳提示词和模型。
-
评估指标设置:用户可以设置评估的函数,并支持可视化展示评估结果。
-
多会话管理:支持跨模板参数和聊天模型进行多个对话,用户不仅可以模板化提示,还可以模板化后续的聊天消息。
-
可视化分析:提供直观的可视化工具,如用于数值指标的分组箱线图和用于布尔指标的直方图,帮助用户更好地理解评估结果。
安装方法
推荐在python venv虚拟环境中安装.
pip install chainforge
启动方式:
执行 chainforge serve
Serving Flask server on localhost on port 8000...
* Serving Flask app 'chainforge.flask_app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://localhost:8000
然后在 Chrome、Firefox或Edge 浏览器中打开 http://localhost:8000
添加千帆大模型
import os
import qianfan
import json
from chainforge.providers import provider
os.environ["QIANFAN_ACCESS_KEY"] = ""
os.environ["QIANFAN_SECRET_KEY"] = ""
COHERE_SETTINGS_SCHEMA = {
"settings": {
"temperature": {
"type": "number",
"title": "temperature",
"description": "温度.",
"default": 0.80,
"minimum": 0,
"maximum": 1.0,
"multipleOf": 0.01,
},
"system": {
"type": "string",
"title": "system",
"description": "系统人设.",
"default": "",
},
"disable_search": {
"type": "boolean",
"title": "disable_search",
"description": "是否强制关闭实时搜索功能.",
"default": True,
},
},
"ui": {
"temperature": {
"ui:help": "Defaults to 0.80. 较高的数值会使输出更加随机,而较低的数值会使其更加集中和确定",
"ui:widget": "range"
},
"system": {
"ui:widget": "textarea"
},
"disable_search": {
"ui:widget": "radio"
}
}
}
@provider(name="QIANFAN",
emoji="🖇",
models=list(qianfan.ChatCompletion().models()),
settings_schema=COHERE_SETTINGS_SCHEMA,
)
def QianfanCompletion(prompt: str, model: str, chat_history=None, temperature: float = 0.80, **kwargs) -> str:
chat_comp = qianfan.ChatCompletion()
print(f"Calling qianfan model {model} with prompt '{prompt}'...")
messages = []
if chat_history:
for item in chat_history:
role = item['role']
content = item['content']
if role != 'user':
content = json.loads(content.lstrip('\\').replace('\\{', '{').replace('\\}', '}')).get('result')
messages.append({"role": role, "content": content})
messages.append({"role": "user", "content": prompt})
print(f"messages: {messages}")
resp = chat_comp.do(model=model, messages=messages, temperature=temperature, **kwargs)
result = resp['body']
# 格式化历史消息,一并输出到结果中
last_text = [f"{'user' if item['role'] == 'user' else model}: {item['content']}" for item in messages]
result['history'] = '\n\n'.join(last_text) + f"\n\n{model}: {resp['body']['result']}"
return json.dumps(result, ensure_ascii=False)
上述python内容保存为文件拖入即可
快速使用
Chainforge可以很方便的通过可视化的方法编辑工作流
示例:对比ERNIE3.5和ERNIE 4.0在同一提示词场景下的效果
主要支持的节点如下:
- Tabular Data Node
支持导入excel文件进行批量测试,选择对应的列作为参数传入到prompt中
- TextFields Node
文本输入,支持同时输入多个文本内容传入到prompt
- Prompt Node
提示词节点,提示词支持变量,变量使用{}表示,如果提示词中{}需要转义,使用 \ 即可
可以选择多个模板同时执行
运行完成后,点击Inspect responses 即可查看结果
- Inspect Node
查看结果,支持手动标注结果及导出execl
Processor Node
代码处理节点,支持编写代码对输入输出进行处理,例如对response提取指定参数等
示例:对响应内容的格式进行处理,只提取结果等。
Evaluator Node
评估节点,支持编写JS、Python代码执行对比评估,可以根据自身需求定制评估函数,例如相似度计算、格式校验等等,代码也是本地环境中执行,可以按需在自己的环境中安装第三方库。
示例:对输出的文本长度进行比较,可以很直观的对比不同模型的表现。
更多使用方法可以参考https://chainforge.ai/docs/
如果您有大模型相关的培训/调优需求,欢迎随时私信联系。