<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [LangChain] 09. Runnable接口 - 2

      RunnableSequence

      .pipe() 是逐個拼接,RunnableSequence.from([...]) 則是顯式聲明流程結構,將多個步驟寫成數組更清晰。

      課堂練習:快速上手示例

      import { ChatOllama } from "@langchain/ollama";
      import { PromptTemplate } from "@langchain/core/prompts";
      import { StringOutputParser } from "@langchain/core/output_parsers";
      import { RunnableLambda, RunnableSequence } from "@langchain/core/runnables";
      
      // 1. 創建 Prompt 模板
      const pt = PromptTemplate.fromTemplate("請使用中文解釋以下概念:{topic}");
      
      // 2. 創建本地模型
      const model = new ChatOllama({ model: "llama3", temperature: 0.7 });
      
      // 3. 創建字符串解析器
      const parser = new StringOutputParser();
      
      // 4. 插件
      const fn = (text) => {
        return text.replace(/閉包/g, "*&*閉包*&*");
      };
      const highlight = RunnableLambda.from(fn);
      
      const chain = RunnableSequence.from([pt, model, parser, highlight]);
      
      const res = await chain.invoke({
        topic: "閉包",
      });
      
      console.log(res);
      

      RunnablePassthrough

      將輸入原樣傳給輸出,中間不做任何處理。

      import { RunnablePassthrough } from "@langchain/core/runnables";
      
      const passthrough = new RunnablePassthrough();
      
      // 相當于輸入什么,輸出就是什么
      const result = await passthrough.invoke("Hello, LangChain!");
      console.log(result); // 輸出:Hello, LangChain!
      

      ?? 這有什么意義?

      實例化 RunnablePassthrough 的時候,接收一個配置對象,該對象中可以配置 func 副作用函數,用于對輸入做一些副作用處理,例如記錄日志、寫入數據庫、做埋點等。

      import { RunnablePassthrough } from "@langchain/core/runnables";
      
      const logger = new RunnablePassthrough({
        // 一個副作用函數
        func: async (input) => {
          console.log("收到輸入:", input);
          // 對輸入做一些副作用處理,例如記錄日志、寫入數據庫、做埋點等
        },
      }); 
      
      const res = await logger.invoke("LangChain");
      console.log(res);
      

      有時希望為傳入的對象補充字段(如時間戳、用戶信息、API 結果等),這時可以使用 .assign()。 它的作用是“給上下文添加字段”,就像在中間插入一步 Object.assign:

      import { RunnablePassthrough } from "@langchain/core/runnables";
      
      const injector = RunnablePassthrough.assign({
        timestamp: async () => new Date().toISOString(),
        meta: async () => ({
          region: "us-east",
          requestId: "req-456",
        }),
      });
      
      const result = await injector.invoke({ query: "Vue 是什么?" });
      
      console.log(result);
      /*
        {
          query: 'Vue 是什么?',
          timestamp: '2025-08-11T08:07:35.358Z',
          meta: { region: 'us-east', requestId: 'req-456' }
        }
      */
      

      可以用它來:

      • 插入時間戳、用戶 ID、請求 ID
      • 注入工具結果:摘要、標簽、翻譯、情緒分析
      • 為 Prompt 添加額外字段

      練習:

      1. 打印用戶輸入日志
      2. 注入 userId
      3. 拼接 prompt
      4. 調用本地模型
      5. 解析返回結果
      import { RunnablePassthrough } from "@langchain/core/runnables";
      
      const passthrough = new RunnablePassthrough({
        func: async (input) => {
          console.log("Received input:", input);
        },
      });
      
      const res = await passthrough.invoke("什么是閉包");
      
      console.log(res);
      
      
      posted @ 2025-11-03 14:45  Zhentiw  閱讀(3)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av无码之国产精品网址蜜芽| 午夜亚洲国产理论片二级港台二级| 亚洲精品三区二区一区一| 久久精品国产一区二区三| 亚洲精品成人一二三专区| 国产精品高清视亚洲中文| 国产精品普通话国语对白露脸| 人妻中文字幕亚洲精品| 祁阳县| 国产精品自产在线观看一| 亚洲精品一区二区天堂| 欧美另类videossexo高潮| 久久精品色一情一乱一伦| 奇米777四色成人影视| 中文字幕亚洲精品人妻| 国产精品∧v在线观看| 九九热视频在线免费观看| 国产精品青草久久久久福利99| 高清有码国产一区二区| 亚洲国产欧美在线人成| 人人妻碰人人免费| 国产熟睡乱子伦视频在线播放| 平顶山市| 亚洲岛国成人免费av| 午夜福利在线观看成人| 国产亚洲一区二区三不卡| 亚洲有无码中文网| 国产精品免费中文字幕| 国精一二二产品无人区免费应用 | 韩国美女福利视频一区二区 | 亚洲欧美自偷自拍视频图片| 中文字幕国产日韩精品| 日韩精品久久久肉伦网站| 婷婷综合久久狠狠色成人网| 精品国产av无码一区二区三区| 中文字幕人乱码中文| 日韩高清在线亚洲专区国产| 国产精品午夜福利视频| 日日橹狠狠爱欧美视频| 18禁极品一区二区三区| japanese无码中文字幕|