steamship-langchain

GitHub
510 91 简单 1 次阅读 今天MIT语言模型开发框架Agent
AI 解读 由 AI 自动生成,仅供参考

steamship-langchain 是连接 LangChain 框架与 Steamship 部署平台的桥梁,旨在帮助开发者轻松将语言 AI 应用从原型转化为生产级服务。它解决了开发者在模型落地时面临的诸多难题,如 API 接口搭建、系统横向扩展、状态持久化存储、身份认证授权以及多租户支持等,让用户无需重复造轮子即可拥有企业级的基础设施能力。

这款工具主要面向使用 LangChain 进行开发的 AI 工程师和软件开发者。其核心技术亮点在于提供了一套丰富的适配器,无缝集成了大模型调用缓存、日志回调处理、向量数据库存储以及多种数据加载器(支持 GitHub 仓库、YouTube 视频、Sphinx 文档等来源)。特别值得一提的是,它还内置了基于抽象语法树(AST)的 Python 代码分割器,能更智能地处理代码上下文。通过简单的 pip 安装,开发者即可利用 Steamship 的生态能力,快速构建具备自动扩缩容、完整监控日志及与其他技能(如音频转录)协同工作的全生命周期 AI 应用,极大提升了从实验到上线的效率。

使用场景

一家初创团队正在开发基于 LangChain 的智能代码助手,需要快速将本地原型转化为支持多用户、可持久化存储的生产级服务。

没有 steamship-langchain 时

  • 开发者需手动搭建 API 网关和处理并发请求,部署流程繁琐且容易出错。
  • 对话历史和向量索引存储在本地内存中,服务重启后数据丢失,无法实现多租户隔离。
  • 缺乏统一的日志和监控体系,排查线上问题时难以追踪具体的 LLM 调用链和错误信息。
  • 集成音频转录等额外功能时,需要单独寻找并对接第三方服务,增加了架构复杂度。
  • 代码分割仅按字符数机械切分,导致函数上下文断裂,降低了代码问答的准确性。

使用 steamship-langchain 后

  • 直接利用内置适配器一键部署生产级 API 端点,自动获得横向扩展能力,无需操心基础设施。
  • 通过 SteamshipVectorStoreChatMessageHistory 实现状态持久化与多租户支持,确保数据安全隔离。
  • 集成 LoggingCallbackHandler 后可通过 ship logs 实时查看详细的运行日志和用量指标,运维透明高效。
  • 无缝调用 Steamship 生态中的音频转录等技能,轻松构建多模态交互流程。
  • 采用基于 AST 的 PythonCodeSplitter 智能切割代码,保留父类上下文,显著提升了代码理解效果。

steamship-langchain 让开发者从繁琐的基础设施建设中解放出来,专注于核心业务逻辑,极速完成从原型到生产环境的跨越。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes该工具是 Steamship 的 LangChain 适配器库,主要通过 pip 安装。运行此客户端库本身对硬件无特殊要求,但实际使用取决于所调用的后端服务(如 OpenAI、SERPAPI 等)以及是否在本地运行额外的模型。示例代码假设用户已拥有 Steamship API Key 并配置在环境变量中。部分功能(如音频转录)在 README 中标记为实验性阶段。
python未说明
steamship
langchain
steamship-langchain hero image

快速开始

LangChain 的 Steamship Python 客户端库 (🦜️🔗)

Steamship Twitter

License: MIT 运行测试

Steamship 是构建、部署和使用全生命周期语言 AI 的最快方式。

本仓库包含用于 Steamship 的 LangChain 适配器,使 LangChain 开发者能够快速在 Steamship 上部署其应用,从而自动获得:

  • 生产就绪的 API 端点
  • 跨依赖项/后端的水平扩展
  • 应用状态的持久化存储(包括缓存)
  • 内置的身份验证与授权支持
  • 多租户支持
  • 与其他 Steamship 技能的无缝集成(例如音频转录)
  • 使用情况指标与日志记录
  • 以及更多……

有关 Steamship 和 LangChain 的更多信息,请访问我们的 网站

安装

通过 pip 安装:

pip install steamship-langchain

适配器

