微信扫码
与创始人交个朋友
我要投稿
与其他数据库不同,Teradata 通过提供大量高级分析功能而脱颖而出,从数据清理和数据探索到模型训练、文本分析以及路径和模式分析功能。
其显著特点是所有这些功能都可以在数据库内无缝运行,无需设置单独的环境。执行这些函数时,它们将直接在数据库中进行处理,从而确保高性能。
表
例如,考虑数据库中的两个表:UserHistory和UserHistoryReferences 。使用该TD_VectorDistance函数,您可以在这些表之间找到相似的用户。查询语法如下:
SELECT target_id, reference_id, distancetype, CAST(distance AS DECIMAL(36,8)) AS distanceFROM TD_VECTORDISTANCE (ON target_mobile_data_dense AS TargetTableON ref_mobile_data_dense AS ReferenceTable DIMENSIONUSINGTargetIDColumn('userid')TargetFeatureColumns('CallDuration','DataCounter','SMS')RefIDColumn('userid')RefFeatureColumns('CallDuration','DataCounter','SMS')DistanceMeasure('cosine')TopK(2)) AS dt ORDER BY 3,1,2,4;
以下是来自 DB 的结果:
Target_IDReference_ID DistanceType Distance-------------------------------------------15cosine 0.4548651817cosine 0.3260481525cosine 0.0260892327cosine 0.0079760935cosine 0.0241505437cosine 0.0033733845cosine 0.4382224347cosine 0.31184844
有关 Teradata 的高级分析详细信息,请查看此处的文档。
为了便于您的代理了解如何使用这些功能,我建议采用一种称为检索增强生成 (RAG) 的技术。
此方法有助于根据查询查找相关说明。例如,如果我要求我的代理帮助我根据表UserHistory和 UserHistoryReferences,RAG 将有效地返回与此请求相关的适当语法和示例。
语法说明
为了获得 SQL 代理的最佳性能,语法指令应包含两条基本信息。首先,包括语法和每个参数的解释。其次,也是最重要的,提供例子。您提供的示例越多,代理生成的 SQL 语法就越准确。
# Import require libfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.vectorstores import FAISS
首先查看 Teradata 提供的文档。首先,准备包含解释和示例的语法说明。
syntax_1 = """
Syntax Description :
TD_VectorDistance () ...
Example :
TD_VectorDistance ( ... )
"""
syntax_2 = """
...
"""
syntax_3 = """
...
"""
接下来,利用来自 Hugging Face 或 OpenAI Embedding Service 等平台的各种开源模型。在这种情况下,我利用 OpenAI 完成了这项任务。
embedding_function = OpenAIEmbeddings(openai_api_key=os.getenv("OPENAI_API"))
最后,在 Langchain 和 FAISS 数据库的帮助下,您只需几行代码即可完成该过程
technical_list = [syntax_1, syntax_2, syntax_3, ..syntax_n]
db = FAISS.from_texts(technical_list, embedding_function)
您可以使用下面的简单代码轻松搜索数据库中的相关文档。例如,如果要查找用于计算相似性的语法,则以下代码将返回在上一步中准备的与查询相关的确切语法:
db.similarity_search("Calculate similarity")[0]
RAG 作为工具
在这篇博客中,我详细介绍了 如何利用SQL 代理与数据库交互等工具。现在,我的想法是将 RAG 指定为另一个工具sql_db_list_tables。这允许 SQL 代理决定何时浏览相关文档,并在需要时确定最合适的关键字进行搜索。
要使用 Langchain 创建自定义工具,请扩展 Langchain 提供的类并自定义函数BaseTool_run,如下所示。保持说明清晰至关重要,以确保 SQL 代理了解该工具的用途。
from langchain.tools import BaseTool
from typing import Optional
from langchain.callback_manager import CallbackManagerForToolRun, AsyncCallbackManagerForToolRun
# Define retriever
retriever = db.as_retriever()
# Define customize tool
class TeradataSearchTool(BaseTool):
name = "teradata_search_tool"
description = "Input to this tool is a keyword such as binning or bucketing, similarity, moving average. Output is an instruction on how to use Teradata Syntax with examples to improve queries."
def _run(
self, query: str, run_manager: Optional[CallbackManagerForToolRun] = None
) -> str:
"""Use the tool."""
global retriever
relevant_doc = retriever.get_relevant_documents(query)
if len(relevant_doc) == 0 or len(query) == 0:
return "There are no Teradata syntax examples to be used in this scenario."
else:
return relevant_doc[0].page_content
async def _arun(
self, query: str, run_manager: Optional[AsyncCallbackManagerForToolRun] = None
) -> str:
"""Use the tool asynchronously."""
raise NotImplementedError("custom_search does not support async")
# Init teradata search tool
teradata_search_tool = TeradataSearchTool()
定义 Teradata 搜索工具后,可以使用以下代码创建 SQL 代理。此外,您可以在“extra_tools”部分中包括在上一步中创建的“teradata_search_tool”。
# Step 4. Create Agent Executor sql_agent = create_sql_agent(llm=model,toolkit=toolkit,verbose=True,agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,extra_tools=[teradata_search_tool],prefix=prefix,suffix=suffix)
agent_executor.run("Identify user similarities by analyzing the 'UserHistory' table using 'UserHistoryReference' as the reference table, focusing on attributes CallDuration, DataCounter, and SMS")
当我要求代理通过使用“UserHistoryReference”作为参考表来分析“UserHistory”表来帮助我识别用户相似性时,重点关注 CallDuration、DataCounter 和 SMS 等属性,以下是结果。
代理结果
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-04-12
2024-05-28
2024-04-25
2024-05-14
2024-07-18
2024-08-13
2024-04-26