项目简介
funcchain
是一种编写认知系统的最具 Python 风格的方法。通过结合使用 Pydantic 模型作为输出结构,并在后台与 langchain 结合,funcchain
可以将大语言模型(LLMs)无缝集成到应用程序中。它利用 OpenAI Functions 或 LlamaCpp 的语法(json-schema 模式)来实现高效的结构化输出。在后台,它将 funcchain
语法编译为 langchain 可运行对象,便于用户轻松调用、流式处理或批量处理数据管道。
简单演示
在一个简单的示例中,用户可以利用所有原生 Python 特性来生成一个给定主题的食谱。以下是如何使用 funcchain
来生成一个圣诞晚餐的食谱:
from funcchain import chain
from pydantic import BaseModel
class Recipe(BaseModel):
ingredients: list[str]
instructions: list[str]
duration: int
def generate_recipe(topic: str) -> Recipe:
return chain()
recipe = generate_recipe("christmas dinner")
print(recipe.ingredients)
复杂结构输出
funcchain
支持复杂的结构化输出,允许用户定义嵌套模型。例如,可以根据用户输入动态选择生成购物清单或待办事项清单,并自动选择合适的输出类型:
from funcchain import chain
from pydantic import BaseModel, Field
class Item(BaseModel):
name: str = Field(description="Name of the item")
description: str = Field(description="Description of the item")
keywords: list[str] = Field(description="Keywords for the item")
class ShoppingList(BaseModel):
items: list[Item]
store: str = Field(description="The store to buy the items from")
class TodoList(BaseModel):
todos: list[Item]
urgency: int = Field(description="The urgency of all tasks (1-10)")
def extract_list(user_input: str) -> TodoList | ShoppingList:
return chain()
lst = extract_list(input("Enter your list: "))
match lst:
case ShoppingList(items=items, store=store):
print("Here is your Shopping List: ")
for item in items:
print(f"{item.name}: {item.description}")
print(f"You need to go to: {store}")
case TodoList(todos=todos, urgency=urgency):
print("Here is your Todo List: ")
for item in todos:
print(f"{item.name}: {item.description}")
print(f"Urgency: {urgency}")
图像分析模型
funcchain
还支持图像分析,通过设置 LLM 模型标识符(例如使用 OpenAI 的 GPT-4 视觉预览),用户可以实现对图像的主题、描述和对象的结构化分析:
from funcchain import Image
from pydantic import BaseModel, Field
from funcchain import chain, settings
settings.llm = "openai/gpt-4-vision-preview"
class AnalysisResult(BaseModel):
theme: str = Field(description="The theme of the image")
description: str = Field(description="A description of the image")
objects: list[str] = Field(description="A list of objects found in the image")
def analyse_image(image: Image) -> AnalysisResult:
return chain()
result = analyse_image(Image.open("examples/assets/old_chinese_temple.jpg"))
print("Theme:", result.theme)
print("Description:", result.description)
for obj in result.objects:
print("Found this object:", obj)
流畅的本地模型支持
该项目允许自动从 Huggingface 下载本地模型,用户可以轻松进行文本的情感分析:
from pydantic import BaseModel, Field
from funcchain import chain, settings
settings.llm = "ollama/openchat"
class SentimentAnalysis(BaseModel):
analysis: str
sentiment: bool = Field(description="True for Happy, False for Sad")
def analyze(text: str) -> SentimentAnalysis:
return chain()
poem = analyze("I really like when my dog does a trick!")
print(poem.analysis)
主要功能
- 🐍 具备 Python 风格的代码编写
- 🔀 轻松切换 OpenAI 或本地模型
- 🔄 动态输出类型(Pydantic 模型或基本数据类型)
- 👁️ 支持视觉 LLM
- 🧠 使用 langchain_core 作为后台
- 📝 支持 Jinja 模板
- 🏗️ 可靠的结构化输出
- 🔁 自动重试解析
- 🔧 支持 langsmith
- 🔄 支持同步、异步、流式、并行处理
- 📦 从 Huggingface 下载内容
- ✅ 所有函数均支持类型提示和 mypy
- 🗣️ 聊天路由组件
- 🧩 可与 langchain LCEL 组合使用
- 🛠️ 简易错误处理
- 🚦 支持枚举和字符字面量
- 📐 可自定义解析类型
文档和贡献
用户可在 这里 查看详细文档。项目还提供详细的示例以供学习和运行。对于有意贡献的用户,请参考贡献指南,通过以下命令运行开发环境设置:
git clone https://github.com/shroominic/funcchain.git && cd funcchain
./dev_setup.sh
funcchain
项目致力于将复杂的认知系统简单化,帮助开发者高效地整合大语言模型。无论是文本处理还是图像分析,都提供了灵活的工具和支持。