Select Page
Flowith:免費無需邀請碼的最強 AI 自動化工具

Flowith:免費無需邀請碼的最強 AI 自動化工具

Views: 34

Flowith 最近正迅速崛起,成為超越 Manus 的最強 AI 自動化工具。​它不僅免費且無需邀請碼,還具備強大的 ORACLE 模式、自主知識花園創建等功能,為用戶提供無與倫比的 AI 互動體驗。​

Flowith 的主要特色

1. 免費使用,無需邀請碼

與其他需要邀請碼的 AI 工具不同,Flowith 完全免費,任何人都可以立即註冊並使用,無需等待或邀請碼。​

2. ORACLE 模式:自動化完成文件、簡報製作

Flowith 的 ORACLE 模式是一項突破性的功能,允許數十個甚至數百個 AI 代理同時為您工作,無需手動搭建工作流。​這使得複雜的數據收集和分析任務變得輕而易舉,並能自動生成文件和簡報等。 ​

3. 知識花園:創建並變現知識庫

Flowith 的「知識花園」功能讓您可以將自己的知識資源組織成系統化的知識庫,並可選擇對外分享或收費,實現知識變現。 ​

4. 邀請鏈接:獲得額外免費對話次數

透過邀請朋友加入 Flowith,您可以獲得額外的 500 次免費對話次數,提升使用體驗。​

邀請碼如下:

https://flowith.io/invitation?code=WPS1WR

如何使用 Flowith

  1. 註冊帳號:​訪問 Flowith 官方網站,點擊「註冊」並填寫相關資訊。​
  2. 探索 ORACLE 模式:​在主介面中,選擇 ORACLE 模式,輸入您的需求,系統將自動規劃並執行相關任務。 ​https://doc.flowith.io
  3. 建立知識花園:​上傳您的資料或文件,Flowith 會自動將其拆分為知識種子,幫助您構建個人知識庫。 ​

參考資料

DeepSeek R1 伺服器繁忙?硅基流動推出高效 API 解決方案

DeepSeek R1 伺服器繁忙?硅基流動推出高效 API 解決方案

Views: 13

硅基流動(SiliconFlow)是一家致力於加速通用人工智慧(AGI)普惠化的公司,主要可以讓生成式人工智慧惠及開發者和終端使用者使用,最近,硅基流動與華為雲合作,推出了基於昇騰雲的 DeepSeek R1 和 V3 推理服務,為使用者提供高效、穩定的 AI 模型推理體驗。

DeepSeek R1 與硅基流動的合作

DeepSeek R1 是一款由強化學習驅動的推理模型,旨在解決模型生成內容的重複性和可讀性問題。在強化學習之前,DeepSeek R1 引入了冷啟動數據,進一步優化推理效能。然而,近期由於 DeepSeek 官方伺服器頻繁出現繁忙狀態,許多使用者在使用時受到限制。

為了解決這一問題,硅基流動與華為雲合作,將 DeepSeek R1 部署在基於昇騰的計算平台上,提供更 穩定、高速DeepSeek R1 API 服務,讓使用者可以在更低的成本下獲得優質的 AI 推理服務。

如何使用 DeepSeek R1 API

使用者可以透過 註冊硅基流動平台,取得 API 金鑰,並將 DeepSeek R1 模型整合到各種應用之中。硅基流動提供了詳細的 技術文件與教學,幫助開發者快速上手,充分發揮 DeepSeek R1 的強大功能。

硅基流動透過與華為雲的合作,成功解決了 DeepSeek R1 在使用過程中的伺服器繁忙問題,為開發者和終端使用者提供了一個 高效、穩定的 AI 模型推理平台。這不僅展現了 硅基流動的技術優勢,也體現了其在推動 AGI 普惠化 方面的努力。

API使用

GraphRAG 使用本地端的 Ollama

Views: 105

