English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french
查看: 1|回复: 0

给大模型添加联网功能的免费方案,以langchain为例

[复制链接]
查看: 1|回复: 0

给大模型添加联网功能的免费方案,以langchain为例

[复制链接]
查看: 1|回复: 0

195

主题

0

回帖

595

积分

高级会员

积分
595
5XIpF2ohx

195

主题

0

回帖

595

积分

高级会员

积分
595
2025-2-25 10:43:37 | 显示全部楼层 |阅读模式
langchain介绍

LangChain 是一个用于开发由大型语言模型 (LLM) 驱动的应用程序的框架。 简单来说,它可以帮助你更轻松地构建利用 LLM(例如 OpenAI 的 GPT 模型、Google 的 PaLM 模型等)的应用程序。

实践

给大模型添加联网功能也就是添加一个搜索引擎。一种方式就是先经过搜索引擎再把信息传给大模型进行回答,另一种就是使用function calling + 搜索引擎API 让大模型自己决定是否需要使用联网功能。
而免费的搜索引擎指的是duckduckgo,可能效果上没有付费的搜索引擎比如必应api与谷歌api好就是了,但是单纯用于测试联网功能的实现那也足够了。
首先先简单过一遍langchain的使用。
接入OpenAI的大模型并使用非流式与流式响应:
from langchain.chat_models import init_chat_modelfrom langchain_core.messages import HumanMessage, SystemMessageapi_key = "你的api_key"model = init_chat_model("gpt-4o-mini", model_provider="openai",api_key=api_key)print(model.invoke([HumanMessage(content="你是谁?")]))messages = [    HumanMessage("你是谁?"),]for token in model.stream(messages):    print(token.content, end="|")
再试一下接入国内的大模型并使用非流式与流式响应:
from langchain.chat_models import init_chat_modelfrom langchain_core.messages import HumanMessageapi_key = "你的api_key"base_url = "https://api.siliconflow.cn/v1"model = init_chat_model("Qwen/Qwen2.5-72B-Instruct", model_provider="openai",api_key=api_key,base_url=base_url)print(model.invoke([HumanMessage(content="你是谁?")]))messages = [      HumanMessage("你是谁?"),]for token in model.stream(messages):    print(token.content, end="|")
由于这个功能的实现,需要使用工具调用,现在来看看在langchain如何使用工具调用:
from langchain.chat_models import init_chat_modelfrom langchain_core.messages import HumanMessagefrom langchain_core.tools import toolfrom duckduckgo_search import DDGS@tooldef add(a: int, b: int) -> int:    """Adds a and b."""    return a + btools = [add]api_key = "你的api_key"base_url = "https://api.siliconflow.cn/v1"model = init_chat_model("Qwen/Qwen2.5-72B-Instruct", model_provider="openai",api_key=api_key,base_url=base_url)llm_with_tools = model.bind_tools(tools)query = "1+3等于几"messages = [HumanMessage(query)]ai_msg = llm_with_tools.invoke(messages)print(ai_msg.tool_calls)messages.append(ai_msg)for tool_call in ai_msg.tool_calls:    selected_tool = {"add": add}[tool_call["name"].lower()]    tool_msg = selected_tool.invoke(tool_call)    print(tool_msg)    messages.append(tool_msg)print(llm_with_tools.invoke(messages).content)
现在来使用duckduckgo:
from duckduckgo_search import DDGSquery = "mingupup是谁?"results = DDGS().text(query, max_results=10)print(results)
将搜索引擎与工具调用结合在一起:
from langchain.chat_models import init_chat_modelfrom langchain_core.messages import HumanMessagefrom langchain_core.tools import toolfrom duckduckgo_search import DDGS@tooldef add(a: int, b: int) -> int:    """Adds a and b."""    return a + b@tooldef get_web_data(query:str) -> str:  """使用DuckDuckGo搜索引擎进行搜索"""  results = DDGS().text(query, max_results=10)  return resultstools = [add,get_web_data]api_key = "你的api_key"base_url = "https://api.siliconflow.cn/v1"model = init_chat_model("Qwen/Qwen2.5-72B-Instruct", model_provider="openai",api_key=api_key,base_url=base_url)llm_with_tools = model.bind_tools(tools)query = "mingupup是谁?"messages = [HumanMessage(query)]ai_msg = llm_with_tools.invoke(messages)print(ai_msg.tool_calls)messages.append(ai_msg)for tool_call in ai_msg.tool_calls:    selected_tool = {"add": add,"get_web_data":get_web_data}[tool_call["name"].lower()]    tool_msg = selected_tool.invoke(tool_call)    print(tool_msg)    messages.append(tool_msg)print(llm_with_tools.invoke(messages).content)
以上就快速实现了简单的联网功能,如果你还想快速创建一个对话应用来测试联网功能,可以使用chainlit:
import chainlit as clfrom datetime import datetimefrom langchain.chat_models import init_chat_modelfrom langchain_core.messages import HumanMessagefrom langchain_core.tools import toolfrom duckduckgo_search import DDGS#@cl.step(type="tool")  # type: ignore@tooldef get_time() -> str:    """获取当前时间"""    # 获取当前时间    now = datetime.now()    # 格式化时间为指定的字符串格式    formatted_time = now.strftime("当前时间是:%Y年%m月%d日 %H:%M。")    return formatted_time#@cl.step(type="tool")  # type: ignore@tooldef get_weather(city: str) -> str:    """获取城市天气"""    return f" {city} 天气晴,25度。"#@cl.step(type="tool")  # type: ignore@tooldef get_web_data(query:str) -> str:    """使用DuckDuckGo搜索引擎进行搜索"""    results = DDGS().text(query, max_results=10)    return resultstools = [get_time,get_weather,get_web_data]api_key = "你的api_key"base_url = "https://api.siliconflow.cn/v1"model = init_chat_model("Qwen/Qwen2.5-72B-Instruct", model_provider="openai",api_key=api_key,base_url=base_url)llm_with_tools = model.bind_tools(tools)@cl.on_chat_startdef on_chat_start():    print("A new chat session has started!")     # Set the assistant agent in the user session.@cl.on_messageasync def on_message(message: cl.Message):       response = cl.Message(content="")    messages = [HumanMessage(message.content)]    ai_msg = llm_with_tools.invoke(messages)    print(ai_msg.tool_calls)    messages.append(ai_msg)    for tool_call in ai_msg.tool_calls:        selected_tool = {"get_time": get_time,"get_weather": get_weather,"get_web_data":get_web_data}[tool_call["name"].lower()]        tool_msg = selected_tool.invoke(tool_call)        print(tool_msg)        messages.append(tool_msg)    for token in llm_with_tools.stream(messages):        await response.stream_token(token.content)    await response.send()@cl.on_stopdef on_stop():    print("The user wants to stop the task!")@cl.on_chat_enddef on_chat_end():    print("The user disconnected!")输入chainlit run 文件名 即可运行:


最后

以上就是今天的分享,介绍了如何自己动手快速且免费地为自己的AI应用添加联网功能,希望对你有所帮助。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

195

主题

0

回帖

595

积分

高级会员

积分
595

QQ|智能设备 | 粤ICP备2024353841号-1

GMT+8, 2025-3-10 19:12 , Processed in 3.144783 second(s), 30 queries .

Powered by 智能设备

©2025

|网站地图