个人技术总结——在LangChain中使用国产大模型调用Tools的实践总结
目录
- 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]
联网效果:

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时,经常遇到网络请求失败的情况。
解决过程:
- 检查网络连接和API服务的可用性。
- 添加重试机制以确保请求成功。
3.2 缺少合适的API
问题描述:很多API都需要访问海外网络,国内访问不了。
解决过程:
- 找到一个平替的baidusearch
4. 总结
通过这次实践,我学会了如何在LangChain中集成和调用国产大模型,解决了在API调用和数据处理过程中遇到的多个技术难题。这不仅增强了我的技术能力,也提高了我在实际项目中解决问题的能力。
5. 参考文献
参考博客
相关推荐
langchain+大模型函数调用驱动爬虫数据并理解爬虫数据.zip
langchain+大模型函数调用驱动爬虫数据并理解爬虫数据: 1. 爬虫数据 2.大模型调用函数爬取实时数据并理解数据; 3. 内含示例教程
基于Swagger20规范的LangChain4j工具自动转换器_将Swagger文档零代码转换为LangChain4j可用的Tools对象_实现大模型与现有API的无缝集成_支.zip
基于Swagger20规范的LangChain4j工具自动转换器_将Swagger文档零代码转换为LangChain4j可用的Tools对象_实现大模型与现有API的无缝集成_支.zip
06-LangChain使用之Agents.pdf
06-LangChain使用之Agents
05-LangChain使用之Tools.pdf
05-LangChain使用之Tools.pdf
LangChain4j教学知识库实战[可运行源码]
本文详细介绍了LangChain4j在Java开发中的实战应用,包括其核心特性、与Spring AI的对比、初识LangChain4j的步骤、多模型集成、记忆对话实现、RAG(检索增强生成)技术、向量数据库应用以及多模型协作等。LangChain4j通过统一的API简化了与多种大模型的集成,支持15+热门LLM和20+嵌入模型,适用于多模型平台开发。文章还展示了如何通过LangChain4j实现功能调用(Tools)、预设角色(SystemMessage)、持久化对话记忆以及知识库检索增强生成等高级功能,并提供了整合SpringBoot的实战示例。最后,探讨了如何通过Chain多个ServiceAI实现任务编排和智能体协作,为开发者提供了全面的技术指导和实践案例。