GraphRAG圖像檢索增強生成(Graph Retrieval-Augmented Generation,GraphRAG)超好用,但也超級貴,超級花錢,想要省錢的話,就要用本地端的服務如(Ollama),要用的話,可以按照下面的步驟處理,前提是你已經可以使用 OpenAI 版本的 GraphRAG 了,本篇是要把 OpenAI 改成 Ollama

講在前面

要先設定好 GraphRAG

下載以及安裝好 Ollama

安裝 ollama 的 Python 套件

pip install ollama

修改原先的 setting.yaml 檔案

把舊的 yaml 檔案改成 ollama 的設定檔,新的設定檔案如下

encoding_model: cl100k_base
skip_workflows: []
llm:
  api_key: ${GRAPHRAG_API_KEY}
  type: openai_chat # or azure_openai_chat
  # model: gpt-4o-mini
  model_supports_json: true # recommended if this is available for your model.
  # max_tokens: 4000
  # request_timeout: 180.0
  # api_base: https://<instance>.openai.azure.com
  # api_version: 2024-02-15-preview
  # organization: <organization_id>
  # deployment_name: <azure_model_deployment_name>
  # tokens_per_minute: 150_000 # set a leaky bucket throttle
  # requests_per_minute: 10_000 # set a leaky bucket throttle
  # max_retries: 10
  # max_retry_wait: 10.0
  # sleep_on_rate_limit_recommendation: true # whether to sleep when azure suggests wait-times
  # concurrent_requests: 25 # the number of parallel inflight requests that may be made

  # ollama api_base
  api_base: http://localhost:11434/v1
  model: llama3

parallelization:
  stagger: 0.3
  # num_threads: 50 # the number of threads to use for parallel processing

async_mode: threaded # or asyncio

embeddings:
  ## parallelization: override the global parallelization settings for embeddings
  async_mode: threaded # or asyncio
  llm:
    api_key: ${GRAPHRAG_API_KEY}
    type: openai_embedding # or azure_openai_embedding
    # model: text-embedding-3-small
    
    # ollama
    model: nomic-embed-text 
    api_base: http://localhost:11434/api

    # api_base: https://<instance>.openai.azure.com
    # api_version: 2024-02-15-preview
    # organization: <organization_id>
    # deployment_name: <azure_model_deployment_name>
    # tokens_per_minute: 150_000 # set a leaky bucket throttle
    # requests_per_minute: 10_000 # set a leaky bucket throttle
    # max_retries: 10
    # max_retry_wait: 10.0
    # sleep_on_rate_limit_recommendation: true # whether to sleep when azure suggests wait-times
    # concurrent_requests: 25 # the number of parallel inflight requests that may be made
    # batch_size: 16 # the number of documents to send in a single request
    # batch_max_tokens: 8191 # the maximum number of tokens to send in a single request
    # target: required # or optional
  
chunks:
  size: 300
  overlap: 100
  group_by_columns: [id] # by default, we don't allow chunks to cross documents
    
input:
  type: file # or blob
  file_type: text # or csv
  base_dir: "input"
  file_encoding: utf-8
  file_pattern: ".*\\.txt$"

cache:
  type: file # or blob
  base_dir: "cache"
  # connection_string: <azure_blob_storage_connection_string>
  # container_name: <azure_blob_storage_container_name>

storage:
  type: file # or blob
  base_dir: "output/${timestamp}/artifacts"
  # connection_string: <azure_blob_storage_connection_string>
  # container_name: <azure_blob_storage_container_name>

reporting:
  type: file # or console, blob
  base_dir: "output/${timestamp}/reports"
  # connection_string: <azure_blob_storage_connection_string>
  # container_name: <azure_blob_storage_container_name>

entity_extraction:
  ## llm: override the global llm settings for this task
  ## parallelization: override the global parallelization settings for this task
  ## async_mode: override the global async_mode settings for this task
  prompt: "prompts/entity_extraction.txt"
  entity_types: [organization,person,geo,event]
  max_gleanings: 0

