instructor

Форк
0
46 строк · 1.2 Кб
1
from typing import Annotated
2
from pydantic import BaseModel, ValidationError, ValidationInfo, AfterValidator
3
from openai import OpenAI
4
import instructor
5

6
client = instructor.from_openai(OpenAI())
7

8

9
def citation_exists(v: str, info: ValidationInfo):
10
    context = info.context
11
    if context:
12
        context = context.get("text_chunk")
13
        if v not in context:
14
            raise ValueError(f"Citation `{v}` not found in text")
15
    return v
16

17

18
Citation = Annotated[str, AfterValidator(citation_exists)]
19

20

21
class AnswerWithCitation(BaseModel):
22
    answer: str
23
    citation: Citation
24

25

26
try:
27
    q = "Are blue berries high in protein?"
28
    text_chunk = """
29
    Blueberries are a good source of vitamin K.
30
    They also contain vitamin C, fibre, manganese and other antioxidants (notably anthocyanins).    
31
    """
32

33
    resp = client.chat.completions.create(
34
        model="gpt-3.5-turbo",
35
        response_model=AnswerWithCitation,
36
        messages=[
37
            {
38
                "role": "user",
39
                "content": f"Answer the question `{q}` using the text chunk\n`{text_chunk}`",
40
            },
41
        ],
42
        validation_context={"text_chunk": text_chunk},
43
    )  # type: ignore
44
    print(resp.model_dump_json(indent=2))
45
except ValidationError as e:
46
    print(e)
47

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.