当前位置: 首页 > article >正文

使用 LangChain 对接硅基流动(SiliconFlow)API:构建一个智能对话系统

文章目录

      • 什么是硅基流动(SiliconFlow)?
      • LangChain 简介
      • 在 LangChain 中对接硅基流动
      • 步骤 1:安装必要的库
      • 步骤 2:设置 API 密钥
      • 步骤 3:编写代码
      • 代码解析
      • 步骤 4:运行代码
      • 如何扩展和改进
      • 总结


在现代人工智能应用中,大语言模型(LLM)已经成为了智能对话、内容生成和信息处理的核心工具。LangChain 是一个框架,用于构建与 LLM 相关的应用程序,提供了很多模块化工具,帮助开发者轻松地集成、管理和部署 LLM。在本文中,我们将介绍如何使用 LangChain 框架将硅基流动(SiliconFlow)的 API 集成到应用中,实现一个基于 LLM 的对话系统。

什么是硅基流动(SiliconFlow)?

硅基流动是一种基于大语言模型(如深度学习模型)提供自然语言处理能力的 API 服务。它支持多种类型的模型,可以通过 REST API 接口与其进行交互,进行自然语言生成、问答、文本处理等任务。

LangChain 简介

LangChain 是一个用于创建与 LLM 相关应用的工具库,它提供了一些功能强大的模块,允许开发者更容易地将 LLM 集成到应用程序中。LangChain 支持任务链、记忆管理、外部 API 集成等特性,帮助开发者创建复杂的智能应用。

在 LangChain 中对接硅基流动

本文将通过以下步骤,向大家展示如何使用 LangChain 对接硅基流动 API,构建一个简单的对话系统。

步骤 1:安装必要的库

在开始之前,确保你已经安装了 langchainrequests 库。你可以使用以下命令来安装它们:

pip install langchain requests

步骤 2:设置 API 密钥

硅基流动提供了 API 服务,你需要在硅基流动平台上注册并获取 API 密钥。在代码中,我们会通过环境变量来传递该密钥。

export CUSTOM_API_KEY="your_api_key_here"

步骤 3:编写代码

下面是通过 LangChain 框架对接硅基流动的 Python 代码示例:

from langchain.llms.base import LLM
from langchain_community.llms.utils import enforce_stop_tokens
import requests
import os# 设置API密钥和基础URL环境变量
API_KEY = os.getenv("CUSTOM_API_KEY", "sk-xxx")
BASE_URL = "https://api.siliconflow.cn/v1/chat/completions"class SiliconFlow(LLM):def __init__(self):super().__init__()@propertydef _llm_type(self) -> str:return "siliconflow"def siliconflow_completions(self, model: str, prompt: str) -> str:payload = {"model": model,"messages": [{"role": "user", "content": prompt}],"stream": False}headers = {"accept": "application/json","content-type": "application/json","authorization": f"Bearer {API_KEY}"}response = requests.post(BASE_URL, json=payload, headers=headers)response.raise_for_status()return response.json()["choices"][0]["message"]["content"]def _call(self, prompt: str, stop: list = None, model: str = "default-model") -> str:response = self.siliconflow_completions(model=model, prompt=prompt)if stop is not None:response = enforce_stop_tokens(response, stop)return responseif __name__ == "__main__":llm = SiliconFlow()response = llm._call(prompt="你是谁?", model="deepseek-ai/DeepSeek-V2.5")print(response)