summarize_descriptions:
  ## llm: override the global llm settings for this task
  ## parallelization: override the global parallelization settings for this task
  ## async_mode: override the global async_mode settings for this task
  prompt: "prompts/summarize_descriptions.txt"
  max_length: 500

claim_extraction:
  ## llm: override the global llm settings for this task
  ## parallelization: override the global parallelization settings for this task
  ## async_mode: override the global async_mode settings for this task
  # enabled: true
  prompt: "prompts/claim_extraction.txt"
  description: "Any claims or facts that could be relevant to information discovery."
  max_gleanings: 0

community_report:
  ## llm: override the global llm settings for this task
  ## parallelization: override the global parallelization settings for this task
  ## async_mode: override the global async_mode settings for this task
  prompt: "prompts/community_report.txt"
  max_length: 2000
  max_input_length: 8000

cluster_graph:
  max_cluster_size: 10

embed_graph:
  enabled: true # if true, will generate node2vec embeddings for nodes
  # num_walks: 10
  # walk_length: 40
  # window_size: 2
  # iterations: 3
  # random_seed: 597832

umap:
  enabled: true # if true, will generate UMAP embeddings for nodes

snapshots:
  graphml: true
  raw_entities: true
  top_level_nodes: true

local_search:
  # text_unit_prop: 0.5
  # community_prop: 0.1
  # conversation_history_max_turns: 5
  # top_k_mapped_entities: 10
  # top_k_relationships: 10
  # max_tokens: 12000

global_search:
  # max_tokens: 12000
  # data_max_tokens: 12000
  # map_max_tokens: 1000
  # reduce_max_tokens: 2000
  # concurrency: 32

其中修改 llm 區塊

修改 model: llama3

加入 api_base: http://localhost:11434/v1

修改 embeddings 區塊

model: nomic-embed-text

api_base: http://localhost:11434/api

修改 GraphRAG 的程式碼

除了設定好 setting.yaml 以外,程式碼也要修改成可以支持 ollama 的程式碼,有兩處要改,可以用以下現成的程式碼

  1. C:\Users\xxx\anaconda3\envs\GraphRAG\Lib\site-packages\graphrag\llm\openai\openai_embeddings_llm.py

加入 ollama setting 區塊

# Copyright (c) 2024 Microsoft Corporation.
# Licensed under the MIT License

"""The EmbeddingsLLM class."""

from typing_extensions import Unpack

from graphrag.llm.base import BaseLLM
from graphrag.llm.types import (
    EmbeddingInput,
    EmbeddingOutput,
    LLMInput,
)
import ollama

from .openai_configuration import OpenAIConfiguration
from .types import OpenAIClientTypes


class OpenAIEmbeddingsLLM(BaseLLM[EmbeddingInput, EmbeddingOutput]):
    """A text-embedding generator LLM."""

    _client: OpenAIClientTypes
    _configuration: OpenAIConfiguration

    def __init__(self, client: OpenAIClientTypes, configuration: OpenAIConfiguration):
        self.client = client
        self.configuration = configuration

    async def _execute_llm(
        self, input: EmbeddingInput, **kwargs: Unpack[LLMInput]
    ) -> EmbeddingOutput | None:
        args = {
            "model": self.configuration.model,
            **(kwargs.get("model_parameters") or {}),
        }
        # openai setting
        # embedding = await self.client.embeddings.create(
        #    input=input,
        #    **args,
        #)
        #return [d.embedding for d in embedding.data]

        # ollama setting
        embedding_list=[]
        for inp in input:
            embedding = ollama.embeddings(model='qwen:7b', prompt=inp) #如果要改模型, 模型的名字要換掉
            embedding_list.append(embedding['embedding'])
        return embedding_list        
  1. C:\Users\xxx\anaconda3\envs\GraphRAG\Lib\site-packages\graphrag\query\llm\oai\embedding.py

