LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题

背景

楼主决定提升与LLM交互的质量,之前是直接prompt->answer的范式,现在我希望能用上ReAct策略和能够检索StackOverflow,让同一款LLM发挥出更大的作用。

难点

1. 怎样调用StackOverflow

step1 pip install stackspi

step 2

from langchain.agents import load_toolstools = load_tools(["stackexchange"],llm=llm
)

注:stackoverflow是stackexchange的子网站 

2. 交互次数太多token输入超出了llm限制

approach 1 使用ConversationSummaryBufferMemory

这种记忆方式会把之前的对话内容总结一下,限制在设定的token个数内

from langchain.memory import ConversationSummaryBufferMemorymemory = ConversationSummaryBufferMemory(llm = llm, # 这里的llm的作用是总结max_token_limit=4097,memory_key="chat_history"
)

approach 2 设置参数max_iterations

agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, max_iterations=4, # 限制最大交互次数,防止token超过上限verbose=True
)

3. llm总是回复无法回答

很多教程把温度设置成0,说是为了得到最准确的答案,但是我发现这样设置,agent会变得特别谨慎,直接说它不知道,温度调高以后问题解决了。

测试问题

What parts does a JUnit4 unit test case consist of?

代码

from constants import PROXY_URL,KEYimport warnings
warnings.filterwarnings("ignore")import langchain
langchain.debug = Truefrom langchain.agents import load_tools
from langchain.chat_models import ChatOpenAIfrom langchain.agents import AgentExecutor, ZeroShotAgent
from langchain.chains import LLMChain
from langchain.memory import ConversationSummaryBufferMemoryllm = ChatOpenAI(temperature=0.7, # 如果参数调得很低,会导致LLM特别谨慎,最后不给答案model_name="gpt-3.5-turbo-0613", openai_api_key=KEY,openai_api_base=PROXY_URL
)memory = ConversationSummaryBufferMemory(llm = llm, # 这里的llm的作用是总结max_token_limit=4097,memory_key="chat_history"
)prefix = """You should be a proficient and helpful assistant in java unit testing with JUnit4 framework. You have access to the following tools:"""
suffix = """Begin!"{chat_history}
Question: {input}
{agent_scratchpad}"""tools = load_tools(["stackexchange"],llm=llm
)prompt = ZeroShotAgent.create_prompt(tools,prefix=prefix,suffix=suffix,input_variables=["input", "chat_history", "agent_scratchpad"],
) # 这里集成了ReActllm_chain = LLMChain(llm=llm, prompt=prompt)agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, max_iterations=4, # 限制最大交互次数,防止token超过上限verbose=True
)agent_chain = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True, memory=memory
)def ask_agent(question):answer = agent_chain.run(input=question)return answerdef main():test_question = "What parts does a JUnit4 unit test case consist of?"test_answer = ask_agent(test_question)return test_answerif __name__ == "__main__":main()

最后输出

[chain/end] [1:chain:AgentExecutor] [75.12s] Exiting Chain run with output:
{
  "output": "A JUnit4 unit test case consists of the following parts:\n1. 
Test class: This is a class that contains the test methods.\n2. Test methods: These are the methods that contain the actual test code. They are annotated with the @Test annotation.\n3. Assertions: These are used to verify 
the expected behavior of the code being tested. JUnit provides various assertion methods for this purpose.\n4. Annotations: JUnit provides several annotations that can be used to configure the test case, such as @Before, @After, @BeforeClass, and @AfterClass.\n\nOverall, a JUnit4 unit test case 
is a class that contains test methods with assertions, and can be configured using annotations."
}

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

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

相关文章

使用阿里云试用Elasticsearch学习:1.7 基础入门——索引管理

我们已经看到 Elasticsearch 让开发一个新的应用变得简单,不需要任何预先计划或设置。 不过,要不了多久你就会开始想要优化索引和搜索过程,以便更好地适合您的特定用例。 这些定制几乎围绕着索引和类型的方方面面,在本章&#xff…

基于单片机的有害气体检查系统设计

**单片机设计介绍,基于单片机的有害气体检查系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的有害气体检查系统设计旨在实现对环境中各种有害气体的实时监测与报警,保障人员健康和环境…

numpy库read_excek,读取函数