代码解析

  1. 导入必要模块

    • 我们首先导入了 LangChain 中的 LLM 基类和 enforce_stop_tokens 工具。
    • 使用 requests 库与硅基流动的 API 进行 HTTP 请求。
    • 使用 os 获取环境变量中的 API 密钥。
  2. SiliconFlow

    • 该类继承自 LLM,并实现了 _call 方法,用于处理对硅基流动 API 的调用。
    • siliconflow_completions 方法向硅基流动 API 发送请求并获取返回结果。它接受 modelprompt 参数,前者指定使用的模型(例如 deepseek-ai/DeepSeek-V2.5),后者是用户输入的提示信息。
  3. API 请求

    • 我们通过 requests.post 向硅基流动的 API 发送 POST 请求,携带用户输入的 prompt 和其他必要的请求头。
    • API 返回的是 JSON 格式的数据,我们提取其中的对话内容并返回给用户。
  4. _call 方法

    • 这是 LangChain 框架中用来发起请求的主要方法,它接收用户的 prompt,并将其传递给 siliconflow_completions 方法进行处理。
    • 如果传入 stop 参数,它会应用 enforce_stop_tokens 来控制响应的停止符。

步骤 4:运行代码

在终端中运行该 Python 脚本:

python siliconflow_langchain.py

你会看到输出的结果类似于:

你是谁?
我是一个基于硅基流动的 AI 模型,我可以帮助你处理各种任务。

如何扩展和改进

  • 多轮对话:目前,代码只处理单轮对话。如果需要多轮对话,可以通过在每次请求时传递之前的对话记录来维持上下文。

    示例:

    context = [{"role": "user", "content": "你是谁?"}, {"role": "assistant", "content": "我是一个 AI 模型"}]
    response = llm._call(prompt="你能做什么?", model="deepseek-ai/DeepSeek-V2.5", context=context)
    
  • 增强功能:你可以通过集成更多的外部数据源(如数据库、API、文件系统等)来增强应用的功能,支持更复杂的任务自动化和知识处理。

总结

通过 LangChain 框架集成硅基流动(SiliconFlow)API,可以构建功能强大的 LLM 应用。本文介绍了如何使用 LangChain 创建一个简单的对话系统,并通过硅基流动的 API 来处理自然语言任务。无论是单轮对话还是多轮对话,LangChain 都提供了灵活的工具来帮助开发者高效地构建与 LLM 相关的应用。

通过对接不同的 LLM 和外部服务,开发者可以轻松地创建各种类型的智能应用,推动 AI 技术在实际业务中的落地。

提示:更多内容可以访问Clang’s Blog:https://www.clang.asia

相关文章:

使用 LangChain 对接硅基流动(SiliconFlow)API:构建一个智能对话系统

文章目录 什么是硅基流动(SiliconFlow)?LangChain 简介在 LangChain 中对接硅基流动步骤 1:安装必要的库步骤 2:设置 API 密钥步骤 3:编写代码代码解析步骤 4:运行代码如何扩展和改进总结 在现代…...

如何借助NoETL指标平台实现数据分析、决策的提效?

通常,企业通过明确分析目标、定位所需分析的数据,再通过多渠道汇集销售数据、客户反馈、市场调研等信息,经过数据清洗、缺失值处理及格式标准化等手段,运用描述性统计、回归分析、聚类分析及关联规则挖掘等多样分析方法&#xff0…...

Java--IO流详解 (上)--字符流

目录 IO流的概念 字符流 输入流 Reader核心方法 1.close() 2.mark(int readAheadLimit) 3.markSupported() 4.read() 5.read(char[] cbuf) 6.read(char[] cbuf, int off, int len) 7.read(CharBuffer target) 8.ready() 9.reset() 10.skip(long n) Reader 的常用…...

大模型语言简介

大模型语言能做什么 信息提取 将长段文字中的信息抽取出来并且以结构化的方式输出。相比起传统NLP的方式,大模型在泛化能力上有非常大的提升,并且开发成本要低2个数量级。应用场景包括:论文论点论据提取、用户画像提取、舆情分析、病例结构…...

手动配置IP

手动配置IP,需要考虑四个配置项: 四个配置项 IP地址、子网掩码、默认网关、DNS服务器 IP地址:格式表现为点分十进制,如192.168.254.1 子网掩码:用于区分网络位和主机位 【子网掩码的二进制表达式一定是连续的&#…...