加入 ollama setting 區塊,並且關閉 openai setting 區塊即可

# Copyright (c) 2024 Microsoft Corporation.
# Licensed under the MIT License

"""OpenAI Embedding model implementation."""

import asyncio
from collections.abc import Callable
from typing import Any

import numpy as np
import tiktoken
from tenacity import (
    AsyncRetrying,
    RetryError,
    Retrying,
    retry_if_exception_type,
    stop_after_attempt,
    wait_exponential_jitter,
)

from graphrag.query.llm.base import BaseTextEmbedding
from graphrag.query.llm.oai.base import OpenAILLMImpl
from graphrag.query.llm.oai.typing import (
    OPENAI_RETRY_ERROR_TYPES,
    OpenaiApiType,
)
from graphrag.query.llm.text_utils import chunk_text
from graphrag.query.progress import StatusReporter
import ollama

class OpenAIEmbedding(BaseTextEmbedding, OpenAILLMImpl):
    """Wrapper for OpenAI Embedding models."""

    def __init__(
        self,
        api_key: str | None = None,
        azure_ad_token_provider: Callable | None = None,
        model: str = "text-embedding-3-small",
        deployment_name: str | None = None,
        api_base: str | None = None,
        api_version: str | None = None,
        api_type: OpenaiApiType = OpenaiApiType.OpenAI,
        organization: str | None = None,
        encoding_name: str = "cl100k_base",
        max_tokens: int = 8191,
        max_retries: int = 10,
        request_timeout: float = 180.0,
        retry_error_types: tuple[type[BaseException]] = OPENAI_RETRY_ERROR_TYPES,  # type: ignore
        reporter: StatusReporter | None = None,
    ):
        OpenAILLMImpl.__init__(
            self=self,
            api_key=api_key,
            azure_ad_token_provider=azure_ad_token_provider,
            deployment_name=deployment_name,
            api_base=api_base,
            api_version=api_version,
            api_type=api_type,  # type: ignore
            organization=organization,
            max_retries=max_retries,
            request_timeout=request_timeout,
            reporter=reporter,
        )

        self.model = model
        self.encoding_name = encoding_name
        self.max_tokens = max_tokens
        self.token_encoder = tiktoken.get_encoding(self.encoding_name)
        self.retry_error_types = retry_error_types

    def embed(self, text: str, **kwargs: Any) -> list[float]:
        """
        Embed text using OpenAI Embedding's sync function.

        For text longer than max_tokens, chunk texts into max_tokens, embed each chunk, then combine using weighted average.
        Please refer to: https://github.com/openai/openai-cookbook/blob/main/examples/Embedding_long_inputs.ipynb
        """
        token_chunks = chunk_text(
            text=text, token_encoder=self.token_encoder, max_tokens=self.max_tokens
        )
        chunk_embeddings = []
        chunk_lens = []
        for chunk in token_chunks:
            try:
                # openai setting
                #embedding, chunk_len = self._embed_with_retry(chunk, **kwargs)
                #chunk_embeddings.append(embedding)
                #chunk_lens.append(chunk_len)

                # ollama setting
                embedding = ollama.embeddings(model="nomic-embed-text", prompt=chunk)['embedding'] #如果要替換嵌入模型, 請修改此處的模型名稱
                chunk_lens.append(chunk)
                chunk_embeddings.append(embedding)
                chunk_lens.append(chunk_lens)                
            # TODO: catch a more specific exception
            except Exception as e:  # noqa BLE001
                self._reporter.error(
                    message="Error embedding chunk",
                    details={self.__class__.__name__: str(e)},
                )

                continue
        #chunk_embeddings = np.average(chunk_embeddings, axis=0, weights=chunk_lens)
        #chunk_embeddings = chunk_embeddings / np.linalg.norm(chunk_embeddings)
        return chunk_embeddings.tolist()

    async def aembed(self, text: str, **kwargs: Any) -> list[float]:
        """
        Embed text using OpenAI Embedding's async function.

        For text longer than max_tokens, chunk texts into max_tokens, embed each chunk, then combine using weighted average.
        """
        token_chunks = chunk_text(
            text=text, token_encoder=self.token_encoder, max_tokens=self.max_tokens
        )
        chunk_embeddings = []
        chunk_lens = []
        embedding_results = await asyncio.gather(*[
            self._aembed_with_retry(chunk, **kwargs) for chunk in token_chunks
        ])
        embedding_results = [result for result in embedding_results if result[0]]
        chunk_embeddings = [result[0] for result in embedding_results]
        chunk_lens = [result[1] for result in embedding_results]
        chunk_embeddings = np.average(chunk_embeddings, axis=0, weights=chunk_lens)  # type: ignore
        chunk_embeddings = chunk_embeddings / np.linalg.norm(chunk_embeddings)
        return chunk_embeddings.tolist()

    def _embed_with_retry(
        self, text: str | tuple, **kwargs: Any
    ) -> tuple[list[float], int]:
        try:
            retryer = Retrying(
                stop=stop_after_attempt(self.max_retries),
                wait=wait_exponential_jitter(max=10),
                reraise=True,
                retry=retry_if_exception_type(self.retry_error_types),
            )
            for attempt in retryer:
                with attempt:
                    embedding = (
                        self.sync_client.embeddings.create(  # type: ignore
                            input=text,
                            model=self.model,
                            **kwargs,  # type: ignore
                        )
                        .data[0]
                        .embedding
                        or []
                    )
                    return (embedding, len(text))
        except RetryError as e:
            self._reporter.error(
                message="Error at embed_with_retry()",
                details={self.__class__.__name__: str(e)},
            )
            return ([], 0)
        else:
            # TODO: why not just throw in this case?
            return ([], 0)

    async def _aembed_with_retry(
        self, text: str | tuple, **kwargs: Any
    ) -> tuple[list[float], int]:
        try:
            retryer = AsyncRetrying(
                stop=stop_after_attempt(self.max_retries),
                wait=wait_exponential_jitter(max=10),
                reraise=True,
                retry=retry_if_exception_type(self.retry_error_types),
            )
            async for attempt in retryer:
                with attempt:
                    embedding = (
                        await self.async_client.embeddings.create(  # type: ignore
                            input=text,
                            model=self.model,
                            **kwargs,  # type: ignore
                        )
                    ).data[0].embedding or []
                    return (embedding, len(text))
        except RetryError as e:
            self._reporter.error(
                message="Error at embed_with_retry()",
                details={self.__class__.__name__: str(e)},
            )
            return ([], 0)
        else:
            # TODO: why not just throw in this case?
            return ([], 0)

