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

langchain介绍

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

image-20250225082218563

实践

给大模型添加联网功能也就是添加一个搜索引擎。一种方式就是先经过搜索引擎再把信息传给大模型进行回答,另一种就是使用function calling + 搜索引擎API 让大模型自己决定是否需要使用联网功能。

而免费的搜索引擎指的是duckduckgo,可能效果上没有付费的搜索引擎比如必应api与谷歌api好就是了,但是单纯用于测试联网功能的实现那也足够了。

首先先简单过一遍langchain的使用。

接入OpenAI的大模型并使用非流式与流式响应:

from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage, SystemMessage

api_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="|")

image-20250225083057613

再试一下接入国内的大模型并使用非流式与流式响应:

from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage

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)

print(model.invoke([HumanMessage(content="你是谁?")]))

messages = [  
    HumanMessage("你是谁?"),
]
for token in model.stream(messages):
    print(token.content, end="|")

image-20250225083357131

由于这个功能的实现,需要使用工具调用,现在来看看在langchain如何使用工具调用:


                
<think>嗯,用户想让本地部署的大模型拥有联网功能。这个问题需要考虑几个方面。首先,我得确认用户对本地部署的理解,可能他们已经在自己的服务器或者本地机器上运行了一个大模型,比如LLaMA或者类似的模型。接下来,联网功能主要是为了让模型能够获取实时信息,比如新闻、天气、股票数据等,这些是模型本身静态数据中没有的。 然后,我需要考虑实现联网的几种常见方法。首先是API调用,这可能是一个比较直接的方案。用户需要编写中间层,比如一个Python服务,接收模型的查询,解析后调用搜索引擎的API,比如Google Custom Search或者SerpAPI,获取结果后再返回给模型。不过,这里可能会有成本问题,因为这些API通常有免费额度限制,超出后需要付费。 另一个方法是网络爬虫。用户可以让模型生成搜索关键词,然后通过爬虫抓取网页内容,提取信息。但这里面有法律和伦理问题,得提醒用户遵守robots.txt和网站的使用条款,避免抓取受限制的内容。此外,爬虫的稳定性和反爬机制也是需要考虑的,可能需要使用代理或者设置合理的请求频率。 还有预训练模块集成,比如Toolformer这样的模型,它们已经能够调用外部API。如果用户本地部署的模型支持类似功能,可能可以扩展工具调用部分,添加网络搜索的接口。不过,这需要对模型本身进行微调或者插件开发,技术门槛较高,适合有经验的团队。 然后,用户可能需要具体的步骤指导。比如,如何设计中间层,如何选择合适的API,如何处理返回的数据,以及如何将这些信息整合到模型的输入中。同时,还要考虑安全性和延迟问题,确保网络请求不会显著影响模型的响应速度。 另外,需要注意模型的上下文长度限制。网络搜索可能会返回大量文本,需要有效的信息提取和摘要生成,以避免超出模型的处理能力。可能需要使用RAG(检索增强生成)技术,先检索相关段落,再生成回答。 最后,用户可能关心开源工具和框架,比如LangChain、LlamaIndex,这些工具已经集成了联网功能,可以简化开发流程。推荐用户使用这些现有的解决方案,减少重复造轮子的工作。</think>让本地部署的大模型具备联网功能,需通过外部工具链实现数据获取与模型调用的协同。以下是分步实现方案: 一、技术实现原理 1. 本地模型本身不具备主动联网能力 2. 通过中间层架构实现: 用户输入 → 模型生成搜索需求 → API接口调用 → 网络数据获取 → 数据清洗 → 模型生成最终回答 二、具体实现方案Python) 1. 搭建中间服务层 ```python from fastapi import FastAPI import requests app = FastAPI() def search_web(query: str): # 使用SerpAPI示(需注册获取API key) params = { "q": query, "api_key": "YOUR_API_KEY", "engine": "google" } response = requests.get("https://serpapi.com/search", params=params) return response.json() ``` 2. 模型调用逻辑增强 ```python def generate_with_web(model, user_input): # 第一步:生成搜索关键词 search_prompt = f"根据用户问题生成搜索关键词:{user_input}" keywords = model.generate(search_prompt) # 第二步:执行网络搜索 search_results = search_web(keywords) # 第三步:组合上下文 augmented_input = f""" 用户问题:{user_input} 网络搜索结果:{search_results['organic_results'][:3]} 请根据以上信息生成回答: """ # 第四步:生成最终回答 return model.generate(augmented_input) ``` 三、关键技术选型 1. 搜索API(选其一): - SerpAPI(付费,稳定) - Google Custom Search JSON API(免费限额) - 自建爬虫框架(需处理反爬) 2. 数据处理层: - 网页内容提取:BeautifulSoup/Readability - 文本摘要:BERT Extractive Summarizer - 缓存机制:Redis/Memcached 四、部署架构建议 ``` 用户端 → REST API → 本地大模型 → 中间件 → 网络搜索模块 ↑ | └─ 上下文组合 ←─┘ ``` 五、注意事项 1. 延迟优化: - 设置搜索超时(建议3-5秒) - 并行处理模型推理与网络请求 2. 安全性: - 验证用户输入的合法性 - 过滤敏感搜索结果 - 使用HTTPS加密通信 3. 成本控制: - 设置API调用频率限制 - 使用结果缓存(TTL建议1小时) 六、开源替代方案 1. LangChain工具链: ```python from langchain.utilities import GoogleSearchAPIWrapper search = GoogleSearchAPIWrapper() results = search.results("查询关键词", 3) ``` 2. LlamaIndex集成方案: ```python from llama_index import GPTSimpleWebIndex index = GPTSimpleWebIndex("搜索关键词") response = index.query("用户问题") ``` 实际部署时需根据模型规模调整硬件配置,推荐至少16GB内存和4核CPU以保证流畅运行。建议先在小规模测试环境中验证功能稳定性,再逐步扩展搜索场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值