Golang 进阶训练营

一、Golang 的 slice、map、channel 1.1 slice vs array a : make([]int, 100) //切片 b : [100]int{} //数组array需指明长度,长度为常量且不可改变 array长度为其类型中的组成部分(给参数为长度100的数组的方法传长度为101的会报错) array在…...

2-使用wifidog实现portal

wifidog是openwrt上面实现portal认证的一个开源工具,从网关端到服务器都帮你搭建好,通过学习wifidog的原理,后面就可以改造成自己需要的逻辑。 1. openwrt安装wifidog 添加源 vim 14.07/feeds.conf.defaultsrc-git wifidog https://github.c…...

Spring Boot + ShardingSphere 踩坑记

最近在准备秋招,偷了个轮子项目之后想改个分表,于是有了这篇文章。 省流:请使用shardingsphere-jdbc 5.5.2,并根据官方5.5.2版本文档进行配置,不要使用starter。此外,如果希望使用INTERVAL分片算法&#x…...

AI时代前端开发的创造力:解放还是束缚?

在人工智能(AI)快速发展的时代,AI技术的影响已经渗透到各个领域,从医疗保健到金融服务,再到创意产业。AI工具的出现,为前端开发带来了前所未有的效率提升,但也引发了人们对创造力的担忧&#xf…...

有哪些免费的SEO软件优化工具

随着2025年互联网的不断发展,越来越多的企业意识到在数字营销中,网站的曝光度和排名至关重要。无论是想要提高品牌知名度,还是想要通过在线销售增加收益,SEO(搜索引擎优化)都是一项不可忽视的关键策略。而要…...

FastExcel + Java:打造高效灵活的Excel数据导入导出解决方案

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 基于AOP的数据字典实现…...

在Vue中,JavaScript数组常用方法,添加,插入,查找,删除等整理

在Vue中,JavaScript数组常用,添加,插入,查找,删除等整理 1.splice()方法可以直接修改原数组,通过指定要删除元素的索引来删除它。 例: let index // 要删除的元素的索引; this.array.splice(i…...

vue知识点2

1.methods和mounted的区别 methods是定义方法,不涉及到调用 mounted涉及到操作 所以methods后面是:,mounted后面是() 2.介绍一下emit的用法 如果子控件要调用父页面的方法,在父页面的子控件引用处&…...

node.js + html调用ChatGPTApi实现Ai网站demo(带源码)

文章目录 前言一、demo演示二、node.js 使用步骤1.引入库2.引入包 前端HTML调用接口和UI所有文件总结 前言 关注博主,学习每天一个小demo 今天是Ai对话网站 又到了每天一个小demo的时候咯,前面我写了多人实时对话demo、和视频转换demo,今天…...

14.Python生成器、迭代器、闭包、装饰器、元类、垃圾回收、内建函数

在 Python 中,生成器、迭代器、闭包、装饰器、元类、垃圾回收和内建函数是一些重要的概念和功能,它们对于编写高效、灵活的代码非常重要。下面我们逐一详细介绍这些概念及其用法。 1. 生成器(Generator) 生成器是一个函数&#…...

STM32+Proteus+DS18B20数码管仿真实验

1. 实验准备 硬件方面: 了解 STM32 单片机的基本原理和使用方法,本实验可选用常见的 STM32F103 系列。熟悉 DS18B20 温度传感器的工作原理和通信协议(单总线协议)。数码管可选用共阴极或共阳极数码管,用于显示温度值。…...

Vulhub靶机 ActiveMQ 反序列化漏洞(CVE-2015-5254)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 漏洞版本:Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0 二、访问靶机IP 8161端口 默认账户密码 admin/admin,登录 此时qucues事件为空 1、使用jmet-0.1.0-all.jar工具将…...

ConcurrentHashMap扩容

