Langchain学习

1. 结合Memory, Prompt, 自定义Tools完成自动生成数据图表/报表的Agent:

Agent目标: 根据用户输入的Prompt让AI对数据库进行数据查询,并生成数据分析报表/可视化图表,这种Agent可以让不会SQL的运营/管理人员使用,生成他们任何想看到的平台数据,而不用再让前端写某个指标的图表了,能大大提升工作效率和减负。只要模型私有化部署保证数据库安全且程序限制不执行增删改操作,就能在生产投入使用了。

Agent实现:

人工需要编码的部分:连接数据库,编写查询数据库所有表名称(tables_name),表结构(descripbe_tables),写入文件(write)的工具,系统提示词 = (

你是一个可以访问SQLite数据库的AI

数据库中有如下表:${tables_name}

不要对某个表存在哪些列做任何假设

你必须使用' descripbe_tables '函数来获取你需要的列数据.

注意: 生成的图表/报告必须确保数据完整性,不要遗漏任何数据!

如果用户要求您生成echarts图表,请确保用户可以运行它并看到效果,而不是白屏页面。你需要选择最合适的图表类型来展示其数据。)

把这个系统提示词传给LLM

AI自动分解的部分:

  1. 得到用户输入的要求:查询数据库中2024年订单数量的趋势数据, 用Echarts可视化图表展示趋势的变化, 将结果生成html

  2. AI第一步会通过descripbe_tables拿到orders表的所有列信息

  3. AI第二步会生成查询出符合要求的2024年的sql语句

  4. 调用工具执行LLM返回的sql, 最终拿到每个月的数据量

  5. 用户要看趋势变化,所以AI决定用折线图来表示

  6. 根据数据生成Echarts代码

  7. 调用工具写入html

  8. Agent流程结束,得到报表结果

效果:

Chain的定义:

"Chain"在LangChain中是指一系列预设的动作或调用序列,通常是硬编码的。这些序列可以是对大型语言模型(LLM)等模板的一系列调用,用于执行特定的任务或处理特定的输入。"Chain"的概念侧重于将一系列操作以固定的顺序执行,每个模块对数据进行处理后再传递给下一个模块。这样的结构有助于构建复杂的语言处理流程,因为它允许将任务分解为更小、更易管理的小块

Chain与Agent的区别:

Agent的核心思想是使用语言模型来选择一系列要执行的动作。Agent中的动作序列不是预先硬编码的,而是由语言模型作为推理引擎来确定哪些动作需要执行以及执行的顺序

总的来说,在LangChain框架中,"Chain"和"Agent"提供了两种不同的方式来构建和执行语言处理任务。"Chain"提供了一种简单、直接且预定义的执行序列,而"Agent"则提供了更复杂、灵活和动态的决策和执行能力,能够适应更广泛的场景和需求

2. 多个chain (第二个chain的输入依赖于第一个chain的结果):

第一个chain: 编写一个非常短的函数来返回一个数组。

javascript 复制代码
const getNumbers = () => [1, 2, 3, 4]

第二个chain: 使用jest为以下代码编写一个测试函数: {code}