參考資料

利用 Claude Dev 幫你自動化開發程式

利用 Claude Dev 幫你自動化開發程式

Views: 2133

Claude Dev 提供了一個 AI 自動生成程式的開發工具,融合了 VS Code 的編輯器功能和強大的 Claude 3.5 Sonnet’s 模型。這套系統融合了代碼的自動生成過程,更在軟體開發的各個階段提供了全方面的支持。

特色介紹

代碼開發和文件管理的全新模式

利用 Claude 3.5 Sonnet’s 的主動式編碼能力,Claude Dev 能夠逐步處理複雜的軟件開發任務。它不僅允許創建和編輯文件,還能探索複雜項目,並在獲得使用者許可後,執行終端機命令。

以往要採用AI開發,必須在各種AI工具以及視窗中切換,有遇到錯誤也需要手動張貼錯誤訊息,提供給AI除錯,現在超越了傳統的代碼自動完成或技術支持,為開發者提供了更全面的幫助。

AI 監督並且和使用者互動

傳統的自主AI腳本通常在沙盒環境中運行,而 Claude Dev 提供了一個圖形使用者UI,可以用來監督每一個變更的文件和執行的命令。這種方式確保了操作的安全性,並使開發者能夠安全地探索主動式 AI 的潛力。你還可以將圖片貼入聊天中,利用 Claude 的視覺能力將模型轉換成功能完整的應用程序,或者用截圖修復錯誤。

