Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain

调用外部 API 与数据资源

在 LangChain 中,调用外部 API 与数据资源是构建智能应用时的常见需求。通过集成外部 API,可以让应用从第三方服务中获取实时数据、执行复杂操作,或与其他系统进行交互。LangChain 提供了便捷的工具来调用外部 API,并将结果与链(Chain)进行整合,形成复杂任务的处理流程。

1. 外部 API 调用的基本概念

外部 API 是通过网络提供的服务接口,允许开发者在应用中请求外部数据或执行特定操作。常见的 API 包括天气查询、金融数据、地理定位服务等。LangChain 通过集成 API 调用模块,可以将这些外部数据引入到链条中,实现更强大的功能。

2. LangChain 中的 API 工具

LangChain 提供了多个集成外部 API 的方式,开发者可以通过封装 API 请求,将结果传递给链条中的 LLM 或其他处理模块。这些方式包括:

  • HTTP 请求工具:发送标准的 HTTP 请求以获取外部数据。
  • 自定义 API 集成:开发者可以根据 API 文档自行编写集成逻辑,结合链条和模型进行数据处理。

3. 基本 API 调用示例

以下是如何通过 LangChain 调用一个外部 API 的示例。假设我们要调用一个天气查询 API 并将结果传递给模型进行处理。

import requests
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

# 调用外部天气 API
def get_weather(city):
    api_key = "your_api_key"
    url = f"http://api.weatherapi.com/v1/current.json?key={api_key}&q={city}"
    response = requests.get(url)
    return response.json()

# 将 API 结果传递给 LLM 进行处理
llm = OpenAI(model_name="gpt-3.5-turbo")
weather_data = get_weather("Shanghai")
prompt = f"请根据以下天气数据为我生成一个报告:{weather_data['current']}"

# 调用 LLM 生成报告
response = llm(prompt)
print(response)

在这个示例中,我们使用 requests 库调用天气 API,并将返回的天气数据传递给 LLM,生成一份天气报告。

4. 使用 LangChain 的工具模块调用 API

LangChain 提供了一个叫做 Tool 的模块,可以将外部 API 调用封装成工具,然后将其与链条集成。这样可以让 API 调用与任务链紧密结合。

示例:封装天气 API 成为工具

from langchain.tools import BaseTool
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

class WeatherAPITool(BaseTool):
    name = "weather"
    description = "用来获取天气信息的工具"

    def _run(self, city: str):
        api_key = "your_api_key"
        url = f"http://api.weatherapi.com/v1/current.json?key={api_key}&q={city}"
        response = requests.get(url)
        return response.json()

# 实例化工具
weather_tool = WeatherAPITool()

# 使用工具获取天气信息并传递给 LLM
llm = OpenAI(model_name="gpt-3.5-turbo")
weather_data = weather_tool.run("Shanghai")
prompt = f"根据以下天气数据生成一份报告:{weather_data['current']}"

# 生成报告
response = llm(prompt)
print(response)

通过将 API 封装成 BaseTool,我们可以将其无缝集成到 LangChain 的链条中,使得 API 调用与链条任务处理更加模块化和灵活。

5. 处理 API 响应与数据格式

调用 API 时,返回的数据通常是 JSON 格式。为了将这些数据传递给 LLM 或在链条中使用,开发者需要对数据进行适当的处理和格式化。

示例:格式化 API 响应

def format_weather_data(weather_data):
    current = weather_data['current']
    return f"当前温度是 {current['temp_c']} 摄氏度,天气状况是 {current['condition']['text']}。"

# 调用 API 并格式化数据
weather_data = weather_tool.run("Shanghai")
formatted_data = format_weather_data(weather_data)

# 将格式化后的数据传递给 LLM
prompt = f"根据以下天气数据生成报告:{formatted_data}"
response = llm(prompt)
print(response)

在这个示例中,我们对天气数据进行了格式化,将关键信息提取出来,便于 LLM 更好地理解并生成相应的文本。

6. 结合 API 与链条进行复杂任务处理

通过将 API 调用集成到 LangChain 的链条中,可以实现更复杂的任务处理。例如,首先通过 API 获取数据,然后将数据传递给 LLM 进行分析或生成报告,最后将结果传递到下一步的任务。

示例:使用链条处理 API 数据

from langchain.chains import SimpleSequentialChain

# 定义第一个链条:调用天气 API 并格式化数据
def get_and_format_weather(city):
    weather_data = weather_tool.run(city)
    return format_weather_data(weather_data)

# 定义第二个链条:使用 LLM 生成报告
def generate_report(weather_info):
    prompt = f"根据以下天气数据生成一份详细报告:{weather_info}"
    return llm(prompt)

# 组合链条
chain1 = SimpleSequentialChain(func=get_and_format_weather)
chain2 = SimpleSequentialChain(func=generate_report)

# 运行链条
combined_chain = SimpleSequentialChain(chains=[chain1, chain2])
result = combined_chain.run("Shanghai")
print(result)

在这个例子中,我们将 API 调用、数据格式化、报告生成分成了不同的步骤,并使用链条进行串联。这样既能保持代码的清晰结构,又能灵活处理复杂的任务流。

7. 异步调用 API

在某些场景下,API 请求可能比较耗时,LangChain 支持异步调用 API 来提高效率。

示例:异步 API 调用

import asyncio
import aiohttp
from langchain.llms import OpenAI

async def get_weather_async(city):
    api_key = "your_api_key"
    url = f"http://api.weatherapi.com/v1/current.json?key={api_key}&q={city}"
    async with aiohttp.ClientSession() as session:
        async with session.get(url) as response:
            return await response.json()

# 使用异步调用
async def main():
    weather_data = await get_weather_async("Shanghai")
    llm = OpenAI(model_name="gpt-3.5-turbo")
    prompt = f"根据以下天气数据生成报告:{weather_data['current']}"
    response = llm(prompt)
    print(response)

# 运行异步任务
asyncio.run(main())

使用异步 API 调用可以有效减少等待时间,提升任务处理的效率。

8. 安全与错误处理

在调用外部 API 时,还需要考虑 API 调用的安全性(如 API 密钥保护)、错误处理(如网络异常、API 调用失败)等问题。LangChain 提供了基本的错误处理机制,开发者可以根据需要进一步优化。

示例:处理 API 错误

def get_weather_safe(city):
    try:
        weather_data = weather_tool.run(city)
        return format_weather_data(weather_data)
    except Exception as e:
        return f"获取天气信息时出错:{str(e)}"

# 调用并处理错误
formatted_data = get_weather_safe("Shanghai")
print(formatted_data)

9. 总结

通过 LangChain 的 API 集成与调用模块,开发者可以轻松将外部数据源引入到应用程序中。无论是天气、金融数据还是其他信息资源,API 调用与链条结合,可以构建强大而灵活的智能应用。在实现过程中,确保 API 调用的安全性、效率与数据处理的合理性是构建稳定系统的关键。

Last Updated:: 10/4/24, 6:55 PM