利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类
简短回顾 Lumos
Lumos 是一个基于本地大型语言模型(LLM)开发的网页浏览辅助工具,呈现为 Chrome 浏览器插件形式。它可以抓取当前页面的内容,并把抓取的数据在一个在线内存 RAG 工作流中处理,一切都在一个请求上下文内完成。Lumos 建立在 LangChain 基础上,并由 Ollama 本地 LLM 驱动,开源且免费。
Lumos 擅长于大型语言模型所擅长的任务,比如:
- 摘要新闻文章、论坛帖子与聊天历史
- 关于餐厅和产品评价的查询
- 提取来自密集技术文档的细节
该应用的操作逻辑极其方便。随着不断深入使用这个应用,也能发掘出用 LLM 在浏览器中的新奇用法。
重建计算功能
在处理文本任务时,LLM 既有创意又灵巧。但它们的设计原则不是基于确定性。Andrej Karpathy 曾将大型语言模型形容为 "dream machines"。因此,像 456*4343 这样简单的运算,LLM 无法通过预测模型给出正确的回答。对于一个包含众多数值和符号的复杂方程,即便是最高级的模型也可能力不从心。
例如:456*4343 - 56/(443-11+4) 等于多少?

GPT-3.5 错误地'计算'了 456*4343

Llama2 错误地'计算'了 456*4343
LLMs 在处理特定任务时需要借助额外的工具,比如执行代码或解决数学问题等。Lumos 也是如此。我不记得为什么需要在浏览器里快速使用计算器了,但我知道我不想拿出手机或另开一个标签页。我只是希望我的 LLM 能准确解答数学问题。
所以,我决定把一个计算器集成到 Lumos 里。
借助 Ollama 进行提示分类
我之前用 Ollama 做了提示分类的实验并发现这个技术相当有用。如果可靠的话,'分类提示'的输出可以强化条件判断语句和逻辑分支。
虽然 Lumos 并没有基于 LangChain Agent 实现,但我希望用户使用它的体验能和与 Agent 互动一样流畅。它应能够在不需明确的指示下独立执行各种工具。应用程序应当能自动识别何时需要使用计算器。利用 Ollama 来判断是否需要计算器工具的实施是轻而易举的。
核心实现逻辑
参考以下代码示例,展示了如何使用 Ollama 客户端来检查输入是否为算术表达式:
const isArithmeticExpression = async (
baseURL: string,
model: string,
prompt: string,
): Promise<boolean> => {
// 检查开头的触发指令,允许用户强制调用
if (prompt.trim().toLowerCase().startsWith("calculate:")) {
( ());
}
ollama = ({
: baseURL,
: model,
: ,
: [, ]
});
question = ;
ollama.(question).( {
.();
answer = response.().()[].();
answer.();
});
};