目前提供以下初步支持(更多功能即将推出):

  • LLM
    • 提供了针对 Steamship OpenAI 集成的适配器 (steamship_langchain.llms.OpenAI)
    • 提供了通过 Steamship 键值存储实现 LLM 调用缓存的适配器 (SteamshipCache)
  • 回调
    • 提供了一个使用 Python logging 模块记录事件的回调 (steamship_langchain.callbacks.LoggingCallbackHandler)。此回调可与 ship logs 配合使用,在部署时访问详细日志。
  • 文档加载器
    • 提供了一个将 Steamship 文件导出为 LangChain 文档的适配器 (steamship_langchain.document_loaders.SteamshipLoader)
  • 工具
    • 搜索:
      • 提供了针对 Steamship SERPAPI 集成的适配器 (SteamshipSERP)
  • 记忆
    • 对话历史 (steamship_langchain.memory.ChatMessageHistory)
  • 向量存储
    • 提供了一个持久化向量存储的适配器 (steamship_langchain.vectorstores.SteamshipVectorStore)
  • 文本分割器
    • 提供了一个基于 AST 的 Python 代码分割器 (steamship_langchain.python_splitter.PythonCodeSplitter)。该分割器在以函数定义为边界拆分代码的同时,还能为代码片段提供额外上下文信息(父类)。
  • 其他实用工具
    • 将数据导入 Steamship
      • 为了充分利用 Steamship 的持久化存储能力,我们提供了一系列初始加载工具,适用于多种数据源,包括:
        • 文本文件:steamship_langchain.file_loaders.TextFileLoader
        • 目录:steamship_langchain.file_loaders.DirectoryLoader
        • GitHub 仓库:steamship_langchain.file_loaders.GitHubRepositoryLoader
        • Sphinx 文档站点:steamship_langchain.file_loaders.SphinxSiteLoader(以及其他)
        • YouTube 视频:steamship_langchain.file_loaders.YouTubeFileLoader
        • 各种文本和图像格式:steamship_langchain.file_loaders.UnstructuredFileLoader

📖 文档

请参阅我们的 文档,了解关于以下内容的完整说明:

  • 入门指南(安装、环境设置、简单示例)
  • 操作示例(演示、集成、辅助函数)

示例用法

以下是几个在 Steamship 上使用 LangChain 的示例:

这些示例使用临时工作空间,以便在实验过程中进行完全清理。 工作空间 在 Steamship 中提供了租户隔离单元。 对于生产用途,可以通过 Steamship(workspace_handle="my_workspace") 创建并获取持久化工作空间。

注意 这些示例省略了 import 语句。完整的源代码请参考 examples/ 目录。

注意 客户端示例假定用户已拥有 Steamship API 密钥,并且该密钥已暴露于环境变量中(详见:API 密钥)。

基础提示