深入瞭解每一步的變更

Claude Dev 允許你直接在編輯器中查看每次更改的差異,並在聊天中通過語法高亮預覽跟踪進度。終端命令也可以直接在聊天中運行,你無需自己打開終端機。此外,每次使用工具或發送信息到 API 前,都會出現許可按鈕(例如「批准終端命令」),讓你能夠控制操作。

代碼和項目管理的高效工具

Claude Dev 擁有全面性寫程式的能力:

  • 執行系統上的終端命令
  • 列出指定目錄的頂層文件路徑
  • 遞迴列出指定目錄及其子目錄中的所有文件路徑
  • 解析頂層源代碼文件以提取關鍵元素名稱,如 Class 和 Function 等。

透由這些工具的運用,結合自然語言處理的基礎,使 Claude Dev 能夠理解代碼庫的結構和意圖,從而有效地協助開發者去開發大型和複雜的項目。

高級代碼概覽和文件結構的智能分析

從項目文件結構到高級代碼概覽,Claude Dev 使用如 tree-sitter 的工具來解析源代碼,提取出 Class 、Function、 Method 等定義。這種深度分析使 Claude Dev 能夠迅速了解代碼的結構和用途,並根據任務需要閱讀最相關的文件。

實時監控AI的成本控制

Claude Dev 也能跟踪整個任務循環和個別請求的 API 使用成本,並設定在任務中允許的最大 API 請求數量。任務完成後,Claude 可以決定是否通過如

open -a "Google Chrome" index.html

的終端命令來向你展示結果,只需點擊一下即可運行。

這些高級功能證明了 Claude Dev 不僅是代碼自動生成的工具,更是一個全面的開發環境,讓開發者能夠更有效地控制和優化他們的開發流程。通过提供一個全方位的開發解決方案,Claude Dev 真正實現了零代碼開發的未來。

參考資料

https://github.com/saoudrizwan/claude-dev

下載 VSCode Extension

ANTHROPIC API

如何使用2024年提示詞冠軍的CO-STAR框架優化Prompt

如何使用2024年提示詞冠軍的CO-STAR框架優化Prompt

Views: 443

在人工智慧生成內容的領域,提示詞(Prompt)設計的好壞往往決定了最終結果的質量。隨著語言模型的進步,越來越多的研究者與開發者開始探索更高效的提示詞架構。在新加坡舉辦的一場GPT-4提示詞設計競賽中,Sheila Tao通過CO-STAR的提示詞架構獲得了冠軍。這個架構為設計有效的提示詞提供了一個明確的框架,幫助使用者更精準地引導語言模型生成期望的內容。

CO-STAR框架介紹

CO-STAR是一種設計提示詞結構的模板,包含六個關鍵要素:上下文(Context)、目標(Objective)、風格(Style)、語氣(Tone)、受眾(Audience)和響應(Response)。通過這六個要素的協同作用,使用者可以更好地控制生成的內容,確保其符合特定的需求。

1. 上下文(Context)

上下文是提示詞的基礎,它提供了生成內容的背景資訊。這一部分的設計旨在讓語言模型理解當前任務的情境。上下文可以包括已有的文本、問題的背景描述,或是其他可能影響生成結果的資訊。

範例:如果你要生成一篇關於氣候變遷的文章,可以在上下文中提供相關的背景數據和問題描述,讓模型更好地理解這個主題。

2. 目標(Objective)

目標定義了提示詞的核心需求,即希望模型達成的結果。這部分明確指出你希望生成的內容應該涵蓋哪些主題或回答哪些問題。

