当前位置: 首页 > news >正文

Ai学习之LangChain框架

一、什么是LangChain

LangChain 是一个用于开发由大型语言模型(LLMs)驱动的应用程序的开源框架。它提供了标准接口、工具和抽象,帮助开发者更高效地构建和部署与 LLM 相关的复杂应用,而不必从头开始处理所有底层细节。

其本质上就是基于大模型研发的框架,可以大大降低开发者的开发工作量。

核心价值说明
抽象与模块化将 LLM 应用拆解为可复用组件(模型调用、提示词管理等),通过统一接口降低开发复杂度。
链式处理(Chains)通过管道符 “|” 或函数式编程连接组件,实现复杂任务自动化流程(如提示词生成→模型调用→结果解析)。
生态系统集成支持对接多种 LLM 模型、向量数据库、工具 API 及存储系统(如 OpenAI、Pinecone、Redis 等)。

二、为什么要用 LangChain

直接对接模型 API 的优势

优势适用场景
轻量灵活,可控性强- 简单任务(如单次文本生成、翻译)
- 需要高度定制化逻辑(如特殊格式输出、安全合规控制)
性能损耗低- 高并发场景
- 对延迟敏感的实时应用(如聊天机器人即时响应)
避免框架依赖- 项目初期快速验证 MVP
- 团队不熟悉第三方框架,希望减少学习成本
成本透明- 直接按模型 API 用量付费,无框架额外开销

列子:

package mainimport ("context""fmt""net/http""os""github.com/sashabaranov/go-openai"
)func main() {ctx := context.Background()client := openai.NewClient(os.Getenv("OPENAI_API_KEY"))req := openai.CompletionRequest{Model:       openai.GPT3TextDavinci003,Prompt:      "推荐一部科幻电影",Temperature: 0.7,}resp, err := client.CreateCompletion(ctx, req)if err != nil {panic(err)}fmt.Println(resp.Choices[0].Text)
}

通过 LangChain 调用模型的优势

优势适用场景
模块化开发,效率高- 复杂任务链(如多轮对话、工具调用、知识库检索)
- 需要快速组合不同组件(提示词、模型、数据库)
生态集成统一- 多模型切换(OpenAI ↔ Hugging Face ↔ 本地模型)
- 无缝对接向量数据库、工具 API
内置最佳实践- 自动处理提示词模板、输出解析、重试机制
- 支持内存管理(对话历史跟踪)
社区资源丰富- 参考成熟的示例代码(如问答系统、代码生成工具)
- 利用社区封装的自定义组件

示例:LangChain 实现带知识库的问答(Go)

package mainimport ("context""fmt""github.com/tmc/langchaingo/chains""github.com/tmc/langchaingo/llms/openai""github.com/tmc/langchaingo/schema""github.com/tmc/langchaingo/vectorstores/chroma"
)func main() {ctx := context.Background()llm, _ := openai.New()// 初始化向量数据库并添加知识库store, _ := chroma.New(chroma.WithEmbeddings(openai.NewEmbeddings()))store.AddDocuments(ctx, []schema.Document{{PageContent: "小米的CEO是雷军",}})// 创建检索链(自动完成 "检索 → 生成回答" 流程)retriever := store.AsRetriever()chain := chains.NewRetrievalQAChain(llm, retriever)// 提问:诺兰导演的科幻电影有哪些?result, _ := chain.Run(ctx, "小米的CEO是谁?")fmt.Println(result) // 输出包含知识库内容的回答
}

三、如何选择?

场景推荐方式理由
简单任务(如单次文本生成)直接调用 API轻量高效,无需额外框架开销
复杂任务链(如多轮对话+工具调用)LangChain 等框架模块化组件快速组装,减少重复开发
高并发/低延迟场景直接调用 API避免框架层性能损耗
多模型/多工具集成LangChain 等框架统一接口适配不同服务,降低集成成本
团队缺乏框架经验直接调用 API学习成本低,快速上手

