使用 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.hqwc.cn/news/660379.html

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

相关文章

Linux 权限的简单讲解

1、前言 当我们分别使用 touch、mkdir 命令创建一名为 test1 的文件和名为 test2 的目录,发现其中有些参数不一样,本文就来给大家来剖析一下。 2、 参数讲解 我们可以通过切片分为下面几个区域,本文就只简单讲解文件类型、权限、所属用户、所…

【Linux】体系结构和进程管理

目录 一、认识冯诺依曼体系结构 1.1 概念 1.2 组成 1.3 存储分级 1.4 有关冯诺依曼的问题 二、操作系统 2.1 概念和功能 2.2 如何理解操作系统的 "管理" 2.3 操作系统的用户、系统调用和库函数概念 三、进程 3.1 基本概念 3.2 描述进程-进程控制块PCB …

基于python的舞蹈经验分享交流网站django+vue

1.运行环境:python3.7/python3.8。 2.IDE环境:pycharmmysql5.7/8.0; 3.数据库工具:Navicat11 4.硬件环境:windows11/10 8G内存以上 5.数据库:MySql 5.7/8.0版本; 运行成功后,在浏览器中输入&am…

UE4 Widget制作搜索框

效果: 一、控件层级结构 1.父控件层级结构 2.子控件层级结构 二、蓝图 1.先清除掉创建子项(注意:这里使用的是reverse循环!) 2.判断是否含有关键字,创建子控件

ElasticSearch总结2

一、创建索引库:PUT ES中通过Restful请求操作索引库、文档。请求内容用DSL语句来表示。创建索引库和mapping的DSL语法如下: 整个jason 里边,它有一个叫mapping的属性,代表的是映射。映射里边有properties代表就是字段。可以看到这…

W801学习笔记十二:掌机进阶V3版本之驱动(PSRAM/SD卡)

本次升级添加了两个模块,现在要把他们驱动起来。 一:PSRAM 使用SDK自带的驱动,我们只需要写一个初始化函数,并在其中添加一些自检代码。 void psram_heap_init(){wm_psram_config(0);//实际使用的psram管脚选择0或者1&#xff…

Llama images - 记录我看到的那些羊驼

来自 : DREAM: Distributed RAG Experimentation Framework

关于远程桌面与3389端口的深度解析

当我们谈论远程桌面和3389端口时,我们实际上是在探讨Windows操作系统的一个核心功能,该功能允许用户通过网络从任何地点远程控制和管理计算机。而3389端口,正是这一功能所依赖的通信端口。 一、远程桌面的工作原理 远程桌面协议(R…

安装ROS

前提必须是20.04版本。。。 一、首先,先设置安装源,我们选择国内中科大的安装源 sudo sh -c . /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ lsb_release -cs main" > /etc/apt/sources.list.d/ros-lat…

React路由导航

1. 什么是路由导航 一个路由跳转到另一个路由&#xff0c;并且在跳转的同时有可能需要传递参数进行通信&#xff0c;比如列表页跳转到详情页携带参数 2. 声明式导航 声明式导航是指通过在模版中通过 <Link/> 组件描述出要跳转到哪里去&#xff0c;比如后台管理系统的…

找不到msvcr120.dll怎么办,msvcr120.dll丢失的5种修复方法分享

计算机系统在运行某应用程序时无法正常启动&#xff0c;具体表现为缺少了一个至关重要的动态链接库文件——msvcr120.dll。这个DLL文件是微软Visual C Redistributable Package的一部分&#xff0c;对于确保许多基于Windows平台的软件能够顺利运作起着不可或缺的作用。msvcr120…

远程桌面连接服务器怎样连接不上的六个常见原因

远程桌面连接服务器无法连接的问题可能由多种原因引起。以下是一些常见的问题及其解决方案&#xff1a; 1. 网络连接问题&#xff1a;远程桌面连接的基础是稳定的网络连接。如果网络连接不稳定或中断&#xff0c;那么你将无法连接到远程桌面。检查你的网络连接&#xff0c;确保…