本文首发于博客 LLM 应用开发实践
在之前的文章中提到构建适合生产环境的 LLM(大型语言模型)应用挑战非常多,比如提示词的迭代、回归测试、评估等,agenta 就是一款很好的解决上述问题的工具。能够进行提示词版本控制、实验和评估,可以一键通过 API 的方式发布给开发人员接入使用,并且兼容常用的各种框架、库和模型,达到快速进行提示工程的目的,同时满足开发人员和领域专家的需求,虽然还处于 alpha 阶段,但已经成为我重度使用的提示词管理工具,本篇文章对其进行详细介绍。
我的新书《LangChain编程从入门到实践》 已经开售!推荐正在学习AI应用开发的朋友购买阅读!
整体业务架构
进行提示工程过程中,开发人员和领域专家协作是一个头疼的问题,往往写代码的开发同学对业务理解不深,设计的提示词效果欠佳;精通业务的领域专家往往知道需要什么样的回答效果,但设计的提示词进行管理测试以及接入产品验证环节较长,agenta 作为一个提示词版本控制、迭代测试和效果评估的管理工具,提供易操作的 UI 界面,方便运营、产品、领域专家等非开发角色调试提示词,最终通过接口发布出去供开发同学使用,重要的是这个产品还是开源的,可以部署给团队内部使用。
特性说明
设计提示词
可以直接在是 UI 界面实验环境(Playgroud)设计提示词,并进行实时调试观察,如果大模型的输出符合预期的结果可以直接添加到测试集。
管理测试集
在测试集管理界面,支持导入导出测试集。导入方式支持了 csv 和 json 格式,其中 csv 对习惯使用 excel 表格的运营人员和产品经理等非开发角色很友好,有助于理解 know-how 的领域专家将手动设计的测试集合批量导入;导出支持 json 格式,当积累到足够多的用户数据或者生产环境测试数据时,批量导出的 json 格式,不论是对开发人员还是算法工程师进行 fine-tune 或者特征采样都很方便。当然也可以直接在页面创建新的测试集,或者在设计提示词阶段生成的测试集基础上进行编辑。
提示词评估
提示词评估过程中,可以选择手动评估或者编程自动化评估。手动评估是指通过人工测试或检查来评估不同版本的功能和性能,可以根据预定义的测试用例,逐个测试每个提示词模板,并记录下的评估结果。
另一种方法是采用编程自动化评估,可以编写程序或脚本来自动运行测试用例,并根据预定规则或标准来评估每个提示词模板的性能。这种方法可以节省时间和人力,同时也可以更加准确地评估不同版本的差异。
无论是手动评估还是编程自动化评估,通过对不同提示词模板进行评估,可以得出关于每个版本提示词的性能、可靠性和适应性的结论。这样,可以根据评估结果做出相应的决策,选择最适合需求的版本。
我这里设置了三条测试用例,其中一条没通过,可以看到显示评估通过率为66.66%
提示词模板发布
当上述步骤中的提示词评估通过率满足要求时,就可以选择一键发布为 API,供开发环境、预发布环境或者生产环境直接使用。
上述整个路径是非开发人员 ➡️ 开发人员协作的过程,下面我们说明下开发人员 ➡️ 非开发人员协作的过程。
面向开发人员提供 SDK
兼容 LangChain,通过装饰器的方式接入 agenta sdk
import agenta as ag
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
default_prompt = "Give me five cool names for a baby from {country} with this gender {gender}!!!!"
@ag.post
def generate(
country: str,
gender: str,
temperature: ag.FloatParam = 0.9,
prompt_template: ag.TextParam = default_prompt,
) -> str:
llm = OpenAI(temperature=temperature)
prompt = PromptTemplate(
input_variables=["country", "gender"],
template=prompt_template,
)
chain = LLMChain(llm=llm, prompt=prompt)
output = chain.run(country=country, gender=gender)
return output
直接在终端通过 CLI 的方式发布
将 3000 端口暴露到内网,非开发同学就可以在 UI 界面愉快的编辑提示词了。
不足之处
尽管工具本身围绕提示词的迭代、测试、评估已经做的足够好了,但目前仅支持简单的 QA 场景,对复杂提示词编排场景不支持。应该在评估配置阶段,支持对不同编排结点进行配置,每个阶段结果的评估方案可组合,最后导出提示词编排评估流程文件(yaml 文件),这样直接可以把自动化评估集成到 CI/CD 流程里,在应用上线前进行验证测试。
更多内容在公号:LLM 应用全栈开发