javascript 复制代码
cons testFunction = () => {
    // Import the getNumbers function
        const getNumbers = require('./getNumbers')    
        // Test function using Jest
        test('getNumbers function returns an array of numbers', () => {
        // Call the getNumbers function
        // Check if the result is an array
        expect(Array.isArray(result)).toBe(true);
        // Check if the array contains numbers 1, 2, 3, 4
        expect(result).toEqual(expect.arrayContaining([1, 2, 3, 4]));
        // Test function for specific numbers
        test('getNumbers function returns an array with specific numbers', () => {
        // Call the getNumbers function
        const result = getNumbers();
        // Check if the array contains numbers 1, 2, 3, 4
        expect(result).toEqual([1, 2, 3, 4])
    });
}

3. 路由Chain(将用户输入放进大语言模型,通过Prompt的形式让大语言模型来进行路由)

json 复制代码
promptNames: ["physics", "math", "history"],
promptDescriptions: [
    "很适合回答关于物理的问题",
    "很适合回答数学问题",
    "很适合回答有关历史方面的问题",
],
promptTemplates: [
    `你是一位非常聪明的物理学教授。这里有一个问题:{input},
    `你是一个非常聪明的数学家。这里有一个问题:{input}`,
    `你是一位非常聪明的历史学教授。这里有一个问题:{input}`,
],
Q = "光的速度是多少"
First Prompt = "给定语言模型的原始文本输入,选择最适合该输入的模型提示符。你将获得可用提示符的名称以及该提示符最适合的描述。如果你认为修改原始输入最终会使语言模型得到更好的响应,您也可以修改原始输入。请返回一个带有JSON对象的标记代码片段,格式如下: JSON \n{\n "destination": string //要使用的问题回答系统的名称或"DEFAULT"(可选)\n "next_inputs": {\n "input": string //原始输入的潜在修改版本\n} //输入将被输入到下一个模型\n}\n ' ' \n\nREMEMBER:"destination"必须是下面指定的候选提示符之一,或者如果输入不适合任何候选提示符,则可以是"DEFAULT"。next_inputs \ nREMEMBER: \"。如果您认为不需要任何修改,则可以只使用原始输入。\n\n<<以下是你可以选用的提示词: physics:很适合回答关于物理的问题  math:很适合回答数学问题\ history:很适合回答有关历史方面的问; INPUT: 光的速度是多少"
LLM Answer: "```json\n{\n  "destination": "physics",\n  "next_inputs": {\n    "input": "光的速度是多少"\n  }\n}\n```"
 
根据LLM的回答,RouterChain将使用你是一位非常聪明的物理学教授。这里有一个问题:{input}模板构建出:"你是一位非常聪明的物理学教授。这里有一个问题:\n光的速度是多少\n"再次请求LLM,以获得更好的回答
 
大模型最终给出了答案:光速在真空中的速度是一个基本物理常数,通常用符号 c 表示。光速的值大约是每秒299,792,458米。这个速度是极限速度,根据爱因斯坦的相对论,任何信息、物体或影响都不能超过这个速度。光速的这个值在所有惯性参考系中都是相同的,不依赖于观察者或光源的相对运动

4. 带记忆的Agent, 多次调用,它可以根据前一次Agent的结果继续推导新问题的答案

第一个Agent:

Q: 中国川菜中都有哪些菜?

A: 中国川菜,也就是四川菜,是中国八大菜系之一,以其麻辣、鲜香、油润、味浓而著称。川菜中有许多著名的菜肴,例如:1. 宫保鸡丁(Kung Pao Chicken)2. 麻婆豆腐(Mapo Tofu)3. 水煮牛肉(Boiled Beef in Hot Chili Oil)4. 四川火锅(Sichuan Hotpot)5. 夫妻肺片(Fuqi Feipian, Sliced Beef in Chili Sauce)6. 棒棒鸡(Bang Bang Chicken)7. 鱼香肉丝(Yu Xiang Rou Si, Shredded Pork in Garlic Sauce)8. 辣子鸡(La Zi Ji, Chongqing Spicy Chicken)9. 回锅肉(Twice Cooked Pork)10. 酸菜鱼(Suan Cai Yu, Sichuan Pickled Mustard Fish)

这些只是其中的一些例子,四川菜的种类非常丰富,包含了大量的传统菜肴和地方特色小吃。

第二个Agent:

Q: 这些菜里面前三辣的?

A: 四川菜以辣闻名,通常认为水煮牛肉、麻婆豆腐和辣子鸡较辣。

相关推荐
花千树-0105 小时前
LangChain教程 - Agent -之 REACT_DOCSTORE
python·机器学习·langchain·pdf·prompt·aigc·embedding
Loadings6 小时前
AI Agent主流框架对比
langchain·aigc·ai 编程
王毕业8 小时前
从零开始解析RAG(三):五级分块——从字符切分到语义感知的演进之路
langchain
*星星之火*1 天前
【GPT入门】第18课 langchain介绍与API初步体验
gpt·langchain
summer_ful2 天前
Summerful的LangChain入门学习笔记(二)-Model I/O之Prompts
langchain
YuiGod2 天前
《从零开始DeepSeek R1搭建本地知识库问答系统》六:关于聊天模型 API Key 的使用与调用 Embedding 模型
python·langchain·deepseek
bigcarp2 天前
理解langchain langgraph 官方文档示例代码中的MemorySaver
java·前端·langchain
花千树-0104 天前
J-LangChain - Agent - 编排一个 ReAct + Function Call 反应链
java·gpt·langchain·prompt·github·aigc·ai编程
程序员小赵同学5 天前
【LangChain接入阿里云百炼deepseek】
阿里云·langchain·云计算·openai·ai编程·deepseek·百炼