函数调用及Chain——SQL+GLM

Langchain+chain+数据库操作_langchain 操作数据库-CSDN博客

本文和基于上述链接 进一步。

初始化数据库&模型

# temperature=0,此处仅需要SQL语句,不需要多样化返回。

from langchain.chains.sql_database.query import create_sql_query_chain
from langchain_community.utilities import SQLDatabase
from langchain_community.tools import QuerySQLDataBaseTool
from langchain_openai import ChatOpenAI

# sqlalchemy 初始化MySQL数据库的连接
HOSTNAME = '127.0.0.1'
PORT = '3306'
DATABASE = 'test_db8'
USERNAME = 'root'
PASSWORD = '123123'
# mysqlclient驱动URL
MYSQL_URI = 'mysql+mysqldb://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

# 创建模型
model = ChatOpenAI(
    model='glm-4-0520',
    temperature=0,
    api_key='0884a4262379e6b9e98d08be606f2192.TOaCwXTLNYo1GlRM',
    base_url='https://open.bigmodel.cn/api/paas/v4/'
)

db = SQLDatabase.from_uri(MYSQL_URI)

# print(db.dialect) #打印方言
# print(db.get_usable_table_names()) #表名
# print(db.run('select * from t_emp;')) #SQL查询

生成SQL:create_sql_query_chain

create_sql_query_chain:只生成不执行,有完整的自带Prompt,因此 关键词question不能错

# chian.get_prompts()[0].pretty_print()  打印自带Prompt

chian = create_sql_query_chain(llm=model, db=db)
# chian.get_prompts()[0].pretty_print()
resp = chian.invoke({'question': '请问:一共有多少个员工?'})
print('大语言模型生成的SQL:' + resp)
sql = resp.replace('```sql', '').replace('```', '')
print('提取之后的SQL:' + sql)

print(db.run(sql))

chain.invoke返回(与GPT4不同,GPT4可以直接获取SQL语句,但GLM的返回内容需要自行提取SQl语句)

自带Prompt

执行SQL:QuerySQLDataBaseTool 

这里的lambda 其实也可以换成自定义函数名(不需要加小括号)


from langchain_community.tools import QuerySQLDataBaseTool
from langchain_openai import ChatOpenAI

# 生成SQL语句
create_sql = create_sql_query_chain(llm=model, db=db)

# 执行SQL语句
execute_sql = QuerySQLDataBaseTool(db=db)  # langchain内置的工具

chain = create_sql  
        | (lambda x: x.replace('```sql', '').replace('```', '')) 
        | execute_sql

resp = chain.invoke({'question': '请问:一共有多少个员工?'})

print(resp)

# resp = chian.invoke({'question': '请问:一共有多少个员工?'})
# print('大语言模型生成的SQL:' + resp)
# sql = resp.replace('```sql', '').replace('```', '')
# print('提取之后的SQL:' + sql)
#
# print(db.run(sql))

整合model-Prompt-chain

上述内容,仅介绍SQL的生成与执行。下述是完整的LLM问答。

create_sql:生成SQL链

answer_chain:LLM回答链

chain:完整链(create_sql——》execute_sql )+answer_chain

assign(query=create_sql):通过create_sql定义query变量

## chain理论上可以不用RunnablePassthrough写成=create_sql.assign(result= itemgetter('query')| execute_sql) ;但是这样create_sql出来的SQL语句传不到query变量中,就传不进Prompt


from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough


create_sql = create_sql 
            | (lambda x: x.replace('```sql', '').replace('```', ''))


answer_prompt = PromptTemplate.from_template(
    """Given the following user question, corresponding SQL query, and SQL result, answer the user question. 用中文回答最终答案
    Question: {question}
    SQL Query: {query}
    SQL Result: {result}
    Answer: """
)

answer_chain = answer_prompt 
                | model 
                | StrOutputParser()

chain = RunnablePassthrough.assign(query=create_sql)
        .assign(result= itemgetter('query')| execute_sql) 
        | answer_chain

resp = chain.invoke({'question': '请问:一共有多少个员工?'})
print(resp)

resp = chain.invoke({'question': '请问:哪个员工的工资最高?并且返回该员工的工资'})
print(resp)

chain的流程

### FastGPT与GLM集成使用教程 #### 一、FastGPT概述 FastGPT提供了一站式的解决方案,旨在帮助开发者轻松构建基于RAG(检索增强生成)的智能问答系统。其特性之一在于强大的API集成能力,这些对外的API接口设计上对齐了OpenAI官方标准,这使得FastGPT可以无缝对接各种现有应用和服务环境,比如企业微信、公众号以及飞书等平台[^1]。 对于希望利用容器技术来简化部署流程的技术团队来说,在Linux环境下采用Docker作为部署工具是一个不错的选择,因为这是官方所建议的方式[^3]。 #### 二、GLM简介及其优势 GLM-4-Flash是一款特别针对法律行业定制的大规模预训练语言模型。不同于传统的本地私有化部署模式,它允许用户通过互联网连接至远程服务器上的实例来进行在线微调操作。这种做法既减少了硬件资源投入成本和技术维护难度,又能让模型保持最新状态以应对不断更新的知识体系需求。为了开始使用该功能,使用者需先完成必要的注册过程并获得相应的API密钥认证[^2]。 #### 三、集成方案详解 当考虑将两个不同的框架结合起来时,可以从以下几个方面入手: ##### 1. 数据准备阶段 确保数据集的质量至关重要。无论是用于训练还是推理的数据源都应经过严格筛选和清理工作,以便更好地服务于特定应用场景下的任务目标。例如,在创建一个面向客户的自动回复机器人之前,应该收集大量高质量的历史对话记录,并对其进行标注处理。 ##### 2. 模型选择与配置 根据实际业务场景的需求挑选合适的预训练模型版本。如果项目侧重于自然语言理解(NLU),那么可以选择更擅长文本分类或实体识别等功能的变体;而对于那些强调创造性表达的任务,则可能更适合选用具有较强生成能力的基础架构。在此基础上调整超参数设置直至达到最佳性能表现为止。 ##### 3. API交互逻辑编写 借助Python或其他编程语言编写的脚本文件实现前后端之间的通信机制。具体而言就是发送HTTP请求给对应的Web服务地址并将返回的结果解析出来供后续环节继续加工利用。下面给出一段简单的代码片段展示如何向GLM-4-Flash发起查询请求: ```python import requests url = "https://api.example.com/v1/glm-flash" headers = {"Authorization": "Bearer YOUR_API_KEY"} data = { "prompt": "请问什么是合同法?", } response = requests.post(url, headers=headers, json=data) print(response.json()) ``` 最后一步则是测试整个系统的稳定性及响应速度等方面的表现情况,及时发现潜在问题所在并通过优化算法结构等方式加以改进完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值