目录 一、tryPreSize方法-初始化数组 二、tryPreSize方法-扩容标识戳 三、transfer方法-构建新数组 四、transfer方法-迁移数据 五、transfer方法-lastRun机制 六、helpTransfer方法-协助扩容 三种触发方式 达到了扩容的阈值 一、tryPreSize方法-初始化数组 // 扩容前…...

2025年二级建造师报名流程图解

2025年二级建造师报名时间!附报名流程! ⏰️已公布25年二建考试时间的省份如下: ️4月19日、20日考试的城市有:贵州 ️5月10日、11日考试的城市有:湖北、陕西、宁夏、甘肃、福建、浙江、江西、黑龙江、河南、湖南、…...

【自学笔记】人工智能基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 人工智能重点知识点总览一、基础概念与原理1.1 人工智能定义与发展1.2 算法与数据结构1.3 数学基础 二、机器学习2.1 监督学习2.2 无监督学习2.3 强化学习 三、深度…...

hexo 魔改 | 修改卡片透明度

hexo 魔改 | 修改卡片透明度 ** 博客食物用更佳 博客地址 ** 这是笔者自己瞎倒腾的。作为前端菜鸡一枚,大佬们随便看看就好~ 我用的主题是 butterfly 4.12.0 分析 通过开发者工具可以看出来卡片的背景和 --card-bg 变量有关 再在 sources 下的 css 文件夹下的…...

Golang的并发编程案例详解

Golang的并发编程案例详解 一、并发编程概述 并发编程是指程序中有多个独立的执行线索,并且这些线索在时间上是重叠的。在 Golang 中,并发是其核心特性之一,通过 goroutine 和 channel 来支持并发编程,使得程序可以更高效地利用计…...

【升级】阿里云对象存储 HTTPS 根证书升级公告

--时间打败一切...

贪心算法与动态规划的区别

贪心算法:每一步都选择当前最优解,期望通过局部最优达到全局最优。 动态规划:通过分解问题为子问题,存储并重用子问题的解,避免重复计算。 最简单的JS ACM代码举例 贪心算法:找零问题 function greed…...

策略模式-小结

总结一下看到的策略模式: A:一个含有一个方法的接口 B:具体的实行方式行为1,2,3,实现上面的接口。 C:一个环境类(或者上下文类),形式可以是:工厂模式,构造器注入模式,枚举模式。 …...

TDengine 性能测试工具 taosBenchmark

简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…...

硬件学习笔记--41 电磁兼容试验-5 射频场感应的传导干扰试验介绍

目录 电磁兼容试验-射频场感应的传导干扰试验介绍 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-射频场感应的传导干扰试验介绍 驻留时间是在规定频率下影响量施加的持续时间。被试设备(EUT)在经受扫频频带的电磁影响量或电磁干扰的情况下&a…...

泛型 类 接口 方法 通配符

泛型 泛型类 what: 类型参数化 why use&#xff1a; 1. 输出时候是object类型 而不是真正类型转化麻烦 import java.util.ArrayList; import java.util.List;public class ObjectExample {public static void main(String[] args) {List<Object> list new ArrayLi…...

文字转语音(三)FreeTTS实现

项目中有相关的功能&#xff0c;就简单研究了一下。 说明 FreeTTS 是一个基于 Java 的开源文本转语音&#xff08;TTS&#xff09;引擎&#xff0c;旨在将文字内容转换为自然语音输出。 FreeTTS 适合对 英文语音质量要求低、预算有限且需要离线运行 的场景&#xff0c;但若需…...

STM32 RTC 实时时钟说明

目录 背景 RTC(实时时钟)和后备寄存器 32.768HZ 如何产生1S定时 RTC配置程序 第一次上电RTC配置 第1步、启用备用寄存器外设时钟和PWR外设时钟 第2步、使能RTC和备份寄存器访问 第3步、备份寄存器初始化 第4步、开启LSE 第5步、等待LSE启动后稳定状态 第6步、配置LSE为…...