个人技术总结——在LangChain中使用国产大模型调用Tools的实践总结

222100229俞炜昆 222100229俞炜昆 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

目录

  • 1. 技术概述
  • 2. 技术详述
  • 3. 技术使用中遇到的问题和解决过程
  • 4. 总结
  • 5. 参考文献
  • 参考博客

1. 技术概述

技术概述:

LangChain 是一个用于开发由大语言模型驱动的应用程序的开源框架,提供了模块化的组件和可定制化的用例链。
简单来说,它允许开发人员将像 GPT-4 这样的大型语言模型与外部的计算和数据源结合起来。 目前,它提供了 Python 和 JavaScript(确切地说是 TypeScript )的软件包。LangChain 是一个强大的框架,旨在帮助开发人员使用语言模型构建端到端的应用程序。 它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。

tools是LLM接触外部世界的工具,比如联网、数学计算、读取文件等都是通过tools的能力。

2. 技术详述

2.1 环境配置与依赖安装

首先,需要配置开发环境并安装必要的依赖项。

pip install langchain #其他需要的库

2.2 获取和配置国产大模型的API密钥

os.environ["MOONSHOT_API_KEY"] = "**************"

2.3 创建LangChain项目

创建一个新的LangChain项目,并初始化相关文件和目录结构。

2.4 编写调用国产大模型的工具代码

编写用于调用国产大模型API的函数。

llm = MoonshotChat(streaming=True,temperature=0.3,api_key="xxxxx")

先定义两个简单的tool类

def multiply(first_int: int, second_int: int) -> int:  
    """将两个数相乘"""  
    return first_int * second_int  
  
  
@tool  
def add(first_int: int, second_int: int) -> int:  
    "将两个数相加"  
    return first_int + second_int``
tools=[multiply,add]
prompt = hub.pull("hwchase17/openai-tools-agent")  
llm = init_llm("kimi")

定义一个agent
agent = create_openai_tools_agent(llm, tools, prompt)  
  
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
 result = agent_executor.invoke({"input": "999+999*72177="})

继续接入实用的tool,比如baidusearch

@tool  
def baidu_search(query:str) -> str:  
    """联网搜索内容"""  
    params = {  
        "engine": "baidu",  
        "q": query,  
        "api_key": "xxxxxxx",  
        "rn":"6"  
    }  
    search = BaiduSearch(params)  
    results = search.get_dict()  
    return results["organic_results"]

调用和前面一样的,记得改为
tools=[multiply,add,baidu_search]

联网效果:

img

2.4 编写流式异步传输不同事件数据的代码

async def chat_tools(history,input):  
    async for event in agent_executor.astream_events(  
            {"input":input,"chat_history":history},  
            version="v1",  
    ):  
        kind = event["event"]  
        # 根据不同的事件类型生成不同的 SSE 消息  
        if kind == "on_chain_start":  
            if event["name"] == "Agent":  
                msg = f"data: Starting agent: {event['name']} with input: {event['data'].get('input')}\n\n"  
                yield msg  
        elif kind == "on_chain_end":  
            if event["name"] == "Agent":  
                msg = f"data:\n--\ndata: Done agent: {event['name']} with output: {event['data'].get('output')['output']}\n\n"  
                yield msg  
        elif kind == "on_chat_model_stream":  
            content = event["data"]["chunk"].content  
            if content:  
                msg = f"data: {content}\n\n"  
                yield msg  
        elif kind == "on_tool_start":  
            msg = f"data: --\ndata: Starting tool: {event['name']} with inputs: {event['data'].get('input')}\n\n"  
            yield msg  
        elif kind == "on_tool_end":  
            msg = f"data: Done tool: {event['name']}\ndata: Tool output was: {event['data'].get('output')}\ndata: --\n\n"  
            yield msg

因为Langchain没有对大部分国产大模型做适配,这一部分的工作得手工完成。

3. 技术使用中遇到的问题和解决过程

3.1 网络请求失败

问题描述:在调用API时,经常遇到网络请求失败的情况。

解决过程:

  1. 检查网络连接和API服务的可用性。
  2. 添加重试机制以确保请求成功。

3.2 缺少合适的API

问题描述:很多API都需要访问海外网络,国内访问不了。

解决过程:

  1. 找到一个平替的baidusearch

4. 总结

通过这次实践,我学会了如何在LangChain中集成和调用国产大模型,解决了在API调用和数据处理过程中遇到的多个技术难题。这不仅增强了我的技术能力,也提高了我在实际项目中解决问题的能力。

5. 参考文献

参考博客

  1. LLM大语言模型(四):在ChatGLM3-6B中使用langchain - 链接
  2. 一文读懂Langchain:ChatGLM3和ChatGPT的Agent调用分析 - 链接
...全文

相关推荐

langchain+大模型函数调用驱动爬虫数据并理解爬虫数据.zip

langchain+大模型函数调用驱动爬虫数据并理解爬虫数据: 1. 爬虫数据 2.大模型调用函数爬取实时数据并理解数据; 3. 内含示例教程

AI拉呱-洞察AI前沿技术

基于Swagger20规范的LangChain4j工具自动转换器_将Swagger文档零代码转换为LangChain4j可用的Tools对象_实现大模型与现有API的无缝集成_支.zip

基于Swagger20规范的LangChain4j工具自动转换器_将Swagger文档零代码转换为LangChain4j可用的Tools对象_实现大模型与现有API的无缝集成_支.zip

2501_91880063

06-LangChain使用之Agents.pdf

06-LangChain使用之Agents

野生程序员大新

05-LangChain使用之Tools.pdf

05-LangChain使用之Tools.pdf

Guangyan_

LangChain4j教学知识库实战[可运行源码]

本文详细介绍了LangChain4j在Java开发中的实战应用,包括其核心特性、与Spring AI的对比、初识LangChain4j的步骤、多模型集成、记忆对话实现、RAG(检索增强生成)技术、向量数据库应用以及多模型协作等。LangChain4j通过统一的API简化了与多种大模型的集成,支持15+热门LLM和20+嵌入模型,适用于多模型平台开发。文章还展示了如何通过LangChain4j实现功能调用(Tools)、预设角色(SystemMessage)、持久化对话记忆以及知识库检索增强生成等高级功能,并提供了整合SpringBoot的实战示例。最后,探讨了如何通过Chain多个ServiceAI实现任务编排和智能体协作,为开发者提供了全面的技术指导和实践案例。

flink9streamer
评论
收藏 已收藏
分享
返回顶部