使用 Steamship LLM 集成的基本提示示例(完整源码:examples/greeting

在 Repl.it 上运行

服务器片段

from steamship_langchain.llms import OpenAI

@post("greet")
def greet(self, user: str) -> str:
    prompt = PromptTemplate(
      input_variables=["user"],
      template=
      "为用户 {user} 创作一条欢迎消息。感谢他们使用 LangChain 在 Steamship 上运行应用。鼓励他们在准备就绪时通过 `ship it` 部署应用。",
    )
    llm = OpenAI(client=self.client, temperature=0.8)
    return llm(prompt.format(user=user))

客户端片段

with Steamship.temporary_workspace() as client:
    api = client.use("my-langchain-app")
    while True:
        name = input("姓名:")
        print(f'{api.invoke("/greet", user=name).strip()}\n')

自我提问与搜索

使用 Steamship GPT 和 SERP Tool 插件执行 LangChain 的 self-ask-with-search 代理(完整源码:examples/self-ask-with-search

在 Repl.it 上运行

服务器片段

from steamship_langchain.llms import OpenAI

@post("/self_ask_with_search")
def self_ask_with_search(self, query: str) -> str:
    llm = OpenAI(client=self.client, temperature=0.0, cache=True)
    serp_tool = SteamshipSERP(client=self.client, cache=True)
    tools = [Tool(name="Intermediate Answer", func=serp_tool.search)]
    self_ask_with_search = initialize_agent(tools, llm, agent="self-ask-with-search", verbose=False)
    return self_ask_with_search.run(query)

客户端片段

with Steamship.temporary_workspace() as client:
    api = client.use("my-langchain-app")
    query = "双城队上一次赢得世界大赛时,谁是总统?"
    print(f"查询:{query}")
    print(f"答案:{api.invoke('/self_ask_with_search', query=query)}")

聊天机器人

在 Steamship 中使用 LangChain 实现一个基础的聊天机器人(类似于 ChatGPT)(完整源码:examples/chatbot)。

在 Repl.it 上运行

注意 整个聊天机器人的对话记录将在 Steamship 工作空间的生命周期内持续保存。

服务器片段

from langchain.memory import ConversationBufferWindowMemory

from steamship_langchain.llms import OpenAIChat
from steamship_langchain.memory import ChatMessageHistory

@post("/send_message")
def send_message(self, message: str, chat_history_handle: str) -> str:
  chat_memory = ChatMessageHistory(client=self.client, key=chat_history_handle)
  mem = ConversationBufferWindowMemory(chat_memory=chat_memory, k=2)
  chatgpt = LLMChain(
    llm=OpenAIChat(client=self.client, temperature=0),
    prompt=CHATBOT_PROMPT,
    memory=mem,
  )

  return chatgpt.predict(human_input=message)

客户端片段

with Steamship.temporary_workspace() as client:
    api = client.use("my-langchain-app")
    session_handle = "foo-user-session-1234"
    while True:
        msg = input("你:")
        print(f"AI:{api.invoke('/send_message', message=msg,chat_history_handle=session_handle)}")

异步链式处理音频摘要

stability-experimental

Steamship 目前尚未将音频转录支持视为完全成熟的生产环境。我们正在努力实现大规模音频转录的支持,但在尝试此功能时,您可能会遇到一些现有问题。

本示例展示了如何使用 LangChain 处理通过 Steamship 的语音转文本插件获取的音频转录内容(完整源码:examples/summarize-audio)。

该示例简要介绍了任务系统(以及用于链式调用的任务依赖关系)。这里我们使用了 task.wait() 风格的轮询方式,但也可以使用基于时间的 task.refresh() 等其他轮询方式。

在 Repl.it 上运行

服务器片段

from steamship_langchain.llms import OpenAI

@post("summarize_file")
def summarize_file(self, file_handle: str) -> str:
    file = File.get(self.client, handle=file_handle)
    text_splitter = CharacterTextSplitter()
    texts = []
    for block in file.blocks:
        texts.extend(text_splitter.split_text(block.text))
    docs = [Document(page_content=t) for t in texts]
    llm = OpenAI(client=self.client, cache=True)
    chain = load_summarize_chain(llm, chain_type="map_reduce")
    return chain.run(docs)

@post("summarize_audio_file")
def summarize_audio_file(self, audio_file_handle: str) -> Task[str]:
    transcriber = self.client.use_plugin("whisper-s2t-blockifier")
    audio_file = File.get(self.client, handle=audio_file_handle)
    transcribe_task = audio_file.blockify(plugin_instance=transcriber.handle)
    return self.invoke_later("summarize_file", wait_on_tasks=[transcribe_task], arguments={"file_handle": audio_file.handle})

客户端片段


churchill_yt_url = "https://www.youtube.com/watch?v=MkTw3_PmKtc"

with Steamship.temporary_workspace() as client:
    api = client.use("my-langchain-app")
    yt_importer = client.use_plugin("youtube-file-importer")
    import_task = File.create_with_plugin(client=client,
                                         plugin_instance=yt_importer.handle, 
                                         url=churchill_yt_url)
    import_task.wait()
    audio_file = import_task.output
    
    summarize_task_response = api.invoke("/summarize_audio_file", audio_file_handle=audio_file.handle)
    summarize_task = Task(client=client, **summarize_task_response)
    summarize_task.wait()
    
    if summarize_task.state == TaskState.succeeded:
      summary = base64.b64decode(summarize_task.output).decode("utf-8")
      print(f"摘要:{summary.strip()}")

带来源的答案问答(嵌入)

提供了一个使用 Steamship 管理嵌入并为 LangChain 代理提供支持的基本示例,用于实现带来源的答案问答功能(完整源码:examples/qa_with_sources

注意 嵌入将在工作区的生命周期内持续保存。

在 Repl.it 上运行

服务器代码片段

from steamship_langchain.llms import OpenAI

def __init__(self, **kwargs):
    super().__init__(**kwargs)
    langchain.llm_cache = SteamshipCache(self.client)
    self.llm = OpenAI(client=self.client, temperature=0, cache=True, max_words=250)
    # 创建一个持久化的嵌入存储
    self.index = SteamshipVectorStore(
        client=self.client, index_name="qa-demo", embedding="text-embedding-ada-002"
    )

@post("index_file")
def index_file(self, file_handle: str) -> bool:
    text_splitter = CharacterTextSplitter(chunk_size=250, chunk_overlap=0)
    file = File.get(self.client, handle=file_handle)
    texts = [text for block in file.blocks for text in text_splitter.split_text(block.text)]
    metadatas = [{"source": f"{file.handle}-offset-{i * 250}"} for i, text in enumerate(texts)]

    self.index.add_texts(texts=texts, metadatas=metadatas)
    return True

@post("search_embeddings")
def search_embeddings(self, query: str, k: int) -> List[SearchResult]:
    """返回嵌入索引中最接近的 `k` 个条目。"""
    search_results = self.index.search(query, k=k)
    search_results.wait()
    items = search_results.output.items
    return items


@post("/qa_with_sources")
def qa_with_sources(self, query: str) -> Dict[str, Any]:
    chain = VectorDBQAWithSourcesChain.from_chain_type(
        OpenAI(client=self.client, temperature=0),
        chain_type="map_reduce",
        vectorstore=self.index,
    )

    return chain({"question": query}, return_only_outputs=False)

客户端代码片段

with Steamship.temporary_workspace() as client:
    api = client.use("my-langchain-app")
    
    # 上传国情咨文演讲稿
    with open("state_of_the_union.txt") as f:
        sotu_file = File.create(client, blocks=[Block(text=f.read())])

    # 进行嵌入
    api.invoke("/index_file", file_handle=sotu_file.handle)

    # 发出查询
    query = "总统对布雷耶大法官说了什么?"
    response = api.invoke("/qa_with_sources", query=query)
    print(f"答案:{response['result'].strip()}")

API 密钥

Steamship API 密钥可让您访问我们的 SDK,用于 AI 模型,包括 OpenAI、GPT、Cohere、Whisper 等。

在此处获取您的免费 API 密钥:https://steamship.com/account/api。

获得 API 密钥后,您可以:

  • 设置客户端的环境变量 STEAMSHIP_API_KEY
  • 直接通过 Steamship(api_key=)Steamship.tempory_workspace(api_key=) 传递密钥。

或者,您也可以运行 ship login,它将指导您完成环境设置。

在 Steamship 上部署

在 Steamship 上部署 LangChain 应用非常简单:只需执行 ship it 命令即可。

从您的包目录(即 api.py 所在的目录)中,您可以运行 ship it 命令来生成清单文件,并将您的包推送到 Steamship。随后,您可以使用 Steamship SDK 根据需要在工作区中创建您的包实例。

有关部署和工作区的更多信息,请参阅我们的文档

反馈与支持

您对本包或对 Steamship 整体有任何反馈吗?

我们非常期待您的意见。请联系我们:hello@steamship.com

版本历史

0.0.262023/09/12
0.0.232023/06/05
0.0.222023/05/31
0.0.212023/05/12
0.0.202023/05/08
0.0.192023/04/28
0.0.182023/04/17
0.0.172023/04/14
0.0.162023/04/12
0.0.152023/03/20
0.0.142023/03/09
0.0.132023/02/27
0.0.122023/02/24
0.0.12-rc.02023/02/24
0.0.112023/02/23
0.0.102023/02/14
0.0.92023/02/08

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|4天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|5天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

148.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|2天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|今天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|3天前
插件开发框架