langchain+gpt+agent

news2024/11/17 11:55:32

一.agent+Conversation

通过用户问题,来选择

import json
import os
import re

from langchain import FAISS, PromptTemplate, LLMChain
from langchain.agents import initialize_agent, Tool, AgentType
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import TextLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.memory import ConversationBufferMemory
from langchain.text_splitter import SpacyTextSplitter
from langchain.tools import tool

"""
pip install spacy
python -m spacy download zh_core_web_sm
"""

os.environ["OPENAI_API_KEY"] = ''

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-16k", max_tokens=10240)  # type: ignore

file_path = "faq.txt"

loader = TextLoader(file_path, encoding="utf-8")
documents = loader.load()
text_splitter = SpacyTextSplitter(chunk_size=500, chunk_overlap=0, pipeline="zh_core_web_sm", separator="\n\n")
texts = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings()

docsearch = FAISS.from_documents(texts, embeddings)
faq_chain = RetrievalQA.from_chain_type(llm=llm, retriever=docsearch.as_retriever(), verbose=True)

order_1_num = "20230926001"

order_2_num = "20230927002"

order_1 = {
    "order_number": order_1_num,
    "statu": "已发货",
    "shipping_date": "2023-09-26",
    "estimated_delivered_date": "2023-09-31"
}

order_2 = {
    "order_number": order_2_num,
    "statu": "未发货",
    "shipping_date": None,
    "estimated_delivered_date": None

}

answer_order_info = PromptTemplate(template="请把下面的订单信息回复给用户:\n{order}?", input_variables=["order"])

answer_order_llm = LLMChain(llm=ChatOpenAI(temperature=0), prompt=answer_order_info)


# 模拟订单
@tool("searchOrder", return_direct=True)
def search_order(input: str) -> str:
    """userful for when you need to answer questions about customers orders"""
    pattern = r"\d{11}"
    match = re.search(pattern, input)
    order_number = input
    if match:
        order_number = match.group(0)
    else:
        return f"""请提供订单号"""
    if order_number == order_1_num:
        return answer_order_llm.run(json.dumps(order_1))
    elif order_number == order_2_num:
        return answer_order_llm.run(json.dumps(order_2))
    else:
        return f"""根据{input}没有找到订单"""


# 模拟推荐商品
def recommend_product(input: str) -> str:

    if "male".lower() == input.lower():
        return "红色衣服,衣服的商品编号为999"

    elif "female".lower() == input.lower():
        return "黄色衣服,衣服的商品编号为888"
    else:
        return "蓝色衣服,衣服的商品编号为777"


# 模拟推荐商品
@tool("productPrice", return_direct=True)
def product_price(input: str) -> str:
    """userful for when you need to answer questions about product price.
       the user needs to provide the item number to query product price
       Answer users' questions in Chinese
       """
    print(str)

    pattern = r"\d{3}"
    match = re.search(pattern, input)
    product_number = input
    if match:
        product_number = match.group(0)
    else:
        return f"""请提供商品编号"""

    if "999" == product_number:
        return "价格为1080"
    elif "888" == product_number:
        return "价格为2080"
    elif "777" == product_number:
        return "价格为3080"
    else:
        return "价格不知道"


# 模拟问电商faq
@tool("FAQ", return_direct=True)
def faq(input: str) -> str:
    """userful for when you need to answer questions about shopping policies,like return policy
       Answer users' questions in Chinese
    """
    return faq_chain.run(input)


tools = [
    Tool(
        name="recommend product", func=recommend_product,
        description="""userful for when you need to answer questions about product recommendations,
                    "if question about male ,input value is male,    
                     if question about female ,input value is female
                     """,
        return_direct=True
    ),
    faq,
    search_order,
    product_price
]

memory = ConversationBufferMemory(memory_key="chat_history", return_message=True)
# 当没有相关答案,不需要一直重试,最大次数max_iterations=2
agent = initialize_agent(tools, llm, agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION, memory=memory, verbose=True)


# question = "我有一个订单20230926002的购买日期是多久?一直没有收到,啥时候发货,帮我查下"
# print(agent.run(question))

def query_answer(question: str) -> str:
    # question = "我要查询一个订单啥时候送到?"
    res = agent.run(question)
    print(res)
    return res


if __name__ == '__main__':
    query_answer("我的订单到哪了?")


faq.txt

Q:如果更改收获地址?
A:在订单发货前,登录账号,进行修改,如果已经发货,联系客服协助处理

Q:如何查询发票?
A:进入"我的发票"页面,在此页面上查看详细信息

Q:为什么我的订单被取消?
A:订单可能因为库存不足,支付异常,用户要求等原因被取消,联系客服

Q:如何使用优惠券?
A:在购物车页面,输入优惠券代码后,点击"应用"。优惠券折扣将自动应用你的订单

Q:物流时效是多久?
A:一般情况下,大部分城市的订单在2-3个工作日,偏远地区是5-7个工作日,具体的配货时间可能因为订单的商品,物流公司而异

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

C++ | C++11新特性(下)

前言 前面我们介绍了C11列表初始化、新的类功能以及右值引用等新特性,本文继续介绍关于可变参数模板以及lambda表达式等新语法; 一、可变参数模板 在C11前,我们有普通固定数量模板参数,但对于可变参数,我们无从下手&am…

淘宝电商必备的大数据应用

