使用 langchain 连接 通义千问 并用 fastApi 开放接口

安装 langchain 方法

https://www.cnblogs.com/hailexuexi/p/18087602

安装 fastapi

fastapi 是一个用于构建高性能 Web 应用的 Python 框架,它提供了简洁、高效的 API 开发体验。

pip install fastapi

安装 uvicorn

uvicorn 是一个用于运行 FastAPI 应用的服务器,它可以将你的 FastAPI 代码部署到生产环境中。

pip install uvicorn

安装这两个后

创建一个目录 fastapi  ,在这个目录下创建两个文件

main.py   

from fastapi import FastAPI, HTTPException
from pydantic import BaseModelfrom langchain.embeddings.dashscope import DashScopeEmbeddings# -*- coding: utf-8 -*-
from langchain.text_splitter import RecursiveCharacterTextSplitter#from langchain.vectorstores import Chroma
from langchain_community.vectorstores import Chromafrom langchain.chains import RetrievalQA#from langchain.document_loaders import TextLoader
from langchain_community.document_loaders import TextLoaderfrom langchain_community.llms import Tongyi
import osimport warnings
warnings.filterwarnings('ignore', category=FutureWarning)os.environ["DASHSCOPE_API_KEY"] = "sk-d35c623d2575460b8a296e4ff0db5f7c"# 定义一个FastAPI实例
app = FastAPI()
# 定义一个请求体模型
class QuestionRequest(BaseModel):question: str# 加载和准备数据
loader = TextLoader('qa.txt')
data = loader.load()text_splitter = RecursiveCharacterTextSplitter(chunk_size= 50, chunk_overlap = 0)
all_splits = text_splitter.split_documents(data)                                                
embeddings = DashScopeEmbeddings(model="text-embedding-v1",
)                                                                                                           
vectorstore = Chroma.from_documents(documents=all_splits, embedding=embeddings) # 定义路径操作
@app.post("/answer")
async def get_answer(request: QuestionRequest):question = request.questionif question == "end":raise HTTPException(status_code=400, detail="Invalid question")# 使用Tongyi模型和检索到的信息来生成答案llm = Tongyi()qa_chain = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever())ret = qa_chain({"query": question})return {"answer": ret['result']}if __name__ == '__main__':import uvicornuvicorn.run(app='main:app', host="127.0.0.1", port=8080, reload=True)# 启动服务器的命令(在命令行中运行)
# uvicorn your_module_name:app --reload

qa.txt   

这个文件 用于存放 问答对

问题:弦丝画制作的活动时长是多少?
答案:弦丝画制作活动时长是2—3小时。
问题:用弦丝画制作福字是多少元一位?
答案:用弦丝画制作福字、旺字等单字款价格120元/人。
问题:用弦丝画制作旺字是多少元一位?
答案:用弦丝画制作福字、旺字等单字款价格120元/人。
问题:用弦丝画制作喜字是多少元一位?
答案:用弦丝画制作福字、旺字等单字款价格120元/人,其他图案款请咨询详谈。
问题:端午节香囊的制作价格是多少元一位?
答案:端午节香囊价格100元/人。
问题:中秋节月饼的制作价格是多少元一位?
答案:中秋节月饼价格120元/人。

运行 main.py

出现 No module named 'dashscope' 则

安装 dashscope

pip install dashscope

再次运行 main.py 出现 Please install it  with 'pip install chromab' 则

安装 chromadb

pip install chromadb

 再次运行 main.py 出现下图 说明运行成功

接口地址是 http://127.0.0.1:8080

用postmain调用

 需要设定的 json 形式

这样就能正确地得到返回值 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/5601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习/复习37--进阶总结与题目练习

一、题目练习 1. 循环与无符号char的取值范围 注意事项:0~255 -128~127 char类的取值范围看做循环图 2.ASCLL值与循环 3.按位操作与bit位 4 .结构体的大小 注意事项:结构体嵌套结构体的大小计算 5.循环条件 6.数据类型与原反补码 7.指针访问字符串数…

react18子组件设置接收默认值和值类型验证

父组件传值 import ChildCom from ./components/ChildCom export default function Person {return(<div><ChildCom name"alan-ben" age{18} score{[98, 97, 100]} /></div>) } 子组件接收并验证类型 import React from react import PropTypes…

CentOS-Stream-9配置网络和web控制台cockpit

vim /etc/NetworkManager/system-connections/ens33.nmconnection&#xff0c;修改autoconnectiontrue自动连接网络&#xff0c;可以自动获取IP地址&#xff0c;或者设置固定IP地址&#xff0c;在[ipv4]下面编辑methodmanual和address1192.168.4.111/24,192.168.4.1和dns223.5.…

商城系统推荐,如何找到一款可靠的商城系统?

如今&#xff0c;电商系统成为商家必不可少的营销工具&#xff0c;其系统在金融、外贸、零售等行业领域应用广泛。那么&#xff0c;作为初试水的企业又没有挑选电商系统的经验&#xff0c;如何找到拥有全功能、全渠道、可靠的网上商城系统呢&#xff1f; 我们可以先按电商系统…

【python】给函数参数和返回值标注类型

目录 &#xff08;1&#xff09;类型标注进化历史 从Python 3.0开始的类型标注 从Python 3.5开始的类型标注库 typing &#xff08;2&#xff09;更细化的类型标注 1.返回一个列表&#xff0c;且列表的元素类型是指定的 2.返回字典类型&#xff0c;键和值都是指定类型 3…