四、混合模式:框架与原生 API 结合

如果你既想利用框架的高效性,又需保留对部分环节的控制权,可以采用 混合模式

  1. 用 LangChain 管理核心流程(如链式调用、检索逻辑)。
  2. 自定义部分组件(如用原生 API 替换框架的模型调用层,或添加自定义工具)。
// 示例:在 LangChain 链中插入自定义 API 调用
type CustomAPITool struct {// 实现 LangChain 的 Tool 接口Name        stringDescription string
}func (t *CustomAPITool) Call(ctx context.Context, input string) (string, error) {// 直接调用外部 API(如天气、股票数据)return "自定义 API 返回结果", nil
}// 将自定义工具注入 LangChain 代理
agent, _ := agents.NewZeroShotAgent(llm,[]agents.Tool{&CustomAPITool{Name: "custom_api", Description: "调用自定义服务"}},
)
方案优势劣势适用场景
直接调用 API轻量、可控、性能高开发复杂任务成本高简单场景、性能敏感型需求
LangChain 等框架高效集成、模块化、社区生态丰富存在学习成本和轻微性能损耗复杂 LLM 应用、快速迭代项目

根据项目规模和需求灵活选择,两者并非互斥——简单场景用原生 API,复杂场景用框架,甚至可以混合使用。

五、 LangChainGo 如何支持其他大模型

LangChain 的官方 Go 实现,可通过自定义配置支持 DeepSeek(兼容 OpenAI API 接口)

package mainimport ("context""fmt""github.com/tmc/langchaingo/llms""github.com/tmc/langchaingo/llms/openai"
)func main() {ctx := context.Background()// 配置 DeepSeek API(兼容 OpenAI 接口)llm, err := openai.New(openai.WithBaseURL("https://api.deepseek.com/v1"),openai.WithAuthToken("your-deepseek-api-key"),)if err != nil {panic(err)}// 直接调用 DeepSeek 模型result, err := llm.Call(ctx, "雷军是几几年出生的")if err != nil {panic(err)}fmt.Println(result)
}

相关文章:

  • 證券行業證券交易系統開發方案
  • 基于flask+vue的电影可视化与智能推荐系统
  • 小白入门FPGA设计,如何快速学习?
  • 05_核支持向量机
  • 知识体系_数据分析挖掘_基尼系数
  • 网页前端开发(基础)
  • 软考中级-软件设计师 UML图详解( 类图,对象图,用例图,序列图,通信图,状态图,活动图,构件图,部署图)
  • 面试算法刷题3(核心+acm)
  • 【typenum】 14 测试用例(build.rs)
  • SymPy|主元、重新表示、分数、约分表达式、极限、级数、ode、获取值、输出形式
  • 焊接结构动力疲劳计算
  • 阿里云CDN刷新预热--刷新URL
  • 《具身智能机器人:自修复材料与智能结构设计的前沿探索》
  • Unity-编辑器扩展
  • 字符画生成(伟大的CSDN)
  • Linux周测(一)
  • 分治思想在算法(目标检测)中的体现
  • 工业智能网关在工业锅炉安全监控中的组网配置指南
  • 【Sentry运维】25.4.0版本安装
  • 构建AI时代的大数据基础设施-MaxCompute多模态数据处理最佳实践
  • 35款移动应用存在违法违规收集使用个人信息情况,涉及智谱清言、Kimi等
  • 媒体:演员黄杨钿甜耳环事件仍有三大疑问待解
  • 花旗回应减员传闻:持续评估人力资源战略,将为受影响的个人提供支持
  • 大学2025丨苏大教授王尧:文科最大的危机是阐释世界的能力弱化
  • 《风林火山》千呼万唤始出来,戛纳首映后口碑崩盘?
  • 光明日报社副总编辑薄洁萍调任求是杂志社副总编辑