快速开始

JS版:langchain-ai/langchainjs (github.com)
Python版:langchain-ai/langchain: ⚡ Building applications with LLMs through composability ⚡ (github.com)

论文链接:
Automated Repair of Programs from Large Language Models
Practical Program Repair in the Era of Large Pre-trained Language Models
SKCODER: A Sketch-based Approach for Automatic Code Generation
Keeping Pace with Ever-Increasing Data: Towards Continual Learning of Code Intelligence Models
Impact of Code Language Models on Automated Program Repair
[An Empirical Study of Pre-Trained Model Reuse in the Hugging Face Deep Learning Model Registry](https://arxiv.org/pdf/2303.02552.pdf
CrossCodeBench: Benchmarking Cross-Task Generalization of Source Code Models
On the Robustness of Code Generation Techniques: An Empirical Study on GitHub Copilot

Use case:
Code understanding | 🦜️🔗 Langchain
Extraction | 🦜️🔗 Langchain
SQL | 🦜️🔗 Langchain

chatchat-space/Langchain-Chatchat: Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain (github.com)

1
pip install langchain[llms]

Langchain+Next.js本地部署

使用LangChain.js + Next.js 构建的LangChain入门Demo模板。它展示了如何在多个用例中使用和组合 LangChain 模块。具体如下:

环境要求:Node.js>18

0.背景介绍

Next.js

  • 基于React 的开发框架
  • 使用react作为前端框架底层的支持SSR(请求时渲染)、SSG(构建时渲染)等技术的全栈框架
  • 提供了一种简单而强大的方式来构建服务器渲染的应用程序

1.克隆项目

1
git clone https://github.com/langchain-ai/langchain-nextjs-template

2.环境准备

配置nodejs,版本要求>18,如使用的旧版本,则需要下载新版本,然后可以进行多版本NodeJS的配置

1
node -v

配置OpenAI的Api Key
接下来,需要在存储库的 .env.local 文件中设置环境变量。将 .env.example 文件复制到 .env.local 。要从基本示例开始,您只需添加 OpenAI API 密钥,您可以在此处找到该密钥。

3.启动项目

1
2
3
npm install & npm run dev
#or
yarn & yarn dev

4.改造项目

聊天功能

附带历史(History)聊天记录的聊天模型

由于调用openAI具有网络限制,因此先将LLM(ChatModel)改为文心一言

获取文心一言的API key和Secret Key。链接:百度云控制台

1
2
3
#在.env.local文件中配置百度云API Key
BAIDU_API_KEY="OItDxxxxL43xxxx89xxxx"
BAIDU_SECRET_KEY="e7Ifg5FTHYxxxx847BkypNGzSxxxx"

修改源代码`\app\api\chat\route.ts

1
2
3
4
5
6
/**  
* try BaiduWenxin
*/
const model = new ChatBaiduWenxin({
temperature: 0.8,
});

修改提示模板

1
2
//const TEMPLATE = `You are a pirate named Patchy. All responses must be extremely verbose and in pirate dialect.  
const TEMPLATE = `You are a senior software engineer.

聊天模型测试

结构化输出

Structured Output with OpenAI functions | 🦜️🔗 Langchain

目前仅支持使用OpenAI进行函数调回。_Function calling is currently only supported with ChatOpenAI models_

功能:根据预定义的schema模板和用户的输入生成结构化数据

1
2
3
4
5
6
7
8
9
10
11
12
//使用流行的 Zod 模式库定义输出模式
const schema = z.object({
tone: z
.enum(["positive", "negative", "neutral"])
.describe("The overall tone of the input"),
entity: z.string().describe("The entity mentioned in the input"),
word_count: z.number().describe("The number of words in the input"),
chat_response: z.string().describe("A response to the human's input"),
final_punctuation: z
.optional(z.string())
.describe("The final punctuation mark in the input, if any."),
});

上述定义的schema定义了:

  • tone:文本情感,枚举类 positive negative neutral
  • entity:实体,字符串型,提取input中的实体类
  • word_count:单词数量,数值类,获取input中的单词数量
  • chat_response:对话回答,字符串类,对input的回答(相当于chat模型)
  • final_punctuation:最后标点,(可选)字符串类,提取input中最后的标点符号

Example:input=”What a beautiful day!”
AI返回:

1
2
3
4
5
6
7
{
"tone":"positive",
"entity":"day",
"word_count":4,
"chat_response":"Yes, it is a beautiful day indeed!",
"final_punctuation":"!"
}

应用:DWF中实体类的生成。指定需要生成的JSON格式

使用百度千帆作为大模型会报错,不支持函数调用。

代理

目前仅OpenAI支持。Must be used with an OpenAI Functions model.

有些应用需要根据用户输入灵活调用 LLM 和其他工具。代理接口为这类应用提供了灵活性。代理可以使用一整套工具,并根据用户输入决定使用哪些工具。代理可以使用多种工具,并将一种工具的输出作为下一种工具的输入。

检索

可根据文档信息,进行检索。如Q&A according to documents

检索代理

部署

JavaScript部署


可能有两种方式:Node.js作为后端部署 / 集成在DWF前端的Vue框架中使用作为前端部署

Node.js

  • 一般不使用node作为后端,这样还不如直接用Python部署。

前端集成

优点:

  • Vue中集成,直接运行在用户浏览器,不需要考虑大量访问的问题,无后端开销。除非同一个Api_Key在同一时间被大量使用(但根据上次河北教育厅培训,好像百度讯飞模型问题不大)
  • 更灵活,也能支持用户根据需求改造langchain,拓展性好。
  • 可能的跨域问题,网络是根据用户环境的或无法访问OpenAI、Vercel等服务

缺点:

  • 安全性差,Api_Key管理(多人共享一个/一人一个自己申请?)和获取方式(环境变量/通过api调用后端返回);前端Api_Key均有泄露风险
  • 数据处理和机器学习库的支持相对较差。

Python部署


优点:

  • 部署在后端,前端通过API调用即可,相对安全。
  • Python拥有强大的数据处理和机器学习库支持,可进一步拓展langChain功能

缺点:

  • DWF后端是Java语言,LangChain目前还没有Java版本,涉及到技术异构(Flask,Django等)的难点。部署LangChain的话需要另开一个服务单独部署。(管理起来可能比较麻烦?)
  • 性能相对较差,当大量用户并发调用后端LangChain服务时,容易崩。

LLM模型选择

  • LangChain有部分功能(function call等)仅支持OpenAI,OpenAI的访问需要代理🧱。选择OpenAI的话部署的时候需要处理网络环境。

Flowise 和 LangFlow 是两个不同的工具,用于自然语言处理和对话流程设计。它们各有优势和适用场景。

Flowise 是一个强大的自然语言处理平台,可以帮助开发者构建智能对话系统。它提供了丰富的语义理解和对话管理功能,可以处理复杂的对话场景,并支持多轮对话和上下文理解。Flowise 还提供了一些预训练的模型和工具,可以加速对话系统的开发过程。

LangFlow 是一个对话流程设计工具,它专注于对话流程的可视化设计和管理。LangFlow 提供了直观的界面和工具,可以帮助开发者设计和管理对话流程,包括对话节点、条件逻辑和回复等。LangFlow 还支持多语言和多渠道的对话流程设计。

因此,选择使用哪个工具取决于具体的需求和使用场景。如果需要构建复杂的对话系统,并且需要强大的语义理解和对话管理功能,那么 Flowise 可能更适合。如果只需要设计和管理对话流程,并且更注重可视化和易用性,那么 LangFlow 可能更适合。

零代码GPT:Flowise VS langflow - 知乎 (zhihu.com)
我们分析了352个使用了Langchain的项目,渗透GPT,开源codeInterpreter平替,GPT销售等12个项目串讲 - 知乎 (zhihu.com)

LocalAI

docker desktop