文件说明: 版本:window 10 python3.10 解决的问题:pandas库如何读取excel文件 使用pandas库读取Excel文件可以通过以下步骤实现: 1.首先,确保你已经安装了pandas库。可以使用以下命令在Python环境中安装pandas库&…

如何使用NumPy处理数组翻转与变形

NumPy是Python中一个强大的库,主要用于处理大型多维数组和矩阵的数学运算。处理数组翻转与变形是NumPy的常用功能。 1.对多维数组翻转 n np.random.randint(0,100,size(5,6))n# 执行结果array([[ 9, 48, 20, 85, 19, 93], [ 1, 63, 20, 25, 19, 44], …

用 Wireshark 解码 H.264

H264,你不知道的小技巧-腾讯云开发者社区-腾讯云 这篇文章写的非常好 这里仅做几点补充 init.lua内容: -- Set enable_lua to false to disable Lua support. enable_lua trueif not enable_lua thenreturn end-- If false and Wireshark was start…

【蓝桥杯每日一题】4.1 奶酪

我天!哥们经过两个周的忙碌又重生了! 原题链接:528. 奶酪 - AcWing题库 本题注意点: 注意几个边界值,如果说没有球连接顶部或者底部,老鼠是不可能上来的,直接say no!要利用公式判断两个球是相…

零基础轻松入门Java数据库连接(JDBC)

什么是JDBC? Java数据库连接(JDBC)就像是Java程序和数据库之间的翻译官。它是一个官方的标准接口集,让Java程序能和不同的数据库“对话”。甭管你是在跟MySQL、Oracle还是SQL Server打交道,只要有了JDBC,J…

OpenCV入门例程:裁剪图片、模糊检测、黑屏检测

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 本例程运行环境为CentOS7&…

AI创业机会的探索

AI创业机会的探索 随着科技的飞速发展,人工智能(AI)已成为当今世界的重要技术之一。AI的广泛应用不仅改变了我们的生活方式,也为创业者带来了前所未有的机会。以下,我们将一起探讨AI领域中的一些创业机会。 一、智能…

JS详解-函数柯里化

简介: 柯里化(Currying)是一种关于函数的高阶技术。柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。柯里化不会调用函数。它只是对函数进行转换。 举个例子: 已最简单的…

图像处理入门 3(how to get the pixel pitch / 如何获得单个像素的尺寸)

在这里一节里面,将记录如何获得一个相机传感器中单个像素点的尺寸,为了实现不同相机照片之间的匹配。 如果我们知道了相机传感器的尺寸和分辨率的大小,自然就可以求出单个像素的大小。 在这里插入图片描述: 如何获得相机传感器的…

Redis 怎么发布订阅

在Redis中,发布-订阅模式(Pub/Sub)允许客户端(订阅者)订阅频道,并接收其他客户端(发布者)发送到该频道的消息。下面是如何在Redis中使用发布-订阅模式的简要说明: 订阅频…

C++多线程:async、future、packaged_task、promise、shared_future的学习与使用(九)

1、异步任务线程 异步线程的概念: 异步:就是非同步,同步就是必须一个一个的执行,异步可以两个事情一起干异步线程:异步线程就相当于把非关联的两件事分开找两个线程去执行,而分开的那个就是异步线程举例&am…

06-kafka配置

生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表,用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…,无需添加所有的集群地址,kafka会根据提供的地址发现其他的地址&…

golang设计模式图解——模板方法模式

设计模式 GoF提出的设计模式有23个,包括: (1)创建型(Creational)模式:如何创建对象; (2)结构型(Structural )模式:如何实现类或对象的组合; (3&a…

FastAPI Web框架教程 第13章 WebSocket

13-1 WebSocket是什么 WebSocket简介: WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。 在WebSocket API中,浏览器和服务器只需要完成一…

【JavaSE】反射

Java代码的生命周期 Java代码在计算机中经历的阶段:Source源代码阶段、Class类对象阶段、RunTime运行时阶段。 Source源代码阶段: 这个阶段是由程序员编写生成源代码,再由Javac编译器生成class文件。 Class类对象阶段:由类加载器将class文件加载到JVM内…

【网站项目】少儿编程管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

备战蓝桥杯---多路归并与归并排序刷题

话不多说,直接看题 1. 我们考虑一行一行合并,一共m次,我们合并两个并取前n小,那么我们怎么取? 我们采用分组的思想: 我们选第一列的min,然后把后面那个再纳入考虑,用优先队列实现即可。 下面…