在日常生活中,大家总能听到“大数据”“人工智能”的说法。现在的大数据技术应用,从大到巨大科学研究、社会信息审查、搜索引擎,小到社交联结、餐厅推荐等等,已经渗透到我们生活中的方方面面。到底大数据在电商行业可以怎么用&…

什么是EventEmitter?它在Node.js中有什么作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是EventEmitter?⭐ 它在Node.js中的作用是什么?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为…

轻松上手Docker:学习如何创建和运行自己的Docker容器

文章目录 轻松上手Docker:学习如何创建和运行自己的Docker容器容器的介绍Docker的技术架构容器的工作机制(Docker)容器的关键技术 - NamespaceNamespace隔离说明 容器的关键技术 - CgroupDocker环境搭建1)安装基础软件包2&#xf…

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测

分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测&#xff0…

跟着顶级科研报告IPCC学绘图:温度折线/柱图/条带/双y轴

复现IPCC气候变化过程图 引言 升温条带Warming stripes(有时称为气候条带,目前尚无合适且统一的中文释义)是数据可视化图形,使用一系列按时间顺序排列的彩色条纹来视觉化描绘长期温度趋势。 在IPCC报告中经常使用这一方案 IPCC是…

自学——网络安全——黑客技术

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客!!! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队…

【小程序 - 基础】WXML、WXSS语法以及小程序的配置、网络数据请求_03

目录 一、WXML模板语法 1. 数据绑定 1.1 数据绑定的基本原则 1.2 在 data 中定义页面的数据 1.3 Mustache 语法的格式 1.4 Mustache 语法的应用场景 2. 事件绑定 2.1 什么是事件 2.2 小程序中常用的事件 2.3 事件对象的属性列表 2.4 target 和 currentTarget 的区别…

510758-28-8,用于标记蛋白质和酶的配体TBTA

产品简介:Tris(benzyltriazolylmethyl)amine (TBTA)是一种配体,能作为生化工具用于标记蛋白质和酶。 CAS号:510758-28-8 中文名:三[(1-苄基-1H-1,2,3-三唑-4-基)甲基]胺 英文名:TBTA 化学式:C30H30N10…

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤

NestJs和Vite使用monorepo管理项目中,需要使用共享的文件夹步骤 1 首先需要将nest-cli打包的功能通过webpack接管 nest-cli.json文件内容 {"$schema": "https://json.schemastore.org/nest-cli","collection": "nestjs/schematics",…

400电话和95开头的电话有什么区别吗?

400电话和95开头的电话是中国特有的电话号码,它们在功能和使用方面存在一些区别。 首先,400电话是一种虚拟电话号码,也被称为企业热线电话。它是由企业租用的,用于提供客户服务、销售咨询等业务。400电话的号码前缀为400&#xf…

嵌入式Linux应用开发-基础知识-第二章 Hello驱动

嵌入式Linux应用开发-基础知识-第二章 Hello驱动 第二章 Hello 驱动(不涉及硬件操作)2.1 APP 打开的文件在内核中如何表示2.2 打开字符设备节点时,内核中也有对应的 struct file2.3 请猜猜怎么编写驱动程序2.4 请不要啰嗦,表演你的代码吧2.4.1 写驱动程序…

如何定时备份使用Docker构建的MySQL容器中的数据库

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 模型训练1)数据集分析2)数据预处理3)模型创建(1)定义参数(2)定义网络数据输入占位符(3)定义用户嵌入矩阵(4)定义电影嵌入矩阵(5)定义电影类型嵌入矩阵(6)处理电影名称(7) 全连…

Ceisium展示——图层切换展示

文章目录 需求分析需求 Cesium 中添加 自定义 对图层的切换 分析 <!-- *@Author: Hukang*@Description: 影像地图图层管理*@date : 2023-

微商产品防伪查询系统网站源码-附90套证书PSD模板和印章生成工具

产品防伪查询系统网站源码是一套功能强大的防伪查询系统&#xff0c;该系统功能齐全&#xff0c;支持防伪查询、证书生成、印章生成等多种功能&#xff0c;附带90套证书模板&#xff0c;适合微商等领域的防伪查询。该源码还带有PSD文件和印章生成工具&#xff0c;让用户可以轻松…

【c语言中的数组指针和指针数组介绍】

C语言中有两个与数组和指针相关的重要概念&#xff1a;数组指针&#xff08;pointer to an array&#xff09;和指针数组&#xff08;array of pointers&#xff09;。它们描述了指针和数组的不同组合方式。 数组指针&#xff08;Pointer to an Array&#xff09;&#xff1a;数…

【设计模式】六、建造者模式

文章目录 需求介绍角色应用实例建造者模式在 JDK 的应用和源码分析java.lang.StringBuilder 中的建造者模式 建造者模式的注意事项和细节 需求 需要建房子&#xff1a;这一过程为打桩、砌墙、封顶房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼&#xff0c;别墅&…

[Machine learning][Part3] numpy 矢量矩阵操作的基础知识

很久不接触数学了&#xff0c;machine learning需要用到一些数学知识&#xff0c;这里在重温一下相关的数学基础知识 矢量 矢量是有序的数字数组。在表示法中&#xff0c;矢量用小写粗体字母表示。矢量的元素都是相同的类型。例如&#xff0c;矢量不包含字符和数字。数组中元…

计算机,软件工程,网络工程,大数据专业毕业设计选题有哪些(附源码获取)

计算机&#xff0c;软件工程&#xff0c;网络工程&#xff0c;大数据专业毕业设计选题有哪些?&#xff08;附源码获取&#xff09; ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于J…