範例:你可能會指示模型撰寫一篇關於氣候變遷的教育性文章,目的是讓大眾了解這一問題的嚴重性。

3. 風格(Style)

風格決定了生成內容的表達方式,涵蓋了文本的結構、用詞選擇等方面。不同的風格可能會影響讀者對文本的理解和感受。

範例:你可以指定內容應該以學術性的風格來撰寫,這樣會使得內容更加嚴謹和專業。

4. 語氣(Tone)

語氣影響了文本的情感表達方式,這在塑造讀者的感受方面至關重要。根據內容的不同,語氣可以是正式、非正式、幽默或是嚴肅的。

範例:在撰寫一篇新聞報導時,你可能會要求語氣保持中立和客觀。

5. 受眾(Audience)

受眾是提示詞設計中常被忽視的一個部分,但它至關重要。了解你希望吸引的讀者群體可以幫助你調整提示詞的其他要素,確保生成的內容適合這一群體的需求。

範例:如果你的文章是針對青少年,那麼語言應該更簡單易懂,風格可以更輕鬆。

6. 響應(Response)

響應是提示詞的最終結果,這是你希望模型生成的內容形式。響應可以是段落、清單、對話等多種形式,具體取決於你的需求。

範例:你可能要求模型生成一個包含多個段落的詳細分析,或是提供一個簡單的要點清單。

為什麼CO-STAR框架如此有效?

CO-STAR框架的成功在於它的結構化方法,這使得提示詞設計變得更加精確和有針對性,也就是說你已經抓到了如何當一個好的主管的精隨。當你明確了每個要素,模型能夠更好地理解你的需求,從而生成符合期望的內容。此外,這個框架也能幫助你在提示詞的不同層面上進行調整,進一步優化結果。

舉例來說,如果你對生成的內容不滿意,可能是因為上下文提供的信息不足,或是語氣與目標不符。通過CO-STAR框架,你可以更容易地找出問題所在,並進行相應的調整。

如果還不甚滿意LLM的輸出結果,建議用自己的訓練資料,並且做出關聯圖,讓語言模型好理解,我最常採用 GraphRAG 處理他

CO-STAR 注意事項

使用分隔符:

分隔符幫助語言模型(LLM)區分提示中的不同部分,尤其是指令區塊和數據區塊對於複雜任務尤其重要。

LLM防護網:

這是一種附加的額外提示,用於指示LLM應如何行為,包括任務定義、輸出格式和防護圍欄(防止LLM生成不當內容),例如要求大語言模型用指定語言輸出

使用LLM分析數據集:

不使用插件或代碼,僅採用LLM來分析數據集,這在模式識別任務中特別有用。

猜解複雜的指令:

太過長的文章以及複雜的句型,是需要被理解的,但連人類都很常誤會意思,何況是LLM,所以分割成小塊且清楚的指令才能幫助模型理解和回答

使用CO-STAR框架的示例與對比

為了更好地理解CO-STAR框架的實際應用,我們用一個具體的例子來說明它如何改善提示詞的設計。

假設我們需要生成一篇關於「如何保持工作與生活的平衡」的文章,我們將展示在沒有使用CO-STAR框架和使用後的效果對比。

沒有使用CO-STAR框架的提示詞

在沒有使用CO-STAR框架的情況下,我們可能只會簡單地輸入一個直接的提示詞:

提示詞
“寫一篇關於如何保持工作與生活平衡的文章。”

生成的內容

保持工作與生活平衡是一項挑戰,尤其是在快節奏的現代社會。人們應該設定明確的工作時間,並確保下班後有足夠的休息時間。安排時間進行娛樂活動也很重要,比如運動或與朋友聚會。這有助於減少壓力並提高整體生活質量。

分析: 這篇文章雖然提供了一些基本的建議,但內容過於簡單,沒有考慮到讀者的特定需求或語境,語氣也較為中立,缺乏吸引力,說白了,就是無聊雞肋且廢話太多的一句話,簡稱廢文。

