LLM & RAG 扩展,用于结合分析和语义分析
维护者: anasdorbani, queryproc
安装和加载
INSTALL flockmtl FROM community;
LOAD flockmtl;
示例
-- After loading, any function call will throw an error if the provider's secret doesn't exist
-- Create your provider secret by following the [documentation](https://dais-polymtl.github.io/flockmtl/docs/what-is-flockmtl/). For example, you can create a default OpenAI API key as follows:
D CREATE SECRET (TYPE OPENAI, API_KEY 'your-api-key');
-- Call an OpenAI model with a predefined prompt ('Tell me hello world') and default model ('gpt-4o-mini')
D SELECT llm_complete({'model_name': 'default'}, {'prompt_name': 'hello-world'});
┌──────────────────────────────────────────┐
│ llm_complete(hello_world, default_model) │
│ varchar │
├──────────────────────────────────────────┤
│ Hello world │
└──────────────────────────────────────────┘
-- Check the prompts and supported models
D GET PROMPTS;
D GET MODELS;
-- Create a new prompt for summarizing text
D CREATE PROMPT('summarize', 'summarize the text into 1 word: {{text}}');
-- Create a variable name for the model to do the summarizing
D CREATE MODEL('summarizer-model', 'gpt-4o', 'openai');
-- Summarize text and pass it as parameter
D SELECT llm_complete({'model_name': 'summarizer-model'}, {'prompt_name': 'summarize'}, {'text': 'We support more functions and approaches to combine relational analytics and semantic analysis. Check our repo for documentation and examples.'});
关于 flockmtl
FlockMTL 是一个实验性的 DuckDB 扩展,它支持直接在 SQL 中无缝集成大型语言模型 (LLM) 和检索增强生成 (RAG)。
它引入了 MODEL
和 PROMPT
对象作为一流的 SQL 实体,从而可以轻松定义、管理和重用 LLM 交互。诸如 llm_complete
、llm_filter
和 llm_rerank
等核心函数允许您执行生成、语义过滤和排名——所有这些都来自 SQL。
FlockMTL 专为基于 LLM 的分析的快速原型设计而设计,并通过批处理和缓存功能进行优化,以获得更好的性能。
📄 有关更多详细信息和示例,请参阅 FlockMTL 文档。
注意: FlockMTL 是 Data & AI Systems (DAIS) Laboratory @ Polytechnique Montréal 正在进行的研究的一部分。它正在积极开发中,某些功能可能会演变。欢迎提出反馈和贡献!
新增函数
function_name (函数名) | 函数类型 | description (描述) | comment (注释) | examples (示例) |
---|---|---|---|---|
llm_complete | 标量 | 使用指定的语言模型生成文本补全 | 需要定义好的 prompt 和 model | [SELECT llm_complete({'model_name': 'default'}, {'prompt_name': 'hello-world'});] |
llm_filter | 标量 | 根据语言模型的评估结果过滤数据 | 返回布尔值 | [SELECT * FROM data WHERE llm_filter({'model_name': 'default'}, {'prompt_name': 'is_relevant'}, {'text': content});] |
llm_embedding | 标量 | 为输入文本生成嵌入 | 对于语义相似性任务很有用 | [SELECT llm_embedding({'model_name': 'default'}, {'text': 'Sample text'});] |
llm_reduce | aggregate (聚合) | 使用语言模型将多个输入聚合为单个输出 | 汇总或组合多个行 | [SELECT llm_reduce({'model_name': 'default'}, {'prompt_name': 'summarize'}, {'text': content}) FROM documents;] |
llm_rerank | aggregate (聚合) | 根据语言模型的相关性得分重新排序查询结果 | 提高搜索应用程序中的结果相关性 | [SELECT llm_rerank({'model_name': 'default'}, {'prompt_name': 'rank_relevance'}, {'text': content}) FROM search_results;] |
llm_first | aggregate (聚合) | 选择重新排序后排名最高的结果 | 检索最相关的项目 | [SELECT llm_first({'model_name': 'default'}, {'prompt_name': 'rank_relevance'}, {'text': content}) FROM search_results;] |
llm_last | aggregate (聚合) | 选择重新排序后排名最低的结果 | 检索最不相关的项目 | [SELECT llm_last({'model_name': 'default'}, {'prompt_name': 'rank_relevance'}, {'text': content}) FROM search_results;] |
fusion_rrf | 标量 | 实现倒数排名融合 (RRF) 以组合排名 | 组合来自多个评分系统的排名 | [SELECT fusion_rrf(score1, score2) FROM combined_scores;] |
fusion_combsum | 标量 | 对来自不同评分系统的标准化分数求和 | 用于聚合来自各种模型的分数 | [SELECT fusion_combsum(score1, score2) FROM combined_scores;] |
fusion_combmnz | 标量 | 将标准化分数相加并乘以命中计数 | 增强频繁出现项目的影响 | [SELECT fusion_combmnz(score1, score2) FROM combined_scores;] |
fusion_combmed | 标量 | 计算标准化分数的中位数 | 减少组合分数中离群值的影响 | [SELECT fusion_combmed(score1, score2) FROM combined_scores;] |
fusion_combanz | 标量 | 计算标准化分数的平均值 | 提供分数的均衡聚合 | [SELECT fusion_combanz(score1, score2) FROM combined_scores;] |