【Vue 2.x】学习vue之三路由

文章目录 Vue三路由第十章1、vue中的路由vue的应用分为a、多页面应用b、单页面应用 2、路由的基本应用1、基础2、使用3、加载 3、vue组件的分类1、普通组件2、路由组件 4、路由的嵌套5、路由传递Query参数1、拼接参数传递2、路由传递对象 6、简化路由1、命名路由 7、parms传递参…

java钉钉微信qq扫码登录

概述 第三方接口其实比较简单&#xff0c;按照文档来操作即可&#xff0c;代码也就那点&#xff0c;最费时间的反而是在对接系统的账号的申请上&#xff0c;不建议个人申请很麻烦&#xff0c;还是让公司运维申请企业账号。 作为一名合格的开人人员&#xff0c;不仅仅是把第三…

力扣82-链表、迭代 的思考

题目解读 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 两个示范 思考 返回链表&#xff1a;返回更新链表后的头结点&#xff1b; 更新链表&#xff1a;判断重复元素&#xff0c;改变指针…

centos7 宝塔php7安装mongodb扩展

一、下载、解压源码 下载地址&#xff1a;https://pecl.php.net/package/mongodb 1 2 wget -c https://pecl.php.net/get/mongodb-1.5.3.tgz tar -zxvf mongodb-1.5.3.tgz 二、编译安装源码 1 2 3 4 cd mongodb-1.5.3 /www/server/php/70/bin/phpize ./configure --with-p…

Day56|动态规划part16:583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结篇

583. 两个字符串的删除操作 我的方法&#xff0c;先求出两者的最长公共子序列长度&#xff0c;再用两个字符串的长度相减就是两者分别要做操作的步数&#xff1a; class Solution {public int minDistance(String word1, String word2) {int[][] dp new int[word1.length() …

模型剪枝-Network Slimming算法分析

代码见文末 论文地址&#xff1a;Learning Efficient Convolutional Networks through Network Slimming ICCV 2017 Open Access Repository 1.概述 由于边缘设备的限制&#xff0c;在模型的部署中经常受到模型大小、运行内存、计算量的限制。之前的方法要么只能解决其中一个…

设计模式之模板模式TemplatePattern(五)

一、模板模式介绍 模板方法模式&#xff08;Template Method Pattern&#xff09;&#xff0c;又叫模板模式&#xff08;Template Pattern&#xff09;&#xff0c; 在一个抽象类公开定义了执行它的方法的模板。它的子类可以更需要重写方法实现&#xff0c;但可以成为典型类中…

Noisy:一款功能强大的DNS和HTTPS网络流量噪声生成工具

关于Noisy Noisy是一款功能强大的DNS和HTTP/S网络流量噪音生成工具&#xff0c;该工具基于Python开发&#xff0c;可以帮助广大研究人员在进行常规网络浏览时&#xff0c;在后台生成随机的HTTP/DNS网络流量噪声&#xff0c;并以此来提升网络通信数据的安全性和隐蔽性。 支持的…

第7篇:创建Nios II工程之控制LED<二>

Q&#xff1a;上一期我们完成了Quartus硬件工程部分&#xff0c;本期我们创建Nios II软件工程这部分。 A&#xff1a;创建完BSP和Nios II Application之后&#xff0c;在source文件main.c中添加LED控制代码&#xff1a;system.h头文件包含了Platform Designer系统中IP的硬件信…

【C语言】文件操作(万字解读超详细解析)

最好的时光&#xff0c;在路上;最好的生活&#xff0c;在别处。独自上路去看看这个世界&#xff0c;你终将与最好的自己相遇。&#x1f493;&#x1f493;&#x1f493; 目录 • ✨说在前面 &#x1f34b;知识点一&#xff1a;什么是文件&#xff1f; • &#x1f330;1.程序…

【分布式通信】NPKit,NCCL的Profiling工具

NPKit介绍 NPKit (Networking Profiling Kit) is a profiling framework designed for popular collective communication libraries (CCLs), including Microsoft MSCCL, NVIDIA NCCL and AMD RCCL. It enables users to insert customized profiling events into different C…

Java解决O(1) 时间插入、删除和获取随机元素

Java解决O(1) 时间插入、删除和获取随机元素 01 题目 实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false …

Android UI:动画:视图动画

文章目录 定义两种创建方式 代码:直接创建Animation对象XML:加载xml文件API 类 动画类 AnimationAlphaAnimationScaleAnimationTranlateAnimationRotateAnimationAnimationSet小结变化速率类 InterpolatorAccelerateInterpolatorDecelerateInterpolatorAccelerateDecelerateI…

acwing算法提高之数据结构--AC自动机

目录 1 介绍2 训练3 参考 1 介绍 本博客用来记录AC自动机相关题目。 AC自动机是以Trie的结构为基础&#xff0c;结合KMP的思想建立的自动机&#xff0c;用于解决多模式匹配等任务。 2 训练 题目1&#xff1a;1282搜索关键词 C代码如下&#xff0c; #include <cstdio&g…

STM32 HAL库F103系列之IIC实验

IIC总线协议 IIC总线协议介绍 IIC&#xff1a;Inter Integrated Circuit&#xff0c;集成电路总线&#xff0c;是一种同步 串行 半双工通信总线。 总线就是传输数据通道 协议就是传输数据的规则 IIC总线结构图 ① 由时钟线SCL和数据线SDA组成&#xff0c;并且都接上拉电阻…