使用CO-STAR框架的提示詞

現在,我們運用CO-STAR框架來重新設計這個提示詞,以提高生成內容的質量。

CO-STAR提示詞

  • Context(上下文):這篇文章將發布在一個專為職場人士設計的IG平台上,主要讀者是希望改善工作與生活平衡的職場中高層管理者。
  • Objective(目標):提供實際且具體的策略,幫助讀者在高壓的工作環境中維持健康的工作與生活平衡。
  • Style(風格):專業且有說服力,引用實際案例和研究數據支持論點。
  • Tone(語氣):積極且鼓勵人心,給予讀者信心去實踐建議。
  • Audience(受眾):中高層管理者,他們時間緊張,承受較大的職場壓力,但希望改善生活質量。
  • Response(響應):生成一篇包含具體步驟和案例的文章,提供可行的建議,幫助讀者實現工作與生活的平衡。

提示詞
“為職場中高層管理者撰寫一篇專業的文章,討論如何在高壓環境下維持工作與生活的平衡。這篇文章應該包括具體的策略和案例研究,並引用最新的研究數據。語氣應積極且鼓勵人心,風格應專業且有說服力。”

建議用格式化過的方法編排提示詞後,再傳給LLM

# Context #
這篇文章將發布在一個專為職場人士設計的IG平台上,主要讀者是希望改善工作與生活平衡的職場中高層管理者。

# Objective #
提供實際且具體的策略,幫助讀者在高壓的工作環境中維持健康的工作與生活平衡。

# Style #
專業且有說服力,引用實際案例和研究數據支持論點。

# Tone #
積極且鼓勵人心,給予讀者信心去實踐建議。

# Audience #
中高層管理者,他們時間緊張,承受較大的職場壓力,但希望改善生活質量。

# Response #
生成一篇包含具體步驟和案例的文章,提供可行的建議,幫助讀者實現工作與生活的平衡。

生成的內容

在現代職場中,中高層管理者往往面臨著巨大的工作壓力,如何在這樣的環境中維持工作與生活的平衡成為一項關鍵挑戰。根據哈佛商學院的最新研究,超過70%的管理者表示,壓力已經嚴重影響了他們的生活質量。為了應對這一問題,我們可以採取以下三個具體策略:

  1. 設立明確的界限:管理者應該為自己設定明確的工作時間和個人時間界限,並嚴格遵守。例如,可以在晚餐後將手機設置為勿擾模式,專注於與家人共度的時光。
  2. 尋求支持系統:建立一個由同事、家人和朋友組成的支持系統,這可以幫助管理者在壓力過大時及時得到情感和實際的支持。
  3. 實行主動管理:制定每週的工作與生活計畫,確保每週都有足夠的時間進行休閒活動,這不僅有助於減輕壓力,還能提高工作效率。

這些策略不僅能幫助管理者更好地平衡工作與生活,還能提升他們的整體生活質量。根據美國心理學會的研究,採取這些策略的管理者在工作滿意度和幸福感上都有顯著提高。

分析: 使用CO-STAR框架後,生成的內容更加具體、針對性強,並且提供了實際可操作的建議。語氣積極鼓勵,風格專業且可信,與中高層管理者的需求高度契合。

對比總結

通過這個示例,我們可以明顯看出CO-STAR框架的優勢,它不僅幫助你設計出更精確的提示詞,還確保了生成的內容更具質量和價值,相比於簡單的提示詞,CO-STAR框架能夠大幅度提升內容的針對性和專業度,使其更能滿足特定受眾的需求,話說,現在的小朋友必學提示詞的技巧,才不會淹沒在浪潮中。

參考資料

https://towardsdatascience.com/how-i-won-singapores-gpt-4-prompt-engineering-competition-34c195a93d41

https://hub.baai.ac.cn/view/37050

延伸閱讀