-
背景介绍。OpenBB是一家金融投资研究企业,开源项目有26K star,它提供的命令行工具有900多个命令,可以快速查询分析多类金融、投资数据。当前案例的场景,针对OpenBB的命令行工具较高使用门槛,与LlamaIndex合作,力图让自然语言更准确地操作OpenBB命令行。
-
痛点。OpenBB的命令行有900多个,用户和系统交互上容易误解和混淆。比如对于加载资产数据的load命令,如果用户输入load AAPL,用户期望系统映射的资产类别是股票,对应到系统的具体命令是stocks/load AAPL。而用户输入load bitcoin,更期望的结果是系统执行crypto/load btc。其他的例子还包括寻找看涨指标金十字,系统想要处理,也需要精确定位客户想要的标的到底是什么。而自然语言的输入,总是容易让系统摸不着头脑。
-
解决方案:使用资料库+LLM优化用户命令建议。前置条件是OpenBB的每个命令都有命令行常见的-help提示。这个资料,提供给LLM做外部资料库,就能提升用户搜索体验啦(索引搜索优化当然还不少事情)。OpenBB是在-help文档基础上,增加了更多的示例提示,比如对于股票命令stocks,提供给LLM的说明如下图。除了命令本身的参数,还包括多组示例。每个命令都单独创建一个类似的txt文件,存储到向量库。
然后,再配合更改prompt,让LLM根据用户输入(偏自然语言的命令),给出命令行建议。OpenBB这样改写它的prompt。
例如,让LLM给出的所有命令行建议,都必须是完整的命令行。比如对于load命令,命令执行系统必须要有对应的资产类型。再例如,多个国家参数需要用逗号分隔,并给出了示例。
这几项工作完成后,当 LLM 接收到查询请求,生成embedding后,到向量库中搜索匹配最合适的命令txt文件向量,将其提供给LLM生成建议命令行。
例如,用户输入cpi united states united kingdom,LLM会根据CPI命令的txt作为资料库,生成命令建议:/economy/cpi -c united_states,united_kingdom
根据用户输入生成的embedding查找txt向量库,认为cpi命令的txt更适合一起提供给LLM帮助生成命令建议。
同时保证了prompt中的要求:
1. /economy/cpi : 保证命令行的完整性,每个命令都要带有父命令;
2. united_states,united_kingdom : 国家名用下划线处理,并且逗号分隔;
最后,使用LlamaIndex,需要几行代码解决呢?3行。(当然还有其他工作啦)